octeontx2-af: Skip NIXLF check for bcast MCE entry
Hello Sunil Goutham,
The patch c5e4e4d1060b: "octeontx2-af: Skip NIXLF check for bcast MCE entry" from Dec 2, 2018, leads to the following static checker warning:
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c:536 rvu_nix_aq_enq_inst() warn: assigning signed to unsigned: 'inst.lf = nixlf' '(-19),0-2147483646'
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
474
475 pfvf = rvu_get_pfvf(rvu, pcifunc);
476 nixlf = rvu_get_lf(rvu, block, pcifunc, 0);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^rvu_get_lf() return -ENODEV on error.
477
478 /* Skip NIXLF check for broadcast MCE entry init */
479 if (!(!rsp && req->ctype = NIX_AQ_CTYPE_MCE)) {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^This condition would be more clear if we removed a double negative.
if (rsp || req->ctype != NIX_AQ_CTYPE_MCE)
480 if (!pfvf->nixlf || nixlf < 0)
In the original code we checked if nixlf was negative outside the if statement, but the patch moved it inside the if statement.
481 return NIX_AF_ERR_AF_LF_INVALID;
482 }
483
484 switch (req->ctype) {
485 case NIX_AQ_CTYPE_RQ:
486 /* Check if index exceeds max no of queues */
487 if (!pfvf->rq_ctx || req->qidx >= pfvf->rq_ctx->qsize)
488 rc = NIX_AF_ERR_AQ_ENQUEUE;
489 break;
490 case NIX_AQ_CTYPE_SQ:
491 if (!pfvf->sq_ctx || req->qidx >= pfvf->sq_ctx->qsize)
492 rc = NIX_AF_ERR_AQ_ENQUEUE;
493 break;
494 case NIX_AQ_CTYPE_CQ:
495 if (!pfvf->cq_ctx || req->qidx >= pfvf->cq_ctx->qsize)
496 rc = NIX_AF_ERR_AQ_ENQUEUE;
497 break;
498 case NIX_AQ_CTYPE_RSS:
499 /* Check if RSS is enabled and qidx is within range */
500 cfg = rvu_read64(rvu, blkaddr, NIX_AF_LFX_RSS_CFG(nixlf));
501 if (!(cfg & BIT_ULL(4)) || !pfvf->rss_ctx ||
502 (req->qidx >= (256UL << (cfg & 0xF))))
503 rc = NIX_AF_ERR_AQ_ENQUEUE;
504 break;
505 case NIX_AQ_CTYPE_MCE:
506 cfg = rvu_read64(rvu, blkaddr, NIX_AF_RX_MCAST_CFG);
507 /* Check if index exceeds MCE list length */
508 if (!hw->nix0->mcast.mce_ctx ||
509 (req->qidx >= (256UL << (cfg & 0xF))))
510 rc = NIX_AF_ERR_AQ_ENQUEUE;
511
512 /* Adding multicast lists for requests from PF/VFs is not
513 * yet supported, so ignore this.
514 */
515 if (rsp)
516 rc = NIX_AF_ERR_AQ_ENQUEUE;So we assume that we hit this case with a NULL rsp.
517 break;
518 default:
519 rc = NIX_AF_ERR_AQ_ENQUEUE;
520 }
521
522 if (rc)
523 return rc;
524
525 /* Check if SQ pointed SMQ belongs to this PF/VF or not */
526 if (req->ctype = NIX_AQ_CTYPE_SQ &&
527 ((req->op = NIX_AQ_INSTOP_INIT && req->sq.ena) ||
528 (req->op = NIX_AQ_INSTOP_WRITE &&
529 req->sq_mask.ena && req->sq_mask.smq && req->sq.ena))) {
530 if (!is_valid_txschq(rvu, blkaddr, NIX_TXSCH_LVL_SMQ,
531 pcifunc, req->sq.smq))
532 return NIX_AF_ERR_AQ_ENQUEUE;
533 }
534
535 memset(&inst, 0, sizeof(struct nix_aq_inst_s));
536 inst.lf = nixlf;
^^^^^^^^^^^^^^^^Here we set inst.lf = -19 but inst.lf is 7 bits and unsigned.
537 inst.cindex = req->qidx;
Then later we pass "&inst" to nix_aq_enqueue_wait(rvu, block, &inst); and I get lost what happens after that...
regards,
dan carpenter