mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
iavf: Fix handling of vlan strip virtual channel messages
[ Upstream commit2cf29e5589] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0716607ad2
commit
35f11aba74
@@ -1460,6 +1460,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
|
||||
@@ -1683,8 +1699,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",
|
||||
@@ -1918,6 +1944,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",
|
||||
|
||||
Reference in New Issue
Block a user