Re: [PATCH v13 13/25] RDMA/rtrs: include client and server modules into kernel compilation

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

 



Hi Danil,

I love your patch! Perhaps something to improve:

[auto build test WARNING on block/for-next]
[also build test WARNING on driver-core/driver-core-testing rdma/for-next linus/master v5.7-rc3 next-20200428]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Danil-Kipnis/RTRS-former-IBTRS-RDMA-Transport-Library-and-RNBD-former-IBNBD-RDMA-Network-Block-Device/20200428-080733
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@xxxxxxxxx>


cppcheck warnings: (new ones prefixed by >>)

>> drivers/infiniband/ulp/rtrs/rtrs-srv.c:508:29: warning: Either the condition '!id' is redundant or there is possible null pointer dereference: id. [nullPointerRedundantCheck]
    struct rtrs_srv_con *con = id->con;
                               ^
   drivers/infiniband/ulp/rtrs/rtrs-srv.c:513:14: note: Assuming that condition '!id' is not redundant
    if (WARN_ON(!id))
                ^
   drivers/infiniband/ulp/rtrs/rtrs-srv.c:508:29: note: Null pointer dereference
    struct rtrs_srv_con *con = id->con;
                               ^
>> drivers/infiniband/ulp/rtrs/rtrs-srv.c:1448:3: warning: Statements following return, break, continue, goto or throw will never be executed. [unreachableCode]
     fallthrough;
     ^
   drivers/infiniband/ulp/rtrs/rtrs-srv.c:1454:3: warning: Statements following return, break, continue, goto or throw will never be executed. [unreachableCode]
     fallthrough;
     ^
   drivers/infiniband/ulp/rtrs/rtrs-srv.c:1460:3: warning: Statements following return, break, continue, goto or throw will never be executed. [unreachableCode]
     fallthrough;
     ^
>> drivers/infiniband/ulp/rtrs/rtrs-srv.c:309:17: warning: Local variable 'list' shadows outer variable [shadowVariable]
     struct ib_sge list;
                   ^
   drivers/infiniband/ulp/rtrs/rtrs-srv.c:240:17: note: Shadowed declaration
    struct ib_sge *list;
                   ^
   drivers/infiniband/ulp/rtrs/rtrs-srv.c:309:17: note: Shadow variable
     struct ib_sge list;
                   ^
>> drivers/infiniband/ulp/rtrs/rtrs-srv.c:296:65: warning: Clarify calculation precedence for '%' and '?'. [clarifyCalculation]
    flags = atomic_inc_return(&id->con->wr_cnt) % srv->queue_depth ?
                                                                   ^
   drivers/infiniband/ulp/rtrs/rtrs-srv.c:420:61: warning: Clarify calculation precedence for '%' and '?'. [clarifyCalculation]
    flags = atomic_inc_return(&con->wr_cnt) % srv->queue_depth ?
                                                               ^
>> drivers/infiniband/ulp/rtrs/rtrs-srv.c:620:29: warning: Variable 'rsp' is not assigned a value. [unassignedVariable]
     struct rtrs_msg_rkey_rsp *rsp;
                               ^

vim +508 drivers/infiniband/ulp/rtrs/rtrs-srv.c

34a928cf49a7ef Jack Wang 2020-04-27  224  
34a928cf49a7ef Jack Wang 2020-04-27  225  static int rdma_write_sg(struct rtrs_srv_op *id)
34a928cf49a7ef Jack Wang 2020-04-27  226  {
34a928cf49a7ef Jack Wang 2020-04-27  227  	struct rtrs_sess *s = id->con->c.sess;
34a928cf49a7ef Jack Wang 2020-04-27  228  	struct rtrs_srv_sess *sess = to_srv_sess(s);
34a928cf49a7ef Jack Wang 2020-04-27  229  	dma_addr_t dma_addr = sess->dma_addr[id->msg_id];
34a928cf49a7ef Jack Wang 2020-04-27  230  	struct rtrs_srv_mr *srv_mr;
34a928cf49a7ef Jack Wang 2020-04-27  231  	struct rtrs_srv *srv = sess->srv;
34a928cf49a7ef Jack Wang 2020-04-27  232  	struct ib_send_wr inv_wr, imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  233  	struct ib_rdma_wr *wr = NULL;
34a928cf49a7ef Jack Wang 2020-04-27  234  	enum ib_send_flags flags;
34a928cf49a7ef Jack Wang 2020-04-27  235  	size_t sg_cnt;
34a928cf49a7ef Jack Wang 2020-04-27  236  	int err, offset;
34a928cf49a7ef Jack Wang 2020-04-27  237  	bool need_inval;
34a928cf49a7ef Jack Wang 2020-04-27  238  	u32 rkey = 0;
34a928cf49a7ef Jack Wang 2020-04-27  239  	struct ib_reg_wr rwr;
34a928cf49a7ef Jack Wang 2020-04-27  240  	struct ib_sge *list;
34a928cf49a7ef Jack Wang 2020-04-27  241  
34a928cf49a7ef Jack Wang 2020-04-27  242  	sg_cnt = le16_to_cpu(id->rd_msg->sg_cnt);
34a928cf49a7ef Jack Wang 2020-04-27  243  	need_inval = le16_to_cpu(id->rd_msg->flags) & RTRS_MSG_NEED_INVAL_F;
34a928cf49a7ef Jack Wang 2020-04-27  244  	if (unlikely(sg_cnt != 1))
34a928cf49a7ef Jack Wang 2020-04-27  245  		return -EINVAL;
34a928cf49a7ef Jack Wang 2020-04-27  246  
34a928cf49a7ef Jack Wang 2020-04-27  247  	offset = 0;
34a928cf49a7ef Jack Wang 2020-04-27  248  
34a928cf49a7ef Jack Wang 2020-04-27  249  	wr		= &id->tx_wr;
34a928cf49a7ef Jack Wang 2020-04-27  250  	list		= &id->tx_sg;
34a928cf49a7ef Jack Wang 2020-04-27  251  	list->addr	= dma_addr + offset;
34a928cf49a7ef Jack Wang 2020-04-27  252  	list->length	= le32_to_cpu(id->rd_msg->desc[0].len);
34a928cf49a7ef Jack Wang 2020-04-27  253  
34a928cf49a7ef Jack Wang 2020-04-27  254  	/* WR will fail with length error
34a928cf49a7ef Jack Wang 2020-04-27  255  	 * if this is 0
34a928cf49a7ef Jack Wang 2020-04-27  256  	 */
34a928cf49a7ef Jack Wang 2020-04-27  257  	if (unlikely(list->length == 0)) {
34a928cf49a7ef Jack Wang 2020-04-27  258  		rtrs_err(s, "Invalid RDMA-Write sg list length 0\n");
34a928cf49a7ef Jack Wang 2020-04-27  259  		return -EINVAL;
34a928cf49a7ef Jack Wang 2020-04-27  260  	}
34a928cf49a7ef Jack Wang 2020-04-27  261  
34a928cf49a7ef Jack Wang 2020-04-27  262  	list->lkey = sess->s.dev->ib_pd->local_dma_lkey;
34a928cf49a7ef Jack Wang 2020-04-27  263  	offset += list->length;
34a928cf49a7ef Jack Wang 2020-04-27  264  
34a928cf49a7ef Jack Wang 2020-04-27  265  	wr->wr.sg_list	= list;
34a928cf49a7ef Jack Wang 2020-04-27  266  	wr->wr.num_sge	= 1;
34a928cf49a7ef Jack Wang 2020-04-27  267  	wr->remote_addr	= le64_to_cpu(id->rd_msg->desc[0].addr);
34a928cf49a7ef Jack Wang 2020-04-27  268  	wr->rkey	= le32_to_cpu(id->rd_msg->desc[0].key);
34a928cf49a7ef Jack Wang 2020-04-27  269  	if (rkey == 0)
34a928cf49a7ef Jack Wang 2020-04-27  270  		rkey = wr->rkey;
34a928cf49a7ef Jack Wang 2020-04-27  271  	else
34a928cf49a7ef Jack Wang 2020-04-27  272  		/* Only one key is actually used */
34a928cf49a7ef Jack Wang 2020-04-27  273  		WARN_ON_ONCE(rkey != wr->rkey);
34a928cf49a7ef Jack Wang 2020-04-27  274  
34a928cf49a7ef Jack Wang 2020-04-27  275  	wr->wr.opcode = IB_WR_RDMA_WRITE;
34a928cf49a7ef Jack Wang 2020-04-27  276  	wr->wr.ex.imm_data = 0;
34a928cf49a7ef Jack Wang 2020-04-27  277  	wr->wr.send_flags  = 0;
34a928cf49a7ef Jack Wang 2020-04-27  278  
34a928cf49a7ef Jack Wang 2020-04-27  279  	if (need_inval && always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27  280  		wr->wr.next = &rwr.wr;
34a928cf49a7ef Jack Wang 2020-04-27  281  		rwr.wr.next = &inv_wr;
34a928cf49a7ef Jack Wang 2020-04-27  282  		inv_wr.next = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  283  	} else if (always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27  284  		wr->wr.next = &rwr.wr;
34a928cf49a7ef Jack Wang 2020-04-27  285  		rwr.wr.next = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  286  	} else if (need_inval) {
34a928cf49a7ef Jack Wang 2020-04-27  287  		wr->wr.next = &inv_wr;
34a928cf49a7ef Jack Wang 2020-04-27  288  		inv_wr.next = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  289  	} else {
34a928cf49a7ef Jack Wang 2020-04-27  290  		wr->wr.next = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  291  	}
34a928cf49a7ef Jack Wang 2020-04-27  292  	/*
34a928cf49a7ef Jack Wang 2020-04-27  293  	 * From time to time we have to post signaled sends,
34a928cf49a7ef Jack Wang 2020-04-27  294  	 * or send queue will fill up and only QP reset can help.
34a928cf49a7ef Jack Wang 2020-04-27  295  	 */
34a928cf49a7ef Jack Wang 2020-04-27  296  	flags = atomic_inc_return(&id->con->wr_cnt) % srv->queue_depth ?
34a928cf49a7ef Jack Wang 2020-04-27  297  		0 : IB_SEND_SIGNALED;
34a928cf49a7ef Jack Wang 2020-04-27  298  
34a928cf49a7ef Jack Wang 2020-04-27  299  	if (need_inval) {
34a928cf49a7ef Jack Wang 2020-04-27  300  		inv_wr.sg_list = NULL;
34a928cf49a7ef Jack Wang 2020-04-27  301  		inv_wr.num_sge = 0;
34a928cf49a7ef Jack Wang 2020-04-27  302  		inv_wr.opcode = IB_WR_SEND_WITH_INV;
34a928cf49a7ef Jack Wang 2020-04-27  303  		inv_wr.send_flags = 0;
34a928cf49a7ef Jack Wang 2020-04-27  304  		inv_wr.ex.invalidate_rkey = rkey;
34a928cf49a7ef Jack Wang 2020-04-27  305  	}
34a928cf49a7ef Jack Wang 2020-04-27  306  
34a928cf49a7ef Jack Wang 2020-04-27  307  	imm_wr.next = NULL;
34a928cf49a7ef Jack Wang 2020-04-27  308  	if (always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27 @309  		struct ib_sge list;
34a928cf49a7ef Jack Wang 2020-04-27  310  		struct rtrs_msg_rkey_rsp *msg;
34a928cf49a7ef Jack Wang 2020-04-27  311  
34a928cf49a7ef Jack Wang 2020-04-27  312  		srv_mr = &sess->mrs[id->msg_id];
34a928cf49a7ef Jack Wang 2020-04-27  313  		rwr.wr.opcode = IB_WR_REG_MR;
34a928cf49a7ef Jack Wang 2020-04-27  314  		rwr.wr.num_sge = 0;
34a928cf49a7ef Jack Wang 2020-04-27  315  		rwr.mr = srv_mr->mr;
34a928cf49a7ef Jack Wang 2020-04-27  316  		rwr.wr.send_flags = 0;
34a928cf49a7ef Jack Wang 2020-04-27  317  		rwr.key = srv_mr->mr->rkey;
34a928cf49a7ef Jack Wang 2020-04-27  318  		rwr.access = (IB_ACCESS_LOCAL_WRITE |
34a928cf49a7ef Jack Wang 2020-04-27  319  			      IB_ACCESS_REMOTE_WRITE);
34a928cf49a7ef Jack Wang 2020-04-27  320  		msg = srv_mr->iu->buf;
34a928cf49a7ef Jack Wang 2020-04-27  321  		msg->buf_id = cpu_to_le16(id->msg_id);
34a928cf49a7ef Jack Wang 2020-04-27  322  		msg->type = cpu_to_le16(RTRS_MSG_RKEY_RSP);
34a928cf49a7ef Jack Wang 2020-04-27  323  		msg->rkey = cpu_to_le32(srv_mr->mr->rkey);
34a928cf49a7ef Jack Wang 2020-04-27  324  
34a928cf49a7ef Jack Wang 2020-04-27  325  		list.addr   = srv_mr->iu->dma_addr;
34a928cf49a7ef Jack Wang 2020-04-27  326  		list.length = sizeof(*msg);
34a928cf49a7ef Jack Wang 2020-04-27  327  		list.lkey   = sess->s.dev->ib_pd->local_dma_lkey;
34a928cf49a7ef Jack Wang 2020-04-27  328  		imm_wr.sg_list = &list;
34a928cf49a7ef Jack Wang 2020-04-27  329  		imm_wr.num_sge = 1;
34a928cf49a7ef Jack Wang 2020-04-27  330  		imm_wr.opcode = IB_WR_SEND_WITH_IMM;
34a928cf49a7ef Jack Wang 2020-04-27  331  		ib_dma_sync_single_for_device(sess->s.dev->ib_dev,
34a928cf49a7ef Jack Wang 2020-04-27  332  					      srv_mr->iu->dma_addr,
34a928cf49a7ef Jack Wang 2020-04-27  333  					      srv_mr->iu->size, DMA_TO_DEVICE);
34a928cf49a7ef Jack Wang 2020-04-27  334  	} else {
34a928cf49a7ef Jack Wang 2020-04-27  335  		imm_wr.sg_list = NULL;
34a928cf49a7ef Jack Wang 2020-04-27  336  		imm_wr.num_sge = 0;
34a928cf49a7ef Jack Wang 2020-04-27  337  		imm_wr.opcode = IB_WR_RDMA_WRITE_WITH_IMM;
34a928cf49a7ef Jack Wang 2020-04-27  338  	}
34a928cf49a7ef Jack Wang 2020-04-27  339  	imm_wr.send_flags = flags;
34a928cf49a7ef Jack Wang 2020-04-27  340  	imm_wr.ex.imm_data = cpu_to_be32(rtrs_to_io_rsp_imm(id->msg_id,
34a928cf49a7ef Jack Wang 2020-04-27  341  							     0, need_inval));
34a928cf49a7ef Jack Wang 2020-04-27  342  
34a928cf49a7ef Jack Wang 2020-04-27  343  	imm_wr.wr_cqe   = &io_comp_cqe;
34a928cf49a7ef Jack Wang 2020-04-27  344  	ib_dma_sync_single_for_device(sess->s.dev->ib_dev, dma_addr,
34a928cf49a7ef Jack Wang 2020-04-27  345  				      offset, DMA_BIDIRECTIONAL);
34a928cf49a7ef Jack Wang 2020-04-27  346  
34a928cf49a7ef Jack Wang 2020-04-27  347  	err = ib_post_send(id->con->c.qp, &id->tx_wr.wr, NULL);
34a928cf49a7ef Jack Wang 2020-04-27  348  	if (unlikely(err))
34a928cf49a7ef Jack Wang 2020-04-27  349  		rtrs_err(s,
34a928cf49a7ef Jack Wang 2020-04-27  350  			  "Posting RDMA-Write-Request to QP failed, err: %d\n",
34a928cf49a7ef Jack Wang 2020-04-27  351  			  err);
34a928cf49a7ef Jack Wang 2020-04-27  352  
34a928cf49a7ef Jack Wang 2020-04-27  353  	return err;
34a928cf49a7ef Jack Wang 2020-04-27  354  }
34a928cf49a7ef Jack Wang 2020-04-27  355  
34a928cf49a7ef Jack Wang 2020-04-27  356  /**
34a928cf49a7ef Jack Wang 2020-04-27  357   * send_io_resp_imm() - respond to client with empty IMM on failed READ/WRITE
34a928cf49a7ef Jack Wang 2020-04-27  358   *                      requests or on successful WRITE request.
34a928cf49a7ef Jack Wang 2020-04-27  359   * @con:	the connection to send back result
34a928cf49a7ef Jack Wang 2020-04-27  360   * @id:		the id associated with the IO
34a928cf49a7ef Jack Wang 2020-04-27  361   * @errno:	the error number of the IO.
34a928cf49a7ef Jack Wang 2020-04-27  362   *
34a928cf49a7ef Jack Wang 2020-04-27  363   * Return 0 on success, errno otherwise.
34a928cf49a7ef Jack Wang 2020-04-27  364   */
34a928cf49a7ef Jack Wang 2020-04-27  365  static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id,
34a928cf49a7ef Jack Wang 2020-04-27  366  			    int errno)
34a928cf49a7ef Jack Wang 2020-04-27  367  {
34a928cf49a7ef Jack Wang 2020-04-27  368  	struct rtrs_sess *s = con->c.sess;
34a928cf49a7ef Jack Wang 2020-04-27  369  	struct rtrs_srv_sess *sess = to_srv_sess(s);
34a928cf49a7ef Jack Wang 2020-04-27  370  	struct ib_send_wr inv_wr, imm_wr, *wr = NULL;
34a928cf49a7ef Jack Wang 2020-04-27  371  	struct ib_reg_wr rwr;
34a928cf49a7ef Jack Wang 2020-04-27  372  	struct rtrs_srv *srv = sess->srv;
34a928cf49a7ef Jack Wang 2020-04-27  373  	struct rtrs_srv_mr *srv_mr;
34a928cf49a7ef Jack Wang 2020-04-27  374  	bool need_inval = false;
34a928cf49a7ef Jack Wang 2020-04-27  375  	enum ib_send_flags flags;
34a928cf49a7ef Jack Wang 2020-04-27  376  	u32 imm;
34a928cf49a7ef Jack Wang 2020-04-27  377  	int err;
34a928cf49a7ef Jack Wang 2020-04-27  378  
34a928cf49a7ef Jack Wang 2020-04-27  379  	if (id->dir == READ) {
34a928cf49a7ef Jack Wang 2020-04-27  380  		struct rtrs_msg_rdma_read *rd_msg = id->rd_msg;
34a928cf49a7ef Jack Wang 2020-04-27  381  		size_t sg_cnt;
34a928cf49a7ef Jack Wang 2020-04-27  382  
34a928cf49a7ef Jack Wang 2020-04-27  383  		need_inval = le16_to_cpu(rd_msg->flags) &
34a928cf49a7ef Jack Wang 2020-04-27  384  				RTRS_MSG_NEED_INVAL_F;
34a928cf49a7ef Jack Wang 2020-04-27  385  		sg_cnt = le16_to_cpu(rd_msg->sg_cnt);
34a928cf49a7ef Jack Wang 2020-04-27  386  
34a928cf49a7ef Jack Wang 2020-04-27  387  		if (need_inval) {
34a928cf49a7ef Jack Wang 2020-04-27  388  			if (likely(sg_cnt)) {
34a928cf49a7ef Jack Wang 2020-04-27  389  				inv_wr.sg_list = NULL;
34a928cf49a7ef Jack Wang 2020-04-27  390  				inv_wr.num_sge = 0;
34a928cf49a7ef Jack Wang 2020-04-27  391  				inv_wr.opcode = IB_WR_SEND_WITH_INV;
34a928cf49a7ef Jack Wang 2020-04-27  392  				inv_wr.send_flags = 0;
34a928cf49a7ef Jack Wang 2020-04-27  393  				/* Only one key is actually used */
34a928cf49a7ef Jack Wang 2020-04-27  394  				inv_wr.ex.invalidate_rkey =
34a928cf49a7ef Jack Wang 2020-04-27  395  					le32_to_cpu(rd_msg->desc[0].key);
34a928cf49a7ef Jack Wang 2020-04-27  396  			} else {
34a928cf49a7ef Jack Wang 2020-04-27  397  				WARN_ON_ONCE(1);
34a928cf49a7ef Jack Wang 2020-04-27  398  				need_inval = false;
34a928cf49a7ef Jack Wang 2020-04-27  399  			}
34a928cf49a7ef Jack Wang 2020-04-27  400  		}
34a928cf49a7ef Jack Wang 2020-04-27  401  	}
34a928cf49a7ef Jack Wang 2020-04-27  402  
34a928cf49a7ef Jack Wang 2020-04-27  403  	if (need_inval && always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27  404  		wr = &inv_wr;
34a928cf49a7ef Jack Wang 2020-04-27  405  		inv_wr.next = &rwr.wr;
34a928cf49a7ef Jack Wang 2020-04-27  406  		rwr.wr.next = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  407  	} else if (always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27  408  		wr = &rwr.wr;
34a928cf49a7ef Jack Wang 2020-04-27  409  		rwr.wr.next = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  410  	} else if (need_inval) {
34a928cf49a7ef Jack Wang 2020-04-27  411  		wr = &inv_wr;
34a928cf49a7ef Jack Wang 2020-04-27  412  		inv_wr.next = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  413  	} else {
34a928cf49a7ef Jack Wang 2020-04-27  414  		wr = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  415  	}
34a928cf49a7ef Jack Wang 2020-04-27  416  	/*
34a928cf49a7ef Jack Wang 2020-04-27  417  	 * From time to time we have to post signalled sends,
34a928cf49a7ef Jack Wang 2020-04-27  418  	 * or send queue will fill up and only QP reset can help.
34a928cf49a7ef Jack Wang 2020-04-27  419  	 */
34a928cf49a7ef Jack Wang 2020-04-27  420  	flags = atomic_inc_return(&con->wr_cnt) % srv->queue_depth ?
34a928cf49a7ef Jack Wang 2020-04-27  421  		0 : IB_SEND_SIGNALED;
34a928cf49a7ef Jack Wang 2020-04-27  422  	imm = rtrs_to_io_rsp_imm(id->msg_id, errno, need_inval);
34a928cf49a7ef Jack Wang 2020-04-27  423  	imm_wr.next = NULL;
34a928cf49a7ef Jack Wang 2020-04-27  424  	if (always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27  425  		struct ib_sge list;
34a928cf49a7ef Jack Wang 2020-04-27  426  		struct rtrs_msg_rkey_rsp *msg;
34a928cf49a7ef Jack Wang 2020-04-27  427  
34a928cf49a7ef Jack Wang 2020-04-27  428  		srv_mr = &sess->mrs[id->msg_id];
34a928cf49a7ef Jack Wang 2020-04-27  429  		rwr.wr.next = &imm_wr;
34a928cf49a7ef Jack Wang 2020-04-27  430  		rwr.wr.opcode = IB_WR_REG_MR;
34a928cf49a7ef Jack Wang 2020-04-27  431  		rwr.wr.num_sge = 0;
34a928cf49a7ef Jack Wang 2020-04-27  432  		rwr.wr.send_flags = 0;
34a928cf49a7ef Jack Wang 2020-04-27  433  		rwr.mr = srv_mr->mr;
34a928cf49a7ef Jack Wang 2020-04-27  434  		rwr.key = srv_mr->mr->rkey;
34a928cf49a7ef Jack Wang 2020-04-27  435  		rwr.access = (IB_ACCESS_LOCAL_WRITE |
34a928cf49a7ef Jack Wang 2020-04-27  436  			      IB_ACCESS_REMOTE_WRITE);
34a928cf49a7ef Jack Wang 2020-04-27  437  		msg = srv_mr->iu->buf;
34a928cf49a7ef Jack Wang 2020-04-27  438  		msg->buf_id = cpu_to_le16(id->msg_id);
34a928cf49a7ef Jack Wang 2020-04-27  439  		msg->type = cpu_to_le16(RTRS_MSG_RKEY_RSP);
34a928cf49a7ef Jack Wang 2020-04-27  440  		msg->rkey = cpu_to_le32(srv_mr->mr->rkey);
34a928cf49a7ef Jack Wang 2020-04-27  441  
34a928cf49a7ef Jack Wang 2020-04-27  442  		list.addr   = srv_mr->iu->dma_addr;
34a928cf49a7ef Jack Wang 2020-04-27  443  		list.length = sizeof(*msg);
34a928cf49a7ef Jack Wang 2020-04-27  444  		list.lkey   = sess->s.dev->ib_pd->local_dma_lkey;
34a928cf49a7ef Jack Wang 2020-04-27  445  		imm_wr.sg_list = &list;
34a928cf49a7ef Jack Wang 2020-04-27  446  		imm_wr.num_sge = 1;
34a928cf49a7ef Jack Wang 2020-04-27  447  		imm_wr.opcode = IB_WR_SEND_WITH_IMM;
34a928cf49a7ef Jack Wang 2020-04-27  448  		ib_dma_sync_single_for_device(sess->s.dev->ib_dev,
34a928cf49a7ef Jack Wang 2020-04-27  449  					      srv_mr->iu->dma_addr,
34a928cf49a7ef Jack Wang 2020-04-27  450  					      srv_mr->iu->size, DMA_TO_DEVICE);
34a928cf49a7ef Jack Wang 2020-04-27  451  	} else {
34a928cf49a7ef Jack Wang 2020-04-27  452  		imm_wr.sg_list = NULL;
34a928cf49a7ef Jack Wang 2020-04-27  453  		imm_wr.num_sge = 0;
34a928cf49a7ef Jack Wang 2020-04-27  454  		imm_wr.opcode = IB_WR_RDMA_WRITE_WITH_IMM;
34a928cf49a7ef Jack Wang 2020-04-27  455  	}
34a928cf49a7ef Jack Wang 2020-04-27  456  	imm_wr.send_flags = flags;
34a928cf49a7ef Jack Wang 2020-04-27  457  	imm_wr.wr_cqe   = &io_comp_cqe;
34a928cf49a7ef Jack Wang 2020-04-27  458  
34a928cf49a7ef Jack Wang 2020-04-27  459  	imm_wr.ex.imm_data = cpu_to_be32(imm);
34a928cf49a7ef Jack Wang 2020-04-27  460  
34a928cf49a7ef Jack Wang 2020-04-27  461  	err = ib_post_send(id->con->c.qp, wr, NULL);
34a928cf49a7ef Jack Wang 2020-04-27  462  	if (unlikely(err))
34a928cf49a7ef Jack Wang 2020-04-27  463  		rtrs_err_rl(s, "Posting RDMA-Reply to QP failed, err: %d\n",
34a928cf49a7ef Jack Wang 2020-04-27  464  			     err);
34a928cf49a7ef Jack Wang 2020-04-27  465  
34a928cf49a7ef Jack Wang 2020-04-27  466  	return err;
34a928cf49a7ef Jack Wang 2020-04-27  467  }
34a928cf49a7ef Jack Wang 2020-04-27  468  
34a928cf49a7ef Jack Wang 2020-04-27  469  void close_sess(struct rtrs_srv_sess *sess)
34a928cf49a7ef Jack Wang 2020-04-27  470  {
34a928cf49a7ef Jack Wang 2020-04-27  471  	enum rtrs_srv_state old_state;
34a928cf49a7ef Jack Wang 2020-04-27  472  
34a928cf49a7ef Jack Wang 2020-04-27  473  	if (rtrs_srv_change_state_get_old(sess, RTRS_SRV_CLOSING,
34a928cf49a7ef Jack Wang 2020-04-27  474  					   &old_state))
34a928cf49a7ef Jack Wang 2020-04-27  475  		queue_work(rtrs_wq, &sess->close_work);
34a928cf49a7ef Jack Wang 2020-04-27  476  	WARN_ON(sess->state != RTRS_SRV_CLOSING);
34a928cf49a7ef Jack Wang 2020-04-27  477  }
34a928cf49a7ef Jack Wang 2020-04-27  478  
34a928cf49a7ef Jack Wang 2020-04-27  479  static inline const char *rtrs_srv_state_str(enum rtrs_srv_state state)
34a928cf49a7ef Jack Wang 2020-04-27  480  {
34a928cf49a7ef Jack Wang 2020-04-27  481  	switch (state) {
34a928cf49a7ef Jack Wang 2020-04-27  482  	case RTRS_SRV_CONNECTING:
34a928cf49a7ef Jack Wang 2020-04-27  483  		return "RTRS_SRV_CONNECTING";
34a928cf49a7ef Jack Wang 2020-04-27  484  	case RTRS_SRV_CONNECTED:
34a928cf49a7ef Jack Wang 2020-04-27  485  		return "RTRS_SRV_CONNECTED";
34a928cf49a7ef Jack Wang 2020-04-27  486  	case RTRS_SRV_CLOSING:
34a928cf49a7ef Jack Wang 2020-04-27  487  		return "RTRS_SRV_CLOSING";
34a928cf49a7ef Jack Wang 2020-04-27  488  	case RTRS_SRV_CLOSED:
34a928cf49a7ef Jack Wang 2020-04-27  489  		return "RTRS_SRV_CLOSED";
34a928cf49a7ef Jack Wang 2020-04-27  490  	default:
34a928cf49a7ef Jack Wang 2020-04-27  491  		return "UNKNOWN";
34a928cf49a7ef Jack Wang 2020-04-27  492  	}
34a928cf49a7ef Jack Wang 2020-04-27  493  }
34a928cf49a7ef Jack Wang 2020-04-27  494  
34a928cf49a7ef Jack Wang 2020-04-27  495  /**
34a928cf49a7ef Jack Wang 2020-04-27  496   * rtrs_srv_resp_rdma() - Finish an RDMA request
34a928cf49a7ef Jack Wang 2020-04-27  497   *
34a928cf49a7ef Jack Wang 2020-04-27  498   * @id:		Internal RTRS operation identifier
34a928cf49a7ef Jack Wang 2020-04-27  499   * @status:	Response Code sent to the other side for this operation.
34a928cf49a7ef Jack Wang 2020-04-27  500   *		0 = success, <=0 error
34a928cf49a7ef Jack Wang 2020-04-27  501   * Context: any
34a928cf49a7ef Jack Wang 2020-04-27  502   *
34a928cf49a7ef Jack Wang 2020-04-27  503   * Finish a RDMA operation. A message is sent to the client and the
34a928cf49a7ef Jack Wang 2020-04-27  504   * corresponding memory areas will be released.
34a928cf49a7ef Jack Wang 2020-04-27  505   */
34a928cf49a7ef Jack Wang 2020-04-27  506  bool rtrs_srv_resp_rdma(struct rtrs_srv_op *id, int status)
34a928cf49a7ef Jack Wang 2020-04-27  507  {
34a928cf49a7ef Jack Wang 2020-04-27 @508  	struct rtrs_srv_con *con = id->con;
34a928cf49a7ef Jack Wang 2020-04-27  509  	struct rtrs_sess *s = con->c.sess;
34a928cf49a7ef Jack Wang 2020-04-27  510  	struct rtrs_srv_sess *sess = to_srv_sess(s);
34a928cf49a7ef Jack Wang 2020-04-27  511  	int err;
34a928cf49a7ef Jack Wang 2020-04-27  512  
34a928cf49a7ef Jack Wang 2020-04-27  513  	if (WARN_ON(!id))
34a928cf49a7ef Jack Wang 2020-04-27  514  		return true;
34a928cf49a7ef Jack Wang 2020-04-27  515  
34a928cf49a7ef Jack Wang 2020-04-27  516  	id->status = status;
34a928cf49a7ef Jack Wang 2020-04-27  517  
34a928cf49a7ef Jack Wang 2020-04-27  518  	if (unlikely(sess->state != RTRS_SRV_CONNECTED)) {
34a928cf49a7ef Jack Wang 2020-04-27  519  		rtrs_err_rl(s,
34a928cf49a7ef Jack Wang 2020-04-27  520  			     "Sending I/O response failed,  session is disconnected, sess state %s\n",
34a928cf49a7ef Jack Wang 2020-04-27  521  			     rtrs_srv_state_str(sess->state));
34a928cf49a7ef Jack Wang 2020-04-27  522  		goto out;
34a928cf49a7ef Jack Wang 2020-04-27  523  	}
34a928cf49a7ef Jack Wang 2020-04-27  524  	if (always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27  525  		struct rtrs_srv_mr *mr = &sess->mrs[id->msg_id];
34a928cf49a7ef Jack Wang 2020-04-27  526  
34a928cf49a7ef Jack Wang 2020-04-27  527  		ib_update_fast_reg_key(mr->mr, ib_inc_rkey(mr->mr->rkey));
34a928cf49a7ef Jack Wang 2020-04-27  528  	}
34a928cf49a7ef Jack Wang 2020-04-27  529  	if (unlikely(atomic_sub_return(1,
34a928cf49a7ef Jack Wang 2020-04-27  530  				       &con->sq_wr_avail) < 0)) {
34a928cf49a7ef Jack Wang 2020-04-27  531  		pr_err("IB send queue full\n");
34a928cf49a7ef Jack Wang 2020-04-27  532  		atomic_add(1, &con->sq_wr_avail);
34a928cf49a7ef Jack Wang 2020-04-27  533  		spin_lock(&con->rsp_wr_wait_lock);
34a928cf49a7ef Jack Wang 2020-04-27  534  		list_add_tail(&id->wait_list, &con->rsp_wr_wait_list);
34a928cf49a7ef Jack Wang 2020-04-27  535  		spin_unlock(&con->rsp_wr_wait_lock);
34a928cf49a7ef Jack Wang 2020-04-27  536  		return false;
34a928cf49a7ef Jack Wang 2020-04-27  537  	}
34a928cf49a7ef Jack Wang 2020-04-27  538  
34a928cf49a7ef Jack Wang 2020-04-27  539  	if (status || id->dir == WRITE || !id->rd_msg->sg_cnt)
34a928cf49a7ef Jack Wang 2020-04-27  540  		err = send_io_resp_imm(con, id, status);
34a928cf49a7ef Jack Wang 2020-04-27  541  	else
34a928cf49a7ef Jack Wang 2020-04-27  542  		err = rdma_write_sg(id);
34a928cf49a7ef Jack Wang 2020-04-27  543  
34a928cf49a7ef Jack Wang 2020-04-27  544  	if (unlikely(err)) {
34a928cf49a7ef Jack Wang 2020-04-27  545  		rtrs_err_rl(s, "IO response failed: %d\n", err);
34a928cf49a7ef Jack Wang 2020-04-27  546  		close_sess(sess);
34a928cf49a7ef Jack Wang 2020-04-27  547  	}
34a928cf49a7ef Jack Wang 2020-04-27  548  out:
34a928cf49a7ef Jack Wang 2020-04-27  549  	rtrs_srv_put_ops_ids(sess);
34a928cf49a7ef Jack Wang 2020-04-27  550  	return true;
34a928cf49a7ef Jack Wang 2020-04-27  551  }
34a928cf49a7ef Jack Wang 2020-04-27  552  EXPORT_SYMBOL(rtrs_srv_resp_rdma);
34a928cf49a7ef Jack Wang 2020-04-27  553  
34a928cf49a7ef Jack Wang 2020-04-27  554  /**
34a928cf49a7ef Jack Wang 2020-04-27  555   * rtrs_srv_set_sess_priv() - Set private pointer in rtrs_srv.
34a928cf49a7ef Jack Wang 2020-04-27  556   * @srv:	Session pointer
34a928cf49a7ef Jack Wang 2020-04-27  557   * @priv:	The private pointer that is associated with the session.
34a928cf49a7ef Jack Wang 2020-04-27  558   */
34a928cf49a7ef Jack Wang 2020-04-27  559  void rtrs_srv_set_sess_priv(struct rtrs_srv *srv, void *priv)
34a928cf49a7ef Jack Wang 2020-04-27  560  {
34a928cf49a7ef Jack Wang 2020-04-27  561  	srv->priv = priv;
34a928cf49a7ef Jack Wang 2020-04-27  562  }
34a928cf49a7ef Jack Wang 2020-04-27  563  EXPORT_SYMBOL(rtrs_srv_set_sess_priv);
34a928cf49a7ef Jack Wang 2020-04-27  564  
34a928cf49a7ef Jack Wang 2020-04-27  565  static void unmap_cont_bufs(struct rtrs_srv_sess *sess)
34a928cf49a7ef Jack Wang 2020-04-27  566  {
34a928cf49a7ef Jack Wang 2020-04-27  567  	int i;
34a928cf49a7ef Jack Wang 2020-04-27  568  
34a928cf49a7ef Jack Wang 2020-04-27  569  	for (i = 0; i < sess->mrs_num; i++) {
34a928cf49a7ef Jack Wang 2020-04-27  570  		struct rtrs_srv_mr *srv_mr;
34a928cf49a7ef Jack Wang 2020-04-27  571  
34a928cf49a7ef Jack Wang 2020-04-27  572  		srv_mr = &sess->mrs[i];
34a928cf49a7ef Jack Wang 2020-04-27  573  		rtrs_iu_free(srv_mr->iu, DMA_TO_DEVICE,
34a928cf49a7ef Jack Wang 2020-04-27  574  			      sess->s.dev->ib_dev, 1);
34a928cf49a7ef Jack Wang 2020-04-27  575  		ib_dereg_mr(srv_mr->mr);
34a928cf49a7ef Jack Wang 2020-04-27  576  		ib_dma_unmap_sg(sess->s.dev->ib_dev, srv_mr->sgt.sgl,
34a928cf49a7ef Jack Wang 2020-04-27  577  				srv_mr->sgt.nents, DMA_BIDIRECTIONAL);
34a928cf49a7ef Jack Wang 2020-04-27  578  		sg_free_table(&srv_mr->sgt);
34a928cf49a7ef Jack Wang 2020-04-27  579  	}
34a928cf49a7ef Jack Wang 2020-04-27  580  	kfree(sess->mrs);
34a928cf49a7ef Jack Wang 2020-04-27  581  }
34a928cf49a7ef Jack Wang 2020-04-27  582  
34a928cf49a7ef Jack Wang 2020-04-27  583  static int map_cont_bufs(struct rtrs_srv_sess *sess)
34a928cf49a7ef Jack Wang 2020-04-27  584  {
34a928cf49a7ef Jack Wang 2020-04-27  585  	struct rtrs_srv *srv = sess->srv;
34a928cf49a7ef Jack Wang 2020-04-27  586  	struct rtrs_sess *ss = &sess->s;
34a928cf49a7ef Jack Wang 2020-04-27  587  	int i, mri, err, mrs_num;
34a928cf49a7ef Jack Wang 2020-04-27  588  	unsigned int chunk_bits;
34a928cf49a7ef Jack Wang 2020-04-27  589  	int chunks_per_mr = 1;
34a928cf49a7ef Jack Wang 2020-04-27  590  
34a928cf49a7ef Jack Wang 2020-04-27  591  	/*
34a928cf49a7ef Jack Wang 2020-04-27  592  	 * Here we map queue_depth chunks to MR.  Firstly we have to
34a928cf49a7ef Jack Wang 2020-04-27  593  	 * figure out how many chunks can we map per MR.
34a928cf49a7ef Jack Wang 2020-04-27  594  	 */
34a928cf49a7ef Jack Wang 2020-04-27  595  	if (always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27  596  		/*
34a928cf49a7ef Jack Wang 2020-04-27  597  		 * in order to do invalidate for each chunks of memory, we needs
34a928cf49a7ef Jack Wang 2020-04-27  598  		 * more memory regions.
34a928cf49a7ef Jack Wang 2020-04-27  599  		 */
34a928cf49a7ef Jack Wang 2020-04-27  600  		mrs_num = srv->queue_depth;
34a928cf49a7ef Jack Wang 2020-04-27  601  	} else {
34a928cf49a7ef Jack Wang 2020-04-27  602  		chunks_per_mr =
34a928cf49a7ef Jack Wang 2020-04-27  603  			sess->s.dev->ib_dev->attrs.max_fast_reg_page_list_len;
34a928cf49a7ef Jack Wang 2020-04-27  604  		mrs_num = DIV_ROUND_UP(srv->queue_depth, chunks_per_mr);
34a928cf49a7ef Jack Wang 2020-04-27  605  		chunks_per_mr = DIV_ROUND_UP(srv->queue_depth, mrs_num);
34a928cf49a7ef Jack Wang 2020-04-27  606  	}
34a928cf49a7ef Jack Wang 2020-04-27  607  
34a928cf49a7ef Jack Wang 2020-04-27  608  	sess->mrs = kcalloc(mrs_num, sizeof(*sess->mrs), GFP_KERNEL);
34a928cf49a7ef Jack Wang 2020-04-27  609  	if (!sess->mrs)
34a928cf49a7ef Jack Wang 2020-04-27  610  		return -ENOMEM;
34a928cf49a7ef Jack Wang 2020-04-27  611  
34a928cf49a7ef Jack Wang 2020-04-27  612  	sess->mrs_num = mrs_num;
34a928cf49a7ef Jack Wang 2020-04-27  613  
34a928cf49a7ef Jack Wang 2020-04-27  614  	for (mri = 0; mri < mrs_num; mri++) {
34a928cf49a7ef Jack Wang 2020-04-27  615  		struct rtrs_srv_mr *srv_mr = &sess->mrs[mri];
34a928cf49a7ef Jack Wang 2020-04-27  616  		struct sg_table *sgt = &srv_mr->sgt;
34a928cf49a7ef Jack Wang 2020-04-27  617  		struct scatterlist *s;
34a928cf49a7ef Jack Wang 2020-04-27  618  		struct ib_mr *mr;
34a928cf49a7ef Jack Wang 2020-04-27  619  		int nr, chunks;
34a928cf49a7ef Jack Wang 2020-04-27 @620  		struct rtrs_msg_rkey_rsp *rsp;
34a928cf49a7ef Jack Wang 2020-04-27  621  
34a928cf49a7ef Jack Wang 2020-04-27  622  		chunks = chunks_per_mr * mri;
34a928cf49a7ef Jack Wang 2020-04-27  623  		if (!always_invalidate)
34a928cf49a7ef Jack Wang 2020-04-27  624  			chunks_per_mr = min_t(int, chunks_per_mr,
34a928cf49a7ef Jack Wang 2020-04-27  625  					      srv->queue_depth - chunks);
34a928cf49a7ef Jack Wang 2020-04-27  626  
34a928cf49a7ef Jack Wang 2020-04-27  627  		err = sg_alloc_table(sgt, chunks_per_mr, GFP_KERNEL);
34a928cf49a7ef Jack Wang 2020-04-27  628  		if (err)
34a928cf49a7ef Jack Wang 2020-04-27  629  			goto err;
34a928cf49a7ef Jack Wang 2020-04-27  630  
34a928cf49a7ef Jack Wang 2020-04-27  631  		for_each_sg(sgt->sgl, s, chunks_per_mr, i)
34a928cf49a7ef Jack Wang 2020-04-27  632  			sg_set_page(s, srv->chunks[chunks + i],
34a928cf49a7ef Jack Wang 2020-04-27  633  				    max_chunk_size, 0);
34a928cf49a7ef Jack Wang 2020-04-27  634  
34a928cf49a7ef Jack Wang 2020-04-27  635  		nr = ib_dma_map_sg(sess->s.dev->ib_dev, sgt->sgl,
34a928cf49a7ef Jack Wang 2020-04-27  636  				   sgt->nents, DMA_BIDIRECTIONAL);
34a928cf49a7ef Jack Wang 2020-04-27  637  		if (nr < sgt->nents) {
34a928cf49a7ef Jack Wang 2020-04-27  638  			err = nr < 0 ? nr : -EINVAL;
34a928cf49a7ef Jack Wang 2020-04-27  639  			goto free_sg;
34a928cf49a7ef Jack Wang 2020-04-27  640  		}
34a928cf49a7ef Jack Wang 2020-04-27  641  		mr = ib_alloc_mr(sess->s.dev->ib_pd, IB_MR_TYPE_MEM_REG,
34a928cf49a7ef Jack Wang 2020-04-27  642  				 sgt->nents);
34a928cf49a7ef Jack Wang 2020-04-27  643  		if (IS_ERR(mr)) {
34a928cf49a7ef Jack Wang 2020-04-27  644  			err = PTR_ERR(mr);
34a928cf49a7ef Jack Wang 2020-04-27  645  			goto unmap_sg;
34a928cf49a7ef Jack Wang 2020-04-27  646  		}
34a928cf49a7ef Jack Wang 2020-04-27  647  		nr = ib_map_mr_sg(mr, sgt->sgl, sgt->nents,
34a928cf49a7ef Jack Wang 2020-04-27  648  				  NULL, max_chunk_size);
34a928cf49a7ef Jack Wang 2020-04-27  649  		if (nr < sgt->nents) {
34a928cf49a7ef Jack Wang 2020-04-27  650  			err = nr < 0 ? nr : -EINVAL;
34a928cf49a7ef Jack Wang 2020-04-27  651  			goto dereg_mr;
34a928cf49a7ef Jack Wang 2020-04-27  652  		}
34a928cf49a7ef Jack Wang 2020-04-27  653  
34a928cf49a7ef Jack Wang 2020-04-27  654  		if (always_invalidate) {
34a928cf49a7ef Jack Wang 2020-04-27  655  			srv_mr->iu = rtrs_iu_alloc(1, sizeof(*rsp), GFP_KERNEL,
34a928cf49a7ef Jack Wang 2020-04-27  656  						    sess->s.dev->ib_dev,
34a928cf49a7ef Jack Wang 2020-04-27  657  						    DMA_TO_DEVICE,
34a928cf49a7ef Jack Wang 2020-04-27  658  						    rtrs_srv_rdma_done);
34a928cf49a7ef Jack Wang 2020-04-27  659  			if (!srv_mr->iu) {
34a928cf49a7ef Jack Wang 2020-04-27  660  				rtrs_err(ss, "rtrs_iu_alloc(), err: %d\n",
34a928cf49a7ef Jack Wang 2020-04-27  661  					  -ENOMEM);
34a928cf49a7ef Jack Wang 2020-04-27  662  				goto free_iu;
34a928cf49a7ef Jack Wang 2020-04-27  663  			}
34a928cf49a7ef Jack Wang 2020-04-27  664  		}
34a928cf49a7ef Jack Wang 2020-04-27  665  		/* Eventually dma addr for each chunk can be cached */
34a928cf49a7ef Jack Wang 2020-04-27  666  		for_each_sg(sgt->sgl, s, sgt->orig_nents, i)
34a928cf49a7ef Jack Wang 2020-04-27  667  			sess->dma_addr[chunks + i] = sg_dma_address(s);
34a928cf49a7ef Jack Wang 2020-04-27  668  
34a928cf49a7ef Jack Wang 2020-04-27  669  		ib_update_fast_reg_key(mr, ib_inc_rkey(mr->rkey));
34a928cf49a7ef Jack Wang 2020-04-27  670  		srv_mr->mr = mr;
34a928cf49a7ef Jack Wang 2020-04-27  671  
34a928cf49a7ef Jack Wang 2020-04-27  672  		continue;
34a928cf49a7ef Jack Wang 2020-04-27  673  err:
34a928cf49a7ef Jack Wang 2020-04-27  674  		while (mri--) {
34a928cf49a7ef Jack Wang 2020-04-27  675  			srv_mr = &sess->mrs[mri];
34a928cf49a7ef Jack Wang 2020-04-27  676  			sgt = &srv_mr->sgt;
34a928cf49a7ef Jack Wang 2020-04-27  677  			mr = srv_mr->mr;
34a928cf49a7ef Jack Wang 2020-04-27  678  free_iu:
34a928cf49a7ef Jack Wang 2020-04-27  679  			rtrs_iu_free(srv_mr->iu, DMA_TO_DEVICE,
34a928cf49a7ef Jack Wang 2020-04-27  680  				      sess->s.dev->ib_dev, 1);
34a928cf49a7ef Jack Wang 2020-04-27  681  dereg_mr:
34a928cf49a7ef Jack Wang 2020-04-27  682  			ib_dereg_mr(mr);
34a928cf49a7ef Jack Wang 2020-04-27  683  unmap_sg:
34a928cf49a7ef Jack Wang 2020-04-27  684  			ib_dma_unmap_sg(sess->s.dev->ib_dev, sgt->sgl,
34a928cf49a7ef Jack Wang 2020-04-27  685  					sgt->nents, DMA_BIDIRECTIONAL);
34a928cf49a7ef Jack Wang 2020-04-27  686  free_sg:
34a928cf49a7ef Jack Wang 2020-04-27  687  			sg_free_table(sgt);
34a928cf49a7ef Jack Wang 2020-04-27  688  		}
34a928cf49a7ef Jack Wang 2020-04-27  689  		kfree(sess->mrs);
34a928cf49a7ef Jack Wang 2020-04-27  690  
34a928cf49a7ef Jack Wang 2020-04-27  691  		return err;
34a928cf49a7ef Jack Wang 2020-04-27  692  	}
34a928cf49a7ef Jack Wang 2020-04-27  693  
34a928cf49a7ef Jack Wang 2020-04-27  694  	chunk_bits = ilog2(srv->queue_depth - 1) + 1;
34a928cf49a7ef Jack Wang 2020-04-27  695  	sess->mem_bits = (MAX_IMM_PAYL_BITS - chunk_bits);
34a928cf49a7ef Jack Wang 2020-04-27  696  
34a928cf49a7ef Jack Wang 2020-04-27  697  	return 0;
34a928cf49a7ef Jack Wang 2020-04-27  698  }
34a928cf49a7ef Jack Wang 2020-04-27  699  

:::::: The code at line 508 was first introduced by commit
:::::: 34a928cf49a7ef7ae5027dfa9c2570ef9c5dd97e RDMA/rtrs: server: main functionality

:::::: TO: Jack Wang <jinpu.wang@xxxxxxxxxxxxxxx>
:::::: CC: 0day robot <lkp@xxxxxxxxx>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux