From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nguyen, Anthony L Date: Fri, 29 Oct 2021 00:02:32 +0000 Subject: [Intel-wired-lan] [PATCH net v1] iavf: Fix handling of vlan strip virtual channel messages In-Reply-To: <20211028104114.71879-1-michal.maloszewski@intel.com> References: <20211028104114.71879-1-michal.maloszewski@intel.com> Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: intel-wired-lan@osuosl.org List-ID: 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 > Signed-off-by: Michal Maloszewski > Signed-off-by: Brett Creeley > --- 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",