History

IB/uverbs: Extend uverbs_ioctl header with driver_id

Extending uverbs_ioctl header with driver_id and another reserved field. driver_id should be used in order to identify the driver. Since every driver could have its own parsing tree, this is necessary for strace support. Downstream patches take off the EXPERIMENTAL flag from the ioctl() IB support and thus we add some reserved fields for future usage.

Matan Barak committed 8 years ago

Commit 0ede73b1 parent 1f7ff9d21 files · +48 −6Browse files

Unified · Split

21 files
  1. drivers/infiniband/core/uverbs_ioctl.c +4 −1
  2. drivers/infiniband/hw/bnxt_re/main.c +1 −0
  3. drivers/infiniband/hw/cxgb3/iwch_provider.c +1 −0
  4. drivers/infiniband/hw/cxgb4/provider.c +1 −0
  5. drivers/infiniband/hw/hfi1/verbs.c +1 −1
  6. drivers/infiniband/hw/hns/hns_roce_main.c +1 −0
  7. drivers/infiniband/hw/i40iw/i40iw_verbs.c +1 −0
  8. drivers/infiniband/hw/mlx4/main.c +1 −0
  9. drivers/infiniband/hw/mlx5/main.c +1 −0
  10. drivers/infiniband/hw/mthca/mthca_provider.c +1 −0
  11. drivers/infiniband/hw/nes/nes_verbs.c +1 −0
  12. drivers/infiniband/hw/ocrdma/ocrdma_main.c +1 −0
  13. drivers/infiniband/hw/qedr/main.c +1 −0
  14. drivers/infiniband/hw/qib/qib_verbs.c +1 −1
  15. drivers/infiniband/hw/usnic/usnic_ib_main.c +1 −0
  16. drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c +1 −0
  17. drivers/infiniband/sw/rdmavt/vt.c +2 −1
  18. drivers/infiniband/sw/rxe/rxe_verbs.c +1 −0
  19. include/rdma/ib_verbs.h +2 −0
  20. include/rdma/rdma_vt.h +1 −1
  21. include/uapi/rdma/rdma_user_ioctl_cmds.h +23 −1
drivers/infiniband/core/uverbs_ioctl.c+4−1
@@ -246,6 +246,9 @@ static long ib_uverbs_cmd_verbs(struct ib_device *ib_dev, · 245 unmodified lines
246246 size_t ctx_size;
247247 uintptr_t data[UVERBS_OPTIMIZE_USING_STACK_SZ / sizeof(uintptr_t)];
248248
249+ if (hdr->driver_id != ib_dev->driver_id)
250+ return -EINVAL;
251+
249252 object_spec = uverbs_get_object(ib_dev, hdr->object_id);
250253 if (!object_spec)
251254 return -EPROTONOSUPPORT;
@@ -350,7 +353,7 @@ long ib_uverbs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) · 98 unmodified lines
350353 goto out;
351354 }
352355
353− if (hdr.reserved) {
356+ if (hdr.reserved1 || hdr.reserved2) {
354357 err = -EPROTONOSUPPORT;
355358 goto out;
356359 }
drivers/infiniband/hw/bnxt_re/main.c+1−0
@@ -619,6 +619,7 @@ static int bnxt_re_register_ib(struct bnxt_re_dev *rdev) · 618 unmodified lines
619619 ibdev->get_hw_stats = bnxt_re_ib_get_hw_stats;
620620 ibdev->alloc_hw_stats = bnxt_re_ib_alloc_hw_stats;
621621
622+ ibdev->driver_id = RDMA_DRIVER_BNXT_RE;
622623 return ib_register_device(ibdev, NULL);
623624 }
624625
drivers/infiniband/hw/cxgb3/iwch_provider.c+1−0
@@ -1439,6 +1439,7 @@ int iwch_register_device(struct iwch_dev *dev) · 1438 unmodified lines
14391439 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.t3cdev_p->lldev->name,
14401440 sizeof(dev->ibdev.iwcm->ifname));
14411441
1442+ dev->ibdev.driver_id = RDMA_DRIVER_CXGB3;
14421443 ret = ib_register_device(&dev->ibdev, NULL);
14431444 if (ret)
14441445 goto bail1;
drivers/infiniband/hw/cxgb4/provider.c+1−0
@@ -629,6 +629,7 @@ void c4iw_register_device(struct work_struct *work) · 628 unmodified lines
629629 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.lldi.ports[0]->name,
630630 sizeof(dev->ibdev.iwcm->ifname));
631631
632+ dev->ibdev.driver_id = RDMA_DRIVER_CXGB4;
632633 ret = ib_register_device(&dev->ibdev, NULL);
633634 if (ret)
634635 goto err_kfree_iwcm;
drivers/infiniband/hw/hfi1/verbs.c+1−1
@@ -1960,7 +1960,7 @@ int hfi1_register_ib_device(struct hfi1_devdata *dd) · 1959 unmodified lines
19601960 i,
19611961 ppd->pkeys);
19621962
1963− ret = rvt_register_device(&dd->verbs_dev.rdi);
1963+ ret = rvt_register_device(&dd->verbs_dev.rdi, RDMA_DRIVER_HFI1);
19641964 if (ret)
19651965 goto err_verbs_txreq;
19661966
drivers/infiniband/hw/hns/hns_roce_main.c+1−0
@@ -526,6 +526,7 @@ static int hns_roce_register_device(struct hns_roce_dev *hr_dev) · 525 unmodified lines
526526 /* OTHERS */
527527 ib_dev->get_port_immutable = hns_roce_port_immutable;
528528
529+ ib_dev->driver_id = RDMA_DRIVER_HNS;
529530 ret = ib_register_device(ib_dev, NULL);
530531 if (ret) {
531532 dev_err(dev, "ib_register_device failed!\n");
drivers/infiniband/hw/i40iw/i40iw_verbs.c+1−0
@@ -2927,6 +2927,7 @@ int i40iw_register_rdma_device(struct i40iw_device *iwdev) · 2926 unmodified lines
29272927 return -ENOMEM;
29282928 iwibdev = iwdev->iwibdev;
29292929
2930+ iwibdev->ibdev.driver_id = RDMA_DRIVER_I40IW;
29302931 ret = ib_register_device(&iwibdev->ibdev, NULL);
29312932 if (ret)
29322933 goto error;
drivers/infiniband/hw/mlx4/main.c+1−0
@@ -2955,6 +2955,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) · 2954 unmodified lines
29552955 if (mlx4_ib_alloc_diag_counters(ibdev))
29562956 goto err_steer_free_bitmap;
29572957
2958+ ibdev->ib_dev.driver_id = RDMA_DRIVER_MLX4;
29582959 if (ib_register_device(&ibdev->ib_dev, NULL))
29592960 goto err_diag_counters;
29602961
drivers/infiniband/hw/mlx5/main.c+1−0
@@ -4779,6 +4779,7 @@ int mlx5_ib_stage_caps_init(struct mlx5_ib_dev *dev) · 4778 unmodified lines
47794779 dev->ib_dev.uverbs_ex_cmd_mask |=
47804780 (1ull << IB_USER_VERBS_EX_CMD_CREATE_FLOW) |
47814781 (1ull << IB_USER_VERBS_EX_CMD_DESTROY_FLOW);
4782+ dev->ib_dev.driver_id = RDMA_DRIVER_MLX5;
47824783
47834784 err = init_node_data(dev);
47844785 if (err)
drivers/infiniband/hw/mthca/mthca_provider.c+1−0
@@ -1295,6 +1295,7 @@ int mthca_register_device(struct mthca_dev *dev) · 1294 unmodified lines
12951295
12961296 mutex_init(&dev->cap_mask_mutex);
12971297
1298+ dev->ib_dev.driver_id = RDMA_DRIVER_MTHCA;
12981299 ret = ib_register_device(&dev->ib_dev, NULL);
12991300 if (ret)
13001301 return ret;
drivers/infiniband/hw/nes/nes_verbs.c+1−0
@@ -3854,6 +3854,7 @@ int nes_register_ofa_device(struct nes_ib_device *nesibdev) · 3853 unmodified lines
38543854 struct nes_adapter *nesadapter = nesdev->nesadapter;
38553855 int i, ret;
38563856
3857+ nesvnic->nesibdev->ibdev.driver_id = RDMA_DRIVER_NES;
38573858 ret = ib_register_device(&nesvnic->nesibdev->ibdev, NULL);
38583859 if (ret) {
38593860 return ret;
drivers/infiniband/hw/ocrdma/ocrdma_main.c+1−0
@@ -215,6 +215,7 @@ static int ocrdma_register_device(struct ocrdma_dev *dev) · 214 unmodified lines
215215 dev->ibdev.destroy_srq = ocrdma_destroy_srq;
216216 dev->ibdev.post_srq_recv = ocrdma_post_srq_recv;
217217 }
218+ dev->ibdev.driver_id = RDMA_DRIVER_OCRDMA;
218219 return ib_register_device(&dev->ibdev, NULL);
219220 }
220221
drivers/infiniband/hw/qedr/main.c+1−0
@@ -257,6 +257,7 @@ static int qedr_register_device(struct qedr_dev *dev) · 256 unmodified lines
257257 dev->ibdev.get_link_layer = qedr_link_layer;
258258 dev->ibdev.get_dev_fw_str = qedr_get_dev_fw_str;
259259
260+ dev->ibdev.driver_id = RDMA_DRIVER_QEDR;
260261 return ib_register_device(&dev->ibdev, NULL);
261262 }
262263
drivers/infiniband/hw/qib/qib_verbs.c+1−1
@@ -1646,7 +1646,7 @@ int qib_register_ib_device(struct qib_devdata *dd) · 1645 unmodified lines
16461646 dd->rcd[ctxt]->pkeys);
16471647 }
16481648
1649− ret = rvt_register_device(&dd->verbs_dev.rdi);
1649+ ret = rvt_register_device(&dd->verbs_dev.rdi, RDMA_DRIVER_QIB);
16501650 if (ret)
16511651 goto err_tx;
16521652
drivers/infiniband/hw/usnic/usnic_ib_main.c+1−0
@@ -433,6 +433,7 @@ static void *usnic_ib_device_add(struct pci_dev *dev) · 432 unmodified lines
433433 us_ibdev->ib_dev.get_dev_fw_str = usnic_get_dev_fw_str;
434434
435435
436+ us_ibdev->ib_dev.driver_id = RDMA_DRIVER_USNIC;
436437 if (ib_register_device(&us_ibdev->ib_dev, NULL))
437438 goto err_fwd_dealloc;
438439
drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c+1−0
@@ -276,6 +276,7 @@ static int pvrdma_register_device(struct pvrdma_dev *dev) · 275 unmodified lines
276276 if (!dev->srq_tbl)
277277 goto err_qp_free;
278278 }
279+ dev->ib_dev.driver_id = RDMA_DRIVER_VMW_PVRDMA;
279280 spin_lock_init(&dev->srq_tbl_lock);
280281
281282 ret = ib_register_device(&dev->ib_dev, NULL);
drivers/infiniband/sw/rdmavt/vt.c+2−1
@@ -730,7 +730,7 @@ static noinline int check_support(struct rvt_dev_info *rdi, int verb) · 729 unmodified lines
730730 *
731731 * Return: 0 on success otherwise an errno.
732732 */
733−int rvt_register_device(struct rvt_dev_info *rdi)
733+int rvt_register_device(struct rvt_dev_info *rdi, u32 driver_id)
734734 {
735735 int ret = 0, i;
736736
@@ -831,6 +831,7 @@ int rvt_register_device(struct rvt_dev_info *rdi) · 94 unmodified lines
831831 rdi->ibdev.node_type = RDMA_NODE_IB_CA;
832832 rdi->ibdev.num_comp_vectors = 1;
833833
834+ rdi->ibdev.driver_id = driver_id;
834835 /* We are now good to announce we exist */
835836 ret = ib_register_device(&rdi->ibdev, rdi->driver_f.port_callback);
836837 if (ret) {
drivers/infiniband/sw/rxe/rxe_verbs.c+1−0
@@ -1335,6 +1335,7 @@ int rxe_register_device(struct rxe_dev *rxe) · 1334 unmodified lines
13351335 }
13361336 rxe->tfm = tfm;
13371337
1338+ dev->driver_id = RDMA_DRIVER_RXE;
13381339 err = ib_register_device(dev, NULL);
13391340 if (err) {
13401341 pr_warn("%s failed with error %d\n", __func__, err);
include/rdma/ib_verbs.h+2−0
@@ -64,6 +64,7 @@ · 63 unmodified lines
6464 #include <linux/cgroup_rdma.h>
6565 #include <uapi/rdma/ib_user_verbs.h>
6666 #include <rdma/restrack.h>
67+#include <uapi/rdma/rdma_user_ioctl.h>
6768
6869 #define IB_FW_VERSION_NAME_MAX ETHTOOL_FWVERS_LEN
6970
@@ -2385,6 +2386,7 @@ struct ib_device { · 2315 unmodified lines
23852386 int comp_vector);
23862387
23872388 struct uverbs_root_spec *specs_root;
2389+ enum rdma_driver_id driver_id;
23882390 };
23892391
23902392 struct ib_client {
include/rdma/rdma_vt.h+1−1
@@ -538,7 +538,7 @@ static inline void rvt_mod_retry_timer(struct rvt_qp *qp) · 537 unmodified lines
538538
539539 struct rvt_dev_info *rvt_alloc_device(size_t size, int nports);
540540 void rvt_dealloc_device(struct rvt_dev_info *rdi);
541−int rvt_register_device(struct rvt_dev_info *rvd);
541+int rvt_register_device(struct rvt_dev_info *rvd, u32 driver_id);
542542 void rvt_unregister_device(struct rvt_dev_info *rvd);
543543 int rvt_check_ah(struct ib_device *ibdev, struct rdma_ah_attr *ah_attr);
544544 int rvt_init_port(struct rvt_dev_info *rdi, struct rvt_ibport *port,
include/uapi/rdma/rdma_user_ioctl_cmds.h+23−1
@@ -64,8 +64,30 @@ struct ib_uverbs_ioctl_hdr { · 63 unmodified lines
6464 __u16 object_id;
6565 __u16 method_id;
6666 __u16 num_attrs;
67− __aligned_u64 reserved;
67+ __aligned_u64 reserved1;
68+ __u32 driver_id;
69+ __u32 reserved2;
6870 struct ib_uverbs_attr attrs[0];
6971 };
7072
73+enum rdma_driver_id {
74+ RDMA_DRIVER_UNKNOWN,
75+ RDMA_DRIVER_MLX5,
76+ RDMA_DRIVER_MLX4,
77+ RDMA_DRIVER_CXGB3,
78+ RDMA_DRIVER_CXGB4,
79+ RDMA_DRIVER_MTHCA,
80+ RDMA_DRIVER_BNXT_RE,
81+ RDMA_DRIVER_OCRDMA,
82+ RDMA_DRIVER_NES,
83+ RDMA_DRIVER_I40IW,
84+ RDMA_DRIVER_VMW_PVRDMA,
85+ RDMA_DRIVER_QEDR,
86+ RDMA_DRIVER_HNS,
87+ RDMA_DRIVER_USNIC,
88+ RDMA_DRIVER_RXE,
89+ RDMA_DRIVER_HFI1,
90+ RDMA_DRIVER_QIB,
91+};
92+
7193 #endif

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