[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