Commit 3ae95da8 authored by Bart Van Assche's avatar Bart Van Assche Committed by Doug Ledford

IB/srp: Remove use_mr argument from srp_map_sg_entry()

Move the srp_map_desc() call from inside srp_map_sg_entry() to
srp_map_sg() such that the use_mr argument can be removed from
srp_map_sg_entry().
Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 0e0d3a48
...@@ -1260,6 +1260,8 @@ static void srp_map_desc(struct srp_map_state *state, dma_addr_t dma_addr, ...@@ -1260,6 +1260,8 @@ static void srp_map_desc(struct srp_map_state *state, dma_addr_t dma_addr,
{ {
struct srp_direct_buf *desc = state->desc; struct srp_direct_buf *desc = state->desc;
WARN_ON_ONCE(!dma_len);
desc->va = cpu_to_be64(dma_addr); desc->va = cpu_to_be64(dma_addr);
desc->key = cpu_to_be32(rkey); desc->key = cpu_to_be32(rkey);
desc->len = cpu_to_be32(dma_len); desc->len = cpu_to_be32(dma_len);
...@@ -1366,29 +1368,17 @@ static int srp_finish_mapping(struct srp_map_state *state, ...@@ -1366,29 +1368,17 @@ static int srp_finish_mapping(struct srp_map_state *state,
static int srp_map_sg_entry(struct srp_map_state *state, static int srp_map_sg_entry(struct srp_map_state *state,
struct srp_rdma_ch *ch, struct srp_rdma_ch *ch,
struct scatterlist *sg, int sg_index, struct scatterlist *sg, int sg_index)
bool use_mr)
{ {
struct srp_target_port *target = ch->target; struct srp_target_port *target = ch->target;
struct srp_device *dev = target->srp_host->srp_dev; struct srp_device *dev = target->srp_host->srp_dev;
struct ib_device *ibdev = dev->dev; struct ib_device *ibdev = dev->dev;
dma_addr_t dma_addr = ib_sg_dma_address(ibdev, sg); dma_addr_t dma_addr = ib_sg_dma_address(ibdev, sg);
unsigned int dma_len = ib_sg_dma_len(ibdev, sg); unsigned int dma_len = ib_sg_dma_len(ibdev, sg);
unsigned int len; unsigned int len = 0;
int ret; int ret;
if (!dma_len) WARN_ON_ONCE(!dma_len);
return 0;
if (!use_mr) {
/*
* Once we're in direct map mode for a request, we don't
* go back to FMR or FR mode, so no need to update anything
* other than the descriptor.
*/
srp_map_desc(state, dma_addr, dma_len, target->rkey);
return 0;
}
while (dma_len) { while (dma_len) {
unsigned offset = dma_addr & ~dev->mr_page_mask; unsigned offset = dma_addr & ~dev->mr_page_mask;
...@@ -1441,16 +1431,20 @@ static int srp_map_sg(struct srp_map_state *state, struct srp_rdma_ch *ch, ...@@ -1441,16 +1431,20 @@ static int srp_map_sg(struct srp_map_state *state, struct srp_rdma_ch *ch,
use_mr = !!ch->fmr_pool; use_mr = !!ch->fmr_pool;
} }
for_each_sg(scat, sg, count, i) {
ret = srp_map_sg_entry(state, ch, sg, i, use_mr);
if (ret)
goto out;
}
if (use_mr) { if (use_mr) {
for_each_sg(scat, sg, count, i) {
ret = srp_map_sg_entry(state, ch, sg, i);
if (ret)
goto out;
}
ret = srp_finish_mapping(state, ch); ret = srp_finish_mapping(state, ch);
if (ret) if (ret)
goto out; goto out;
} else {
for_each_sg(scat, sg, count, i) {
srp_map_desc(state, ib_sg_dma_address(dev->dev, sg),
ib_sg_dma_len(dev->dev, sg), target->rkey);
}
} }
req->nmdesc = state->nmdesc; req->nmdesc = state->nmdesc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment