Commit 1858d98b authored by Bob Pearson's avatar Bob Pearson Committed by Jason Gunthorpe

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/20201008212818.265303-1-rpearson@hpe.comSigned-off-by: default avatarBob Pearson <rpearson@hpe.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent f2e7449f
...@@ -52,13 +52,8 @@ static void rxe_mem_init(int access, struct rxe_mem *mem) ...@@ -52,13 +52,8 @@ static void rxe_mem_init(int access, struct rxe_mem *mem)
u32 lkey = mem->pelem.index << 8 | rxe_get_key(); u32 lkey = mem->pelem.index << 8 | rxe_get_key();
u32 rkey = (access & IB_ACCESS_REMOTE) ? lkey : 0; u32 rkey = (access & IB_ACCESS_REMOTE) ? lkey : 0;
if (mem->pelem.pool->type == RXE_TYPE_MR) {
mem->ibmr.lkey = lkey; mem->ibmr.lkey = lkey;
mem->ibmr.rkey = rkey; mem->ibmr.rkey = rkey;
}
mem->lkey = lkey;
mem->rkey = rkey;
mem->state = RXE_MEM_STATE_INVALID; mem->state = RXE_MEM_STATE_INVALID;
mem->type = RXE_MEM_TYPE_NONE; mem->type = RXE_MEM_TYPE_NONE;
mem->map_shift = ilog2(RXE_BUF_PER_MAP); mem->map_shift = ilog2(RXE_BUF_PER_MAP);
...@@ -122,7 +117,7 @@ void rxe_mem_init_dma(struct rxe_pd *pd, ...@@ -122,7 +117,7 @@ void rxe_mem_init_dma(struct rxe_pd *pd,
{ {
rxe_mem_init(access, mem); rxe_mem_init(access, mem);
mem->pd = pd; mem->ibmr.pd = &pd->ibpd;
mem->access = access; mem->access = access;
mem->state = RXE_MEM_STATE_VALID; mem->state = RXE_MEM_STATE_VALID;
mem->type = RXE_MEM_TYPE_DMA; mem->type = RXE_MEM_TYPE_DMA;
...@@ -191,7 +186,7 @@ int rxe_mem_init_user(struct rxe_pd *pd, u64 start, ...@@ -191,7 +186,7 @@ int rxe_mem_init_user(struct rxe_pd *pd, u64 start,
} }
} }
mem->pd = pd; mem->ibmr.pd = &pd->ibpd;
mem->umem = umem; mem->umem = umem;
mem->access = access; mem->access = access;
mem->length = length; mem->length = length;
...@@ -221,7 +216,7 @@ int rxe_mem_init_fast(struct rxe_pd *pd, ...@@ -221,7 +216,7 @@ int rxe_mem_init_fast(struct rxe_pd *pd,
if (err) if (err)
goto err1; goto err1;
mem->pd = pd; mem->ibmr.pd = &pd->ibpd;
mem->max_buf = max_pages; mem->max_buf = max_pages;
mem->state = RXE_MEM_STATE_FREE; mem->state = RXE_MEM_STATE_FREE;
mem->type = RXE_MEM_TYPE_MR; mem->type = RXE_MEM_TYPE_MR;
...@@ -341,7 +336,7 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length, ...@@ -341,7 +336,7 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
memcpy(dest, src, length); memcpy(dest, src, length);
if (crcp) if (crcp)
*crcp = rxe_crc32(to_rdev(mem->pd->ibpd.device), *crcp = rxe_crc32(to_rdev(mem->ibmr.device),
*crcp, dest, length); *crcp, dest, length);
return 0; return 0;
...@@ -375,7 +370,7 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length, ...@@ -375,7 +370,7 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
memcpy(dest, src, bytes); memcpy(dest, src, bytes);
if (crcp) if (crcp)
crc = rxe_crc32(to_rdev(mem->pd->ibpd.device), crc = rxe_crc32(to_rdev(mem->ibmr.device),
crc, dest, bytes); crc, dest, bytes);
length -= bytes; length -= bytes;
...@@ -548,9 +543,9 @@ struct rxe_mem *lookup_mem(struct rxe_pd *pd, int access, u32 key, ...@@ -548,9 +543,9 @@ struct rxe_mem *lookup_mem(struct rxe_pd *pd, int access, u32 key,
if (!mem) if (!mem)
return NULL; return NULL;
if (unlikely((type == lookup_local && mem->lkey != key) || if (unlikely((type == lookup_local && mr_lkey(mem) != key) ||
(type == lookup_remote && mem->rkey != key) || (type == lookup_remote && mr_rkey(mem) != key) ||
mem->pd != pd || mr_pd(mem) != pd ||
(access && !(access & mem->access)) || (access && !(access & mem->access)) ||
mem->state != RXE_MEM_STATE_VALID)) { mem->state != RXE_MEM_STATE_VALID)) {
rxe_drop_ref(mem); rxe_drop_ref(mem);
......
...@@ -617,8 +617,8 @@ int rxe_requester(void *arg) ...@@ -617,8 +617,8 @@ int rxe_requester(void *arg)
rmr->state = RXE_MEM_STATE_VALID; rmr->state = RXE_MEM_STATE_VALID;
rmr->access = wqe->wr.wr.reg.access; rmr->access = wqe->wr.wr.reg.access;
rmr->lkey = wqe->wr.wr.reg.key; rmr->ibmr.lkey = wqe->wr.wr.reg.key;
rmr->rkey = wqe->wr.wr.reg.key; rmr->ibmr.rkey = wqe->wr.wr.reg.key;
rmr->iova = wqe->wr.wr.reg.mr->iova; rmr->iova = wqe->wr.wr.reg.mr->iova;
wqe->state = wqe_state_done; wqe->state = wqe_state_done;
wqe->status = IB_WC_SUCCESS; wqe->status = IB_WC_SUCCESS;
......
...@@ -921,7 +921,7 @@ static int rxe_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata) ...@@ -921,7 +921,7 @@ static int rxe_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
struct rxe_mem *mr = to_rmr(ibmr); struct rxe_mem *mr = to_rmr(ibmr);
mr->state = RXE_MEM_STATE_ZOMBIE; mr->state = RXE_MEM_STATE_ZOMBIE;
rxe_drop_ref(mr->pd); rxe_drop_ref(mr_pd(mr));
rxe_drop_index(mr); rxe_drop_index(mr);
rxe_drop_ref(mr); rxe_drop_ref(mr);
return 0; return 0;
......
...@@ -295,12 +295,8 @@ struct rxe_mem { ...@@ -295,12 +295,8 @@ struct rxe_mem {
struct ib_mw ibmw; struct ib_mw ibmw;
}; };
struct rxe_pd *pd;
struct ib_umem *umem; struct ib_umem *umem;
u32 lkey;
u32 rkey;
enum rxe_mem_state state; enum rxe_mem_state state;
enum rxe_mem_type type; enum rxe_mem_type type;
u64 va; u64 va;
...@@ -438,6 +434,21 @@ static inline struct rxe_mem *to_rmw(struct ib_mw *mw) ...@@ -438,6 +434,21 @@ static inline struct rxe_mem *to_rmw(struct ib_mw *mw)
return mw ? container_of(mw, struct rxe_mem, ibmw) : NULL; return mw ? container_of(mw, struct rxe_mem, ibmw) : NULL;
} }
static inline struct rxe_pd *mr_pd(struct rxe_mem *mr)
{
return to_rpd(mr->ibmr.pd);
}
static inline u32 mr_lkey(struct rxe_mem *mr)
{
return mr->ibmr.lkey;
}
static inline u32 mr_rkey(struct rxe_mem *mr)
{
return mr->ibmr.rkey;
}
int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name); int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name);
void rxe_mc_cleanup(struct rxe_pool_entry *arg); void rxe_mc_cleanup(struct rxe_pool_entry *arg);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment