]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[karo-tx-linux.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_sriov.c
index 97e33669c0b9b4c6e4bc105ab5f125dffabd9ee0..1e7d587c4e572f9efdd3f876b98e906cb3963561 100644 (file)
@@ -35,7 +35,7 @@
 #include <linux/ip.h>
 #include <linux/tcp.h>
 #include <linux/ipv6.h>
-#ifdef NETIF_F_HW_VLAN_TX
+#ifdef NETIF_F_HW_VLAN_CTAG_TX
 #include <linux/if_vlan.h>
 #endif
 
@@ -661,13 +661,7 @@ int ixgbe_vf_configuration(struct pci_dev *pdev, unsigned int event_mask)
        bool enable = ((event_mask & 0x10000000U) != 0);
 
        if (enable) {
-               eth_random_addr(vf_mac_addr);
-               e_info(probe, "IOV: VF %d is enabled MAC %pM\n",
-                      vfn, vf_mac_addr);
-               /*
-                * Store away the VF "permananet" MAC address, it will ask
-                * for it later.
-                */
+               eth_zero_addr(vf_mac_addr);
                memcpy(adapter->vfinfo[vfn].vf_mac_addresses, vf_mac_addr, 6);
        }
 
@@ -688,7 +682,8 @@ static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
        ixgbe_vf_reset_event(adapter, vf);
 
        /* set vf mac address */
-       ixgbe_set_vf_mac(adapter, vf, vf_mac);
+       if (!is_zero_ether_addr(vf_mac))
+               ixgbe_set_vf_mac(adapter, vf, vf_mac);
 
        vf_shift = vf % 32;
        reg_offset = vf / 32;
@@ -729,8 +724,16 @@ static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
        IXGBE_WRITE_REG(hw, IXGBE_VMECM(reg_offset), reg);
 
        /* reply to reset with ack and vf mac address */
-       msgbuf[0] = IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK;
-       memcpy(addr, vf_mac, ETH_ALEN);
+       msgbuf[0] = IXGBE_VF_RESET;
+       if (!is_zero_ether_addr(vf_mac)) {
+               msgbuf[0] |= IXGBE_VT_MSGTYPE_ACK;
+               memcpy(addr, vf_mac, ETH_ALEN);
+       } else {
+               msgbuf[0] |= IXGBE_VT_MSGTYPE_NACK;
+               dev_warn(&adapter->pdev->dev,
+                        "VF %d has no MAC address assigned, you may have to assign one manually\n",
+                        vf);
+       }
 
        /*
         * Piggyback the multicast filter type so VF can compute the