Skip to content

Commit ea22248

Browse files
chandramohan-akulajgunthorpe
authored andcommitted
RDMA/bnxt_re: Update alloc_page uapi for pacing
Update the alloc_page uapi functionality for handling the mapping of doorbell pacing shared page and bar address. Link: https://lore.kernel.org/r/1689742977-9128-6-git-send-email-selvin.xavier@broadcom.com Signed-off-by: Chandramohan Akula <chandramohan.akula@broadcom.com> Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
1 parent fa8fad9 commit ea22248

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

drivers/infiniband/hw/bnxt_re/ib_verbs.c

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,8 @@ bnxt_re_mmap_entry_insert(struct bnxt_re_ucontext *uctx, u64 mem_offset,
565565
break;
566566
case BNXT_RE_MMAP_UC_DB:
567567
case BNXT_RE_MMAP_WC_DB:
568+
case BNXT_RE_MMAP_DBR_BAR:
569+
case BNXT_RE_MMAP_DBR_PAGE:
568570
ret = rdma_user_mmap_entry_insert(&uctx->ib_uctx,
569571
&entry->rdma_entry, PAGE_SIZE);
570572
break;
@@ -4149,6 +4151,19 @@ int bnxt_re_mmap(struct ib_ucontext *ib_uctx, struct vm_area_struct *vma)
41494151
case BNXT_RE_MMAP_SH_PAGE:
41504152
ret = vm_insert_page(vma, vma->vm_start, virt_to_page(uctx->shpg));
41514153
break;
4154+
case BNXT_RE_MMAP_DBR_BAR:
4155+
pfn = bnxt_entry->mem_offset >> PAGE_SHIFT;
4156+
ret = rdma_user_mmap_io(ib_uctx, vma, pfn, PAGE_SIZE,
4157+
pgprot_noncached(vma->vm_page_prot),
4158+
rdma_entry);
4159+
break;
4160+
case BNXT_RE_MMAP_DBR_PAGE:
4161+
/* Driver doesn't expect write access for user space */
4162+
if (vma->vm_flags & VM_WRITE)
4163+
return -EFAULT;
4164+
ret = vm_insert_page(vma, vma->vm_start,
4165+
virt_to_page((void *)bnxt_entry->mem_offset));
4166+
break;
41524167
default:
41534168
ret = -EINVAL;
41544169
break;
@@ -4180,7 +4195,7 @@ static int UVERBS_HANDLER(BNXT_RE_METHOD_ALLOC_PAGE)(struct uverbs_attr_bundle *
41804195
u64 mmap_offset;
41814196
u32 length;
41824197
u32 dpi;
4183-
u64 dbr;
4198+
u64 addr;
41844199
int err;
41854200

41864201
uctx = container_of(ib_uverbs_get_ucontext(attrs), struct bnxt_re_ucontext, ib_uctx);
@@ -4202,19 +4217,30 @@ static int UVERBS_HANDLER(BNXT_RE_METHOD_ALLOC_PAGE)(struct uverbs_attr_bundle *
42024217
return -ENOMEM;
42034218
length = PAGE_SIZE;
42044219
dpi = uctx->wcdpi.dpi;
4205-
dbr = (u64)uctx->wcdpi.umdbr;
4220+
addr = (u64)uctx->wcdpi.umdbr;
42064221
mmap_flag = BNXT_RE_MMAP_WC_DB;
42074222
} else {
42084223
return -EINVAL;
42094224
}
42104225

42114226
break;
4227+
case BNXT_RE_ALLOC_DBR_BAR_PAGE:
4228+
length = PAGE_SIZE;
4229+
addr = (u64)rdev->pacing.dbr_bar_addr;
4230+
mmap_flag = BNXT_RE_MMAP_DBR_BAR;
4231+
break;
4232+
4233+
case BNXT_RE_ALLOC_DBR_PAGE:
4234+
length = PAGE_SIZE;
4235+
addr = (u64)rdev->pacing.dbr_page;
4236+
mmap_flag = BNXT_RE_MMAP_DBR_PAGE;
4237+
break;
42124238

42134239
default:
42144240
return -EOPNOTSUPP;
42154241
}
42164242

4217-
entry = bnxt_re_mmap_entry_insert(uctx, dbr, mmap_flag, &mmap_offset);
4243+
entry = bnxt_re_mmap_entry_insert(uctx, addr, mmap_flag, &mmap_offset);
42184244
if (!entry)
42194245
return -ENOMEM;
42204246

@@ -4254,6 +4280,9 @@ static int alloc_page_obj_cleanup(struct ib_uobject *uobject,
42544280
uctx->wcdpi.dbr = NULL;
42554281
}
42564282
break;
4283+
case BNXT_RE_MMAP_DBR_BAR:
4284+
case BNXT_RE_MMAP_DBR_PAGE:
4285+
break;
42574286
default:
42584287
goto exit;
42594288
}

drivers/infiniband/hw/bnxt_re/ib_verbs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ enum bnxt_re_mmap_flag {
146146
BNXT_RE_MMAP_SH_PAGE,
147147
BNXT_RE_MMAP_UC_DB,
148148
BNXT_RE_MMAP_WC_DB,
149+
BNXT_RE_MMAP_DBR_PAGE,
150+
BNXT_RE_MMAP_DBR_BAR,
149151
};
150152

151153
struct bnxt_re_user_mmap_entry {

include/uapi/rdma/bnxt_re-abi.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ enum bnxt_re_objects {
136136

137137
enum bnxt_re_alloc_page_type {
138138
BNXT_RE_ALLOC_WC_PAGE = 0,
139+
BNXT_RE_ALLOC_DBR_BAR_PAGE,
140+
BNXT_RE_ALLOC_DBR_PAGE,
139141
};
140142

141143
enum bnxt_re_var_alloc_page_attrs {

0 commit comments

Comments
 (0)