[ofa-general] [PATCH RFC v4 1/2] RDMA/Core: MEM_MGT_EXTENSIONS support
Steve Wise
swise at opengridcomputing.com
Tue May 27 19:05:36 PDT 2008
> enum ib_send_flags {
> @@ -676,6 +683,19 @@ struct ib_send_wr {
> u16 pkey_index; /* valid for GSI only */
> u8 port_num; /* valid for DR SMPs on switch only */
> } ud;
> + struct {
> + u64 iova_start;
> + struct ib_mr *mr;
> + struct ib_fast_reg_page_list *page_list;
> + unsigned int page_shift;
> + unsigned int page_list_len;
> + unsigned int first_byte_offset;
> + u32 length;
> + int access_flags;
> + } fast_reg;
> + struct {
> + struct ib_mr *mr;
> + } local_inv;
> } wr;
> };
Ok, while writing a test case for all this jazz, I see that passing the
struct ib_mr pointer to both IB_WR_FAST_REGISTER_MR and
IB_WR_INVALIDATE_MR is perhaps bad. Consider a chain of WRs:
INVALIDATE_MR linked to a FAST_REGISTER_MR and passed to the provider
via a single ib_post_send() call. You can't do that if you want to bump
the key value between the invalidate and the fast_reg with the new key,
which is probably what apps want to do. You are forced, under this
proposed API, to post the two WRs separately and call
ib_update_fast_reg_key() in between the ib_post_send() calls.
Perhaps we should just pass in a u32 rkey for both WRs instead of the mr
pointer? Then the code could put the old rkey in the invalidate WR, and
the newly updated rkey in the fast_reg WR and chain the two together and
do a single post.
I think this is the way to go: change the fast_reg and local_inv unions
to take a u32 rkey instead of a struct ib_mr *mr.
Thoughts?
Steve.
More information about the general
mailing list