Skip to content

Commit 1858d98

Browse files
Bob Pearsonjgunthorpe
authored andcommitted
RDMA/rxe: Remove duplicate entries in struct rxe_mr
Struct rxe_mem had pd, lkey and rkey values both in itself and in the struct ib_mr which is also included in rxe_mem. Delete these entries and replace references with the ones in ibmr.Add mr_pd, mr_lkey and mr_rkey macros which extract these values from mr. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Bob Pearson <[email protected]> Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent f2e7449 commit 1858d98

File tree

4 files changed

+28
-22
lines changed

4 files changed

+28
-22
lines changed

drivers/infiniband/sw/rxe/rxe_mr.c

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,8 @@ static void rxe_mem_init(int access, struct rxe_mem *mem)
5252
u32 lkey = mem->pelem.index << 8 | rxe_get_key();
5353
u32 rkey = (access & IB_ACCESS_REMOTE) ? lkey : 0;
5454

55-
if (mem->pelem.pool->type == RXE_TYPE_MR) {
56-
mem->ibmr.lkey = lkey;
57-
mem->ibmr.rkey = rkey;
58-
}
59-
60-
mem->lkey = lkey;
61-
mem->rkey = rkey;
55+
mem->ibmr.lkey = lkey;
56+
mem->ibmr.rkey = rkey;
6257
mem->state = RXE_MEM_STATE_INVALID;
6358
mem->type = RXE_MEM_TYPE_NONE;
6459
mem->map_shift = ilog2(RXE_BUF_PER_MAP);
@@ -122,7 +117,7 @@ void rxe_mem_init_dma(struct rxe_pd *pd,
122117
{
123118
rxe_mem_init(access, mem);
124119

125-
mem->pd = pd;
120+
mem->ibmr.pd = &pd->ibpd;
126121
mem->access = access;
127122
mem->state = RXE_MEM_STATE_VALID;
128123
mem->type = RXE_MEM_TYPE_DMA;
@@ -191,7 +186,7 @@ int rxe_mem_init_user(struct rxe_pd *pd, u64 start,
191186
}
192187
}
193188

194-
mem->pd = pd;
189+
mem->ibmr.pd = &pd->ibpd;
195190
mem->umem = umem;
196191
mem->access = access;
197192
mem->length = length;
@@ -221,7 +216,7 @@ int rxe_mem_init_fast(struct rxe_pd *pd,
221216
if (err)
222217
goto err1;
223218

224-
mem->pd = pd;
219+
mem->ibmr.pd = &pd->ibpd;
225220
mem->max_buf = max_pages;
226221
mem->state = RXE_MEM_STATE_FREE;
227222
mem->type = RXE_MEM_TYPE_MR;
@@ -341,7 +336,7 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
341336
memcpy(dest, src, length);
342337

343338
if (crcp)
344-
*crcp = rxe_crc32(to_rdev(mem->pd->ibpd.device),
339+
*crcp = rxe_crc32(to_rdev(mem->ibmr.device),
345340
*crcp, dest, length);
346341

347342
return 0;
@@ -375,7 +370,7 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
375370
memcpy(dest, src, bytes);
376371

377372
if (crcp)
378-
crc = rxe_crc32(to_rdev(mem->pd->ibpd.device),
373+
crc = rxe_crc32(to_rdev(mem->ibmr.device),
379374
crc, dest, bytes);
380375

381376
length -= bytes;
@@ -548,9 +543,9 @@ struct rxe_mem *lookup_mem(struct rxe_pd *pd, int access, u32 key,
548543
if (!mem)
549544
return NULL;
550545

551-
if (unlikely((type == lookup_local && mem->lkey != key) ||
552-
(type == lookup_remote && mem->rkey != key) ||
553-
mem->pd != pd ||
546+
if (unlikely((type == lookup_local && mr_lkey(mem) != key) ||
547+
(type == lookup_remote && mr_rkey(mem) != key) ||
548+
mr_pd(mem) != pd ||
554549
(access && !(access & mem->access)) ||
555550
mem->state != RXE_MEM_STATE_VALID)) {
556551
rxe_drop_ref(mem);

drivers/infiniband/sw/rxe/rxe_req.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -617,8 +617,8 @@ int rxe_requester(void *arg)
617617

618618
rmr->state = RXE_MEM_STATE_VALID;
619619
rmr->access = wqe->wr.wr.reg.access;
620-
rmr->lkey = wqe->wr.wr.reg.key;
621-
rmr->rkey = wqe->wr.wr.reg.key;
620+
rmr->ibmr.lkey = wqe->wr.wr.reg.key;
621+
rmr->ibmr.rkey = wqe->wr.wr.reg.key;
622622
rmr->iova = wqe->wr.wr.reg.mr->iova;
623623
wqe->state = wqe_state_done;
624624
wqe->status = IB_WC_SUCCESS;

drivers/infiniband/sw/rxe/rxe_verbs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,7 @@ static int rxe_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
921921
struct rxe_mem *mr = to_rmr(ibmr);
922922

923923
mr->state = RXE_MEM_STATE_ZOMBIE;
924-
rxe_drop_ref(mr->pd);
924+
rxe_drop_ref(mr_pd(mr));
925925
rxe_drop_index(mr);
926926
rxe_drop_ref(mr);
927927
return 0;

drivers/infiniband/sw/rxe/rxe_verbs.h

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -295,12 +295,8 @@ struct rxe_mem {
295295
struct ib_mw ibmw;
296296
};
297297

298-
struct rxe_pd *pd;
299298
struct ib_umem *umem;
300299

301-
u32 lkey;
302-
u32 rkey;
303-
304300
enum rxe_mem_state state;
305301
enum rxe_mem_type type;
306302
u64 va;
@@ -438,6 +434,21 @@ static inline struct rxe_mem *to_rmw(struct ib_mw *mw)
438434
return mw ? container_of(mw, struct rxe_mem, ibmw) : NULL;
439435
}
440436

437+
static inline struct rxe_pd *mr_pd(struct rxe_mem *mr)
438+
{
439+
return to_rpd(mr->ibmr.pd);
440+
}
441+
442+
static inline u32 mr_lkey(struct rxe_mem *mr)
443+
{
444+
return mr->ibmr.lkey;
445+
}
446+
447+
static inline u32 mr_rkey(struct rxe_mem *mr)
448+
{
449+
return mr->ibmr.rkey;
450+
}
451+
441452
int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name);
442453

443454
void rxe_mc_cleanup(struct rxe_pool_entry *arg);

0 commit comments

Comments
 (0)