X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fcommon%2Fcnxk%2Froc_nix_rss.c;h=7de69aabeb12682b169ca22ad8189b16ba5a71c3;hb=3bf87839559186ec229937b109ccfceab7a98806;hp=2d7b84adf633c706781f85d6ac7a49f5c7714c28;hpb=1bf6746e653b5f31dbd64bbcea572ebfadc1c8cb;p=dpdk.git diff --git a/drivers/common/cnxk/roc_nix_rss.c b/drivers/common/cnxk/roc_nix_rss.c index 2d7b84adf6..7de69aabeb 100644 --- a/drivers/common/cnxk/roc_nix_rss.c +++ b/drivers/common/cnxk/roc_nix_rss.c @@ -52,7 +52,7 @@ roc_nix_rss_key_get(struct roc_nix *roc_nix, uint8_t key[ROC_NIX_RSS_KEY_LEN]) static int nix_cn9k_rss_reta_set(struct nix *nix, uint8_t group, - uint16_t reta[ROC_NIX_RSS_RETA_MAX]) + uint16_t reta[ROC_NIX_RSS_RETA_MAX], uint8_t lock_rx_ctx) { struct mbox *mbox = (&nix->dev)->mbox; struct nix_aq_enq_req *req; @@ -77,6 +77,27 @@ nix_cn9k_rss_reta_set(struct nix *nix, uint8_t group, req->qidx = (group * nix->reta_sz) + idx; req->ctype = NIX_AQ_CTYPE_RSS; req->op = NIX_AQ_INSTOP_INIT; + + if (!lock_rx_ctx) + continue; + + req = mbox_alloc_msg_nix_aq_enq(mbox); + if (!req) { + /* The shared memory buffer can be full. + * Flush it and retry + */ + rc = mbox_process(mbox); + if (rc < 0) + return rc; + req = mbox_alloc_msg_nix_aq_enq(mbox); + if (!req) + return NIX_ERR_NO_MEM; + } + req->rss.rq = reta[idx]; + /* Fill AQ info */ + req->qidx = (group * nix->reta_sz) + idx; + req->ctype = NIX_AQ_CTYPE_RSS; + req->op = NIX_AQ_INSTOP_LOCK; } rc = mbox_process(mbox); @@ -88,7 +109,7 @@ nix_cn9k_rss_reta_set(struct nix *nix, uint8_t group, static int nix_rss_reta_set(struct nix *nix, uint8_t group, - uint16_t reta[ROC_NIX_RSS_RETA_MAX]) + uint16_t reta[ROC_NIX_RSS_RETA_MAX], uint8_t lock_rx_ctx) { struct mbox *mbox = (&nix->dev)->mbox; struct nix_cn10k_aq_enq_req *req; @@ -113,6 +134,27 @@ nix_rss_reta_set(struct nix *nix, uint8_t group, req->qidx = (group * nix->reta_sz) + idx; req->ctype = NIX_AQ_CTYPE_RSS; req->op = NIX_AQ_INSTOP_INIT; + + if (!lock_rx_ctx) + continue; + + req = mbox_alloc_msg_nix_cn10k_aq_enq(mbox); + if (!req) { + /* The shared memory buffer can be full. + * Flush it and retry + */ + rc = mbox_process(mbox); + if (rc < 0) + return rc; + req = mbox_alloc_msg_nix_cn10k_aq_enq(mbox); + if (!req) + return NIX_ERR_NO_MEM; + } + req->rss.rq = reta[idx]; + /* Fill AQ info */ + req->qidx = (group * nix->reta_sz) + idx; + req->ctype = NIX_AQ_CTYPE_RSS; + req->op = NIX_AQ_INSTOP_LOCK; } rc = mbox_process(mbox); @@ -133,9 +175,10 @@ roc_nix_rss_reta_set(struct roc_nix *roc_nix, uint8_t group, return NIX_ERR_PARAM; if (roc_model_is_cn9k()) - rc = nix_cn9k_rss_reta_set(nix, group, reta); + rc = nix_cn9k_rss_reta_set(nix, group, reta, + roc_nix->lock_rx_ctx); else - rc = nix_rss_reta_set(nix, group, reta); + rc = nix_rss_reta_set(nix, group, reta, roc_nix->lock_rx_ctx); if (rc) return rc;