[Intel-wired-lan] [PATCH net v1] iavf: Fix handling of vlan strip virtual channel messages

Nguyen, Anthony L anthony.l.nguyen at intel.com
Fri Oct 29 00:02:32 UTC 2021


On Thu, 2021-10-28 at 10:41 +0000, Michal Maloszewski wrote:
> Modify netdev->features for vlan stripping based on virtual
> channel messages received from the PF. Change is needed
> to synchronize vlan strip status between PF sysfs and iavf ethtool.
> 
> Fixes: 310a2ad92e3f ("virtchnl: rename i40e to generic virtchnl")
> Signed-off-by: Norbert Ciosek <norbertx.ciosek at intel.com>
> Signed-off-by: Michal Maloszewski <michal.maloszewski at intel.com>
> Signed-off-by: Brett Creeley <brett.creeley at intel.com>
> ---

Since this an update to a previous patch, this should be a v2 and
include changelog.

Also, this doesn't seem to address Jesse's comment on
netdev_update_features()

>  .../net/ethernet/intel/iavf/iavf_virtchnl.c   | 42
> +++++++++++++++++++
>  1 file changed, 42 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> index bdc6040361..ed1c8bc3f4 100644
> --- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> +++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> @@ -1456,6 +1456,24 @@ void iavf_request_reset(struct iavf_adapter
> *adapter)
>         adapter->current_op = VIRTCHNL_OP_UNKNOWN;
>  }
>  
> +/**
> + * iavf_netdev_features_vlan_strip_set - update vlan strip status
> + * @netdev: ptr to netdev being adjusted
> + * @enable: enable or disable vlan strip
> + *
> + * Helper function to change vlan strip status in netdev->features.
> + */
> +static void iavf_netdev_features_vlan_strip_set(struct net_device
> *netdev,
> +                                               const bool enable)
> +{
> +       if (enable)
> +               netdev->features |=
> +                       NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_RX;
> +       else
> +               netdev->features &=
> +                       ~NETIF_F_HW_VLAN_CTAG_RX &
> ~NETIF_F_HW_VLAN_RX;
> +}
> +
>  /**
>   * iavf_virtchnl_completion
>   * @adapter: adapter structure
> @@ -1679,8 +1697,18 @@ void iavf_virtchnl_completion(struct
> iavf_adapter *adapter,
>                         }
>                         break;
>                 case VIRTCHNL_OP_ENABLE_VLAN_STRIPPING:
> +                       dev_warn(&adapter->pdev->dev, "Changing VLAN
> Stripping is not allowed when Port VLAN is configured\n");
> +                       /* Vlan stripping could not be enabled by
> ethtool.
> +                        * Disable it in netdev->features.
> +                        */
> +                       iavf_netdev_features_vlan_strip_set(netdev,
> false);
> +                       break;
>                 case VIRTCHNL_OP_DISABLE_VLAN_STRIPPING:
>                         dev_warn(&adapter->pdev->dev, "Changing VLAN
> Stripping is not allowed when Port VLAN is configured\n");
> +                       /* Vlan stripping could not be disabled by
> ethtool.
> +                        * Enable it in netdev->features.
> +                        */
> +                       iavf_netdev_features_vlan_strip_set(netdev,
> true);
>                         break;
>                 default:
>                         dev_err(&adapter->pdev->dev, "PF returned
> error %d (%s) to our request %d\n",
> @@ -1897,6 +1925,20 @@ void iavf_virtchnl_completion(struct
> iavf_adapter *adapter,
>                 spin_unlock_bh(&adapter->adv_rss_lock);
>                 }
>                 break;
> +       case VIRTCHNL_OP_ENABLE_VLAN_STRIPPING:
> +               /* PF enabled vlan strip on this VF.
> +                * Update netdev->features if needed to be in sync
> with ethtool.
> +                */
> +               if (!v_retval)
> +                       iavf_netdev_features_vlan_strip_set(netdev,
> true);
> +               break;
> +       case VIRTCHNL_OP_DISABLE_VLAN_STRIPPING:
> +               /* PF disabled vlan strip on this VF.
> +                * Update netdev->features if needed to be in sync
> with ethtool.
> +                */
> +               if (!v_retval)
> +                       iavf_netdev_features_vlan_strip_set(netdev,
> false);
> +               break;
>         default:
>                 if (adapter->current_op && (v_opcode != adapter-
> >current_op))
>                         dev_dbg(&adapter->pdev->dev, "Expected
> response %d from PF, received %d\n",



More information about the Intel-wired-lan mailing list