Re: [PATCH V3 1/5] RDMA/core: Transport-independent access flags

Jason Gunthorpe
2015-07-14T16:22:17Z

On Tue, Jul 14, 2015 at 08:36:19AM -0700, 'Christoph Hellwig' wrote:
> Oh, I had missed that PHYS_MR might sleep. That might be the reasons
> why everyone is avoiding them despite Tom preferring them over FMR.

Yep, almost certainly.

But even that is just a legacy of the bad API.

Even Sagi's API idea can accommodate this with enough driver effort,
but only if posting is combined:

- alloc_mr: Just set aside any memory the driver needs for PHYS_MR
- set_sg_list_and_post:
+ This would issue the PHYS_MR call to the NIC, but not
sleep. It would adjust the SQ so that the tail pointer is blocked
and the NIC doesn't see any more posts. Effectively, the SQ
stalls. This way the ULP can post more stuff and ordering is preserved.
+ It would then setup a callback for PHYS_MR NIC completion and
return, having never slept.
+ The callback will unblock the SQ

Yes, this is complicated, but it shows how combing MR setup and post
together lets us do a lot more.

Sadly, we could probably never do this for older drivers due to them
being unmaintained, but it is certainly possible the core could
provide an older driver wrapper that emulates the above with less
efficiency using threads/queues/etc.

Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in