From patchwork Fri Jul 30 15:21:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12411579 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8522DC432BE for ; Fri, 30 Jul 2021 15:23:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6ECEA60F46 for ; Fri, 30 Jul 2021 15:23:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239559AbhG3PXP (ORCPT ); Fri, 30 Jul 2021 11:23:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239720AbhG3PXO (ORCPT ); Fri, 30 Jul 2021 11:23:14 -0400 Received: from mail-ot1-x333.google.com (mail-ot1-x333.google.com [IPv6:2607:f8b0:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 22055C0613C1 for ; Fri, 30 Jul 2021 08:23:10 -0700 (PDT) Received: by mail-ot1-x333.google.com with SMTP id x15-20020a05683000cfb02904d1f8b9db81so9836763oto.12 for ; Fri, 30 Jul 2021 08:23:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NeigI8aZa+KNtubfGbbxqzXBSdS2WPBug/qsj18eqE0=; b=JIu75NiQof9b7pDEY7DvrnZiW5AU8Sftr0Q2kIbvRTqgS6f5HiX1/M/isdeBOVwTfu wOE0yJg2Uq3ypq1qCYajoiT+mnMQOuQxDpwtfsr8PjU5NnzP0qza+v+fxwgHXO+1bdgM FoEweNmx2zCTuhd694KKiJldbNd2yarwwcXTGDp6VawC1IcYM7h3dILhDEw6W48htoNf vNd10MWbVwmz+dzv60liJ7HNkx57H9Zjuq2UJFWf6Lm30bDI1sdW/KrwmItzf/4bv7RB jMAiOArGidp3f7mKgrSOGKuMq6njulj86uq0SzZWqVHUY0Rg9q9zxYpB8RdhYBNG3w+J ssVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NeigI8aZa+KNtubfGbbxqzXBSdS2WPBug/qsj18eqE0=; b=PcF65mcE6Q6of3fgEAt6a6WHyC39YwzbeXw+Jc/Czs2d3kRy3W9rpGeGFp6fwqmkDE Sz78qFujR07FJi1B1aKAU/A9frI4tTdRW+l4VYgeyrpz7DWnTcWDWy60bNLS8JstHSDm 4Zm6scoUoGijscdDxC74fN+WkrCnvssrt14pC6mM8n4uX5q56FqdeyVKaIQwnDBXV24p Nd8aFX1fvgZ4bXWoWwSJ22+R1FAkcczWXznMriTRvAfryxPAZTiA9aQyMQVZzbpsMz41 GyoUh0vu+KsGY+3mwtgkhD5aCZMmPiBvKMIHTM900IbqM4r9nhOhqbNF7MaQIOz2Ab9B QBMw== X-Gm-Message-State: AOAM531akVYsetJEK2Ln7uifO2lT6KI39ss63lIWnL6WPhPEAW/2jsCj UA0ejUJO8MTKIU6p3becEFM= X-Google-Smtp-Source: ABdhPJyMtnU3/qikFxdOsIPcMxJ7xw28yD43cuyplbLLIP6y4EpHkWZuSObbbD3XXfQjVrzE4U5CJg== X-Received: by 2002:a9d:2208:: with SMTP id o8mr2430552ota.78.1627658589600; Fri, 30 Jul 2021 08:23:09 -0700 (PDT) Received: from localhost (2603-8081-140c-1a00-80ca-c9ae-640f-0f9a.res6.spectrum.com. [2603:8081:140c:1a00:80ca:c9ae:640f:f9a]) by smtp.gmail.com with ESMTPSA id c11sm333199otm.37.2021.07.30.08.23.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jul 2021 08:23:09 -0700 (PDT) From: Bob Pearson To: jgg@nvidia.com, xyjxyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson Subject: [PATCH 1/5] Update kernel headers Date: Fri, 30 Jul 2021 10:21:54 -0500 Message-Id: <20210730152157.67592-2-rpearsonhpe@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210730152157.67592-1-rpearsonhpe@gmail.com> References: <20210730152157.67592-1-rpearsonhpe@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org To commit ?? ("RDMA/rxe: Enable receiving XRC packets"). Signed-off-by: Bob Pearson --- kernel-headers/rdma/rdma_user_rxe.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel-headers/rdma/rdma_user_rxe.h b/kernel-headers/rdma/rdma_user_rxe.h index ad7da77d..1d80586c 100644 --- a/kernel-headers/rdma/rdma_user_rxe.h +++ b/kernel-headers/rdma/rdma_user_rxe.h @@ -82,6 +82,10 @@ struct rxe_send_wr { __u32 invalidate_rkey; } ex; union { + struct { + __aligned_u64 pad[4]; + __u32 srq_num; + } xrc; struct { __aligned_u64 remote_addr; __u32 rkey; @@ -101,7 +105,7 @@ struct rxe_send_wr { __u16 reserved; __u32 ah_num; __u32 pad[4]; - struct rxe_av av; /* deprecated */ + struct rxe_av av; } ud; struct { __aligned_u64 addr; From patchwork Fri Jul 30 15:21:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12411581 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AAE12C4320A for ; Fri, 30 Jul 2021 15:23:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9293B60F46 for ; Fri, 30 Jul 2021 15:23:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239720AbhG3PXQ (ORCPT ); Fri, 30 Jul 2021 11:23:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239664AbhG3PXQ (ORCPT ); Fri, 30 Jul 2021 11:23:16 -0400 Received: from mail-oi1-x232.google.com (mail-oi1-x232.google.com [IPv6:2607:f8b0:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D764CC06175F for ; Fri, 30 Jul 2021 08:23:10 -0700 (PDT) Received: by mail-oi1-x232.google.com with SMTP id x15so13604603oic.9 for ; Fri, 30 Jul 2021 08:23:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WMhRFnMJKAyXZh8izjh+285MKWf3zi+yb1ztOuowMzI=; b=l4janx2r0NU5GOIq758igLYv/qLgTjaIY01agRRMx4nwxRy9VuND+ZgBd8QPafqtuE 7n80KtDOXpTLF3QrF8G3bFr05zTmql1JmXAZ57LsGtfvuLGnwXRAr0YZJAwVcxqfSpra pLp3+QbmK0cOJdpJK+J7pEB4VO3K6LVaODM/lCmsDfFGVLDtAz9kIbkd8zCT3W/M9dIt lp5JAgP2mULTj1b0sK+NHP1/RX3hYO1MqY5sKVvOlWEau93Ly+ZvnVeIlVo/HHDM1jmv Q/gjghgtTOlb/xF96ldXpdwh7YyDmlsZNpH03wwlRGYRwbzNk2OYTPvyhy0YgmpW5s9i 9u2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WMhRFnMJKAyXZh8izjh+285MKWf3zi+yb1ztOuowMzI=; b=Jp+4wHr4g+YXFRTAWqVvy2tO0LuzD4E0Lmy71Oa6gyQC6X/WqW0UKWyP4s7dgHsGv2 e47fAqg6Z+GathU0MmPt1hE6VfnuGK8DbN7WzUKpnjr1A7MQZpAptmd0b03PzVSwZFEG svudcsR1z+SWRztP/kZ4vGWZUaIC2Gni6uX0EYN7NWGYHL623c9DWPwx1PrqYmpWb/3Q 5yXGLZEFcaVPFvVrn7Hn7Hd09e1inlKBmVc9B1yEo3x+4qcWyXrzrZYkbRlllj3bN52x 15lfYxiV97EfDZ7zdUO32p63CKZmTzaIRqt8ccJjCrMT/VsFFxEuNqXlX2uV2nBZc1YX M4Bw== X-Gm-Message-State: AOAM532AGXYE8Knt7otteZ/eSNtyGEBIyePeTa6AgI1+QN1JD92AnZUW +DH10YsUvN3CPMl6ZLPs5GU= X-Google-Smtp-Source: ABdhPJwPDfZJDUxDiMEFyDj1CXDahemw2p3S85HLpodjzADKwFxcisPUBochqATxT6AZX9koHVJRqg== X-Received: by 2002:a05:6808:f04:: with SMTP id m4mr2293706oiw.92.1627658590358; Fri, 30 Jul 2021 08:23:10 -0700 (PDT) Received: from localhost (2603-8081-140c-1a00-80ca-c9ae-640f-0f9a.res6.spectrum.com. [2603:8081:140c:1a00:80ca:c9ae:640f:f9a]) by smtp.gmail.com with ESMTPSA id x14sm335663oiv.4.2021.07.30.08.23.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jul 2021 08:23:10 -0700 (PDT) From: Bob Pearson To: jgg@nvidia.com, xyjxyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson Subject: [PATCH 2/5] Providers/rxe: Support alloc/dealloc xrcd Date: Fri, 30 Jul 2021 10:21:55 -0500 Message-Id: <20210730152157.67592-3-rpearsonhpe@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210730152157.67592-1-rpearsonhpe@gmail.com> References: <20210730152157.67592-1-rpearsonhpe@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org Add support for ibv_alloc_xrcd and ibv_dealloc_xrcd verbs. Signed-off-by: Bob Pearson --- providers/rxe/rxe.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/providers/rxe/rxe.c b/providers/rxe/rxe.c index 0776279c..3bb9f01c 100644 --- a/providers/rxe/rxe.c +++ b/providers/rxe/rxe.c @@ -128,6 +128,44 @@ static int rxe_dealloc_pd(struct ibv_pd *pd) return ret; } +static struct ibv_xrcd *rxe_open_xrcd(struct ibv_context *context, + struct ibv_xrcd_init_attr *attr) +{ + struct verbs_xrcd *xrcd; + int xrcd_size = sizeof(*xrcd); + struct ibv_open_xrcd cmd = {}; + size_t cmd_size = sizeof(cmd); + struct ib_uverbs_open_xrcd_resp resp = {}; + size_t resp_size = sizeof(resp); + int ret; + + xrcd = calloc(1, sizeof(*xrcd)); + if (!xrcd) + return NULL; + + ret = ibv_cmd_open_xrcd(context, xrcd, xrcd_size, attr, + &cmd, cmd_size, &resp, resp_size); + if (ret) { + free(xrcd); + return NULL; + } + + return &xrcd->xrcd; +} + +static int rxe_close_xrcd(struct ibv_xrcd *ibxrcd) +{ + struct verbs_xrcd *xrcd = container_of(ibxrcd, + struct verbs_xrcd, xrcd); + int ret; + + ret = ibv_cmd_close_xrcd(xrcd); + if (!ret) + free(xrcd); + + return ret; +} + static struct ibv_mw *rxe_alloc_mw(struct ibv_pd *ibpd, enum ibv_mw_type type) { int ret; @@ -1742,6 +1780,8 @@ static const struct verbs_context_ops rxe_ctx_ops = { .query_port = rxe_query_port, .alloc_pd = rxe_alloc_pd, .dealloc_pd = rxe_dealloc_pd, + .open_xrcd = rxe_open_xrcd, + .close_xrcd = rxe_close_xrcd, .reg_mr = rxe_reg_mr, .dereg_mr = rxe_dereg_mr, .alloc_mw = rxe_alloc_mw, From patchwork Fri Jul 30 15:21:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12411583 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1DF47C4338F for ; Fri, 30 Jul 2021 15:23:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 08B0260F5E for ; Fri, 30 Jul 2021 15:23:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239725AbhG3PXR (ORCPT ); Fri, 30 Jul 2021 11:23:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239674AbhG3PXR (ORCPT ); Fri, 30 Jul 2021 11:23:17 -0400 Received: from mail-ot1-x32d.google.com (mail-ot1-x32d.google.com [IPv6:2607:f8b0:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93C32C061765 for ; Fri, 30 Jul 2021 08:23:11 -0700 (PDT) Received: by mail-ot1-x32d.google.com with SMTP id c7-20020a9d27870000b02904d360fbc71bso9828207otb.10 for ; Fri, 30 Jul 2021 08:23:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Yit/3EHRkdMz+D/KMAb2VddpAXvNJf6/4weOPAT1KXg=; b=oro8vw/qhApY8zqsHFsdgADXVmyhTxmpuCwVmaGwGL6fnrbTiOv/8U3clspV80bcoW /AhSL0vuSiVC0BVG2S0V/WiHIz0nZ0rRC4bGwfsiaZgolHj5uA4IRGaHUug5gsTWnK4O YWyfVuO1N+QNPFbNeHmCBInlj5T2rtTQySBDffehAwYBuhJeUsd+tEEBz/bZXZmp3T9I PBzIeJnld68DZwln8J+tsS38AzBNwM+9XxKQZm4d7Pm8Aa5M1Syhh9lfsW3+SxMJPCSu BTfl/uE1L69GGwGpDhvXjOLmy9X4nsI52bH/9ggURnSTzGPxlW1nRNiDxur1DWcQfxoA baKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Yit/3EHRkdMz+D/KMAb2VddpAXvNJf6/4weOPAT1KXg=; b=kSVs6SCkk3rhKSP+vLP7sHdfC1Pt6RjKtkT2G4ZZVM9Hf4y2RlCEd+WNVuoqctBC8k xYblflrFA7A0bGmMbK4U/2LZHqNuyFjNxW6NtDaH43M7El1CHcHVTBlaJKVZ3CeqlIfE YLBx5ohwi3AD5stYYEoJj6DjhezbuU6fUqzsaUC5E6+3Uy14vchpof5jku7drITAotAm CU/bMRpvi2fqXTVTmueS9Q+E4HNvQ5Kul/JvrA4+ET6Ckqda/MIDFfvHAxXCRA0Tycpe Y4JaxQUfle76FeRk/F3zBUGEnuvGnIi7wVaa815tZNI+BLR/kA+t/MYv/mRKVwcRr44G EADw== X-Gm-Message-State: AOAM531gm6r8kJ21snoqgLR/4eaS7HLLk2qh5qu5yNHfqLLLViOfm7bz wS+1abEnR7iGLi07c+ri73U= X-Google-Smtp-Source: ABdhPJwanZ/NkEmQZL/EKGmcC6qCPdw8i7N2rEXwSEnmEfTnq6WV7z/SaetAOBVV+uRNfnwR0bY2oQ== X-Received: by 2002:a9d:4105:: with SMTP id o5mr2370154ote.20.1627658591058; Fri, 30 Jul 2021 08:23:11 -0700 (PDT) Received: from localhost (2603-8081-140c-1a00-80ca-c9ae-640f-0f9a.res6.spectrum.com. [2603:8081:140c:1a00:80ca:c9ae:640f:f9a]) by smtp.gmail.com with ESMTPSA id i18sm339750oik.3.2021.07.30.08.23.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jul 2021 08:23:10 -0700 (PDT) From: Bob Pearson To: jgg@nvidia.com, xyjxyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson Subject: [PATCH 3/5] Providers/rxe: Support extended create srq Date: Fri, 30 Jul 2021 10:21:56 -0500 Message-Id: <20210730152157.67592-4-rpearsonhpe@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210730152157.67592-1-rpearsonhpe@gmail.com> References: <20210730152157.67592-1-rpearsonhpe@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org Add support for the ibv_create_srq_ex verb. Signed-off-by: Bob Pearson --- providers/rxe/rxe-abi.h | 2 ++ providers/rxe/rxe.c | 54 +++++++++++++++++++++++++++++++++++------ providers/rxe/rxe.h | 5 ++-- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/providers/rxe/rxe-abi.h b/providers/rxe/rxe-abi.h index 020201a9..07e90d81 100644 --- a/providers/rxe/rxe-abi.h +++ b/providers/rxe/rxe-abi.h @@ -51,6 +51,8 @@ DECLARE_DRV_CMD(urxe_create_qp_ex, IB_USER_VERBS_EX_CMD_CREATE_QP, empty, rxe_create_qp_resp); DECLARE_DRV_CMD(urxe_create_srq, IB_USER_VERBS_CMD_CREATE_SRQ, empty, rxe_create_srq_resp); +DECLARE_DRV_CMD(urxe_create_srq_ex, IB_USER_VERBS_CMD_CREATE_XSRQ, + empty, rxe_create_srq_resp); DECLARE_DRV_CMD(urxe_modify_srq, IB_USER_VERBS_CMD_MODIFY_SRQ, rxe_modify_srq_cmd, empty); DECLARE_DRV_CMD(urxe_resize_cq, IB_USER_VERBS_CMD_RESIZE_CQ, diff --git a/providers/rxe/rxe.c b/providers/rxe/rxe.c index 3bb9f01c..9cdddb8c 100644 --- a/providers/rxe/rxe.c +++ b/providers/rxe/rxe.c @@ -636,7 +636,7 @@ static struct ibv_srq *rxe_create_srq(struct ibv_pd *pd, if (srq == NULL) return NULL; - ret = ibv_cmd_create_srq(pd, &srq->ibv_srq, attr, &cmd, sizeof(cmd), + ret = ibv_cmd_create_srq(pd, &srq->vsrq.srq, attr, &cmd, sizeof(cmd), &resp.ibv_resp, sizeof(resp)); if (ret) { free(srq); @@ -647,7 +647,7 @@ static struct ibv_srq *rxe_create_srq(struct ibv_pd *pd, PROT_READ | PROT_WRITE, MAP_SHARED, pd->context->cmd_fd, resp.mi.offset); if ((void *)srq->rq.queue == MAP_FAILED) { - ibv_cmd_destroy_srq(&srq->ibv_srq); + ibv_cmd_destroy_srq(&srq->vsrq.srq); free(srq); return NULL; } @@ -656,7 +656,44 @@ static struct ibv_srq *rxe_create_srq(struct ibv_pd *pd, srq->rq.max_sge = attr->attr.max_sge; pthread_spin_init(&srq->rq.lock, PTHREAD_PROCESS_PRIVATE); - return &srq->ibv_srq; + return &srq->vsrq.srq; +} + +static struct ibv_srq *rxe_create_srq_ex(struct ibv_context *context, + struct ibv_srq_init_attr_ex *attr_ex) +{ + struct rxe_srq *srq; + struct ibv_create_xsrq cmd = {}; + size_t cmd_size = sizeof(cmd); + struct urxe_create_srq_ex_resp resp = {}; + size_t resp_size = sizeof(resp); + int ret; + + srq = calloc(1, sizeof(*srq)); + if (!srq) + return NULL; + + ret = ibv_cmd_create_srq_ex(context, &srq->vsrq, attr_ex, + &cmd, cmd_size, &resp.ibv_resp, resp_size); + if (ret) { + free(srq); + return NULL; + } + + srq->rq.queue = mmap(NULL, resp.mi.size, + PROT_READ | PROT_WRITE, MAP_SHARED, + context->cmd_fd, resp.mi.offset); + if ((void *)srq->rq.queue == MAP_FAILED) { + ibv_cmd_destroy_srq(&srq->vsrq.srq); + free(srq); + return NULL; + } + + srq->mmap_info = resp.mi; + srq->rq.max_sge = attr_ex->attr.max_sge; + pthread_spin_init(&srq->rq.lock, PTHREAD_PROCESS_PRIVATE); + + return &srq->vsrq.srq; } static int rxe_modify_srq(struct ibv_srq *ibsrq, @@ -708,13 +745,13 @@ static int rxe_query_srq(struct ibv_srq *srq, struct ibv_srq_attr *attr) return ibv_cmd_query_srq(srq, attr, &cmd, sizeof(cmd)); } -static int rxe_destroy_srq(struct ibv_srq *ibvsrq) +static int rxe_destroy_srq(struct ibv_srq *ibsrq) { int ret; - struct rxe_srq *srq = to_rsrq(ibvsrq); + struct rxe_srq *srq = to_rsrq(ibsrq); struct rxe_queue_buf *q = srq->rq.queue; - ret = ibv_cmd_destroy_srq(ibvsrq); + ret = ibv_cmd_destroy_srq(ibsrq); if (!ret) { if (srq->mmap_info.size) munmap(q, srq->mmap_info.size); @@ -765,11 +802,11 @@ out: return rc; } -static int rxe_post_srq_recv(struct ibv_srq *ibvsrq, +static int rxe_post_srq_recv(struct ibv_srq *ibsrq, struct ibv_recv_wr *recv_wr, struct ibv_recv_wr **bad_recv_wr) { - struct rxe_srq *srq = to_rsrq(ibvsrq); + struct rxe_srq *srq = to_rsrq(ibsrq); int rc = 0; pthread_spin_lock(&srq->rq.lock); @@ -1794,6 +1831,7 @@ static const struct verbs_context_ops rxe_ctx_ops = { .resize_cq = rxe_resize_cq, .destroy_cq = rxe_destroy_cq, .create_srq = rxe_create_srq, + .create_srq_ex = rxe_create_srq_ex, .modify_srq = rxe_modify_srq, .query_srq = rxe_query_srq, .destroy_srq = rxe_destroy_srq, diff --git a/providers/rxe/rxe.h b/providers/rxe/rxe.h index 6882d9c7..f3215f2e 100644 --- a/providers/rxe/rxe.h +++ b/providers/rxe/rxe.h @@ -91,10 +91,9 @@ struct rxe_qp { }; struct rxe_srq { - struct ibv_srq ibv_srq; + struct verbs_srq vsrq; struct mminfo mmap_info; struct rxe_wq rq; - uint32_t srq_num; }; #define to_rxxx(xxx, type) container_of(ib##xxx, struct rxe_##type, ibv_##xxx) @@ -121,7 +120,7 @@ static inline struct rxe_qp *to_rqp(struct ibv_qp *ibqp) static inline struct rxe_srq *to_rsrq(struct ibv_srq *ibsrq) { - return to_rxxx(srq, srq); + return container_of(ibsrq, struct rxe_srq, vsrq.srq); } static inline struct rxe_ah *to_rah(struct ibv_ah *ibah) From patchwork Fri Jul 30 15:21:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12411585 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AB5D8C4320A for ; Fri, 30 Jul 2021 15:23:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9543560F46 for ; Fri, 30 Jul 2021 15:23:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239730AbhG3PXS (ORCPT ); Fri, 30 Jul 2021 11:23:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55480 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239731AbhG3PXR (ORCPT ); Fri, 30 Jul 2021 11:23:17 -0400 Received: from mail-oi1-x22b.google.com (mail-oi1-x22b.google.com [IPv6:2607:f8b0:4864:20::22b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 41108C06175F for ; Fri, 30 Jul 2021 08:23:12 -0700 (PDT) Received: by mail-oi1-x22b.google.com with SMTP id q6so13617991oiw.7 for ; Fri, 30 Jul 2021 08:23:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fnj05AnElTEDmIey9tbpBH46J/j9uzolDEoCBGfzla0=; b=BjxfbISsT7l/xbGxmkzhg8mbZJb2dPRvYRHdkY1fvX8xSTXhQjKUR//zcGd+ooaPr2 HFkI3jmAhtEenrf+RjCCCoLj0kxpvi/yX1lcnFHeIf1tj7SVf77LoV5zBkdbSWTLhI2G z2PUIBoFpX6/ldrmOkC6N51daGiJa1zFUIP/hsRl9quwK5ASvxPoY1mDtmt/DGCaU7XD XOLybDe9U6LhL4IN0Kn8eFr/rFYh0IfJ7KRE9c6I/J7xtYEgsvLPy1prY7UWHFHlMPFz SqCHbmpOlosibuOPx3kizRpi4S+5iMiO3vF7p8Dz5/LwilP4/fcGxh/c0Bq6EY8gbXuA 6wGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fnj05AnElTEDmIey9tbpBH46J/j9uzolDEoCBGfzla0=; b=pt/2piggzWTamF797wnTuRdBUCAWRaEUAtJSq+JPx23SEtT+d+D9I9TDJ6DlfSA5f/ r3EBLoGwTSBGQrpK41YVl+4c2CqdE0oDBBUi+bRs3FuXLKFfNKOzSCwBTAsVVRrWeSYZ zMy5sBR4c23MFavD+CPiz/ht4QHUIlcygaIrjPE23Iq+x/gMcr8EpMqEn8A//jO1pVbz TWYO67w+YJMBYX1vT9vgv2rMtf7vCd+HRwWJEe/Cmt+4tG2b4iDRBOH/GgMKG0qbozeg IWN5QZg7rTTscGfyOmDkXIepc0IWOB81e6D4WsrZ6ydfndmaQekK1GvmL1ZwEyoxySHk +krg== X-Gm-Message-State: AOAM532HiQDpjOHYrPy/LcCFLJ1z9g2Kp4WF+09+g9iYVWZUvFHZtki7 Y4fUyAmUgxrgMwOsvFXat3k= X-Google-Smtp-Source: ABdhPJz19t18sp1rOblOlon/EfpYSGTALnyFkRGygVddZ9wvZGtQ9wv5Z9whB35mabCqZx3k1BSsPA== X-Received: by 2002:aca:ba89:: with SMTP id k131mr2290268oif.176.1627658591704; Fri, 30 Jul 2021 08:23:11 -0700 (PDT) Received: from localhost (2603-8081-140c-1a00-80ca-c9ae-640f-0f9a.res6.spectrum.com. [2603:8081:140c:1a00:80ca:c9ae:640f:f9a]) by smtp.gmail.com with ESMTPSA id 45sm335083oty.16.2021.07.30.08.23.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jul 2021 08:23:11 -0700 (PDT) From: Bob Pearson To: jgg@nvidia.com, xyjxyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson , Bob Pearson Subject: [PATCH 4/5] Providers/rxe: Support get srq number Date: Fri, 30 Jul 2021 10:21:57 -0500 Message-Id: <20210730152157.67592-5-rpearsonhpe@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210730152157.67592-1-rpearsonhpe@gmail.com> References: <20210730152157.67592-1-rpearsonhpe@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org Add support for ibv_get_srq_num verb. Signed-off-by: Bob Pearson --- providers/rxe/rxe.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/providers/rxe/rxe.c b/providers/rxe/rxe.c index 9cdddb8c..d4538713 100644 --- a/providers/rxe/rxe.c +++ b/providers/rxe/rxe.c @@ -696,6 +696,14 @@ static struct ibv_srq *rxe_create_srq_ex(struct ibv_context *context, return &srq->vsrq.srq; } +static int rxe_get_srq_num(struct ibv_srq *ibsrq, uint32_t *srq_num) +{ + struct rxe_srq *srq = to_rsrq(ibsrq); + + *srq_num = srq->vsrq.srq_num; + return 0; +} + static int rxe_modify_srq(struct ibv_srq *ibsrq, struct ibv_srq_attr *attr, int attr_mask) { @@ -1836,6 +1844,7 @@ static const struct verbs_context_ops rxe_ctx_ops = { .query_srq = rxe_query_srq, .destroy_srq = rxe_destroy_srq, .post_srq_recv = rxe_post_srq_recv, + .get_srq_num = rxe_get_srq_num, .create_qp = rxe_create_qp, .create_qp_ex = rxe_create_qp_ex, .query_qp = rxe_query_qp, From patchwork Fri Jul 30 15:21:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12411587 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 244EBC432BE for ; Fri, 30 Jul 2021 15:23:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 134F660F5E for ; Fri, 30 Jul 2021 15:23:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239664AbhG3PXS (ORCPT ); Fri, 30 Jul 2021 11:23:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55490 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239674AbhG3PXS (ORCPT ); Fri, 30 Jul 2021 11:23:18 -0400 Received: from mail-oi1-x22e.google.com (mail-oi1-x22e.google.com [IPv6:2607:f8b0:4864:20::22e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0449FC0613C1 for ; Fri, 30 Jul 2021 08:23:13 -0700 (PDT) Received: by mail-oi1-x22e.google.com with SMTP id n16so7050330oij.2 for ; Fri, 30 Jul 2021 08:23:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zZ6oTHwrbg9BPqBT7Am9q7gBWv8vputEAYRU5n9d16E=; b=V4j3qZk5IOa7oxCdSWsahF1JjjSdZlhFal4uDWE33L1jEwKii0kZq4dRzPw9/ohgnz a4CQFkhwV91vk/wd96x6Lct+kYWyvFXVbsHH0XUIwbToqKPxZBAsRq0Azj/hsCkdgojm WOEMxq+D/QZQikjskBrXxacr9CfOk6eECjRa1VpnzPG7OxPlL3j7spAivKYngzfI0EXs FhwWun8h5qvZz8reKbytFGLka5Pt/o+xviYvfCOMa9RFc+1FtNws8VBC7UttgT6Rb3iY z0QZ8tj1M7PuTreV/n+C2ZmdqKXFUc/aYXSo9y2TTx1c+ZxOGR+yAMRYI9k0LL0aHVg6 0Zzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zZ6oTHwrbg9BPqBT7Am9q7gBWv8vputEAYRU5n9d16E=; b=G+kHA3n4gMU2bp7uzsviuLVGHLXmwAJKsqZeXtGr7fCiQx0PJwNaOk4+5Rw6SP+x9o xZO/DsfigymxhCfzxgVG9cmX7NuV995n1uznKhG+5tI7xuSV89SbLUsBwxYI3stmRFyg MINRCAEOy5TxO2LOLwqZoR9e5L6Mqiy2Kq28r6q0XhAgoxhZTblkF06v5vRGV+8UNUtK KJbvMgTDTX2dCI8uCxME9SJWhPQd5809vOqjr7YFFs77XaKZtold5yDdgg7TyHf9uybi nFFAUzC85Kb/6etMwCawK9O9jANG5sQbFni/Vm4y/lwn4SAYlB2Y4N6+bnce7IJkMv/3 cxAw== X-Gm-Message-State: AOAM532mFQclWAIrKD/+BAxqglyD6GXP4ZVmdQbyyShmKQ343ZsRgf54 mCYTjpz/Hlvvu8X4ciBejIM= X-Google-Smtp-Source: ABdhPJw1Q/CJJgaQh+5/bwS3mXcD6Evf/yWYm3vQhA5oGUHexOj6wz4uGiRXXdNorpoKMmGaArcuVg== X-Received: by 2002:aca:aacd:: with SMTP id t196mr2119233oie.12.1627658592388; Fri, 30 Jul 2021 08:23:12 -0700 (PDT) Received: from localhost (2603-8081-140c-1a00-80ca-c9ae-640f-0f9a.res6.spectrum.com. [2603:8081:140c:1a00:80ca:c9ae:640f:f9a]) by smtp.gmail.com with ESMTPSA id c18sm333742ots.81.2021.07.30.08.23.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jul 2021 08:23:12 -0700 (PDT) From: Bob Pearson To: jgg@nvidia.com, xyjxyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson Subject: [PATCH 5/5] Providers/rxe: Support XRC traffic Date: Fri, 30 Jul 2021 10:21:58 -0500 Message-Id: <20210730152157.67592-6-rpearsonhpe@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210730152157.67592-1-rpearsonhpe@gmail.com> References: <20210730152157.67592-1-rpearsonhpe@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org Extended create_qp and create_qp_ex verbs to support XRC QP types. Extended WRs to support XRC operations. Signed-off-by: Bob Pearson --- providers/rxe/rxe.c | 132 ++++++++++++++++++++++++++++++++------------ 1 file changed, 96 insertions(+), 36 deletions(-) diff --git a/providers/rxe/rxe.c b/providers/rxe/rxe.c index d4538713..4fbdb689 100644 --- a/providers/rxe/rxe.c +++ b/providers/rxe/rxe.c @@ -875,9 +875,10 @@ static void wr_atomic_fetch_add(struct ibv_qp_ex *ibqp, uint32_t rkey, memset(wqe, 0, sizeof(*wqe)); - wqe->wr.wr_id = qp->vqp.qp_ex.wr_id; + wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_ATOMIC_FETCH_AND_ADD; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->wr.wr.atomic.remote_addr = remote_addr; wqe->wr.wr.atomic.compare_add = add; wqe->wr.wr.atomic.rkey = rkey; @@ -899,8 +900,9 @@ static void wr_bind_mw(struct ibv_qp_ex *ibqp, struct ibv_mw *ibmw, memset(wqe, 0, sizeof(*wqe)); wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_BIND_MW; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->wr.wr.mw.addr = info->addr; wqe->wr.wr.mw.length = info->length; wqe->wr.wr.mw.mr_lkey = info->mr->lkey; @@ -922,9 +924,10 @@ static void wr_local_inv(struct ibv_qp_ex *ibqp, uint32_t invalidate_rkey) memset(wqe, 0, sizeof(*wqe)); - wqe->wr.wr_id = qp->vqp.qp_ex.wr_id; + wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_LOCAL_INV; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->wr.ex.invalidate_rkey = invalidate_rkey; wqe->ssn = qp->ssn++; @@ -942,9 +945,10 @@ static void wr_rdma_read(struct ibv_qp_ex *ibqp, uint32_t rkey, memset(wqe, 0, sizeof(*wqe)); - wqe->wr.wr_id = qp->vqp.qp_ex.wr_id; + wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_RDMA_READ; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->wr.wr.rdma.remote_addr = remote_addr; wqe->wr.wr.rdma.rkey = rkey; wqe->iova = remote_addr; @@ -964,9 +968,10 @@ static void wr_rdma_write(struct ibv_qp_ex *ibqp, uint32_t rkey, memset(wqe, 0, sizeof(*wqe)); - wqe->wr.wr_id = qp->vqp.qp_ex.wr_id; + wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_RDMA_WRITE; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->wr.wr.rdma.remote_addr = remote_addr; wqe->wr.wr.rdma.rkey = rkey; wqe->iova = remote_addr; @@ -986,9 +991,10 @@ static void wr_rdma_write_imm(struct ibv_qp_ex *ibqp, uint32_t rkey, memset(wqe, 0, sizeof(*wqe)); - wqe->wr.wr_id = qp->vqp.qp_ex.wr_id; + wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_RDMA_WRITE_WITH_IMM; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->wr.wr.rdma.remote_addr = remote_addr; wqe->wr.wr.rdma.rkey = rkey; wqe->wr.ex.imm_data = imm_data; @@ -1008,9 +1014,10 @@ static void wr_send(struct ibv_qp_ex *ibqp) memset(wqe, 0, sizeof(*wqe)); - wqe->wr.wr_id = qp->vqp.qp_ex.wr_id; + wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_SEND; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->ssn = qp->ssn++; advance_qp_cur_index(qp); @@ -1026,9 +1033,10 @@ static void wr_send_imm(struct ibv_qp_ex *ibqp, __be32 imm_data) memset(wqe, 0, sizeof(*wqe)); - wqe->wr.wr_id = qp->vqp.qp_ex.wr_id; + wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_SEND_WITH_IMM; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->wr.ex.imm_data = imm_data; wqe->ssn = qp->ssn++; @@ -1045,9 +1053,10 @@ static void wr_send_inv(struct ibv_qp_ex *ibqp, uint32_t invalidate_rkey) memset(wqe, 0, sizeof(*wqe)); - wqe->wr.wr_id = qp->vqp.qp_ex.wr_id; + wqe->wr.wr_id = ibqp->wr_id; + wqe->wr.send_flags = ibqp->wr_flags; wqe->wr.opcode = IBV_WR_SEND_WITH_INV; - wqe->wr.send_flags = qp->vqp.qp_ex.wr_flags; + wqe->wr.ex.invalidate_rkey = invalidate_rkey; wqe->ssn = qp->ssn++; @@ -1074,6 +1083,18 @@ static void wr_set_ud_addr(struct ibv_qp_ex *ibqp, struct ibv_ah *ibah, memcpy(&wqe->wr.wr.ud.av, &ah->av, sizeof(ah->av)); } +static void wr_set_xrc_srqn(struct ibv_qp_ex *ibqp, uint32_t remote_srqn) +{ + struct rxe_qp *qp = container_of(ibqp, struct rxe_qp, vqp.qp_ex); + struct rxe_send_wqe *wqe = addr_from_index(qp->sq.queue, + qp->cur_index - 1); + + if (qp->err) + return; + + wqe->wr.wr.xrc.srq_num = remote_srqn; +} + static void wr_set_inline_data(struct ibv_qp_ex *ibqp, void *addr, size_t length) { @@ -1212,7 +1233,8 @@ static int map_queue_pair(int cmd_fd, struct rxe_qp *qp, struct ibv_qp_init_attr *attr, struct rxe_create_qp_resp *resp) { - if (attr->srq) { + if (attr->srq || qp_type(qp) == IBV_QPT_XRC_RECV || + qp_type(qp) == IBV_QPT_XRC_SEND) { qp->rq.max_sge = 0; qp->rq.queue = NULL; qp->rq_mmap_info.size = 0; @@ -1228,23 +1250,44 @@ static int map_queue_pair(int cmd_fd, struct rxe_qp *qp, pthread_spin_init(&qp->rq.lock, PTHREAD_PROCESS_PRIVATE); } - qp->sq.max_sge = attr->cap.max_send_sge; - qp->sq.max_inline = attr->cap.max_inline_data; - qp->sq.queue = mmap(NULL, resp->sq_mi.size, PROT_READ | PROT_WRITE, - MAP_SHARED, - cmd_fd, resp->sq_mi.offset); - if ((void *)qp->sq.queue == MAP_FAILED) { - if (qp->rq_mmap_info.size) - munmap(qp->rq.queue, qp->rq_mmap_info.size); - return errno; - } + if (qp_type(qp) != IBV_QPT_XRC_RECV) { + qp->sq.max_sge = attr->cap.max_send_sge; + qp->sq.max_inline = attr->cap.max_inline_data; + qp->sq.queue = mmap(NULL, resp->sq_mi.size, PROT_READ | PROT_WRITE, + MAP_SHARED, + cmd_fd, resp->sq_mi.offset); + if ((void *)qp->sq.queue == MAP_FAILED) { + if (qp->rq_mmap_info.size) + munmap(qp->rq.queue, qp->rq_mmap_info.size); + return errno; + } - qp->sq_mmap_info = resp->sq_mi; - pthread_spin_init(&qp->sq.lock, PTHREAD_PROCESS_PRIVATE); + qp->sq_mmap_info = resp->sq_mi; + pthread_spin_init(&qp->sq.lock, PTHREAD_PROCESS_PRIVATE); + } return 0; } +static int map_queue_pair_ex(int cmd_fd, struct rxe_qp *qp, + struct ibv_qp_init_attr_ex *attr, + struct rxe_create_qp_resp *resp) +{ + switch (attr->qp_type) { + case IBV_QPT_RC: + case IBV_QPT_UC: + case IBV_QPT_UD: + case IBV_QPT_XRC_SEND: + return map_queue_pair(cmd_fd, qp, + (struct ibv_qp_init_attr *)attr, resp); + case IBV_QPT_XRC_RECV: + return 0; + default: + errno = EINVAL; + return errno; + } +} + static struct ibv_qp *rxe_create_qp(struct ibv_pd *ibpd, struct ibv_qp_init_attr *attr) { @@ -1283,7 +1326,7 @@ err: enum { RXE_QP_CREATE_FLAGS_SUP = 0, - RXE_QP_COMP_MASK_SUP = IBV_QP_INIT_ATTR_PD | + RXE_QP_COMP_MASK_SUP = IBV_QP_INIT_ATTR_PD | IBV_QP_INIT_ATTR_XRCD | IBV_QP_INIT_ATTR_CREATE_FLAGS | IBV_QP_INIT_ATTR_SEND_OPS_FLAGS, RXE_SUP_RC_QP_SEND_OPS_FLAGS = @@ -1300,6 +1343,13 @@ enum { RXE_SUP_UD_QP_SEND_OPS_FLAGS = IBV_QP_EX_WITH_SEND | IBV_QP_EX_WITH_SEND_WITH_IMM, + + RXE_SUP_XRC_QP_SEND_OPS_FLAGS = + IBV_QP_EX_WITH_RDMA_WRITE | IBV_QP_EX_WITH_RDMA_WRITE_WITH_IMM | + IBV_QP_EX_WITH_SEND | IBV_QP_EX_WITH_SEND_WITH_IMM | + IBV_QP_EX_WITH_RDMA_READ | IBV_QP_EX_WITH_ATOMIC_CMP_AND_SWP | + IBV_QP_EX_WITH_ATOMIC_FETCH_AND_ADD | IBV_QP_EX_WITH_LOCAL_INV | + IBV_QP_EX_WITH_BIND_MW | IBV_QP_EX_WITH_SEND_WITH_INV, }; static int check_qp_init_attr(struct ibv_qp_init_attr_ex *attr) @@ -1325,6 +1375,10 @@ static int check_qp_init_attr(struct ibv_qp_init_attr_ex *attr) if (attr->send_ops_flags & ~RXE_SUP_UD_QP_SEND_OPS_FLAGS) goto err; break; + case IBV_QPT_XRC_SEND: + if (attr->send_ops_flags & ~RXE_SUP_XRC_QP_SEND_OPS_FLAGS) + goto err; + break; default: goto err; } @@ -1369,6 +1423,7 @@ static void set_qp_send_ops(struct rxe_qp *qp, uint64_t flags) qp->vqp.qp_ex.wr_send_inv = wr_send_inv; qp->vqp.qp_ex.wr_set_ud_addr = wr_set_ud_addr; + qp->vqp.qp_ex.wr_set_xrc_srqn = wr_set_xrc_srqn; qp->vqp.qp_ex.wr_set_inline_data = wr_set_inline_data; qp->vqp.qp_ex.wr_set_inline_data_list = wr_set_inline_data_list; qp->vqp.qp_ex.wr_set_sge = wr_set_sge; @@ -1390,8 +1445,9 @@ static struct ibv_qp *rxe_create_qp_ex(struct ibv_context *context, size_t resp_size = sizeof(resp); ret = check_qp_init_attr(attr); - if (ret) + if (ret) { goto err; + } qp = calloc(1, sizeof(*qp)); if (!qp) @@ -1408,9 +1464,8 @@ static struct ibv_qp *rxe_create_qp_ex(struct ibv_context *context, qp->vqp.comp_mask |= VERBS_QP_EX; - ret = map_queue_pair(context->cmd_fd, qp, - (struct ibv_qp_init_attr *)attr, - &resp.drv_payload); + ret = map_queue_pair_ex(context->cmd_fd, qp, attr, + &resp.drv_payload); if (ret) goto err_destroy; @@ -1484,7 +1539,9 @@ static int validate_send_wr(struct rxe_qp *qp, struct ibv_send_wr *ibwr, return -EINVAL; if (ibwr->imm_data) return -EINVAL; - if ((qp_type(qp) != IBV_QPT_RC) && (qp_type(qp) != IBV_QPT_UC)) + if ((qp_type(qp) != IBV_QPT_RC) && + (qp_type(qp) != IBV_QPT_UC) && + (qp_type(qp) != IBV_QPT_XRC_SEND)) return -EINVAL; } @@ -1547,6 +1604,9 @@ static void convert_send_wr(struct rxe_qp *qp, struct rxe_send_wr *kwr, default: break; } + + if (qp_type(qp) == IBV_QPT_XRC_SEND) + kwr->wr.xrc.srq_num = uwr->qp_type.xrc.remote_srqn; } static int init_send_wqe(struct rxe_qp *qp, struct rxe_wq *sq,