mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
To: Tom Talpey <tom@talpey.com>
Cc: Michael Wang <yun.wang@profitbricks.com>,
	Roland Dreier <roland@kernel.org>,
	Sean Hefty <sean.hefty@intel.com>,
	linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-nfs@vger.kernel.org, netdev@vger.kernel.org,
	Hal Rosenstock <hal.rosenstock@gmail.com>,
	Tom Tucker <tom@opengridcomputing.com>,
	Steve Wise <swise@opengridcomputing.com>,
	Hoang-Nam Nguyen <hnguyen@de.ibm.com>,
	Christoph Raisch <raisch@de.ibm.com>,
	Mike Marciniszyn <infinipath@intel.com>,
	Eli Cohen <eli@mellanox.com>,
	Faisal Latif <faisal.latif@intel.com>,
	Upinder Malhi <umalhi@cisco.com>,
	Trond Myklebust <trond.myklebust@primarydata.com>,
	"J. Bruce Fields" <bfields@fieldses.org>,
	"David S. Miller" <davem@davemloft.net>,
	Ira Weiny <ira.weiny@intel.com>,
	PJ Waskiewicz <pj.waskiewicz@solidfire.com>,
	Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>,
	Or Gerlitz <ogerlitz@mellanox.com>,
	Jack Morgenstein <jackm@dev.mellanox.co.il>,
	Haggai Eran <haggaie@mellanox.com>,
	Ilya Nelkenbaum <ilyan@mellanox.com>,
	Yann Droneaud <ydroneaud@opteya.com>,
	Bart Van Assche <bvanassche@acm.org>,
	Shachar Raindel <raindel@mellanox.com>,
	Sagi Grimberg <sagig@mellanox.com>,
	Devesh Sharma <devesh.sharma@emulex.com>,
	Matan Barak <matanb@mellanox.com>,
	Moni Shoua <monis@mellanox.com>, Jiri Kosina <jkosina@suse.cz>,
	Selvin Xavier <selvin.xavier@emulex.com>,
	Mitesh Ahuja <mitesh.ahuja@emulex.com>,
	Li RongQing <roy.qing.li@gmail.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Alex Estrin <alex.estrin@intel.com>,
	Doug Ledford <dledford@redhat.com>,
	Eric Dumazet <edumazet@google.com>,
	Erez Shitrit <erezsh@mellanox.com>, Tom Gundersen <teg@jklm.no>,
	Chuck Lever <chuck.lever@oracle.com>
Subject: Re: [PATCH v2 09/17] IB/Verbs: Use helper cap_read_multi_sge() and reform svc_rdma_accept()
Date: Tue, 7 Apr 2015 11:42:23 -0600	[thread overview]
Message-ID: <20150407174223.GB15704@obsidianresearch.com> (raw)
In-Reply-To: <5523FBF1.80304@talpey.com>

On Tue, Apr 07, 2015 at 11:46:57AM -0400, Tom Talpey wrote:
> On 4/7/2015 8:34 AM, Michael Wang wrote:
> >  /**
> >+ * cap_read_multi_sge - Check if the port of device has the capability
> >+ * RDMA Read Multiple Scatter-Gather Entries.
> >+ *
> >+ * @device: Device to be checked
> >+ * @port_num: Port number of the device
> >+ *
> >+ * Return 0 when port of the device don't support
> >+ * RDMA Read Multiple Scatter-Gather Entries.
> >+ */
> >+static inline int cap_read_multi_sge(struct ib_device *device, u8 port_num)
> >+{
> >+	return !rdma_transport_iwarp(device, port_num);
> >+}
> 
> This just papers over the issue we discussed earlier. How *many*
> entries does the device support? If a device supports one, or two,
> is that enough? How does the upper layer know the limit?

I think Michael is fine to just make this one mechanical change.

The kernel only supports two kinds of devices today, ones with 1 read
SGE and ones where READ SGE == WRITE SGE == SEND SGE.

If someone makes another variation then it is up to them to propose a
better fix.


> >  static int rdma_read_max_sge(struct svcxprt_rdma *xprt, int sge_count)
> >  {
> >-	if (rdma_node_get_transport(xprt->sc_cm_id->device->node_type) ==
> >-	     RDMA_TRANSPORT_IWARP)
> >+	if (!cap_read_multi_sge(xprt->sc_cm_id->device,
> >+				xprt->sc_cm_id->port_num))
> >  		return 1;
> >  	else
> >  		return min_t(int, sge_count, xprt->sc_max_sge);
> 
> This is incorrect. The RDMA Read max is not at all the same as the
> max_sge. It is a different operation, with a different set of work
> request parameters.

The algorithm looks OK to me,

        newxprt->sc_max_sge = min((size_t)devattr.max_sge,
                                  (size_t)RPCSVC_MAXPAGES);

So it returns 1 or the number of sge entries per WR, and max_sge is
for READ/WRITE/SEND in every case except when cap_read_multi_sge == 1

> >  	/*
> >  	 * Determine if a DMA MR is required and if so, what privs are required
> >  	 */
> >-	switch (rdma_node_get_transport(newxprt->sc_cm_id->device->node_type)) {
> >-	case RDMA_TRANSPORT_IWARP:
> >+	if (rdma_transport_iwarp(newxprt->sc_cm_id->device,
> >+				 newxprt->sc_cm_id->port_num)) {
> >  		newxprt->sc_dev_caps |= SVCRDMA_DEVCAP_READ_W_INV;
> 
> Do I read this correctly that it is forcing the "read with invalidate"
> capability to "on" for all iWARP devices? I don't think that is correct,
> for the legacy devices you're also supporting.

No idea here, this logic was added in:

commit 3a5c63803d0552a3ad93b85c262f12cd86471443
Author: Tom Tucker <tom@opengridcomputing.com>
Date:   Tue Sep 30 13:46:13 2008 -0500

    svcrdma: Query device for Fast Reg support during connection setup
    
    Query the device capabilities in the svc_rdma_accept function to determine
    what advanced memory management capabilities are supported by the device.
    Based on the query, select the most secure model available given the
    requirements of the transport and capabilities of the adapter.
    
    Signed-off-by: Tom Tucker <tom@opengridcomputing.com>

> >@@ -992,8 +992,8 @@ static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
> >  			dma_mr_acc = IB_ACCESS_LOCAL_WRITE;
> >  		} else
> >  			need_dma_mr = 0;
> >-		break;
> >-	case RDMA_TRANSPORT_IB:
> >+	} else if (rdma_ib_mgmt(newxprt->sc_cm_id->device,
> >+				newxprt->sc_cm_id->port_num)) {
> >  		if (!(newxprt->sc_dev_caps & SVCRDMA_DEVCAP_FAST_REG)) {
> >  			need_dma_mr = 1;
> >  			dma_mr_acc = IB_ACCESS_LOCAL_WRITE;
> 
> Now I'm even more confused. How is the presence of IB management
> related to needing a privileged lmr?

Agree, this needs to be someone else. 

I think the test is probably based on this comment:

        * NB:  iWARP requires remote write access for the data sink
        *      of an RDMA_READ. IB does not.

So the if should be:

          if (cap_rdma_read_needs_write(..) && 
	  !(newxprt->sc_dev_caps & SVCRDMA_DEVCAP_FAST_REG)) {
                       need_dma_mr = 1;
                       dma_mr_acc =
                               (IB_ACCESS_LOCAL_WRITE |
                                IB_ACCESS_REMOTE_WRITE);

And the identical if blocks merged.

Plus the
	if (rdma_transport_iwarp(newxprt->sc_cm_id->device,
				 newxprt->sc_cm_id->port_num))
  		newxprt->sc_dev_caps |= SVCRDMA_DEVCAP_READ_W_INV

Jason

  parent reply	other threads:[~2015-04-07 17:42 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-07 12:25 [PATCH v2 00/17] IB/Verbs: IB Management Helpers Michael Wang
2015-04-07 12:28 ` [PATCH 01/17] IB/Verbs: Implement new callback query_transport() for each HW Michael Wang
2015-04-07 12:44   ` Michael Wang
2015-04-07 12:29 ` [PATCH v2 02/17] IB/Verbs: Implement raw management helpers Michael Wang
2015-04-07 21:25   ` Hefty, Sean
2015-04-08  8:41     ` Michael Wang
2015-04-07 12:30 ` [PATCH v2 03/17] IB/Verbs: Use management helper cap_ib_mad() for mad-check Michael Wang
2015-04-07 17:26   ` Jason Gunthorpe
2015-04-08  8:13     ` Michael Wang
2015-04-07 12:31 ` [PATCH v2 04/17] IB/Verbs: Use management helper cap_ib_smi() for smi-check Michael Wang
2015-04-07 12:32 ` [PATCH v2 05/17] IB/Verbs: Use management helper cap_ib_cm() for cm-check Michael Wang
2015-04-07 12:32 ` [PATCH v2 06/17] IB/Verbs: Use management helper cap_ib_sa() for sa-check Michael Wang
2015-04-07 12:33 ` [PATCH v2 07/17] IB/Verbs: Use management helper cap_ib_mcast() for mcast-check Michael Wang
2015-04-07 12:34 ` [PATCH v2 08/17] IB/Verbs: Use management helper cap_ipoib() for ipoib-check Michael Wang
2015-04-07 12:34 ` [PATCH v2 09/17] IB/Verbs: Use helper cap_read_multi_sge() and reform svc_rdma_accept() Michael Wang
2015-04-07 15:46   ` Tom Talpey
2015-04-07 16:05     ` Michael Wang
2015-04-07 17:42     ` Jason Gunthorpe [this message]
2015-04-08  8:51       ` Michael Wang
2015-04-07 12:35 ` [PATCH v2 10/17] IB/Verbs: Adopt management helpers for IB helpers Michael Wang
2015-04-07 18:40   ` Hefty, Sean
2015-04-08  8:24     ` Michael Wang
2015-04-07 20:12   ` Jason Gunthorpe
2015-04-07 20:16     ` Steve Wise
2015-04-08  8:28       ` Michael Wang
2015-04-09  5:36       ` ira.weiny
2015-04-07 20:18     ` Hefty, Sean
2015-04-07 12:36 ` [PATCH v2 11/17] IB/Verbs: Reform link_layer_show() and ib_uverbs_query_port() Michael Wang
2015-04-07 18:49   ` Hefty, Sean
2015-04-07 18:56     ` Steve Wise
2015-04-08  8:29     ` Michael Wang
2015-04-07 12:36 ` [PATCH v2 12/17] IB/Verbs: Use management helper cap_ib_cm_dev() for cm-device-check Michael Wang
2015-04-07 12:37 ` [PATCH v2 13/17] IB/Verbs: Reform cma/ucma with management helpers Michael Wang
2015-04-07 21:11   ` Steve Wise
2015-04-08  8:39     ` Michael Wang
2015-04-07 21:36   ` Hefty, Sean
2015-04-08  9:37     ` Michael Wang
2015-04-08 17:02       ` Hefty, Sean
2015-04-09  8:05         ` Michael Wang
2015-04-07 12:38 ` [PATCH v2 14/17] IB/Verbs: Reserve legacy transport type for 'struct rdma_dev_addr' Michael Wang
2015-04-07 12:38 ` [PATCH v2 15/17] IB/Verbs: Reform cma_acquire_dev() with management helpers Michael Wang
2015-04-07 12:39 ` [PATCH v2 16/17] IB/Verbs: Cleanup rdma_node_get_transport() Michael Wang
2015-04-07 12:39 ` [PATCH v2 17/17] IB/Verbs: Move rdma_port_get_link_layer() to mlx4 head file Michael Wang
2015-04-07 12:42 ` [PATCH v2 01/17] IB/Verbs: Implement new callback query_transport() for each HW Michael Wang
2015-04-08 18:29   ` Doug Ledford
2015-04-08 18:41     ` Hefty, Sean
2015-04-08 19:35       ` Jason Gunthorpe
2015-04-08 20:10     ` Jason Gunthorpe
2015-04-08 20:55       ` Tom Talpey
2015-04-09  9:45       ` Michael Wang
2015-04-09 12:42       ` Michael Wang
2015-04-09 16:00         ` Jason Gunthorpe
2015-04-10  8:19           ` Michael Wang
2015-04-09 14:34       ` Doug Ledford
2015-04-09 16:01         ` Jason Gunthorpe
2015-04-09 21:19           ` Doug Ledford
2015-04-09 21:36             ` Jason Gunthorpe
2015-04-10  7:46             ` Michael Wang
2015-04-10 16:48               ` Doug Ledford
2015-04-10  6:16       ` ira.weiny
2015-04-10  8:25         ` Michael Wang
2015-04-10 14:56           ` ira.weiny
2015-04-10 16:15         ` Jason Gunthorpe
2015-04-10 17:38           ` ira.weiny
2015-04-10 17:49             ` Doug Ledford
2015-04-10 18:11               ` ira.weiny
2015-04-10 18:04             ` Jason Gunthorpe
2015-04-10 18:24               ` Doug Ledford
2015-04-10 19:17                 ` Jason Gunthorpe
2015-04-10 21:06                   ` ira.weiny
2015-04-11  0:01                     ` Tom Talpey
2015-04-10 20:38               ` ira.weiny
2015-04-09  9:34     ` Michael Wang
2015-04-10  7:48     ` ira.weiny
2015-04-10 17:10       ` Doug Ledford
2015-04-10 17:36         ` Jason Gunthorpe
2015-04-13  7:40           ` Michael Wang
2015-04-10 17:50         ` Tom Talpey
2015-04-10 18:17           ` Doug Ledford
2015-04-08 11:38 ` [PATCH v2 00/17] IB/Verbs: IB Management Helpers Tom Talpey
2015-04-08 12:41   ` Michael Wang
2015-04-08 15:51     ` Jason Gunthorpe
2015-04-08 16:05       ` Michael Wang

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=20150407174223.GB15704@obsidianresearch.com \
    --to=jgunthorpe@obsidianresearch.com \
    --cc=Tatyana.E.Nikolova@intel.com \
    --cc=alex.estrin@intel.com \
    --cc=bfields@fieldses.org \
    --cc=bvanassche@acm.org \
    --cc=chuck.lever@oracle.com \
    --cc=davem@davemloft.net \
    --cc=devesh.sharma@emulex.com \
    --cc=dledford@redhat.com \
    --cc=edumazet@google.com \
    --cc=eli@mellanox.com \
    --cc=erezsh@mellanox.com \
    --cc=faisal.latif@intel.com \
    --cc=haggaie@mellanox.com \
    --cc=hal.rosenstock@gmail.com \
    --cc=hnguyen@de.ibm.com \
    --cc=ilyan@mellanox.com \
    --cc=infinipath@intel.com \
    --cc=ira.weiny@intel.com \
    --cc=jackm@dev.mellanox.co.il \
    --cc=jkosina@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=matanb@mellanox.com \
    --cc=mitesh.ahuja@emulex.com \
    --cc=monis@mellanox.com \
    --cc=netdev@vger.kernel.org \
    --cc=ogerlitz@mellanox.com \
    --cc=pj.waskiewicz@solidfire.com \
    --cc=raindel@mellanox.com \
    --cc=raisch@de.ibm.com \
    --cc=roland@kernel.org \
    --cc=roy.qing.li@gmail.com \
    --cc=sagig@mellanox.com \
    --cc=sean.hefty@intel.com \
    --cc=selvin.xavier@emulex.com \
    --cc=swise@opengridcomputing.com \
    --cc=teg@jklm.no \
    --cc=tom@opengridcomputing.com \
    --cc=tom@talpey.com \
    --cc=trond.myklebust@primarydata.com \
    --cc=umalhi@cisco.com \
    --cc=ydroneaud@opteya.com \
    --cc=yun.wang@profitbricks.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®