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
246 size_t ctx_size;246 size_t ctx_size;
247 uintptr_t data[UVERBS_OPTIMIZE_USING_STACK_SZ / sizeof(uintptr_t)];247 uintptr_t data[UVERBS_OPTIMIZE_USING_STACK_SZ / sizeof(uintptr_t)];
248 248
249 if (hdr->driver_id != ib_dev->driver_id)
250 return -EINVAL;
251
249 object_spec = uverbs_get_object(ib_dev, hdr->object_id);252 object_spec = uverbs_get_object(ib_dev, hdr->object_id);
250 if (!object_spec)253 if (!object_spec)
251 return -EPROTONOSUPPORT;254 return -EPROTONOSUPPORT;
@@ -350,7 +353,7 @@ long ib_uverbs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) · 98 unmodified lines
350 goto out;353 goto out;
351 }354 }
352 355
353 if (hdr.reserved) {356 if (hdr.reserved1 || hdr.reserved2) {
354 err = -EPROTONOSUPPORT;357 err = -EPROTONOSUPPORT;
355 goto out;358 goto out;
356 }359 }
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
619 ibdev->get_hw_stats = bnxt_re_ib_get_hw_stats;619 ibdev->get_hw_stats = bnxt_re_ib_get_hw_stats;
620 ibdev->alloc_hw_stats = bnxt_re_ib_alloc_hw_stats;620 ibdev->alloc_hw_stats = bnxt_re_ib_alloc_hw_stats;
621 621
622 ibdev->driver_id = RDMA_DRIVER_BNXT_RE;
622 return ib_register_device(ibdev, NULL);623 return ib_register_device(ibdev, NULL);
623}624}
624 625
drivers/infiniband/hw/cxgb3/iwch_provider.c+1−0
@@ -1439,6 +1439,7 @@ int iwch_register_device(struct iwch_dev *dev) · 1438 unmodified lines
1439 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.t3cdev_p->lldev->name,1439 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.t3cdev_p->lldev->name,
1440 sizeof(dev->ibdev.iwcm->ifname));1440 sizeof(dev->ibdev.iwcm->ifname));
1441 1441
1442 dev->ibdev.driver_id = RDMA_DRIVER_CXGB3;
1442 ret = ib_register_device(&dev->ibdev, NULL);1443 ret = ib_register_device(&dev->ibdev, NULL);
1443 if (ret)1444 if (ret)
1444 goto bail1;1445 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
629 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.lldi.ports[0]->name,629 memcpy(dev->ibdev.iwcm->ifname, dev->rdev.lldi.ports[0]->name,
630 sizeof(dev->ibdev.iwcm->ifname));630 sizeof(dev->ibdev.iwcm->ifname));
631 631
632 dev->ibdev.driver_id = RDMA_DRIVER_CXGB4;
632 ret = ib_register_device(&dev->ibdev, NULL);633 ret = ib_register_device(&dev->ibdev, NULL);
633 if (ret)634 if (ret)
634 goto err_kfree_iwcm;635 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
1960 i,1960 i,
1961 ppd->pkeys);1961 ppd->pkeys);
1962 1962
1963 ret = rvt_register_device(&dd->verbs_dev.rdi);1963 ret = rvt_register_device(&dd->verbs_dev.rdi, RDMA_DRIVER_HFI1);
1964 if (ret)1964 if (ret)
1965 goto err_verbs_txreq;1965 goto err_verbs_txreq;
1966 1966
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
526 /* OTHERS */526 /* OTHERS */
527 ib_dev->get_port_immutable = hns_roce_port_immutable;527 ib_dev->get_port_immutable = hns_roce_port_immutable;
528 528
529 ib_dev->driver_id = RDMA_DRIVER_HNS;
529 ret = ib_register_device(ib_dev, NULL);530 ret = ib_register_device(ib_dev, NULL);
530 if (ret) {531 if (ret) {
531 dev_err(dev, "ib_register_device failed!\n");532 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
2927 return -ENOMEM;2927 return -ENOMEM;
2928 iwibdev = iwdev->iwibdev;2928 iwibdev = iwdev->iwibdev;
2929 2929
2930 iwibdev->ibdev.driver_id = RDMA_DRIVER_I40IW;
2930 ret = ib_register_device(&iwibdev->ibdev, NULL);2931 ret = ib_register_device(&iwibdev->ibdev, NULL);
2931 if (ret)2932 if (ret)
2932 goto error;2933 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
2955 if (mlx4_ib_alloc_diag_counters(ibdev))2955 if (mlx4_ib_alloc_diag_counters(ibdev))
2956 goto err_steer_free_bitmap;2956 goto err_steer_free_bitmap;
2957 2957
2958 ibdev->ib_dev.driver_id = RDMA_DRIVER_MLX4;
2958 if (ib_register_device(&ibdev->ib_dev, NULL))2959 if (ib_register_device(&ibdev->ib_dev, NULL))
2959 goto err_diag_counters;2960 goto err_diag_counters;
2960 2961
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
4779 dev->ib_dev.uverbs_ex_cmd_mask |=4779 dev->ib_dev.uverbs_ex_cmd_mask |=
4780 (1ull << IB_USER_VERBS_EX_CMD_CREATE_FLOW) |4780 (1ull << IB_USER_VERBS_EX_CMD_CREATE_FLOW) |
4781 (1ull << IB_USER_VERBS_EX_CMD_DESTROY_FLOW);4781 (1ull << IB_USER_VERBS_EX_CMD_DESTROY_FLOW);
4782 dev->ib_dev.driver_id = RDMA_DRIVER_MLX5;
4782 4783
4783 err = init_node_data(dev);4784 err = init_node_data(dev);
4784 if (err)4785 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
1295 1295
1296 mutex_init(&dev->cap_mask_mutex);1296 mutex_init(&dev->cap_mask_mutex);
1297 1297
1298 dev->ib_dev.driver_id = RDMA_DRIVER_MTHCA;
1298 ret = ib_register_device(&dev->ib_dev, NULL);1299 ret = ib_register_device(&dev->ib_dev, NULL);
1299 if (ret)1300 if (ret)
1300 return ret;1301 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
3854 struct nes_adapter *nesadapter = nesdev->nesadapter;3854 struct nes_adapter *nesadapter = nesdev->nesadapter;
3855 int i, ret;3855 int i, ret;
3856 3856
3857 nesvnic->nesibdev->ibdev.driver_id = RDMA_DRIVER_NES;
3857 ret = ib_register_device(&nesvnic->nesibdev->ibdev, NULL);3858 ret = ib_register_device(&nesvnic->nesibdev->ibdev, NULL);
3858 if (ret) {3859 if (ret) {
3859 return ret;3860 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
215 dev->ibdev.destroy_srq = ocrdma_destroy_srq;215 dev->ibdev.destroy_srq = ocrdma_destroy_srq;
216 dev->ibdev.post_srq_recv = ocrdma_post_srq_recv;216 dev->ibdev.post_srq_recv = ocrdma_post_srq_recv;
217 }217 }
218 dev->ibdev.driver_id = RDMA_DRIVER_OCRDMA;
218 return ib_register_device(&dev->ibdev, NULL);219 return ib_register_device(&dev->ibdev, NULL);
219}220}
220 221
drivers/infiniband/hw/qedr/main.c+1−0
@@ -257,6 +257,7 @@ static int qedr_register_device(struct qedr_dev *dev) · 256 unmodified lines
257 dev->ibdev.get_link_layer = qedr_link_layer;257 dev->ibdev.get_link_layer = qedr_link_layer;
258 dev->ibdev.get_dev_fw_str = qedr_get_dev_fw_str;258 dev->ibdev.get_dev_fw_str = qedr_get_dev_fw_str;
259 259
260 dev->ibdev.driver_id = RDMA_DRIVER_QEDR;
260 return ib_register_device(&dev->ibdev, NULL);261 return ib_register_device(&dev->ibdev, NULL);
261}262}
262 263
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
1646 dd->rcd[ctxt]->pkeys);1646 dd->rcd[ctxt]->pkeys);
1647 }1647 }
1648 1648
1649 ret = rvt_register_device(&dd->verbs_dev.rdi);1649 ret = rvt_register_device(&dd->verbs_dev.rdi, RDMA_DRIVER_QIB);
1650 if (ret)1650 if (ret)
1651 goto err_tx;1651 goto err_tx;
1652 1652
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
433 us_ibdev->ib_dev.get_dev_fw_str = usnic_get_dev_fw_str;433 us_ibdev->ib_dev.get_dev_fw_str = usnic_get_dev_fw_str;
434 434
435 435
436 us_ibdev->ib_dev.driver_id = RDMA_DRIVER_USNIC;
436 if (ib_register_device(&us_ibdev->ib_dev, NULL))437 if (ib_register_device(&us_ibdev->ib_dev, NULL))
437 goto err_fwd_dealloc;438 goto err_fwd_dealloc;
438 439
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
276 if (!dev->srq_tbl)276 if (!dev->srq_tbl)
277 goto err_qp_free;277 goto err_qp_free;
278 }278 }
279 dev->ib_dev.driver_id = RDMA_DRIVER_VMW_PVRDMA;
279 spin_lock_init(&dev->srq_tbl_lock);280 spin_lock_init(&dev->srq_tbl_lock);
280 281
281 ret = ib_register_device(&dev->ib_dev, NULL);282 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
730 *730 *
731 * Return: 0 on success otherwise an errno.731 * Return: 0 on success otherwise an errno.
732 */732 */
733int rvt_register_device(struct rvt_dev_info *rdi)733int rvt_register_device(struct rvt_dev_info *rdi, u32 driver_id)
734{734{
735 int ret = 0, i;735 int ret = 0, i;
736 736
@@ -831,6 +831,7 @@ int rvt_register_device(struct rvt_dev_info *rdi) · 94 unmodified lines
831 rdi->ibdev.node_type = RDMA_NODE_IB_CA;831 rdi->ibdev.node_type = RDMA_NODE_IB_CA;
832 rdi->ibdev.num_comp_vectors = 1;832 rdi->ibdev.num_comp_vectors = 1;
833 833
834 rdi->ibdev.driver_id = driver_id;
834 /* We are now good to announce we exist */835 /* We are now good to announce we exist */
835 ret = ib_register_device(&rdi->ibdev, rdi->driver_f.port_callback);836 ret = ib_register_device(&rdi->ibdev, rdi->driver_f.port_callback);
836 if (ret) {837 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
1335 }1335 }
1336 rxe->tfm = tfm;1336 rxe->tfm = tfm;
1337 1337
1338 dev->driver_id = RDMA_DRIVER_RXE;
1338 err = ib_register_device(dev, NULL);1339 err = ib_register_device(dev, NULL);
1339 if (err) {1340 if (err) {
1340 pr_warn("%s failed with error %d\n", __func__, err);1341 pr_warn("%s failed with error %d\n", __func__, err);
include/rdma/ib_verbs.h+2−0
@@ -64,6 +64,7 @@ · 63 unmodified lines
64#include <linux/cgroup_rdma.h>64#include <linux/cgroup_rdma.h>
65#include <uapi/rdma/ib_user_verbs.h>65#include <uapi/rdma/ib_user_verbs.h>
66#include <rdma/restrack.h>66#include <rdma/restrack.h>
67#include <uapi/rdma/rdma_user_ioctl.h>
67 68
68#define IB_FW_VERSION_NAME_MAX ETHTOOL_FWVERS_LEN69#define IB_FW_VERSION_NAME_MAX ETHTOOL_FWVERS_LEN
69 70
@@ -2385,6 +2386,7 @@ struct ib_device { · 2315 unmodified lines
2385 int comp_vector);2386 int comp_vector);
2386 2387
2387 struct uverbs_root_spec *specs_root;2388 struct uverbs_root_spec *specs_root;
2389 enum rdma_driver_id driver_id;
2388};2390};
2389 2391
2390struct ib_client {2392struct 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
538 538
539struct rvt_dev_info *rvt_alloc_device(size_t size, int nports);539struct rvt_dev_info *rvt_alloc_device(size_t size, int nports);
540void rvt_dealloc_device(struct rvt_dev_info *rdi);540void rvt_dealloc_device(struct rvt_dev_info *rdi);
541int rvt_register_device(struct rvt_dev_info *rvd);541int rvt_register_device(struct rvt_dev_info *rvd, u32 driver_id);
542void rvt_unregister_device(struct rvt_dev_info *rvd);542void rvt_unregister_device(struct rvt_dev_info *rvd);
543int rvt_check_ah(struct ib_device *ibdev, struct rdma_ah_attr *ah_attr);543int rvt_check_ah(struct ib_device *ibdev, struct rdma_ah_attr *ah_attr);
544int rvt_init_port(struct rvt_dev_info *rdi, struct rvt_ibport *port,544int 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
64 __u16 object_id;64 __u16 object_id;
65 __u16 method_id;65 __u16 method_id;
66 __u16 num_attrs;66 __u16 num_attrs;
67 __aligned_u64 reserved;67 __aligned_u64 reserved1;
68 __u32 driver_id;
69 __u32 reserved2;
68 struct ib_uverbs_attr attrs[0];70 struct ib_uverbs_attr attrs[0];
69};71};
70 72
73enum 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
71#endif93#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