All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Steve Wise" <swise@opengridcomputing.com>
To: 'Sagi Grimberg' <sagig@mellanox.com>, linux-rdma@vger.kernel.org
Cc: 'Or Gerlitz' <ogerlitz@mellanox.com>,
	'Roi Dayan' <roid@mellanox.com>,
	'target-devel' <target-devel@vger.kernel.org>
Subject: RE: [PATCH RFC 2/2] RDMA/isert: Support iWARP transport
Date: Thu, 25 Jun 2015 12:06:50 -0500	[thread overview]
Message-ID: <005401d0af69$53f5a9e0$fbe0fda0$@opengridcomputing.com> (raw)
In-Reply-To: <558C317E.4010402@mellanox.com>



> -----Original Message-----
> From: linux-rdma-owner@vger.kernel.org [mailto:linux-rdma-owner@vger.kernel.org] On Behalf Of Sagi Grimberg
> Sent: Thursday, June 25, 2015 11:51 AM
> To: Steve Wise; linux-rdma@vger.kernel.org
> Cc: Or Gerlitz; Roi Dayan; target-devel
> Subject: Re: [PATCH RFC 2/2] RDMA/isert: Support iWARP transport
> 
> On 6/25/2015 6:39 PM, Steve Wise wrote:
> > Memory regions that are the target of an iWARP RDMA READ RESPONSE need
> > REMOTE_WRITE access rights.  So enable REMOTE_WRITE for iWARP devices.
> >
> > iWARP RDMA READ target sge depth is 1.  So save the max_read_sge in
> > the target device structure and use that when creating RDMA_READ work
> > requests.
> 
> Hi Steve,
> 
> CC'ing target-devel...
> 
> >
> > Signed-off-by: Steve Wise <swise@opengridcomputing.com>
> > Tested-by: Vasu Dev <vasu.dev@intel.com>
> > ---
> >   drivers/infiniband/ulp/isert/ib_isert.c |   55 ++++++++++++++++++++++++++-----
> >   drivers/infiniband/ulp/isert/ib_isert.h |    1 +
> >   2 files changed, 48 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
> > index 9e7b492..b5cde5d 100644
> > --- a/drivers/infiniband/ulp/isert/ib_isert.c
> > +++ b/drivers/infiniband/ulp/isert/ib_isert.c
> > @@ -165,6 +165,11 @@ isert_create_qp(struct isert_conn *isert_conn,
> >   	attr.cap.max_send_sge = max(2, device->dev_attr.max_sge - 2);
> >   	isert_conn->max_sge = attr.cap.max_send_sge;
> >
> > +	if (rdma_cap_read_multi_sge(device->ib_device, cma_id->port_num))
> > +		isert_conn->max_read_sge = isert_conn->max_sge;
> > +	else
> > +		isert_conn->max_read_sge = 1;
> > +
> 
> I think it would make sense to change now max_sge to max_write_sge.
> 

Ok.

> And, shouldn't we just use:
> max_wr_sge = max(2, device->dev_attr.max_sge - 2);
> max_rd_sge = device->dev_attr.max_sge_rd;
> 
> Does the Chelsio device reports max_sge_rd != 1 ?
> 

Yes, but I wasn't sure max_sge_rd is really the read target max sge.  I don't see it being set by the mlx* drivers.  Also since we have the new rdma_cap_read_multi_sge() helper, I thought I should use it. :)

> 
> >   	attr.cap.max_recv_sge = 1;
> >   	attr.sq_sig_type = IB_SIGNAL_REQ_WR;
> >   	attr.qp_type = IB_QPT_RC;
> > @@ -348,6 +353,17 @@ out_cq:
> >   	return ret;
> >   }
> >
> > +static int any_port_is_iwarp(struct isert_device *device)
> > +{
> > +	int i;
> > +
> > +	for (i = rdma_start_port(device->ib_device);
> > +	     i <= rdma_end_port(device->ib_device); i++)
> > +		if (rdma_protocol_iwarp(device->ib_device, i))
> > +			return 1;
> > +	return 0;
> > +}
> > +
> 
> This does not look like it belongs here... Can we
> place this in rdma_cm?
>

Ok...that makes sense.
 
> >   static int
> >   isert_create_device_ib_res(struct isert_device *device)
> >   {
> > @@ -383,7 +399,17 @@ isert_create_device_ib_res(struct isert_device *device)
> >   		goto out_cq;
> >   	}
> >
> > -	device->mr = ib_get_dma_mr(device->pd, IB_ACCESS_LOCAL_WRITE);
> > +	/*
> > +	 * IWARP transports need REMOTE_WRITE for MRs used as the target of
> > +	 * an RDMA_READ.  Since the DMA MR is used for all ports, then if
> > +	 * any port is running IWARP, add REMOTE_WRITE.
> > +	 */
> > +	if (any_port_is_iwarp(device))
> > +		device->mr = ib_get_dma_mr(device->pd, IB_ACCESS_LOCAL_WRITE |
> > +						       IB_ACCESS_REMOTE_WRITE);
> > +	else
> > +		device->mr = ib_get_dma_mr(device->pd, IB_ACCESS_LOCAL_WRITE);
> > +
> >   	if (IS_ERR(device->mr)) {
> >   		ret = PTR_ERR(device->mr);
> >   		isert_err("failed to create dma mr, device %p, ret=%d\n",
> > @@ -2375,7 +2401,7 @@ isert_put_text_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn)
> >   static int
> >   isert_build_rdma_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd,
> >   		    struct ib_sge *ib_sge, struct ib_send_wr *send_wr,
> > -		    u32 data_left, u32 offset)
> > +		    u32 data_left, u32 offset, u32 max_sge)
> >   {
> >   	struct iscsi_cmd *cmd = isert_cmd->iscsi_cmd;
> >   	struct scatterlist *sg_start, *tmp_sg;
> > @@ -2386,7 +2412,7 @@ isert_build_rdma_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd,
> >
> >   	sg_off = offset / PAGE_SIZE;
> >   	sg_start = &cmd->se_cmd.t_data_sg[sg_off];
> > -	sg_nents = min(cmd->se_cmd.t_data_nents - sg_off, isert_conn->max_sge);
> > +	sg_nents = min(cmd->se_cmd.t_data_nents - sg_off, max_sge);
> >   	page_off = offset % PAGE_SIZE;
> >
> >   	send_wr->sg_list = ib_sge;
> > @@ -2430,8 +2456,9 @@ isert_map_rdma(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
> >   	struct isert_data_buf *data = &wr->data;
> >   	struct ib_send_wr *send_wr;
> >   	struct ib_sge *ib_sge;
> > -	u32 offset, data_len, data_left, rdma_write_max, va_offset = 0;
> > +	u32 offset, data_len, data_left, rdma_max_len, va_offset = 0;
> >   	int ret = 0, i, ib_sge_cnt;
> > +	u32 max_sge;
> >
> >   	isert_cmd->tx_desc.isert_cmd = isert_cmd;
> >
> > @@ -2453,7 +2480,12 @@ isert_map_rdma(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
> >   	}
> >   	wr->ib_sge = ib_sge;
> >
> > -	wr->send_wr_num = DIV_ROUND_UP(data->nents, isert_conn->max_sge);
> > +	if (wr->iser_ib_op == ISER_IB_RDMA_WRITE)
> > +		max_sge = isert_conn->max_sge;
> > +	else
> > +		max_sge =  isert_conn->max_read_sge;
> > +
> > +	wr->send_wr_num = DIV_ROUND_UP(data->nents, max_sge);
> >   	wr->send_wr = kzalloc(sizeof(struct ib_send_wr) * wr->send_wr_num,
> >   				GFP_KERNEL);
> >   	if (!wr->send_wr) {
> > @@ -2463,11 +2495,11 @@ isert_map_rdma(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
> >   	}
> >
> >   	wr->isert_cmd = isert_cmd;
> > -	rdma_write_max = isert_conn->max_sge * PAGE_SIZE;
> >
> > +	rdma_max_len = max_sge * PAGE_SIZE;
> >   	for (i = 0; i < wr->send_wr_num; i++) {
> >   		send_wr = &isert_cmd->rdma_wr.send_wr[i];
> > -		data_len = min(data_left, rdma_write_max);
> > +		data_len = min(data_left, rdma_max_len);
> >
> >   		send_wr->send_flags = 0;
> >   		if (wr->iser_ib_op == ISER_IB_RDMA_WRITE) {
> > @@ -2489,7 +2521,7 @@ isert_map_rdma(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
> >   		}
> >
> >   		ib_sge_cnt = isert_build_rdma_wr(isert_conn, isert_cmd, ib_sge,
> > -					send_wr, data_len, offset);
> > +					send_wr, data_len, offset, max_sge);
> >   		ib_sge += ib_sge_cnt;
> >
> >   		offset += data_len;
> > @@ -2618,6 +2650,13 @@ isert_fast_reg_mr(struct isert_conn *isert_conn,
> >   	fr_wr.wr.fast_reg.rkey = mr->rkey;
> >   	fr_wr.wr.fast_reg.access_flags = IB_ACCESS_LOCAL_WRITE;
> >
> > +	/*
> > +	 * IWARP transports need REMOTE_WRITE for MRs used as the target of
> > +	 * an RDMA_READ.
> > +	 */
> > +	if (rdma_protocol_iwarp(ib_dev, isert_conn->cm_id->port_num))
> > +		fr_wr.wr.fast_reg.access_flags |= IB_ACCESS_REMOTE_WRITE;
> > +
> >   	if (!wr)
> >   		wr = &fr_wr;
> >   	else
> > diff --git a/drivers/infiniband/ulp/isert/ib_isert.h b/drivers/infiniband/ulp/isert/ib_isert.h
> > index 9ec23a7..47cf11b 100644
> > --- a/drivers/infiniband/ulp/isert/ib_isert.h
> > +++ b/drivers/infiniband/ulp/isert/ib_isert.h
> > @@ -153,6 +153,7 @@ struct isert_conn {
> >   	u32			initiator_depth;
> >   	bool			pi_support;
> >   	u32			max_sge;
> > +	u32			max_read_sge;
> >   	char			*login_buf;
> >   	char			*login_req_buf;
> >   	char			*login_rsp_buf;
> >
> 

  reply	other threads:[~2015-06-25 17:06 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-25 15:39 [PATCH RFC 0/2] iSER support for iWARP Steve Wise
     [not found] ` <20150625153754.13272.432.stgit-T4OLL4TyM9aNDNWfRnPdfg@public.gmane.org>
2015-06-25 15:39   ` [PATCH RFC 1/2] RDMA/iser: limit sg tablesize on device fastreg max depth Steve Wise
     [not found]     ` <20150625153917.13272.52513.stgit-T4OLL4TyM9aNDNWfRnPdfg@public.gmane.org>
2015-06-25 16:36       ` Sagi Grimberg
2015-06-25 15:39   ` [PATCH RFC 2/2] RDMA/isert: Support iWARP transport Steve Wise
     [not found]     ` <20150625153922.13272.41789.stgit-T4OLL4TyM9aNDNWfRnPdfg@public.gmane.org>
2015-06-25 16:51       ` Sagi Grimberg
2015-06-25 17:06         ` Steve Wise [this message]
2015-06-27  9:12           ` Sagi Grimberg
     [not found]             ` <558E68EB.9040205-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2015-06-29 17:46               ` Jason Gunthorpe
     [not found]         ` <558C317E.4010402-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-06-27  9:10           ` Sagi Grimberg
2015-06-25 18:25       ` Jason Gunthorpe
     [not found]         ` <20150625182505.GA15337-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-06-25 18:30           ` Hefty, Sean
     [not found]             ` <1828884A29C6694DAF28B7E6B8A82373A8FF9D60-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-06-25 18:33               ` Steve Wise
2015-06-25 18:45                 ` Hefty, Sean
     [not found]                   ` <1828884A29C6694DAF28B7E6B8A82373A8FF9D96-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-06-25 19:12                     ` Jason Gunthorpe
     [not found]                       ` <20150625191220.GA15726-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-06-25 19:20                         ` Hefty, Sean
     [not found]                           ` <1828884A29C6694DAF28B7E6B8A82373A8FF9DF9-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-06-25 19:25                             ` Steve Wise
2015-06-25 19:29                               ` Jason Gunthorpe
     [not found]                                 ` <20150625192934.GB15726-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-06-25 19:44                                   ` Steve Wise
2015-06-27  9:33                                   ` Sagi Grimberg
2015-06-25 19:59                         ` Steve Wise
2015-06-25 18:32           ` Steve Wise
2015-06-25 16:58   ` [PATCH RFC 0/2] iSER support for iWARP Sagi Grimberg
2015-06-25 17:01     ` Steve Wise

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='005401d0af69$53f5a9e0$fbe0fda0$@opengridcomputing.com' \
    --to=swise@opengridcomputing.com \
    --cc=linux-rdma@vger.kernel.org \
    --cc=ogerlitz@mellanox.com \
    --cc=roid@mellanox.com \
    --cc=sagig@mellanox.com \
    --cc=target-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.