[Intel-wired-lan] [jkirsher/next-queue PATCH 16/16] fm10k: Fix configuration for macvlan offload
Singh, Krishneil K
krishneil.k.singh at intel.com
Tue Jan 9 20:40:36 UTC 2018
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On Behalf
> Of Alexander Duyck
> Sent: Wednesday, November 22, 2017 10:58 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [jkirsher/next-queue PATCH 16/16] fm10k: Fix
> configuration for macvlan offload
>
> From: Alexander Duyck <alexander.h.duyck at intel.com>
>
> The fm10k driver didn't work correctly when macvlan offload was enabled.
> Specifically what would occur is that we would see no unicast packets being
> received. This was traced down to us not correctly configuring the default
> VLAN ID for the port and defaulting to 0.
>
> To correct this we either use the default ID provided by the switch or
> simply use 1. With that we are able to pass and receive traffic without any
> issues.
>
> In addition we were not repopulating the filter table following a reset. To
> correct that I have added a bit of code to fm10k_restore_rx_state that will
> repopulate the Rx filter configuration for the macvlan interfaces.
>
> Signed-off-by: Alexander Duyck <alexander.h.duyck at intel.com>
> ---
> drivers/net/ethernet/intel/fm10k/fm10k_netdev.c | 25
> ++++++++++++++++++++---
> 1 file changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
> b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
> index adc62fb38c49..6d9088956407 100644
> --- a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
> +++ b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
> @@ -1182,9 +1182,10 @@ static void fm10k_set_rx_mode(struct net_device
> *dev)
>
> void fm10k_restore_rx_state(struct fm10k_intfc *interface)
> {
> + struct fm10k_l2_accel *l2_accel = interface->l2_accel;
> struct net_device *netdev = interface->netdev;
> struct fm10k_hw *hw = &interface->hw;
> - int xcast_mode;
> + int xcast_mode, i;
> u16 vid, glort;
>
> /* record glort for this interface */
> @@ -1234,6 +1235,24 @@ void fm10k_restore_rx_state(struct fm10k_intfc
> *interface)
> __dev_uc_sync(netdev, fm10k_uc_sync, fm10k_uc_unsync);
> __dev_mc_sync(netdev, fm10k_mc_sync, fm10k_mc_unsync);
>
> + /* synchronize macvlan addresses */
> + if (l2_accel) {
> + for (i = 0; i < l2_accel->size; i++) {
> + struct net_device *sdev = l2_accel->macvlan[i];
> +
> + if (!sdev)
> + continue;
> +
> + glort = l2_accel->dglort + 1 + i;
> +
> + hw->mac.ops.update_xcast_mode(hw, glort,
> +
> FM10K_XCAST_MODE_MULTI);
> + fm10k_queue_mac_request(interface, glort,
> + sdev->dev_addr,
> + hw->mac.default_vid, true);
> + }
> + }
> +
> fm10k_mbx_unlock(interface);
>
> /* record updated xcast mode state */
> @@ -1490,7 +1509,7 @@ static void *fm10k_dfwd_add_station(struct
> net_device *dev,
> hw->mac.ops.update_xcast_mode(hw, glort,
> FM10K_XCAST_MODE_MULTI);
> fm10k_queue_mac_request(interface, glort, sdev->dev_addr,
> - 0, true);
> + hw->mac.default_vid, true);
> }
>
> fm10k_mbx_unlock(interface);
> @@ -1530,7 +1549,7 @@ static void fm10k_dfwd_del_station(struct
> net_device *dev, void *priv)
> hw->mac.ops.update_xcast_mode(hw, glort,
> FM10K_XCAST_MODE_NONE);
> fm10k_queue_mac_request(interface, glort, sdev->dev_addr,
> - 0, false);
> + hw->mac.default_vid, false);
> }
>
> fm10k_mbx_unlock(interface);
>
> _______________________________________________
> Intel-wired-lan mailing list
> Intel-wired-lan at osuosl.org
> https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
Tested-by: Krishneil Singh <krishneil.k.singh at intel.com>
More information about the Intel-wired-lan
mailing list