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@xxxxxxxxx> 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@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip