aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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