History

Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma

Pull rdma fixes from Jason Gunthorpe: "Things are looking pretty quiet here in RDMA, not too many bug fixes rolling in right now. The usual driver bug fixes and fixes for a couple of regressions introduced in 5.2: - Fix a race on bootup with RDMA device renaming and srp. SRP also needs to rename its internal sys files - Fix a memory leak in hns - Don't leak resources in efa on certain error unwinds - Don't panic in certain error unwinds in ib_register_device - Various small user visible bug fix patches for the hfi and efa drivers - Fix the 32 bit compilation break" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: RDMA/efa: Remove MAYEXEC flag check from mmap flow mlx5: avoid 64-bit division IB/hfi1: Validate page aligned for a given virtual address IB/{qib, hfi1, rdmavt}: Correct ibv_devinfo max_mr value IB/hfi1: Insure freeze_work work_struct is canceled on shutdown IB/rdmavt: Fix alloc_qpn() WARN_ON() RDMA/core: Fix panic when port_data isn't initialized RDMA/uverbs: Pass udata on uverbs error unwind RDMA/core: Clear out the udata before error unwind RDMA/hns: Fix PD memory leak for internal allocation RDMA/srp: Rename SRP sysfs name after IB device rename trigger

Linus Torvalds committed 7 years ago

Commit 6e383352 parents a02a532 4f240df17 files · +95 −35Browse files

Unified · Split

17 files
  1. drivers/infiniband/core/device.c +35 −14
  2. drivers/infiniband/core/rdma_core.h +2 −0
  3. drivers/infiniband/core/uverbs_cmd.c +21 −9
  4. drivers/infiniband/core/uverbs_std_types_cq.c +1 −1
  5. drivers/infiniband/core/uverbs_std_types_mr.c +1 −1
  6. drivers/infiniband/hw/efa/efa_verbs.c +0 −1
  7. drivers/infiniband/hw/hfi1/chip.c +1 −0
  8. drivers/infiniband/hw/hfi1/user_exp_rcv.c +3 −0
  9. drivers/infiniband/hw/hfi1/verbs.c +0 −2
  10. drivers/infiniband/hw/hns/hns_roce_hw_v1.c +1 −0
  11. drivers/infiniband/hw/mlx5/cmd.c +7 −2
  12. drivers/infiniband/hw/mlx5/main.c +1 −1
  13. drivers/infiniband/hw/qib/qib_verbs.c +0 −2
  14. drivers/infiniband/sw/rdmavt/mr.c +2 −0
  15. drivers/infiniband/sw/rdmavt/qp.c +2 −1
  16. drivers/infiniband/ulp/srp/ib_srp.c +17 −1
  17. include/rdma/ib_verbs.h +1 −0
drivers/infiniband/core/device.c+35−14
@@ -409,27 +409,44 @@ static int rename_compat_devs(struct ib_device *device) · 408 unmodified lines
409 409
410int ib_device_rename(struct ib_device *ibdev, const char *name)410int ib_device_rename(struct ib_device *ibdev, const char *name)
411{411{
412 unsigned long index;
413 void *client_data;
412 int ret;414 int ret;
413 415
414 down_write(&devices_rwsem);416 down_write(&devices_rwsem);
415 if (!strcmp(name, dev_name(&ibdev->dev))) {417 if (!strcmp(name, dev_name(&ibdev->dev))) {
416 ret = 0;418 up_write(&devices_rwsem);
417 goto out;419 return 0;
418 }420 }
419 421
420 if (__ib_device_get_by_name(name)) {422 if (__ib_device_get_by_name(name)) {
421 ret = -EEXIST;423 up_write(&devices_rwsem);
422 goto out;424 return -EEXIST;
423 }425 }
424 426
425 ret = device_rename(&ibdev->dev, name);427 ret = device_rename(&ibdev->dev, name);
426 if (ret)428 if (ret) {
427 goto out;429 up_write(&devices_rwsem);
430 return ret;
431 }
432
428 strlcpy(ibdev->name, name, IB_DEVICE_NAME_MAX);433 strlcpy(ibdev->name, name, IB_DEVICE_NAME_MAX);
429 ret = rename_compat_devs(ibdev);434 ret = rename_compat_devs(ibdev);
430out:435
431 up_write(&devices_rwsem);436 downgrade_write(&devices_rwsem);
432 return ret;437 down_read(&ibdev->client_data_rwsem);
438 xan_for_each_marked(&ibdev->client_data, index, client_data,
439 CLIENT_DATA_REGISTERED) {
440 struct ib_client *client = xa_load(&clients, index);
441
442 if (!client || !client->rename)
443 continue;
444
445 client->rename(ibdev, client_data);
446 }
447 up_read(&ibdev->client_data_rwsem);
448 up_read(&devices_rwsem);
449 return 0;
433}450}
434 451
435static int alloc_name(struct ib_device *ibdev, const char *name)452static int alloc_name(struct ib_device *ibdev, const char *name)
@@ -474,14 +491,15 @@ static void ib_device_release(struct device *device) · 38 unmodified lines
474 491
475 free_netdevs(dev);492 free_netdevs(dev);
476 WARN_ON(refcount_read(&dev->refcount));493 WARN_ON(refcount_read(&dev->refcount));
477 ib_cache_release_one(dev);494 if (dev->port_data) {
478 ib_security_release_port_pkey_list(dev);495 ib_cache_release_one(dev);
479 xa_destroy(&dev->compat_devs);496 ib_security_release_port_pkey_list(dev);
480 xa_destroy(&dev->client_data);
481 if (dev->port_data)
482 kfree_rcu(container_of(dev->port_data, struct ib_port_data_rcu,497 kfree_rcu(container_of(dev->port_data, struct ib_port_data_rcu,
483 pdata[0]),498 pdata[0]),
484 rcu_head);499 rcu_head);
500 }
501 xa_destroy(&dev->compat_devs);
502 xa_destroy(&dev->client_data);
485 kfree_rcu(dev, rcu_head);503 kfree_rcu(dev, rcu_head);
486}504}
487 505
@@ -1935,6 +1953,9 @@ static void free_netdevs(struct ib_device *ib_dev) · 1447 unmodified lines
1935 unsigned long flags;1953 unsigned long flags;
1936 unsigned int port;1954 unsigned int port;
1937 1955
1956 if (!ib_dev->port_data)
1957 return;
1958
1938 rdma_for_each_port (ib_dev, port) {1959 rdma_for_each_port (ib_dev, port) {
1939 struct ib_port_data *pdata = &ib_dev->port_data[port];1960 struct ib_port_data *pdata = &ib_dev->port_data[port];
1940 struct net_device *ndev;1961 struct net_device *ndev;
drivers/infiniband/core/rdma_core.h+2−0
@@ -110,6 +110,8 @@ int uverbs_output_written(const struct uverbs_attr_bundle *bundle, size_t idx); · 109 unmodified lines
110void setup_ufile_idr_uobject(struct ib_uverbs_file *ufile);110void setup_ufile_idr_uobject(struct ib_uverbs_file *ufile);
111void release_ufile_idr_uobject(struct ib_uverbs_file *ufile);111void release_ufile_idr_uobject(struct ib_uverbs_file *ufile);
112 112
113struct ib_udata *uverbs_get_cleared_udata(struct uverbs_attr_bundle *attrs);
114
113/*115/*
114 * This is the runtime description of the uverbs API, used by the syscall116 * This is the runtime description of the uverbs API, used by the syscall
115 * machinery to validate and dispatch calls.117 * machinery to validate and dispatch calls.
drivers/infiniband/core/uverbs_cmd.c+21−9
@@ -174,6 +174,17 @@ static int uverbs_request_finish(struct uverbs_req_iter *iter) · 173 unmodified lines
174 return 0;174 return 0;
175}175}
176 176
177/*
178 * When calling a destroy function during an error unwind we need to pass in
179 * the udata that is sanitized of all user arguments. Ie from the driver
180 * perspective it looks like no udata was passed.
181 */
182struct ib_udata *uverbs_get_cleared_udata(struct uverbs_attr_bundle *attrs)
183{
184 attrs->driver_udata = (struct ib_udata){};
185 return &attrs->driver_udata;
186}
187
177static struct ib_uverbs_completion_event_file *188static struct ib_uverbs_completion_event_file *
178_ib_uverbs_lookup_comp_file(s32 fd, struct uverbs_attr_bundle *attrs)189_ib_uverbs_lookup_comp_file(s32 fd, struct uverbs_attr_bundle *attrs)
179{190{
@@ -441,7 +452,7 @@ static int ib_uverbs_alloc_pd(struct uverbs_attr_bundle *attrs) · 261 unmodified lines
441 return uobj_alloc_commit(uobj, attrs);452 return uobj_alloc_commit(uobj, attrs);
442 453
443err_copy:454err_copy:
444 ib_dealloc_pd_user(pd, &attrs->driver_udata);455 ib_dealloc_pd_user(pd, uverbs_get_cleared_udata(attrs));
445 pd = NULL;456 pd = NULL;
446err_alloc:457err_alloc:
447 kfree(pd);458 kfree(pd);
@@ -644,7 +655,7 @@ err_copy: · 196 unmodified lines
644 }655 }
645 656
646err_dealloc_xrcd:657err_dealloc_xrcd:
647 ib_dealloc_xrcd(xrcd, &attrs->driver_udata);658 ib_dealloc_xrcd(xrcd, uverbs_get_cleared_udata(attrs));
648 659
649err:660err:
650 uobj_alloc_abort(&obj->uobject, attrs);661 uobj_alloc_abort(&obj->uobject, attrs);
@@ -767,7 +778,7 @@ static int ib_uverbs_reg_mr(struct uverbs_attr_bundle *attrs) · 116 unmodified lines
767 return uobj_alloc_commit(uobj, attrs);778 return uobj_alloc_commit(uobj, attrs);
768 779
769err_copy:780err_copy:
770 ib_dereg_mr_user(mr, &attrs->driver_udata);781 ib_dereg_mr_user(mr, uverbs_get_cleared_udata(attrs));
771 782
772err_put:783err_put:
773 uobj_put_obj_read(pd);784 uobj_put_obj_read(pd);
@@ -1042,7 +1053,7 @@ static struct ib_ucq_object *create_cq(struct uverbs_attr_bundle *attrs, · 268 unmodified lines
1042 return obj;1053 return obj;
1043 1054
1044err_cb:1055err_cb:
1045 ib_destroy_cq(cq);1056 ib_destroy_cq_user(cq, uverbs_get_cleared_udata(attrs));
1046 1057
1047err_file:1058err_file:
1048 if (ev_file)1059 if (ev_file)
@@ -1478,7 +1489,7 @@ static int create_qp(struct uverbs_attr_bundle *attrs, · 429 unmodified lines
1478 1489
1479 return uobj_alloc_commit(&obj->uevent.uobject, attrs);1490 return uobj_alloc_commit(&obj->uevent.uobject, attrs);
1480err_cb:1491err_cb:
1481 ib_destroy_qp(qp);1492 ib_destroy_qp_user(qp, uverbs_get_cleared_udata(attrs));
1482 1493
1483err_put:1494err_put:
1484 if (!IS_ERR(xrcd_uobj))1495 if (!IS_ERR(xrcd_uobj))
@@ -1611,7 +1622,7 @@ static int ib_uverbs_open_qp(struct uverbs_attr_bundle *attrs) · 126 unmodified lines
1611 return uobj_alloc_commit(&obj->uevent.uobject, attrs);1622 return uobj_alloc_commit(&obj->uevent.uobject, attrs);
1612 1623
1613err_destroy:1624err_destroy:
1614 ib_destroy_qp(qp);1625 ib_destroy_qp_user(qp, uverbs_get_cleared_udata(attrs));
1615err_xrcd:1626err_xrcd:
1616 uobj_put_read(xrcd_uobj);1627 uobj_put_read(xrcd_uobj);
1617err_put:1628err_put:
@@ -2453,7 +2464,8 @@ static int ib_uverbs_create_ah(struct uverbs_attr_bundle *attrs) · 835 unmodified lines
2453 return uobj_alloc_commit(uobj, attrs);2464 return uobj_alloc_commit(uobj, attrs);
2454 2465
2455err_copy:2466err_copy:
2456 rdma_destroy_ah(ah, RDMA_DESTROY_AH_SLEEPABLE);2467 rdma_destroy_ah_user(ah, RDMA_DESTROY_AH_SLEEPABLE,
2468 uverbs_get_cleared_udata(attrs));
2457 2469
2458err_put:2470err_put:
2459 uobj_put_obj_read(pd);2471 uobj_put_obj_read(pd);
@@ -2964,7 +2976,7 @@ static int ib_uverbs_ex_create_wq(struct uverbs_attr_bundle *attrs) · 504 unmodified lines
2964 return uobj_alloc_commit(&obj->uevent.uobject, attrs);2976 return uobj_alloc_commit(&obj->uevent.uobject, attrs);
2965 2977
2966err_copy:2978err_copy:
2967 ib_destroy_wq(wq, &attrs->driver_udata);2979 ib_destroy_wq(wq, uverbs_get_cleared_udata(attrs));
2968err_put_cq:2980err_put_cq:
2969 uobj_put_obj_read(cq);2981 uobj_put_obj_read(cq);
2970err_put_pd:2982err_put_pd:
@@ -3464,7 +3476,7 @@ static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs, · 493 unmodified lines
3464 return uobj_alloc_commit(&obj->uevent.uobject, attrs);3476 return uobj_alloc_commit(&obj->uevent.uobject, attrs);
3465 3477
3466err_copy:3478err_copy:
3467 ib_destroy_srq_user(srq, &attrs->driver_udata);3479 ib_destroy_srq_user(srq, uverbs_get_cleared_udata(attrs));
3468 3480
3469err_free:3481err_free:
3470 kfree(srq);3482 kfree(srq);
drivers/infiniband/core/uverbs_std_types_cq.c+1−1
@@ -135,7 +135,7 @@ static int UVERBS_HANDLER(UVERBS_METHOD_CQ_CREATE)( · 134 unmodified lines
135 135
136 return 0;136 return 0;
137err_cq:137err_cq:
138 ib_destroy_cq(cq);138 ib_destroy_cq_user(cq, uverbs_get_cleared_udata(attrs));
139 139
140err_event_file:140err_event_file:
141 if (ev_file)141 if (ev_file)
drivers/infiniband/core/uverbs_std_types_mr.c+1−1
@@ -148,7 +148,7 @@ static int UVERBS_HANDLER(UVERBS_METHOD_DM_MR_REG)( · 147 unmodified lines
148 return 0;148 return 0;
149 149
150err_dereg:150err_dereg:
151 ib_dereg_mr_user(mr, &attrs->driver_udata);151 ib_dereg_mr_user(mr, uverbs_get_cleared_udata(attrs));
152 152
153 return ret;153 return ret;
154}154}
drivers/infiniband/hw/efa/efa_verbs.c+0−1
@@ -1728,7 +1728,6 @@ int efa_mmap(struct ib_ucontext *ibucontext, · 1727 unmodified lines
1728 ibdev_dbg(&dev->ibdev, "Mapping executable pages is not permitted\n");1728 ibdev_dbg(&dev->ibdev, "Mapping executable pages is not permitted\n");
1729 return -EPERM;1729 return -EPERM;
1730 }1730 }
1731 vma->vm_flags &= ~VM_MAYEXEC;
1732 1731
1733 return __efa_mmap(dev, ucontext, vma, key, length);1732 return __efa_mmap(dev, ucontext, vma, key, length);
1734}1733}
drivers/infiniband/hw/hfi1/chip.c+1−0
@@ -9850,6 +9850,7 @@ void hfi1_quiet_serdes(struct hfi1_pportdata *ppd) · 9849 unmodified lines
9850 9850
9851 /* disable the port */9851 /* disable the port */
9852 clear_rcvctrl(dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK);9852 clear_rcvctrl(dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK);
9853 cancel_work_sync(&ppd->freeze_work);
9853}9854}
9854 9855
9855static inline int init_cpu_counters(struct hfi1_devdata *dd)9856static inline int init_cpu_counters(struct hfi1_devdata *dd)
drivers/infiniband/hw/hfi1/user_exp_rcv.c+3−0
@@ -324,6 +324,9 @@ int hfi1_user_exp_rcv_setup(struct hfi1_filedata *fd, · 323 unmodified lines
324 u32 *tidlist = NULL;324 u32 *tidlist = NULL;
325 struct tid_user_buf *tidbuf;325 struct tid_user_buf *tidbuf;
326 326
327 if (!PAGE_ALIGNED(tinfo->vaddr))
328 return -EINVAL;
329
327 tidbuf = kzalloc(sizeof(*tidbuf), GFP_KERNEL);330 tidbuf = kzalloc(sizeof(*tidbuf), GFP_KERNEL);
328 if (!tidbuf)331 if (!tidbuf)
329 return -ENOMEM;332 return -ENOMEM;
drivers/infiniband/hw/hfi1/verbs.c+0−2
@@ -1356,8 +1356,6 @@ static void hfi1_fill_device_attr(struct hfi1_devdata *dd) · 1355 unmodified lines
1356 rdi->dparms.props.max_cq = hfi1_max_cqs;1356 rdi->dparms.props.max_cq = hfi1_max_cqs;
1357 rdi->dparms.props.max_ah = hfi1_max_ahs;1357 rdi->dparms.props.max_ah = hfi1_max_ahs;
1358 rdi->dparms.props.max_cqe = hfi1_max_cqes;1358 rdi->dparms.props.max_cqe = hfi1_max_cqes;
1359 rdi->dparms.props.max_mr = rdi->lkey_table.max;
1360 rdi->dparms.props.max_fmr = rdi->lkey_table.max;
1361 rdi->dparms.props.max_map_per_fmr = 32767;1359 rdi->dparms.props.max_map_per_fmr = 32767;
1362 rdi->dparms.props.max_pd = hfi1_max_pds;1360 rdi->dparms.props.max_pd = hfi1_max_pds;
1363 rdi->dparms.props.max_qp_rd_atom = HFI1_MAX_RDMA_ATOMIC;1361 rdi->dparms.props.max_qp_rd_atom = HFI1_MAX_RDMA_ATOMIC;
drivers/infiniband/hw/hns/hns_roce_hw_v1.c+1−0
@@ -899,6 +899,7 @@ static void hns_roce_v1_release_lp_qp(struct hns_roce_dev *hr_dev) · 898 unmodified lines
899 dev_err(dev, "Destroy cq for mr_free failed(%d)!\n", ret);899 dev_err(dev, "Destroy cq for mr_free failed(%d)!\n", ret);
900 900
901 hns_roce_dealloc_pd(&free_mr->mr_free_pd->ibpd, NULL);901 hns_roce_dealloc_pd(&free_mr->mr_free_pd->ibpd, NULL);
902 kfree(&free_mr->mr_free_pd->ibpd);
902}903}
903 904
904static int hns_roce_db_init(struct hns_roce_dev *hr_dev)905static int hns_roce_db_init(struct hns_roce_dev *hr_dev)
drivers/infiniband/hw/mlx5/cmd.c+7−2
@@ -190,12 +190,12 @@ int mlx5_cmd_alloc_sw_icm(struct mlx5_dm *dm, int type, u64 length, · 189 unmodified lines
190 u16 uid, phys_addr_t *addr, u32 *obj_id)190 u16 uid, phys_addr_t *addr, u32 *obj_id)
191{191{
192 struct mlx5_core_dev *dev = dm->dev;192 struct mlx5_core_dev *dev = dm->dev;
193 u32 num_blocks = DIV_ROUND_UP(length, MLX5_SW_ICM_BLOCK_SIZE(dev));
194 u32 out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)] = {};193 u32 out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)] = {};
195 u32 in[MLX5_ST_SZ_DW(create_sw_icm_in)] = {};194 u32 in[MLX5_ST_SZ_DW(create_sw_icm_in)] = {};
196 unsigned long *block_map;195 unsigned long *block_map;
197 u64 icm_start_addr;196 u64 icm_start_addr;
198 u32 log_icm_size;197 u32 log_icm_size;
198 u32 num_blocks;
199 u32 max_blocks;199 u32 max_blocks;
200 u64 block_idx;200 u64 block_idx;
201 void *sw_icm;201 void *sw_icm;
@@ -224,6 +224,8 @@ int mlx5_cmd_alloc_sw_icm(struct mlx5_dm *dm, int type, u64 length, · 22 unmodified lines
224 return -EINVAL;224 return -EINVAL;
225 }225 }
226 226
227 num_blocks = (length + MLX5_SW_ICM_BLOCK_SIZE(dev) - 1) >>
228 MLX5_LOG_SW_ICM_BLOCK_SIZE(dev);
227 max_blocks = BIT(log_icm_size - MLX5_LOG_SW_ICM_BLOCK_SIZE(dev));229 max_blocks = BIT(log_icm_size - MLX5_LOG_SW_ICM_BLOCK_SIZE(dev));
228 spin_lock(&dm->lock);230 spin_lock(&dm->lock);
229 block_idx = bitmap_find_next_zero_area(block_map,231 block_idx = bitmap_find_next_zero_area(block_map,
@@ -266,13 +268,16 @@ int mlx5_cmd_dealloc_sw_icm(struct mlx5_dm *dm, int type, u64 length, · 36 unmodified lines
266 u16 uid, phys_addr_t addr, u32 obj_id)268 u16 uid, phys_addr_t addr, u32 obj_id)
267{269{
268 struct mlx5_core_dev *dev = dm->dev;270 struct mlx5_core_dev *dev = dm->dev;
269 u32 num_blocks = DIV_ROUND_UP(length, MLX5_SW_ICM_BLOCK_SIZE(dev));
270 u32 out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)] = {};271 u32 out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)] = {};
271 u32 in[MLX5_ST_SZ_DW(general_obj_in_cmd_hdr)] = {};272 u32 in[MLX5_ST_SZ_DW(general_obj_in_cmd_hdr)] = {};
272 unsigned long *block_map;273 unsigned long *block_map;
274 u32 num_blocks;
273 u64 start_idx;275 u64 start_idx;
274 int err;276 int err;
275 277
278 num_blocks = (length + MLX5_SW_ICM_BLOCK_SIZE(dev) - 1) >>
279 MLX5_LOG_SW_ICM_BLOCK_SIZE(dev);
280
276 switch (type) {281 switch (type) {
277 case MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM:282 case MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM:
278 start_idx =283 start_idx =
drivers/infiniband/hw/mlx5/main.c+1−1
@@ -2344,7 +2344,7 @@ static int handle_alloc_dm_sw_icm(struct ib_ucontext *ctx, · 2343 unmodified lines
2344 /* Allocation size must a multiple of the basic block size2344 /* Allocation size must a multiple of the basic block size
2345 * and a power of 2.2345 * and a power of 2.
2346 */2346 */
2347 act_size = roundup(attr->length, MLX5_SW_ICM_BLOCK_SIZE(dm_db->dev));2347 act_size = round_up(attr->length, MLX5_SW_ICM_BLOCK_SIZE(dm_db->dev));
2348 act_size = roundup_pow_of_two(act_size);2348 act_size = roundup_pow_of_two(act_size);
2349 2349
2350 dm->size = act_size;2350 dm->size = act_size;
drivers/infiniband/hw/qib/qib_verbs.c+0−2
@@ -1459,8 +1459,6 @@ static void qib_fill_device_attr(struct qib_devdata *dd) · 1458 unmodified lines
1459 rdi->dparms.props.max_cq = ib_qib_max_cqs;1459 rdi->dparms.props.max_cq = ib_qib_max_cqs;
1460 rdi->dparms.props.max_cqe = ib_qib_max_cqes;1460 rdi->dparms.props.max_cqe = ib_qib_max_cqes;
1461 rdi->dparms.props.max_ah = ib_qib_max_ahs;1461 rdi->dparms.props.max_ah = ib_qib_max_ahs;
1462 rdi->dparms.props.max_mr = rdi->lkey_table.max;
1463 rdi->dparms.props.max_fmr = rdi->lkey_table.max;
1464 rdi->dparms.props.max_map_per_fmr = 32767;1462 rdi->dparms.props.max_map_per_fmr = 32767;
1465 rdi->dparms.props.max_qp_rd_atom = QIB_MAX_RDMA_ATOMIC;1463 rdi->dparms.props.max_qp_rd_atom = QIB_MAX_RDMA_ATOMIC;
1466 rdi->dparms.props.max_qp_init_rd_atom = 255;1464 rdi->dparms.props.max_qp_init_rd_atom = 255;
drivers/infiniband/sw/rdmavt/mr.c+2−0
@@ -96,6 +96,8 @@ int rvt_driver_mr_init(struct rvt_dev_info *rdi) · 95 unmodified lines
96 for (i = 0; i < rdi->lkey_table.max; i++)96 for (i = 0; i < rdi->lkey_table.max; i++)
97 RCU_INIT_POINTER(rdi->lkey_table.table[i], NULL);97 RCU_INIT_POINTER(rdi->lkey_table.table[i], NULL);
98 98
99 rdi->dparms.props.max_mr = rdi->lkey_table.max;
100 rdi->dparms.props.max_fmr = rdi->lkey_table.max;
99 return 0;101 return 0;
100}102}
101 103
drivers/infiniband/sw/rdmavt/qp.c+2−1
@@ -594,7 +594,8 @@ static int alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt, · 593 unmodified lines
594 offset = qpt->incr | ((offset & 1) ^ 1);594 offset = qpt->incr | ((offset & 1) ^ 1);
595 }595 }
596 /* there can be no set bits in low-order QoS bits */596 /* there can be no set bits in low-order QoS bits */
597 WARN_ON(offset & (BIT(rdi->dparms.qos_shift) - 1));597 WARN_ON(rdi->dparms.qos_shift > 1 &&
598 offset & ((BIT(rdi->dparms.qos_shift - 1) - 1) << 1));
598 qpn = mk_qpn(qpt, map, offset);599 qpn = mk_qpn(qpt, map, offset);
599 }600 }
600 601
drivers/infiniband/ulp/srp/ib_srp.c+17−1
@@ -148,6 +148,7 @@ MODULE_PARM_DESC(ch_count, · 147 unmodified lines
148 148
149static void srp_add_one(struct ib_device *device);149static void srp_add_one(struct ib_device *device);
150static void srp_remove_one(struct ib_device *device, void *client_data);150static void srp_remove_one(struct ib_device *device, void *client_data);
151static void srp_rename_dev(struct ib_device *device, void *client_data);
151static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc);152static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc);
152static void srp_handle_qp_err(struct ib_cq *cq, struct ib_wc *wc,153static void srp_handle_qp_err(struct ib_cq *cq, struct ib_wc *wc,
153 const char *opname);154 const char *opname);
@@ -162,7 +163,8 @@ static struct workqueue_struct *srp_remove_wq; · 8 unmodified lines
162static struct ib_client srp_client = {163static struct ib_client srp_client = {
163 .name = "srp",164 .name = "srp",
164 .add = srp_add_one,165 .add = srp_add_one,
165 .remove = srp_remove_one166 .remove = srp_remove_one,
167 .rename = srp_rename_dev
166};168};
167 169
168static struct ib_sa_client srp_sa_client;170static struct ib_sa_client srp_sa_client;
@@ -4112,6 +4114,20 @@ free_host: · 3943 unmodified lines
4112 return NULL;4114 return NULL;
4113}4115}
4114 4116
4117static void srp_rename_dev(struct ib_device *device, void *client_data)
4118{
4119 struct srp_device *srp_dev = client_data;
4120 struct srp_host *host, *tmp_host;
4121
4122 list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) {
4123 char name[IB_DEVICE_NAME_MAX + 8];
4124
4125 snprintf(name, sizeof(name), "srp-%s-%d",
4126 dev_name(&device->dev), host->port);
4127 device_rename(&host->dev, name);
4128 }
4129}
4130
4115static void srp_add_one(struct ib_device *device)4131static void srp_add_one(struct ib_device *device)
4116{4132{
4117 struct srp_device *srp_dev;4133 struct srp_device *srp_dev;
include/rdma/ib_verbs.h+1−0
@@ -2698,6 +2698,7 @@ struct ib_client { · 2697 unmodified lines
2698 const char *name;2698 const char *name;
2699 void (*add) (struct ib_device *);2699 void (*add) (struct ib_device *);
2700 void (*remove)(struct ib_device *, void *client_data);2700 void (*remove)(struct ib_device *, void *client_data);
2701 void (*rename)(struct ib_device *dev, void *client_data);
2701 2702
2702 /* Returns the net_dev belonging to this ib_client and matching the2703 /* Returns the net_dev belonging to this ib_client and matching the
2703 * given parameters.2704 * given parameters.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t