hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/infiniband/hw/vmw_pvrdma/pvrdma_mr.c
....@@ -119,24 +119,24 @@
119119 union pvrdma_cmd_resp rsp;
120120 struct pvrdma_cmd_create_mr *cmd = &req.create_mr;
121121 struct pvrdma_cmd_create_mr_resp *resp = &rsp.create_mr_resp;
122
- int ret;
122
+ int ret, npages;
123123
124124 if (length == 0 || length > dev->dsr->caps.max_mr_size) {
125125 dev_warn(&dev->pdev->dev, "invalid mem region length\n");
126126 return ERR_PTR(-EINVAL);
127127 }
128128
129
- umem = ib_umem_get(pd->uobject->context, start,
130
- length, access_flags, 0);
129
+ umem = ib_umem_get(pd->device, start, length, access_flags);
131130 if (IS_ERR(umem)) {
132131 dev_warn(&dev->pdev->dev,
133132 "could not get umem for mem region\n");
134133 return ERR_CAST(umem);
135134 }
136135
137
- if (umem->npages < 0 || umem->npages > PVRDMA_PAGE_DIR_MAX_PAGES) {
136
+ npages = ib_umem_num_dma_blocks(umem, PAGE_SIZE);
137
+ if (npages < 0 || npages > PVRDMA_PAGE_DIR_MAX_PAGES) {
138138 dev_warn(&dev->pdev->dev, "overflow %d pages in mem region\n",
139
- umem->npages);
139
+ npages);
140140 ret = -EINVAL;
141141 goto err_umem;
142142 }
....@@ -151,7 +151,7 @@
151151 mr->mmr.size = length;
152152 mr->umem = umem;
153153
154
- ret = pvrdma_page_dir_init(dev, &mr->pdir, umem->npages, false);
154
+ ret = pvrdma_page_dir_init(dev, &mr->pdir, npages, false);
155155 if (ret) {
156156 dev_warn(&dev->pdev->dev,
157157 "could not allocate page directory\n");
....@@ -168,7 +168,7 @@
168168 cmd->length = length;
169169 cmd->pd_handle = to_vpd(pd)->pd_handle;
170170 cmd->access_flags = access_flags;
171
- cmd->nchunks = umem->npages;
171
+ cmd->nchunks = npages;
172172 cmd->pdir_dma = mr->pdir.dir_dma;
173173
174174 ret = pvrdma_cmd_post(dev, &req, &rsp, PVRDMA_CMD_CREATE_MR_RESP);
....@@ -270,10 +270,11 @@
270270 /**
271271 * pvrdma_dereg_mr - deregister a memory region
272272 * @ibmr: memory region
273
+ * @udata: pointer to user data
273274 *
274275 * @return: 0 on success.
275276 */
276
-int pvrdma_dereg_mr(struct ib_mr *ibmr)
277
+int pvrdma_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
277278 {
278279 struct pvrdma_user_mr *mr = to_vmr(ibmr);
279280 struct pvrdma_dev *dev = to_vdev(ibmr->device);
....@@ -290,8 +291,7 @@
290291 "could not deregister mem region, error: %d\n", ret);
291292
292293 pvrdma_page_dir_cleanup(dev, &mr->pdir);
293
- if (mr->umem)
294
- ib_umem_release(mr->umem);
294
+ ib_umem_release(mr->umem);
295295
296296 kfree(mr->pages);
297297 kfree(mr);