lkml.org 
[lkml]   [2021]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 244/334] octeontx2-pf: Fix algorithm index in MCAM rules with RSS action
    Date
    From: Sunil Goutham <sgoutham@marvell.com>

    [ Upstream commit e7938365459f3a6d4edf212f435c4ad635621450 ]

    Otherthan setting action as RSS in NPC MCAM entry, RSS flowkey
    algorithm index also needs to be set. Otherwise whatever algorithm
    is defined at flowkey index '0' will be considered by HW and pkt
    flows will be distributed as such.

    Fix this by saving the flowkey index sent by admin function while
    initializing RSS and then use it when framing MCAM rules.

    Fixes: 81a4362016e7 ("octeontx2-pf: Add RSS multi group support")
    Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../net/ethernet/marvell/octeontx2/nic/otx2_common.c | 11 +++++++++++
    .../net/ethernet/marvell/octeontx2/nic/otx2_common.h | 3 +++
    .../net/ethernet/marvell/octeontx2/nic/otx2_flows.c | 1 +
    3 files changed, 15 insertions(+)

    diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
    index 692099793005..a6210b020a57 100644
    --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
    +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
    @@ -269,6 +269,7 @@ unlock:
    int otx2_set_flowkey_cfg(struct otx2_nic *pfvf)
    {
    struct otx2_rss_info *rss = &pfvf->hw.rss_info;
    + struct nix_rss_flowkey_cfg_rsp *rsp;
    struct nix_rss_flowkey_cfg *req;
    int err;

    @@ -283,6 +284,16 @@ int otx2_set_flowkey_cfg(struct otx2_nic *pfvf)
    req->group = DEFAULT_RSS_CONTEXT_GROUP;

    err = otx2_sync_mbox_msg(&pfvf->mbox);
    + if (err)
    + goto fail;
    +
    + rsp = (struct nix_rss_flowkey_cfg_rsp *)
    + otx2_mbox_get_rsp(&pfvf->mbox.mbox, 0, &req->hdr);
    + if (IS_ERR(rsp))
    + goto fail;
    +
    + pfvf->hw.flowkey_alg_idx = rsp->alg_idx;
    +fail:
    mutex_unlock(&pfvf->mbox.lock);
    return err;
    }
    diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
    index 8fd58cd07f50..8c602d27108a 100644
    --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
    +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
    @@ -196,6 +196,9 @@ struct otx2_hw {
    u8 lso_udpv4_idx;
    u8 lso_udpv6_idx;

    + /* RSS */
    + u8 flowkey_alg_idx;
    +
    /* MSI-X */
    u8 cint_cnt; /* CQ interrupt count */
    u16 npa_msixoff; /* Offset of NPA vectors */
    diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
    index 4d9de525802d..fdd27c4fea86 100644
    --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
    +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
    @@ -858,6 +858,7 @@ static int otx2_add_flow_msg(struct otx2_nic *pfvf, struct otx2_flow *flow)
    if (flow->flow_spec.flow_type & FLOW_RSS) {
    req->op = NIX_RX_ACTIONOP_RSS;
    req->index = flow->rss_ctx_id;
    + req->flow_key_alg = pfvf->hw.flowkey_alg_idx;
    } else {
    req->op = NIX_RX_ACTIONOP_UCAST;
    req->index = ethtool_get_flow_spec_ring(ring_cookie);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-09-13 16:46    [W:4.088 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site