[PATCH] RDMA/siw: Fix handling of zero-sized Read and Receive Queues.

kernel test robot lkp at intel.com
Tue Dec 15 10:33:16 EST 2020


Hi Bernard,

I love your patch! Perhaps something to improve:

[auto build test WARNING on rdma/for-next]
[also build test WARNING on linus/master v5.10 next-20201215]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Bernard-Metzler/RDMA-siw-Fix-handling-of-zero-sized-Read-and-Receive-Queues/20201215-202632
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git for-next
config: arm-randconfig-r035-20201215 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project a29ecca7819a6ed4250d3689b12b1f664bb790d7)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/0day-ci/linux/commit/2626590f990ffc9ed5607f7027ffadbfc9073692
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Bernard-Metzler/RDMA-siw-Fix-handling-of-zero-sized-Read-and-Receive-Queues/20201215-202632
        git checkout 2626590f990ffc9ed5607f7027ffadbfc9073692
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>

All warnings (new ones prefixed by >>):

>> drivers/infiniband/sw/siw/siw_qp_rx.c:681:6: warning: variable 'flags' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (unlikely(!qp->attrs.irq_size)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:22: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/sw/siw/siw_qp_rx.c:729:39: note: uninitialized use occurs here
           spin_unlock_irqrestore(&qp->sq_lock, flags);
                                                ^~~~~
   drivers/infiniband/sw/siw/siw_qp_rx.c:681:2: note: remove the 'if' if its condition is always false
           if (unlikely(!qp->attrs.irq_size)) {
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/sw/siw/siw_qp_rx.c:673:21: note: initialize the variable 'flags' to silence this warning
           unsigned long flags;
                              ^
                               = 0
   1 warning generated.

vim +681 drivers/infiniband/sw/siw/siw_qp_rx.c

   643	
   644	/*
   645	 * siw_init_rresp:
   646	 *
   647	 * Process inbound RDMA READ REQ. Produce a pseudo READ RESPONSE WQE.
   648	 * Put it at the tail of the IRQ, if there is another WQE currently in
   649	 * transmit processing. If not, make it the current WQE to be processed
   650	 * and schedule transmit processing.
   651	 *
   652	 * Can be called from softirq context and from process
   653	 * context (RREAD socket loopback case!)
   654	 *
   655	 * return value:
   656	 *	0:      success,
   657	 *		failure code otherwise
   658	 */
   659	
   660	static int siw_init_rresp(struct siw_qp *qp, struct siw_rx_stream *srx)
   661	{
   662		struct siw_wqe *tx_work = tx_wqe(qp);
   663		struct siw_sqe *resp;
   664	
   665		uint64_t raddr = be64_to_cpu(srx->hdr.rreq.sink_to),
   666			 laddr = be64_to_cpu(srx->hdr.rreq.source_to);
   667		uint32_t length = be32_to_cpu(srx->hdr.rreq.read_size),
   668			 lkey = be32_to_cpu(srx->hdr.rreq.source_stag),
   669			 rkey = be32_to_cpu(srx->hdr.rreq.sink_stag),
   670			 msn = be32_to_cpu(srx->hdr.rreq.ddp_msn);
   671	
   672		int run_sq = 1, rv = 0;
   673		unsigned long flags;
   674	
   675		if (unlikely(msn != srx->ddp_msn[RDMAP_UNTAGGED_QN_RDMA_READ])) {
   676			siw_init_terminate(qp, TERM_ERROR_LAYER_DDP,
   677					   DDP_ETYPE_UNTAGGED_BUF,
   678					   DDP_ECODE_UT_INVALID_MSN_RANGE, 0);
   679			return -EPROTO;
   680		}
 > 681		if (unlikely(!qp->attrs.irq_size)) {
   682			run_sq = 0;
   683			goto error_irq;
   684		}
   685		spin_lock_irqsave(&qp->sq_lock, flags);
   686	
   687		if (tx_work->wr_status == SIW_WR_IDLE) {
   688			/*
   689			 * immediately schedule READ response w/o
   690			 * consuming IRQ entry: IRQ must be empty.
   691			 */
   692			tx_work->processed = 0;
   693			tx_work->mem[0] = NULL;
   694			tx_work->wr_status = SIW_WR_QUEUED;
   695			resp = &tx_work->sqe;
   696		} else {
   697			resp = irq_alloc_free(qp);
   698			run_sq = 0;
   699		}
   700		if (likely(resp)) {
   701			resp->opcode = SIW_OP_READ_RESPONSE;
   702	
   703			resp->sge[0].length = length;
   704			resp->sge[0].laddr = laddr;
   705			resp->sge[0].lkey = lkey;
   706	
   707			/* Keep aside message sequence number for potential
   708			 * error reporting during Read Response generation.
   709			 */
   710			resp->sge[1].length = msn;
   711	
   712			resp->raddr = raddr;
   713			resp->rkey = rkey;
   714			resp->num_sge = length ? 1 : 0;
   715	
   716			/* RRESP now valid as current TX wqe or placed into IRQ */
   717			smp_store_mb(resp->flags, SIW_WQE_VALID);
   718		} else {
   719	error_irq:
   720			pr_warn("siw: [QP %u]: IRQ exceeded or null, size %d\n",
   721				qp_id(qp), qp->attrs.irq_size);
   722	
   723			siw_init_terminate(qp, TERM_ERROR_LAYER_RDMAP,
   724					   RDMAP_ETYPE_REMOTE_OPERATION,
   725					   RDMAP_ECODE_CATASTROPHIC_STREAM, 0);
   726			rv = -EPROTO;
   727		}
   728	
   729		spin_unlock_irqrestore(&qp->sq_lock, flags);
   730	
   731		if (run_sq)
   732			rv = siw_sq_start(qp);
   733	
   734		return rv;
   735	}
   736	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 33041 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-nvme/attachments/20201215/78c12ef7/attachment-0001.gz>


More information about the Linux-nvme mailing list