lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 526/775] i40e: Fix addition of RX filters after enabling FW LLDP agent
    Date
    From: Mateusz Palczewski <mateusz.palczewski@intel.com>

    [ Upstream commit 28b1208e7a7fa3ddc9345b022bb93e53d9dcc28a ]

    Fix addition of VLAN filter for PF after enabling FW LLDP agent.
    Changing LLDP Agent causes FW to re-initialize per NVM settings.
    Remove default PF filter and move "Enable/Disable" to currently used
    reset flag.
    Without this patch PF would try to add MAC VLAN filter with default
    switch filter present. This causes AQ error and sets promiscuous mode
    on.

    Fixes: c65e78f87f81 ("i40e: Further implementation of LLDP")
    Signed-off-by: Przemyslaw Patynowski <przemyslawx.patynowski@intel.com>
    Signed-off-by: Mateusz Palczewski <mateusz.palczewski@intel.com>
    Reviewed-by: Sylwester Dziedziuch <sylwesterx.dziedziuch@intel.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Tested-by: Tony Brelinski <tonyx.brelinski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 16 +++++++++-------
    drivers/net/ethernet/intel/i40e/i40e_main.c | 9 ++++-----
    2 files changed, 13 insertions(+), 12 deletions(-)

    diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
    index 26ba1f3eb2d85..9e81f85ee2d8d 100644
    --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
    +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
    @@ -4878,7 +4878,7 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags)
    enum i40e_admin_queue_err adq_err;
    struct i40e_vsi *vsi = np->vsi;
    struct i40e_pf *pf = vsi->back;
    - bool is_reset_needed;
    + u32 reset_needed = 0;
    i40e_status status;
    u32 i, j;

    @@ -4923,9 +4923,11 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags)
    flags_complete:
    changed_flags = orig_flags ^ new_flags;

    - is_reset_needed = !!(changed_flags & (I40E_FLAG_VEB_STATS_ENABLED |
    - I40E_FLAG_LEGACY_RX | I40E_FLAG_SOURCE_PRUNING_DISABLED |
    - I40E_FLAG_DISABLE_FW_LLDP));
    + if (changed_flags & I40E_FLAG_DISABLE_FW_LLDP)
    + reset_needed = I40E_PF_RESET_AND_REBUILD_FLAG;
    + if (changed_flags & (I40E_FLAG_VEB_STATS_ENABLED |
    + I40E_FLAG_LEGACY_RX | I40E_FLAG_SOURCE_PRUNING_DISABLED))
    + reset_needed = BIT(__I40E_PF_RESET_REQUESTED);

    /* Before we finalize any flag changes, we need to perform some
    * checks to ensure that the changes are supported and safe.
    @@ -5057,7 +5059,7 @@ flags_complete:
    case I40E_AQ_RC_EEXIST:
    dev_warn(&pf->pdev->dev,
    "FW LLDP agent is already running\n");
    - is_reset_needed = false;
    + reset_needed = 0;
    break;
    case I40E_AQ_RC_EPERM:
    dev_warn(&pf->pdev->dev,
    @@ -5086,8 +5088,8 @@ flags_complete:
    /* Issue reset to cause things to take effect, as additional bits
    * are added we will need to create a mask of bits requiring reset
    */
    - if (is_reset_needed)
    - i40e_do_reset(pf, BIT(__I40E_PF_RESET_REQUESTED), true);
    + if (reset_needed)
    + i40e_do_reset(pf, reset_needed, true);

    return 0;
    }
    diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
    index bcfa6dcac29f7..b268adb3e1d44 100644
    --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
    +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
    @@ -8537,11 +8537,6 @@ void i40e_do_reset(struct i40e_pf *pf, u32 reset_flags, bool lock_acquired)
    dev_dbg(&pf->pdev->dev, "PFR requested\n");
    i40e_handle_reset_warning(pf, lock_acquired);

    - dev_info(&pf->pdev->dev,
    - pf->flags & I40E_FLAG_DISABLE_FW_LLDP ?
    - "FW LLDP is disabled\n" :
    - "FW LLDP is enabled\n");
    -
    } else if (reset_flags & I40E_PF_RESET_AND_REBUILD_FLAG) {
    /* Request a PF Reset
    *
    @@ -8549,6 +8544,10 @@ void i40e_do_reset(struct i40e_pf *pf, u32 reset_flags, bool lock_acquired)
    */
    i40e_prep_for_reset(pf, lock_acquired);
    i40e_reset_and_rebuild(pf, true, lock_acquired);
    + dev_info(&pf->pdev->dev,
    + pf->flags & I40E_FLAG_DISABLE_FW_LLDP ?
    + "FW LLDP is disabled\n" :
    + "FW LLDP is enabled\n");

    } else if (reset_flags & BIT_ULL(__I40E_REINIT_REQUESTED)) {
    int v;
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-02 05:40    [W:2.156 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site