On Jul 22, 2015, at 11:41 AM, Sagi Grimberg <[email protected]> wrote:
>
>>> + for (i = 0; i < nsegs;) {
>>> + sg_set_page(&frmr->sg[i], seg->mr_page,
>>> + seg->mr_len, offset_in_page(seg->mr_offset));
>>
>> Cautionary note: here we’re dealing with both the “contiguous
>> set of pages” case and the “small region of bytes in a single page”
>> case. See rpcrdma_convert_iovs(): sometimes RPC send or receive
>> buffers can be registered (RDMA_NOMSG).
>
> I noticed that (I think). I think this is handled correctly.
> What exactly is the caution note here?
Well the sg is turned into a page list below your API. Just
want to make sure that we have tested your xprtrdma alterations
with all the ULP possibilities. When you are further along I
can pull this and run my functional tests.
>>> mr = frmr->fr_mr;
>>> + access = writing ? IB_ACCESS_REMOTE_WRITE | IB_ACCESS_LOCAL_WRITE :
>>> + IB_ACCESS_REMOTE_READ;
>>> + rc = ib_map_mr_sg(mr, frmr->sg, frmr->sg_nents, access);
>>
>> I like this (and the matching ib_dma_unmap_sg). But why wouldn’t
>> this function be called ib_dma_map_sg() ? The name ib_map_mr_sg()
>> had me thinking for a moment that this API actually posted the
>> FASTREG WR, but I see that it doesn’t.
>
> Umm, ib_dma_map_sg is already taken :)
>
> This is what I came up with, it maps the SG elements to the MR
> private context.
>
> I'd like to keep the post API for now. It will be possible to
> to add a wrapper function that would do:
> - dma_map_sg
> - ib_map_mr_sg
> - init fastreg send_wr
> - post_send (maybe)
Where xprtrdma might improve is by setting up all the FASTREG
WRs for one RPC with a single chain and post_send. We could do
that with your INDIR_MR concept, for example.
>>> - while (seg1->mr_nsegs--)
>>> - rpcrdma_unmap_one(ia->ri_device, seg++);
>>> + ib_dma_unmap_sg(ia->ri_device, frmr->sg, frmr->sg_nents, seg1->mr_dir);
>>
>> ->mr_dir was previously set by rpcrdma_map_one(), which you’ve replaced
>> with ib_map_mr_sg(). So maybe frwr_op_map() needs to save “direction”
>> in the rpcrdma_frmr.
>
> Yep, that's correct, if I had turned on dma mapping debug it would shout
> at me here...
>
> Note, I added in the git repo a patch to allow arbitrary sg lists in
> frwr_op_map() which would allow you to skip the holes check... seems to
> work with mlx5...
>
> I did noticed the mlx4 gives a protection error with after the conversion...
> I'll look into that...
Should also get Steve and Devesh to try this with their adapters.
--
Chuck Lever
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html