Merge branch '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next...
[cascardo/linux.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_sriov.c
index 8618599..7e5d985 100644 (file)
@@ -329,13 +329,15 @@ static int ixgbe_pci_sriov_enable(struct pci_dev *dev, int num_vfs)
        for (i = 0; i < adapter->num_vfs; i++)
                ixgbe_vf_configuration(dev, (i | 0x10000000));
 
+       /* reset before enabling SRIOV to avoid mailbox issues */
+       ixgbe_sriov_reinit(adapter);
+
        err = pci_enable_sriov(dev, num_vfs);
        if (err) {
                e_dev_warn("Failed to enable PCI sriov: %d\n", err);
                return err;
        }
        ixgbe_get_vfs(adapter);
-       ixgbe_sriov_reinit(adapter);
 
        return num_vfs;
 #else
@@ -1354,13 +1356,16 @@ static int ixgbe_disable_port_vlan(struct ixgbe_adapter *adapter, int vf)
        return err;
 }
 
-int ixgbe_ndo_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos)
+int ixgbe_ndo_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan,
+                         u8 qos, __be16 vlan_proto)
 {
        int err = 0;
        struct ixgbe_adapter *adapter = netdev_priv(netdev);
 
        if ((vf >= adapter->num_vfs) || (vlan > 4095) || (qos > 7))
                return -EINVAL;
+       if (vlan_proto != htons(ETH_P_8021Q))
+               return -EPROTONOSUPPORT;
        if (vlan || qos) {
                /* Check if there is already a port VLAN set, if so
                 * we have to delete the old one first before we