aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Rose <gregory.v.rose@intel.com>2013-02-15 00:20:09 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2013-03-28 04:04:00 -0400
commit35055928c7b1d078ddde656357db3093f383d846 (patch)
treef248b17921d328cbb568d4dff55dee4a1648b203
parent274a85e095b8265c3b759a60f8c52b9993d89d3b (diff)
ixgbe: Don't give VFs random MAC addresses
If the user has not assigned a MAC address to a VM, then don't give it a random one. Instead, just give it zeros and let it figure out what to do with them. Signed-off-by: Greg Rose <gregory.v.rose@intel.com> CC: Andy Gospodarek <andy@greyhouse.net> CC: Stefan Assmann <sassmann@kpanic.de> Tested-by: Sibai Li <sibai.li@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index d44b4d21268c..b3e6530637e3 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -661,13 +661,7 @@ int ixgbe_vf_configuration(struct pci_dev *pdev, unsigned int event_mask)
661 bool enable = ((event_mask & 0x10000000U) != 0); 661 bool enable = ((event_mask & 0x10000000U) != 0);
662 662
663 if (enable) { 663 if (enable) {
664 eth_random_addr(vf_mac_addr); 664 eth_zero_addr(vf_mac_addr);
665 e_info(probe, "IOV: VF %d is enabled MAC %pM\n",
666 vfn, vf_mac_addr);
667 /*
668 * Store away the VF "permananet" MAC address, it will ask
669 * for it later.
670 */
671 memcpy(adapter->vfinfo[vfn].vf_mac_addresses, vf_mac_addr, 6); 665 memcpy(adapter->vfinfo[vfn].vf_mac_addresses, vf_mac_addr, 6);
672 } 666 }
673 667
@@ -688,7 +682,8 @@ static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
688 ixgbe_vf_reset_event(adapter, vf); 682 ixgbe_vf_reset_event(adapter, vf);
689 683
690 /* set vf mac address */ 684 /* set vf mac address */
691 ixgbe_set_vf_mac(adapter, vf, vf_mac); 685 if (!is_zero_ether_addr(vf_mac))
686 ixgbe_set_vf_mac(adapter, vf, vf_mac);
692 687
693 vf_shift = vf % 32; 688 vf_shift = vf % 32;
694 reg_offset = vf / 32; 689 reg_offset = vf / 32;
@@ -729,8 +724,16 @@ static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
729 IXGBE_WRITE_REG(hw, IXGBE_VMECM(reg_offset), reg); 724 IXGBE_WRITE_REG(hw, IXGBE_VMECM(reg_offset), reg);
730 725
731 /* reply to reset with ack and vf mac address */ 726 /* reply to reset with ack and vf mac address */
732 msgbuf[0] = IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK; 727 msgbuf[0] = IXGBE_VF_RESET;
733 memcpy(addr, vf_mac, ETH_ALEN); 728 if (!is_zero_ether_addr(vf_mac)) {
729 msgbuf[0] |= IXGBE_VT_MSGTYPE_ACK;
730 memcpy(addr, vf_mac, ETH_ALEN);
731 } else {
732 msgbuf[0] |= IXGBE_VT_MSGTYPE_NACK;
733 dev_warn(&adapter->pdev->dev,
734 "VF %d has no MAC address assigned, you may have to assign one manually\n",
735 vf);
736 }
734 737
735 /* 738 /*
736 * Piggyback the multicast filter type so VF can compute the 739 * Piggyback the multicast filter type so VF can compute the