]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.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)
committerDavid S. Miller <davem@davemloft.net>
Sun, 22 Aug 2021 20:38:16 +0000 (21:38 +0100)
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>
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 b37db8a1636206635eba1561ad817a67de95ac9a..f630e5713025168658736a111579066183587d28 100644 (file)
@@ -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;
 }
index c4147b64e059ae44c8bf9da5331827abc6400a8a..1a97b76a12e13055bf5bb1f7eedda8f60881a7e9 100644 (file)
@@ -199,6 +199,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 55802b56e3b925afa35e92a9959582c291694a4a..e949001a6e55efe1e91e789fa0a4ef88555023cd 100644 (file)
@@ -907,6 +907,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);