[bug report] octeontx2-af: Skip NIXLF check for bcast MCE entry

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux