|
@@ -2840,6 +2840,23 @@ static int i40e_vlan_rx_add_vid(struct net_device *netdev,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * i40e_vlan_rx_add_vid_up - Add a vlan id filter to HW offload in UP path
|
|
|
+ * @netdev: network interface to be adjusted
|
|
|
+ * @proto: unused protocol value
|
|
|
+ * @vid: vlan id to be added
|
|
|
+ **/
|
|
|
+static void i40e_vlan_rx_add_vid_up(struct net_device *netdev,
|
|
|
+ __always_unused __be16 proto, u16 vid)
|
|
|
+{
|
|
|
+ struct i40e_netdev_priv *np = netdev_priv(netdev);
|
|
|
+ struct i40e_vsi *vsi = np->vsi;
|
|
|
+
|
|
|
+ if (vid >= VLAN_N_VID)
|
|
|
+ return;
|
|
|
+ set_bit(vid, vsi->active_vlans);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* i40e_vlan_rx_kill_vid - Remove a vlan id filter from HW offload
|
|
|
* @netdev: network interface to be adjusted
|
|
@@ -2882,8 +2899,8 @@ static void i40e_restore_vlan(struct i40e_vsi *vsi)
|
|
|
i40e_vlan_stripping_disable(vsi);
|
|
|
|
|
|
for_each_set_bit(vid, vsi->active_vlans, VLAN_N_VID)
|
|
|
- i40e_vlan_rx_add_vid(vsi->netdev, htons(ETH_P_8021Q),
|
|
|
- vid);
|
|
|
+ i40e_vlan_rx_add_vid_up(vsi->netdev, htons(ETH_P_8021Q),
|
|
|
+ vid);
|
|
|
}
|
|
|
|
|
|
/**
|