Skip to content

Commit

Permalink
RDMA/core: Save the MR type in the ib_mr structure
Browse files Browse the repository at this point in the history
This is a preparation for the signature verbs API change. This change is
needed since the MR type will define, in the upcoming patches, the need
for allocating internal resources in LLD for signature handover related
operations. It will also help to make sure that signature related
functions are called with an appropriate MR type and fail otherwise.
Also introduce new mr types IB_MR_TYPE_USER, IB_MR_TYPE_DMA and
IB_MR_TYPE_DM for correctness.

Signed-off-by: Max Gurtovoy <[email protected]>
Signed-off-by: Israel Rukshin <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Reviewed-by: Sagi Grimberg <[email protected]>
Signed-off-by: Jason Gunthorpe <[email protected]>
  • Loading branch information
Max Gurtovoy authored and jgunthorpe committed Jun 24, 2019
1 parent 36b1e47 commit a0bc099
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/infiniband/core/uverbs_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,7 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs)

mr->device = pd->device;
mr->pd = pd;
mr->type = IB_MR_TYPE_USER;
mr->dm = NULL;
mr->uobject = uobj;
atomic_inc(&pd->usecnt);
Expand Down
1 change: 1 addition & 0 deletions drivers/infiniband/core/uverbs_std_types_mr.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ static int UVERBS_HANDLER(UVERBS_METHOD_DM_MR_REG)(

mr->device = pd->device;
mr->pd = pd;
mr->type = IB_MR_TYPE_DM;
mr->dm = dm;
mr->uobject = uobj;
atomic_inc(&pd->usecnt);
Expand Down
2 changes: 2 additions & 0 deletions drivers/infiniband/core/verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,7 @@ struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags,

mr->device = pd->device;
mr->pd = pd;
mr->type = IB_MR_TYPE_DMA;
mr->uobject = NULL;
mr->need_inval = false;

Expand Down Expand Up @@ -2020,6 +2021,7 @@ struct ib_mr *ib_alloc_mr_user(struct ib_pd *pd, enum ib_mr_type mr_type,
mr->need_inval = false;
mr->res.type = RDMA_RESTRACK_MR;
rdma_restrack_kadd(&mr->res);
mr->type = mr_type;
}

return mr;
Expand Down
10 changes: 10 additions & 0 deletions include/rdma/ib_verbs.h
Original file line number Diff line number Diff line change
Expand Up @@ -782,11 +782,20 @@ __attribute_const__ int ib_rate_to_mbps(enum ib_rate rate);
* register any arbitrary sg lists (without
* the normal mr constraints - see
* ib_map_mr_sg)
* @IB_MR_TYPE_DM: memory region that is used for device
* memory registration
* @IB_MR_TYPE_USER: memory region that is used for the user-space
* application
* @IB_MR_TYPE_DMA: memory region that is used for DMA operations
* without address translations (VA=PA)
*/
enum ib_mr_type {
IB_MR_TYPE_MEM_REG,
IB_MR_TYPE_SIGNATURE,
IB_MR_TYPE_SG_GAPS,
IB_MR_TYPE_DM,
IB_MR_TYPE_USER,
IB_MR_TYPE_DMA,
};

enum ib_mr_status_check {
Expand Down Expand Up @@ -1719,6 +1728,7 @@ struct ib_mr {
u64 iova;
u64 length;
unsigned int page_size;
enum ib_mr_type type;
bool need_inval;
union {
struct ib_uobject *uobject; /* user */
Expand Down

0 comments on commit a0bc099

Please sign in to comment.