mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-01 06:33:32 -05:00
RDMA/rxe: Implement rereg_user_mr
Implement the two easy cases of ib_rereg_user_mr. Link: https://lore.kernel.org/r/20230530221334.89432-7-rpearsonhpe@gmail.com Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
committed by
Jason Gunthorpe
parent
86a3fb55bc
commit
544c7f62cf
@@ -1299,6 +1299,40 @@ static struct ib_mr *rxe_reg_user_mr(struct ib_pd *ibpd, u64 start,
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
static struct ib_mr *rxe_rereg_user_mr(struct ib_mr *ibmr, int flags,
|
||||
u64 start, u64 length, u64 iova,
|
||||
int access, struct ib_pd *ibpd,
|
||||
struct ib_udata *udata)
|
||||
{
|
||||
struct rxe_mr *mr = to_rmr(ibmr);
|
||||
struct rxe_pd *old_pd = to_rpd(ibmr->pd);
|
||||
struct rxe_pd *pd = to_rpd(ibpd);
|
||||
|
||||
/* for now only support the two easy cases:
|
||||
* rereg_pd and rereg_access
|
||||
*/
|
||||
if (flags & ~RXE_MR_REREG_SUPPORTED) {
|
||||
rxe_err_mr(mr, "flags = %#x not supported", flags);
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
}
|
||||
|
||||
if (flags & IB_MR_REREG_PD) {
|
||||
rxe_put(old_pd);
|
||||
rxe_get(pd);
|
||||
mr->ibmr.pd = ibpd;
|
||||
}
|
||||
|
||||
if (flags & IB_MR_REREG_ACCESS) {
|
||||
if (access & ~RXE_ACCESS_SUPPORTED_MR) {
|
||||
rxe_err_mr(mr, "access = %#x not supported", access);
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
}
|
||||
mr->access = access;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct ib_mr *rxe_alloc_mr(struct ib_pd *ibpd, enum ib_mr_type mr_type,
|
||||
u32 max_num_sg)
|
||||
{
|
||||
@@ -1451,6 +1485,7 @@ static const struct ib_device_ops rxe_dev_ops = {
|
||||
.query_srq = rxe_query_srq,
|
||||
.reg_user_mr = rxe_reg_user_mr,
|
||||
.req_notify_cq = rxe_req_notify_cq,
|
||||
.rereg_user_mr = rxe_rereg_user_mr,
|
||||
.resize_cq = rxe_resize_cq,
|
||||
|
||||
INIT_RDMA_OBJ_SIZE(ib_ah, rxe_ah, ibah),
|
||||
|
||||
@@ -284,6 +284,11 @@ enum rxe_mr_lookup_type {
|
||||
RXE_LOOKUP_REMOTE,
|
||||
};
|
||||
|
||||
enum rxe_rereg {
|
||||
RXE_MR_REREG_SUPPORTED = IB_MR_REREG_PD
|
||||
| IB_MR_REREG_ACCESS,
|
||||
};
|
||||
|
||||
static inline int rkey_is_mw(u32 rkey)
|
||||
{
|
||||
u32 index = rkey >> 8;
|
||||
|
||||
Reference in New Issue
Block a user