lkml.org 
[lkml]   [2022]   [Mar]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 028/110] iavf: Fix handling of vlan strip virtual channel messages
    Date
    From: Michal Maloszewski <michal.maloszewski@intel.com>

    [ Upstream commit 2cf29e55894886965722e6625f6a03630b4db31d ]

    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: 5951a2b9812d ("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>
    ---
    .../net/ethernet/intel/iavf/iavf_virtchnl.c | 40 +++++++++++++++++++
    1 file changed, 40 insertions(+)

    diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
    index 8a1c293b8c7a..7013769fc038 100644
    --- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
    +++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
    @@ -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",
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-03-14 13:13    [W:2.254 / U:0.736 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site