diff options
author | Greg Rose <gregory.v.rose@intel.com> | 2013-02-15 00:20:09 -0500 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2013-03-28 04:04:00 -0400 |
commit | 35055928c7b1d078ddde656357db3093f383d846 (patch) | |
tree | f248b17921d328cbb568d4dff55dee4a1648b203 | |
parent | 274a85e095b8265c3b759a60f8c52b9993d89d3b (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.c | 23 |
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 |