From patchwork Thu Aug 24 22:00:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 9921025 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 1208E600C5 for ; Thu, 24 Aug 2017 22:00:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 057D11FF28 for ; Thu, 24 Aug 2017 22:00:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EE9BD1FF2C; Thu, 24 Aug 2017 22:00:36 +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.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID 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 7ABED1FF29 for ; Thu, 24 Aug 2017 22:00:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753456AbdHXWAe (ORCPT ); Thu, 24 Aug 2017 18:00:34 -0400 Received: from quartz.orcorp.ca ([184.70.90.242]:42194 "EHLO quartz.orcorp.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753854AbdHXWAc (ORCPT ); Thu, 24 Aug 2017 18:00:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=obsidianresearch.com; s=rsa1; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=am1NgbP+vga2LfyxgQn9tBTOe9T/JzH4o6HSTZ3zdf4=; b=t4bUAUa/46W7LNn0z7AU5ysa95EMLPDoB/4msVQ8LJo+DiUKdH3ETZCIth+RJWY714houBFNcmF8oPPS4glWC3kINM+ODKI5wMiloJJO2n0WwF8DFQDrT9FAau+uzTqontz9iDJKRqc9zor6xW2PksO1WLjPxdnFj5Kp+nU1cEo=; Received: from [10.0.0.156] (helo=jggl.edm.orcorp.ca) by quartz.orcorp.ca with esmtps (TLS1.2:ECDHE_RSA_AES_128_CBC_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1dl0Ax-0003k7-Ti; Thu, 24 Aug 2017 16:00:31 -0600 From: Jason Gunthorpe To: linux-rdma@vger.kernel.org Cc: Leon Romanovsky , Yishai Hadas Subject: [PATCH rdma-core 3/3] mlx5: Fix ABI break from revising the UAR pointer Date: Thu, 24 Aug 2017 16:00:29 -0600 Message-Id: <1503612029-19854-4-git-send-email-jgunthorpe@obsidianresearch.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503612029-19854-1-git-send-email-jgunthorpe@obsidianresearch.com> References: <1503612029-19854-1-git-send-email-jgunthorpe@obsidianresearch.com> X-Broken-Reverse-DNS: no host name found for IP address 10.0.0.156 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 Provide two implementations of mlx5dv_init_obj, one that has the historical behaviour that has existed until now of returning the void **uar and a new version that returns the 'void *' version renamed to arm_db. Apps that use this feature must refer to it as arb_db, they will not compile on pre-rdma-core 15 releases, and they will not dynamically link to old versions either. This provides a sane level of safety for the end users of this library. Fixes: c6e3439aaa93 ("mlx5: Return pointer to CQ doorbell") Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe --- debian/ibverbs-providers.symbols | 2 ++ providers/mlx5/CMakeLists.txt | 2 +- providers/mlx5/libmlx5.map | 5 +++++ providers/mlx5/mlx5.c | 24 ++++++++++++++++++++++-- providers/mlx5/mlx5dv.h | 2 +- 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/debian/ibverbs-providers.symbols b/debian/ibverbs-providers.symbols index 5aa3b877b55b59..b03c33a2ba9fce 100644 --- a/debian/ibverbs-providers.symbols +++ b/debian/ibverbs-providers.symbols @@ -4,6 +4,8 @@ libmlx4.so.1 ibverbs-providers #MINVER# libmlx5.so.1 ibverbs-providers #MINVER# MLX5_1.0@MLX5_1.0 13 MLX5_1.1@MLX5_1.1 14 + MLX5_1.2@MLX5_1.2 15 mlx5dv_init_obj@MLX5_1.0 13 + mlx5dv_init_obj@MLX5_1.2 15 mlx5dv_query_device@MLX5_1.0 13 mlx5dv_create_cq@MLX5_1.1 14 diff --git a/providers/mlx5/CMakeLists.txt b/providers/mlx5/CMakeLists.txt index 0fb9907bf258d1..ab6a42d8915a2a 100644 --- a/providers/mlx5/CMakeLists.txt +++ b/providers/mlx5/CMakeLists.txt @@ -11,7 +11,7 @@ if (MLX5_MW_DEBUG) endif() rdma_shared_provider(mlx5 libmlx5.map - 1 1.1.${PACKAGE_VERSION} + 1 1.2.${PACKAGE_VERSION} buf.c cq.c dbrec.c diff --git a/providers/mlx5/libmlx5.map b/providers/mlx5/libmlx5.map index 6d9fb25f00a3db..e7fe9f41697009 100644 --- a/providers/mlx5/libmlx5.map +++ b/providers/mlx5/libmlx5.map @@ -11,3 +11,8 @@ MLX5_1.1 { global: mlx5dv_create_cq; } MLX5_1.0; + +MLX5_1.2 { + global: + mlx5dv_init_obj; +} MLX5_1.1; diff --git a/providers/mlx5/mlx5.c b/providers/mlx5/mlx5.c index dd825561ec740f..c949c0fce3c98b 100644 --- a/providers/mlx5/mlx5.c +++ b/providers/mlx5/mlx5.c @@ -42,6 +42,8 @@ #include #include +#include + #include "mlx5.h" #include "mlx5-abi.h" @@ -678,7 +680,7 @@ static int mlx5dv_get_cq(struct ibv_cq *cq_in, cq_out->cqe_size = mcq->cqe_sz; cq_out->buf = mcq->active_buf->buf; cq_out->dbrec = mcq->dbrec; - cq_out->uar = mctx->uar[0]; + cq_out->arm_db = mctx->uar[0]; mcq->flags |= MLX5_CQ_FLAGS_DV_OWNED; @@ -716,7 +718,9 @@ static int mlx5dv_get_srq(struct ibv_srq *srq_in, return 0; } -int mlx5dv_init_obj(struct mlx5dv_obj *obj, uint64_t obj_type) +LATEST_SYMVER_FUNC(mlx5dv_init_obj, 1_2, "MLX5_1.2", + int, + struct mlx5dv_obj *obj, uint64_t obj_type) { int ret = 0; @@ -732,6 +736,22 @@ int mlx5dv_init_obj(struct mlx5dv_obj *obj, uint64_t obj_type) return ret; } +COMPAT_SYMVER_FUNC(mlx5dv_init_obj, 1_0, "MLX5_1.0", + int, + struct mlx5dv_obj *obj, uint64_t obj_type) +{ + int ret = 0; + + ret = __mlx5dv_init_obj_1_2(obj, obj_type); + if (!ret && (obj_type & MLX5DV_OBJ_CQ)) { + /* ABI version 1.0 returns the void ** in this memory + * location + */ + obj->cq.out->arm_db = to_mctx(obj->cq.in->context)->uar; + } + return ret; +} + static void adjust_uar_info(struct mlx5_device *mdev, struct mlx5_context *context, struct mlx5_alloc_ucontext_resp resp) diff --git a/providers/mlx5/mlx5dv.h b/providers/mlx5/mlx5dv.h index cff3a10457300f..1a2e257c4bcc6f 100644 --- a/providers/mlx5/mlx5dv.h +++ b/providers/mlx5/mlx5dv.h @@ -129,7 +129,7 @@ struct mlx5dv_cq { __be32 *dbrec; uint32_t cqe_cnt; uint32_t cqe_size; - void *uar; + void *arm_db; uint32_t cqn; uint64_t comp_mask; };