From: Bart Van Assche <bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
To: Jason Gunthorpe
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Cc: "linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH 4/8] IB/srp: Remove the memory registration backtracking code
Date: Mon, 10 Aug 2015 17:07:46 -0700 [thread overview]
Message-ID: <55C93CD2.8050704@sandisk.com> (raw)
In-Reply-To: <55C93C61.9010508-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
Mapping a discontiguous sg-list requires multiple memory regions
and hence can exhaust the memory region pool. The SRP initiator
already handles this by temporarily reducing the queue depth. This
means that it is safe to remove the memory registration backtracking
code. This patch has been tested with direct I/O sizes up to 256 MB.
Signed-off-by: Bart Van Assche <bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
---
drivers/infiniband/ulp/srp/ib_srp.c | 62 ++++++++-----------------------------
drivers/infiniband/ulp/srp/ib_srp.h | 6 ----
2 files changed, 13 insertions(+), 55 deletions(-)
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index f9fa220..660a4a4 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -1364,15 +1364,6 @@ static int srp_finish_mapping(struct srp_map_state *state,
return ret;
}
-static void srp_map_update_start(struct srp_map_state *state,
- struct scatterlist *sg, int sg_index,
- dma_addr_t dma_addr)
-{
- state->unmapped_sg = sg;
- state->unmapped_index = sg_index;
- state->unmapped_addr = dma_addr;
-}
-
static int srp_map_sg_entry(struct srp_map_state *state,
struct srp_rdma_ch *ch,
struct scatterlist *sg, int sg_index,
@@ -1399,23 +1390,12 @@ static int srp_map_sg_entry(struct srp_map_state *state,
return 0;
}
- /*
- * If this is the first sg that will be mapped via FMR or via FR, save
- * our position. We need to know the first unmapped entry, its index,
- * and the first unmapped address within that entry to be able to
- * restart mapping after an error.
- */
- if (!state->unmapped_sg)
- srp_map_update_start(state, sg, sg_index, dma_addr);
-
while (dma_len) {
unsigned offset = dma_addr & ~dev->mr_page_mask;
if (state->npages == dev->max_pages_per_mr || offset != 0) {
ret = srp_finish_mapping(state, ch);
if (ret)
return ret;
-
- srp_map_update_start(state, sg, sg_index, dma_addr);
}
len = min_t(unsigned int, dma_len, dev->mr_page_size - offset);
@@ -1434,11 +1414,8 @@ static int srp_map_sg_entry(struct srp_map_state *state,
* boundaries.
*/
ret = 0;
- if (len != dev->mr_page_size) {
+ if (len != dev->mr_page_size)
ret = srp_finish_mapping(state, ch);
- if (!ret)
- srp_map_update_start(state, NULL, 0, 0);
- }
return ret;
}
@@ -1448,9 +1425,8 @@ static int srp_map_sg(struct srp_map_state *state, struct srp_rdma_ch *ch,
{
struct srp_target_port *target = ch->target;
struct srp_device *dev = target->srp_host->srp_dev;
- struct ib_device *ibdev = dev->dev;
struct scatterlist *sg;
- int i;
+ int i, ret;
bool use_mr;
state->desc = req->indirect_desc;
@@ -1466,34 +1442,22 @@ static int srp_map_sg(struct srp_map_state *state, struct srp_rdma_ch *ch,
}
for_each_sg(scat, sg, count, i) {
- if (srp_map_sg_entry(state, ch, sg, i, use_mr)) {
- /*
- * Memory registration failed, so backtrack to the
- * first unmapped entry and continue on without using
- * memory registration.
- */
- dma_addr_t dma_addr;
- unsigned int dma_len;
-
-backtrack:
- sg = state->unmapped_sg;
- i = state->unmapped_index;
-
- dma_addr = ib_sg_dma_address(ibdev, sg);
- dma_len = ib_sg_dma_len(ibdev, sg);
- dma_len -= (state->unmapped_addr - dma_addr);
- dma_addr = state->unmapped_addr;
- use_mr = false;
- srp_map_desc(state, dma_addr, dma_len, target->rkey);
- }
+ ret = srp_map_sg_entry(state, ch, sg, i, use_mr);
+ if (ret)
+ goto out;
}
- if (use_mr && srp_finish_mapping(state, ch))
- goto backtrack;
+ if (use_mr) {
+ ret = srp_finish_mapping(state, ch);
+ if (ret)
+ goto out;
+ }
req->nmdesc = state->nmdesc;
+ ret = 0;
- return 0;
+out:
+ return ret;
}
static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_rdma_ch *ch,
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h
index 2ab73bc..1e42418 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.h
+++ b/drivers/infiniband/ulp/srp/ib_srp.h
@@ -276,9 +276,6 @@ struct srp_fr_pool {
* @npages: Number of page addresses in the pages[] array.
* @nmdesc: Number of FMR or FR memory descriptors used for mapping.
* @ndesc: Number of SRP buffer descriptors that have been filled in.
- * @unmapped_sg: First element of the sg-list that is mapped via FMR or FR.
- * @unmapped_index: Index of the first element mapped via FMR or FR.
- * @unmapped_addr: DMA address of the first element mapped via FMR or FR.
*/
struct srp_map_state {
union {
@@ -299,9 +296,6 @@ struct srp_map_state {
unsigned int npages;
unsigned int nmdesc;
unsigned int ndesc;
- struct scatterlist *unmapped_sg;
- int unmapped_index;
- dma_addr_t unmapped_addr;
};
#endif /* IB_SRP_H */
--
2.1.4
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-08-11 0:07 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-30 23:22 [PATCH v2 00/12] IB: Replace safe uses for ib_get_dma_mr with pd->local_dma_lkey Jason Gunthorpe
2015-07-30 23:22 ` [PATCH v2 02/12] IB/mad: Remove ib_get_dma_mr calls Jason Gunthorpe
2015-07-30 23:22 ` [PATCH v2 04/12] IB/mlx4: " Jason Gunthorpe
2015-07-30 23:22 ` [PATCH v2 05/12] IB/mlx5: " Jason Gunthorpe
2015-07-30 23:22 ` [PATCH v2 06/12] IB/iser: Use pd->local_dma_lkey Jason Gunthorpe
2015-07-30 23:22 ` [PATCH v2 07/12] iser-target: Remove ib_get_dma_mr calls Jason Gunthorpe
[not found] ` <1438298547-21404-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-07-30 23:22 ` [PATCH v2 01/12] IB/core: Guarantee that a local_dma_lkey is available Jason Gunthorpe
2015-08-02 13:09 ` Haggai Eran
2015-08-04 3:21 ` Jason Gunthorpe
2015-07-30 23:22 ` [PATCH v2 03/12] IB/ipoib: Remove ib_get_dma_mr calls Jason Gunthorpe
2015-07-30 23:22 ` [PATCH v2 08/12] IB/srp: Use pd->local_dma_lkey Jason Gunthorpe
2015-07-31 23:05 ` Bart Van Assche
2015-07-30 23:22 ` [PATCH v2 12/12] rds/ib: Remove ib_get_dma_mr calls Jason Gunthorpe
2015-08-14 2:47 ` santosh shilimkar
2015-07-30 23:22 ` [PATCH v2 09/12] IB/srp: Do not create an all physical insecure rkey by default Jason Gunthorpe
2015-08-03 15:39 ` Christoph Hellwig
2015-08-03 17:18 ` Bart Van Assche
2015-07-30 23:22 ` [PATCH v2 10/12] ib_srpt: Remove ib_get_dma_mr calls Jason Gunthorpe
2015-07-30 23:22 ` [PATCH v2 11/12] net/9p: " Jason Gunthorpe
2015-07-31 7:42 ` [PATCH v2 00/12] IB: Replace safe uses for ib_get_dma_mr with pd->local_dma_lkey Christoph Hellwig
2015-07-31 13:26 ` Steve Wise
2015-07-31 22:20 ` Bart Van Assche
[not found] ` <55BBF4B8.2050700-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-07-31 22:31 ` Jason Gunthorpe
[not found] ` <20150731223153.GA1518-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-07-31 23:04 ` Bart Van Assche
[not found] ` <55BBFF03.7000505-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-07-31 23:14 ` Jason Gunthorpe
[not found] ` <20150731231430.GA1955-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-07-31 23:32 ` Bart Van Assche
2015-08-01 20:05 ` Doug Ledford
[not found] ` <55BD2689.3080602-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-08-11 20:50 ` Bart Van Assche
[not found] ` <55CA600B.1050706-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-14 13:36 ` Doug Ledford
[not found] ` <55CDEEFA.4010803-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-08-14 16:20 ` Bart Van Assche
[not found] ` <55CE1554.60001-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-15 2:08 ` Doug Ledford
2015-08-03 15:24 ` Christoph Hellwig
[not found] ` <20150803152420.GA24193-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2015-08-03 18:33 ` Bart Van Assche
[not found] ` <55BFB40F.8000500-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-04 18:09 ` Jason Gunthorpe
[not found] ` <20150804180933.GB5038-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-08-05 6:41 ` David Dillow
[not found] ` <1438756876.5698.2.camel-a7a0dvSY7KqLUyTwlgNVppKKF0rrzTr+@public.gmane.org>
2015-08-05 19:51 ` Jason Gunthorpe
[not found] ` <20150805195122.GA31595-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-08-05 21:45 ` Bart Van Assche
[not found] ` <55C2840C.5050301-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-05 22:41 ` Bart Van Assche
[not found] ` <55C2912A.50709-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-06 0:10 ` Jason Gunthorpe
[not found] ` <20150806001006.GD2483-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-08-06 0:19 ` Bart Van Assche
[not found] ` <55C2A7FE.7020904-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-06 4:36 ` Jason Gunthorpe
[not found] ` <20150806043642.GA14153-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-08-06 15:09 ` Bart Van Assche
2015-08-11 0:05 ` [PATCH 0/9] IB/srp: Do not create an all physical insecure rkey by default Bart Van Assche
[not found] ` <55C93C61.9010508-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-11 0:06 ` [PATCH 1/8] IB/srp: Re-enable FMR for non-page aligned buffers Bart Van Assche
[not found] ` <55C93C85.6090003-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-16 10:53 ` Sagi Grimberg
[not found] ` <55D06BB3.7070905-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2015-08-16 15:49 ` Bart Van Assche
2015-08-11 0:06 ` [PATCH 2/8] IB/srp: Use multiple registrations for large memory regions Bart Van Assche
2015-08-11 0:07 ` [PATCH 3/8] IB/srp: Add memory descriptor array pointer range checking Bart Van Assche
[not found] ` <55C93CBF.1060606-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-16 10:57 ` Sagi Grimberg
[not found] ` <55D06C9D.7030608-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2015-08-16 15:51 ` Bart Van Assche
2015-08-11 0:07 ` Bart Van Assche [this message]
2015-08-11 0:08 ` [PATCH 5/8] IB/srp: Remove use_mr argument from srp_map_sg_entry() Bart Van Assche
2015-08-11 0:08 ` [PATCH 6/8] IB/srp: Introduce srp_device.use_fmr Bart Van Assche
[not found] ` <55C93D0C.7060000-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-16 11:03 ` Sagi Grimberg
[not found] ` <55D06E05.5060209-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2015-08-16 15:57 ` Bart Van Assche
2015-08-11 0:09 ` [PATCH 7/8] IB/srp: Register the indirect data buffer descriptor Bart Van Assche
[not found] ` <55C93D21.1090102-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2015-08-16 11:09 ` Sagi Grimberg
[not found] ` <55D06F56.4060005-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2015-08-16 16:56 ` Bart Van Assche
2015-08-11 0:09 ` [PATCH 8/8] IB/srp: Create an insecure all physical rkey only if needed Bart Van Assche
2015-08-11 5:40 ` [PATCH 0/9] IB/srp: Do not create an all physical insecure rkey by default Jason Gunthorpe
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=55C93CD2.8050704@sandisk.com \
--to=bart.vanassche-xdaiopvojttbdgjk7y7tuq@public.gmane.org \
--cc=jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).