]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
octeontx2-pf: Fix algorithm index in MCAM rules with RSS action
authorSunil Goutham <sgoutham@marvell.com>
Sun, 22 Aug 2021 12:02:26 +0000 (17:32 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Sep 2021 08:00:50 +0000 (10:00 +0200)
[ 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>
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c

index 871404f3b8d384cbb305ada98da6692872ac682c..25f84ad50dbaf1b1d70c1f267404baf0060acb15 100644 (file)
@@ -266,6 +266,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;
 
@@ -280,6 +281,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;
 }
index 45730d0d92f2b53f37fc58635b1ed3069ceba055..c652c27cd3455b579071ae8427e61e944df777a9 100644 (file)
@@ -195,6 +195,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 */
index 0b4fa92ba8214ec7bcf227a2b6816b49f3b1c4ab..81265dbf91e2a8fa8d8404e8fdcb03a7ffd05d43 100644 (file)
@@ -682,6 +682,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);