From patchwork Wed Mar 14 12:29:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yishai Hadas X-Patchwork-Id: 10282037 X-Patchwork-Delegate: leon@leon.nu Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C02596038F for ; Wed, 14 Mar 2018 12:30:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AF7FF288AD for ; Wed, 14 Mar 2018 12:30:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A3E64288B9; Wed, 14 Mar 2018 12:30:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C941E288AD for ; Wed, 14 Mar 2018 12:30:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750902AbeCNMam (ORCPT ); Wed, 14 Mar 2018 08:30:42 -0400 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:48267 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751295AbeCNMal (ORCPT ); Wed, 14 Mar 2018 08:30:41 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from yishaih@mellanox.com) with ESMTPS (AES256-SHA encrypted); 14 Mar 2018 14:31:13 +0200 Received: from vnc17.mtl.labs.mlnx (vnc17.mtl.labs.mlnx [10.7.2.17]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id w2ECUZEj004410; Wed, 14 Mar 2018 14:30:35 +0200 Received: from vnc17.mtl.labs.mlnx (vnc17.mtl.labs.mlnx [127.0.0.1]) by vnc17.mtl.labs.mlnx (8.13.8/8.13.8) with ESMTP id w2ECUZIq021434; Wed, 14 Mar 2018 14:30:35 +0200 Received: (from yishaih@localhost) by vnc17.mtl.labs.mlnx (8.13.8/8.13.8/Submit) id w2ECUZZp021433; Wed, 14 Mar 2018 14:30:35 +0200 From: Yishai Hadas To: linux-rdma@vger.kernel.org Cc: yishaih@mellanox.com, matanb@mellanox.com, jgg@mellanox.com, majd@mellanox.com Subject: [PATCH rdma-core 2/2] Add driver-id to ioctl() infrastructure Date: Wed, 14 Mar 2018 14:29:55 +0200 Message-Id: <1521030595-20821-3-git-send-email-yishaih@mellanox.com> X-Mailer: git-send-email 1.8.2.3 In-Reply-To: <1521030595-20821-1-git-send-email-yishaih@mellanox.com> References: <1521030595-20821-1-git-send-email-yishaih@mellanox.com> Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Matan Barak The last ioctl series in kernel added a driver_id field. This enables strace to correctly extract and print the command for the different drivers. We align the user-space code with this change and align the various drivers to embed the right driver_id. Signed-off-by: Matan Barak Reviewed-by: Yishai Hadas --- libibverbs/cmd_ioctl.c | 4 ++++ libibverbs/device.c | 9 ++++++--- libibverbs/driver.h | 12 ++++++++---- libibverbs/ibverbs.h | 1 + providers/bnxt_re/main.c | 3 ++- providers/cxgb3/iwch.c | 3 ++- providers/cxgb4/dev.c | 3 ++- providers/hfi1verbs/hfiverbs.c | 3 ++- providers/hns/hns_roce_u.c | 3 ++- providers/i40iw/i40iw_umain.c | 3 ++- providers/ipathverbs/ipathverbs.c | 3 ++- providers/mlx4/mlx4.c | 3 ++- providers/mlx5/mlx5.c | 3 ++- providers/mthca/mthca.c | 3 ++- providers/nes/nes_umain.c | 3 ++- providers/ocrdma/ocrdma_main.c | 3 ++- providers/qedr/qelr_main.c | 3 ++- providers/rxe/rxe.c | 3 ++- providers/vmw_pvrdma/pvrdma_main.c | 3 ++- 19 files changed, 49 insertions(+), 22 deletions(-) diff --git a/libibverbs/cmd_ioctl.c b/libibverbs/cmd_ioctl.c index 5bc2b59..b70bfae 100644 --- a/libibverbs/cmd_ioctl.c +++ b/libibverbs/cmd_ioctl.c @@ -35,6 +35,7 @@ #include "ibverbs.h" #include +#include #include @@ -125,12 +126,15 @@ static void finalize_attrs(struct ibv_command_buffer *cmd) int execute_ioctl(struct ibv_context *context, struct ibv_command_buffer *cmd) { + struct verbs_context *vctx = verbs_get_ctx(context); + prepare_attrs(cmd); cmd->hdr.length = sizeof(cmd->hdr) + sizeof(cmd->hdr.attrs[0]) * cmd->hdr.num_attrs; cmd->hdr.reserved1 = 0; cmd->hdr.reserved2 = 0; + cmd->hdr.driver_id = vctx->priv->driver_id; if (ioctl(context->cmd_fd, RDMA_VERBS_IOCTL, &cmd->hdr)) return errno; diff --git a/libibverbs/device.c b/libibverbs/device.c index 8b97dde..ea571d0 100644 --- a/libibverbs/device.c +++ b/libibverbs/device.c @@ -186,7 +186,8 @@ __lib_ibv_create_cq_ex(struct ibv_context *context, * failure path of this function. */ int verbs_init_context(struct verbs_context *context_ex, - struct ibv_device *device, int cmd_fd) + struct ibv_device *device, int cmd_fd, + uint32_t driver_id) { struct ibv_context *context = &context_ex->context; @@ -224,6 +225,7 @@ int verbs_init_context(struct verbs_context *context_ex, return -1; } + context_ex->priv->driver_id = driver_id; verbs_set_ops(context_ex, &verbs_dummy_ops); return 0; @@ -236,7 +238,8 @@ int verbs_init_context(struct verbs_context *context_ex, */ void *_verbs_init_and_alloc_context(struct ibv_device *device, int cmd_fd, size_t alloc_size, - struct verbs_context *context_offset) + struct verbs_context *context_offset, + uint32_t driver_id) { void *drv_context; struct verbs_context *context; @@ -250,7 +253,7 @@ void *_verbs_init_and_alloc_context(struct ibv_device *device, int cmd_fd, context = drv_context + (uintptr_t)context_offset; - if (verbs_init_context(context, device, cmd_fd)) + if (verbs_init_context(context, device, cmd_fd, driver_id)) goto err_free; return drv_context; diff --git a/libibverbs/driver.h b/libibverbs/driver.h index 39b6bca..83b3870 100644 --- a/libibverbs/driver.h +++ b/libibverbs/driver.h @@ -41,6 +41,7 @@ #include #include #include +#include struct verbs_device; @@ -300,15 +301,18 @@ void verbs_register_driver(const struct verbs_device_ops *ops); void *_verbs_init_and_alloc_context(struct ibv_device *device, int cmd_fd, size_t alloc_size, - struct verbs_context *context_offset); + struct verbs_context *context_offset, + uint32_t driver_id); -#define verbs_init_and_alloc_context(ibdev, cmd_fd, drv_ctx_ptr, ctx_memb) \ +#define verbs_init_and_alloc_context(ibdev, cmd_fd, drv_ctx_ptr, ctx_memb, \ + driver_id) \ ((typeof(drv_ctx_ptr))_verbs_init_and_alloc_context( \ ibdev, cmd_fd, sizeof(*drv_ctx_ptr), \ - &((typeof(drv_ctx_ptr))NULL)->ctx_memb)) + &((typeof(drv_ctx_ptr))NULL)->ctx_memb, (driver_id))) int verbs_init_context(struct verbs_context *context_ex, - struct ibv_device *device, int cmd_fd); + struct ibv_device *device, int cmd_fd, + uint32_t driver_id); void verbs_uninit_context(struct verbs_context *context); void verbs_set_ops(struct verbs_context *vctx, const struct verbs_context_ops *ops); diff --git a/libibverbs/ibverbs.h b/libibverbs/ibverbs.h index 98000ff..ce8973a 100644 --- a/libibverbs/ibverbs.h +++ b/libibverbs/ibverbs.h @@ -62,6 +62,7 @@ struct verbs_ex_private { struct ibv_cq_init_attr_ex *init_attr); uint64_t unsupported_ioctls; + uint32_t driver_id; }; #define IBV_INIT_CMD(cmd, size, opcode) \ diff --git a/providers/bnxt_re/main.c b/providers/bnxt_re/main.c index eae50b0..fac5bd3 100644 --- a/providers/bnxt_re/main.c +++ b/providers/bnxt_re/main.c @@ -117,7 +117,8 @@ static struct verbs_context *bnxt_re_alloc_context(struct ibv_device *vdev, struct bnxt_re_dev *dev = to_bnxt_re_dev(vdev); struct bnxt_re_context *cntx; - cntx = verbs_init_and_alloc_context(vdev, cmd_fd, cntx, ibvctx); + cntx = verbs_init_and_alloc_context(vdev, cmd_fd, cntx, ibvctx, + RDMA_DRIVER_BNXT_RE); if (!cntx) return NULL; diff --git a/providers/cxgb3/iwch.c b/providers/cxgb3/iwch.c index 8e2405f..c68626a 100644 --- a/providers/cxgb3/iwch.c +++ b/providers/cxgb3/iwch.c @@ -125,7 +125,8 @@ static struct verbs_context *iwch_alloc_context(struct ibv_device *ibdev, struct iwch_alloc_ucontext_resp resp; struct iwch_device *rhp = to_iwch_dev(ibdev); - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_CXGB3); if (!context) return NULL; diff --git a/providers/cxgb4/dev.c b/providers/cxgb4/dev.c index 4d60327..b1eeb52 100644 --- a/providers/cxgb4/dev.c +++ b/providers/cxgb4/dev.c @@ -115,7 +115,8 @@ static struct verbs_context *c4iw_alloc_context(struct ibv_device *ibdev, uint64_t raw_fw_ver; struct ibv_device_attr attr; - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_CXGB4); if (!context) return NULL; diff --git a/providers/hfi1verbs/hfiverbs.c b/providers/hfi1verbs/hfiverbs.c index d46ad86..2c70e48 100644 --- a/providers/hfi1verbs/hfiverbs.c +++ b/providers/hfi1verbs/hfiverbs.c @@ -144,7 +144,8 @@ static struct verbs_context *hfi1_alloc_context(struct ibv_device *ibdev, struct ib_uverbs_get_context_resp resp; struct hfi1_device *dev; - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_HFI1); if (!context) return NULL; diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c index 781825b..f43722c 100644 --- a/providers/hns/hns_roce_u.c +++ b/providers/hns/hns_roce_u.c @@ -71,7 +71,8 @@ static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev, struct hns_roce_alloc_ucontext_resp resp; struct hns_roce_device *hr_dev = to_hr_dev(ibdev); - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_HNS); if (!context) return NULL; diff --git a/providers/i40iw/i40iw_umain.c b/providers/i40iw/i40iw_umain.c index 6e25267..b169881 100644 --- a/providers/i40iw/i40iw_umain.c +++ b/providers/i40iw/i40iw_umain.c @@ -134,7 +134,8 @@ static struct verbs_context *i40iw_ualloc_context(struct ibv_device *ibdev, struct i40iw_get_context cmd; struct i40iw_ualloc_ucontext_resp resp; - iwvctx = verbs_init_and_alloc_context(ibdev, cmd_fd, iwvctx, ibv_ctx); + iwvctx = verbs_init_and_alloc_context(ibdev, cmd_fd, iwvctx, ibv_ctx, + RDMA_DRIVER_I40IW); if (!iwvctx) return NULL; diff --git a/providers/ipathverbs/ipathverbs.c b/providers/ipathverbs/ipathverbs.c index 00d84b7..95715d9 100644 --- a/providers/ipathverbs/ipathverbs.c +++ b/providers/ipathverbs/ipathverbs.c @@ -143,7 +143,8 @@ static struct verbs_context *ipath_alloc_context(struct ibv_device *ibdev, struct ib_uverbs_get_context_resp resp; struct ipath_device *dev; - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_QIB); if (!context) return NULL; diff --git a/providers/mlx4/mlx4.c b/providers/mlx4/mlx4.c index dd7b98b..1b9be11 100644 --- a/providers/mlx4/mlx4.c +++ b/providers/mlx4/mlx4.c @@ -177,7 +177,8 @@ static struct verbs_context *mlx4_alloc_context(struct ibv_device *ibdev, struct verbs_context *verbs_ctx; struct ibv_device_attr_ex dev_attrs; - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_MLX4); if (!context) return NULL; diff --git a/providers/mlx5/mlx5.c b/providers/mlx5/mlx5.c index 55b466c..0be76a7 100644 --- a/providers/mlx5/mlx5.c +++ b/providers/mlx5/mlx5.c @@ -974,7 +974,8 @@ static struct verbs_context *mlx5_alloc_context(struct ibv_device *ibdev, int bfi; int num_sys_page_map; - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_MLX5); if (!context) return NULL; diff --git a/providers/mthca/mthca.c b/providers/mthca/mthca.c index 25cf316..d2a9330 100644 --- a/providers/mthca/mthca.c +++ b/providers/mthca/mthca.c @@ -137,7 +137,8 @@ static struct verbs_context *mthca_alloc_context(struct ibv_device *ibdev, struct mthca_alloc_ucontext_resp resp; int i; - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_MTHCA); if (!context) return NULL; diff --git a/providers/nes/nes_umain.c b/providers/nes/nes_umain.c index c2c8b03..1a79132 100644 --- a/providers/nes/nes_umain.c +++ b/providers/nes/nes_umain.c @@ -109,7 +109,8 @@ static struct verbs_context *nes_ualloc_context(struct ibv_device *ibdev, page_size = sysconf(_SC_PAGESIZE); - nesvctx = verbs_init_and_alloc_context(ibdev, cmd_fd, nesvctx, ibv_ctx); + nesvctx = verbs_init_and_alloc_context(ibdev, cmd_fd, nesvctx, ibv_ctx, + RDMA_DRIVER_NES); if (!nesvctx) return NULL; diff --git a/providers/ocrdma/ocrdma_main.c b/providers/ocrdma/ocrdma_main.c index 5fb5714..76c3b30 100644 --- a/providers/ocrdma/ocrdma_main.c +++ b/providers/ocrdma/ocrdma_main.c @@ -112,7 +112,8 @@ static struct verbs_context *ocrdma_alloc_context(struct ibv_device *ibdev, struct ocrdma_get_context cmd; struct ocrdma_alloc_ucontext_resp resp; - ctx = verbs_init_and_alloc_context(ibdev, cmd_fd, ctx, ibv_ctx); + ctx = verbs_init_and_alloc_context(ibdev, cmd_fd, ctx, ibv_ctx, + RDMA_DRIVER_OCRDMA); if (!ctx) return NULL; diff --git a/providers/qedr/qelr_main.c b/providers/qedr/qelr_main.c index 9926f52..84a8576 100644 --- a/providers/qedr/qelr_main.c +++ b/providers/qedr/qelr_main.c @@ -162,7 +162,8 @@ static struct verbs_context *qelr_alloc_context(struct ibv_device *ibdev, struct qelr_get_context cmd; struct qelr_alloc_ucontext_resp resp; - ctx = verbs_init_and_alloc_context(ibdev, cmd_fd, ctx, ibv_ctx); + ctx = verbs_init_and_alloc_context(ibdev, cmd_fd, ctx, ibv_ctx, + RDMA_DRIVER_QEDR); if (!ctx) return NULL; diff --git a/providers/rxe/rxe.c b/providers/rxe/rxe.c index 53f0bf6..30d2e68 100644 --- a/providers/rxe/rxe.c +++ b/providers/rxe/rxe.c @@ -862,7 +862,8 @@ static struct verbs_context *rxe_alloc_context(struct ibv_device *ibdev, struct ibv_get_context cmd; struct ib_uverbs_get_context_resp resp; - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_RXE); if (!context) return NULL; diff --git a/providers/vmw_pvrdma/pvrdma_main.c b/providers/vmw_pvrdma/pvrdma_main.c index ab23bec..cbcc855 100644 --- a/providers/vmw_pvrdma/pvrdma_main.c +++ b/providers/vmw_pvrdma/pvrdma_main.c @@ -147,7 +147,8 @@ static struct verbs_context *pvrdma_alloc_context(struct ibv_device *ibdev, { struct pvrdma_context *context; - context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx); + context = verbs_init_and_alloc_context(ibdev, cmd_fd, context, ibv_ctx, + RDMA_DRIVER_VMW_PVRDMA); if (!context) return NULL;