hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/infiniband/hw/hns/hns_roce_pd.c
....@@ -57,58 +57,46 @@
5757 hns_roce_bitmap_cleanup(&hr_dev->pd_bitmap);
5858 }
5959
60
-struct ib_pd *hns_roce_alloc_pd(struct ib_device *ib_dev,
61
- struct ib_ucontext *context,
62
- struct ib_udata *udata)
60
+int hns_roce_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
6361 {
64
- struct hns_roce_dev *hr_dev = to_hr_dev(ib_dev);
65
- struct device *dev = hr_dev->dev;
66
- struct hns_roce_pd *pd;
62
+ struct ib_device *ib_dev = ibpd->device;
63
+ struct hns_roce_pd *pd = to_hr_pd(ibpd);
6764 int ret;
68
-
69
- pd = kmalloc(sizeof(*pd), GFP_KERNEL);
70
- if (!pd)
71
- return ERR_PTR(-ENOMEM);
7265
7366 ret = hns_roce_pd_alloc(to_hr_dev(ib_dev), &pd->pdn);
7467 if (ret) {
75
- kfree(pd);
76
- dev_err(dev, "[alloc_pd]hns_roce_pd_alloc failed!\n");
77
- return ERR_PTR(ret);
68
+ ibdev_err(ib_dev, "failed to alloc pd, ret = %d.\n", ret);
69
+ return ret;
7870 }
7971
80
- if (context) {
81
- struct hns_roce_ib_alloc_pd_resp uresp = {.pdn = pd->pdn};
72
+ if (udata) {
73
+ struct hns_roce_ib_alloc_pd_resp resp = {.pdn = pd->pdn};
8274
83
- if (ib_copy_to_udata(udata, &uresp, sizeof(uresp))) {
75
+ ret = ib_copy_to_udata(udata, &resp,
76
+ min(udata->outlen, sizeof(resp)));
77
+ if (ret) {
8478 hns_roce_pd_free(to_hr_dev(ib_dev), pd->pdn);
85
- dev_err(dev, "[alloc_pd]ib_copy_to_udata failed!\n");
86
- kfree(pd);
87
- return ERR_PTR(-EFAULT);
79
+ ibdev_err(ib_dev, "failed to copy to udata, ret = %d\n", ret);
8880 }
8981 }
9082
91
- return &pd->ibpd;
83
+ return ret;
9284 }
93
-EXPORT_SYMBOL_GPL(hns_roce_alloc_pd);
9485
95
-int hns_roce_dealloc_pd(struct ib_pd *pd)
86
+int hns_roce_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata)
9687 {
9788 hns_roce_pd_free(to_hr_dev(pd->device), to_hr_pd(pd)->pdn);
98
- kfree(to_hr_pd(pd));
99
-
10089 return 0;
10190 }
102
-EXPORT_SYMBOL_GPL(hns_roce_dealloc_pd);
10391
10492 int hns_roce_uar_alloc(struct hns_roce_dev *hr_dev, struct hns_roce_uar *uar)
10593 {
10694 struct resource *res;
107
- int ret = 0;
95
+ int ret;
10896
10997 /* Using bitmap to manager UAR index */
11098 ret = hns_roce_bitmap_alloc(&hr_dev->uar_table.bitmap, &uar->logic_idx);
111
- if (ret == -1)
99
+ if (ret)
112100 return -ENOMEM;
113101
114102 if (uar->logic_idx > 0 && hr_dev->caps.phy_num_uars > 1)