summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Fornal <jakubfornal@gklab-20-101.igk.intel.com>2017-09-25 14:30:11 +0200
committerJakub Fornal <jakubfornal@gklab-20-101.igk.intel.com>2017-09-25 14:30:11 +0200
commit7eae084c1c3785fb1439bc51bf461367d86bcb25 (patch)
tree5c6f22f68161acc92b7d7ae40bf5054f6c4b3a34
parent213adddc09bbb5a17aa6450a4d47754970bb76fc (diff)
downloadOpen-AVB-7eae084c1c3785fb1439bc51bf461367d86bcb25.tar.gz
Support for kernel 4.9 - igb_ndo_set_vf_vlan update
-rw-r--r--kmod/igb/igb_main.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/kmod/igb/igb_main.c b/kmod/igb/igb_main.c
index 3310680d..c8a4a7e3 100644
--- a/kmod/igb/igb_main.c
+++ b/kmod/igb/igb_main.c
@@ -181,8 +181,14 @@ static void igb_restore_vf_multicasts(struct igb_adapter *adapter);
static void igb_process_mdd_event(struct igb_adapter *);
#ifdef IFLA_VF_MAX
static int igb_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac);
+#ifdef IFLA_VF_VLAN_INFO_MAX
+static int igb_ndo_set_vf_vlan(struct net_device *netdev,
+ int vf, u16 vlan, u8 qos, __be16 vlan_proto);
+#else
static int igb_ndo_set_vf_vlan(struct net_device *netdev,
int vf, u16 vlan, u8 qos);
+#endif /*IFLA_VF_VLAN_INFO_MAX*/
+
#ifdef HAVE_VF_SPOOFCHK_CONFIGURE
static int igb_ndo_set_vf_spoofchk(struct net_device *netdev, int vf,
bool setting);
@@ -6648,9 +6654,15 @@ static void igb_set_vmvir(struct igb_adapter *adapter, u32 vid, u32 vf)
else
E1000_WRITE_REG(hw, E1000_VMVIR(vf), 0);
}
+#ifdef IFLA_VF_VLAN_INFO_MAX
+static int igb_ndo_set_vf_vlan(struct net_device *netdev,
+ int vf, u16 vlan, u8 qos, __be16 vlan_proto)
+#else
static int igb_ndo_set_vf_vlan(struct net_device *netdev,
- int vf, u16 vlan, u8 qos)
+ int vf, u16 vlan, u8 qos)
+#endif /*IFLA_VF_VLAN_INFO_MAX*/
+
{
int err = 0;
struct igb_adapter *adapter = netdev_priv(netdev);
@@ -6659,6 +6671,7 @@ static int igb_ndo_set_vf_vlan(struct net_device *netdev,
if ((vf >= adapter->vfs_allocated_count) || (vlan > VLAN_VID_MASK-1)
|| (qos > 7))
return -EINVAL;
+
if (vlan || qos) {
err = igb_vlvf_set(adapter, vlan, !!vlan, vf);
if (err)
@@ -6816,9 +6829,16 @@ static inline void igb_vf_reset(struct igb_adapter *adapter, u32 vf)
igb_clear_vf_vfta(adapter, vf);
#ifdef IFLA_VF_MAX
if (adapter->vf_data[vf].pf_vlan)
+#ifdef IFLA_VF_VLAN_INFO_MAX
+ igb_ndo_set_vf_vlan(adapter->netdev, vf,
+ adapter->vf_data[vf].pf_vlan,
+ adapter->vf_data[vf].pf_qos, 0);
+#else
+
igb_ndo_set_vf_vlan(adapter->netdev, vf,
adapter->vf_data[vf].pf_vlan,
adapter->vf_data[vf].pf_qos);
+#endif
else
igb_clear_vf_vfta(adapter, vf);
#endif