iavf: Fix handling of vlan strip virtual channel messages
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: 5951a2b981
("iavf: Fix VLAN feature flags after VFR")
Signed-off-by: Norbert Ciosek <norbertx.ciosek@intel.com>
Signed-off-by: Michal Maloszewski <michal.maloszewski@intel.com>
Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
e5417cbf7a
commit
2cf29e5589
@ -1834,6 +1834,22 @@ 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;
|
||||
else
|
||||
netdev->features &= ~NETIF_F_HW_VLAN_CTAG_RX;
|
||||
}
|
||||
|
||||
/**
|
||||
* iavf_virtchnl_completion
|
||||
* @adapter: adapter structure
|
||||
@ -2057,8 +2073,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",
|
||||
@ -2312,6 +2338,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_warn(&adapter->pdev->dev, "Expected response %d from PF, received %d\n",
|
||||
|
Loading…
Reference in New Issue
Block a user