From nobody Mon Jun 22 23:59:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA77BC433F5 for ; Tue, 15 Mar 2022 10:13:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347016AbiCOKO1 (ORCPT ); Tue, 15 Mar 2022 06:14:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346982AbiCOKOU (ORCPT ); Tue, 15 Mar 2022 06:14:20 -0400 Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 841FDDEB5; Tue, 15 Mar 2022 03:13:07 -0700 (PDT) IronPort-Data: =?us-ascii?q?A9a23=3AyJl5uKnK5gJs5YV0Fvppxmvo5gyOJ0RdPkR7XQ2?= =?us-ascii?q?eYbTBsI5bp2MFnTMbUGCFOK6PYTH8e9EgOY+x/ElTsJfVzd8xG1Fq+CA2RRqmi?= =?us-ascii?q?+KfW43BcR2Y0wB+jyH7ZBs+qZ1YM7EsFehsJpPnjkrrYuiJQUVUj/nSHOKmULe?= =?us-ascii?q?cY0ideCc/IMsfoUM68wIGqt4w6TSJK1vlVeLa+6UzCnf8s9JHGj58B5a4lf9al?= =?us-ascii?q?K+aVAX0EbAJTasjUFf2zxH5BX+ETE27ByOQroJ8RoZWSwtfpYxV8F81/z91Yj+?= =?us-ascii?q?kur39NEMXQL/OJhXIgX1TM0SgqkEa4HVsjeBgb7xBAatUo2zhc9RZzNRftZ2yS?= =?us-ascii?q?A4vFqPRmuUBSAQeGCZ7VUFD0Oadeybj4ZXLkiUqdFOpmZ2CFnoeJ5UV8/xsBmd?= =?us-ascii?q?O7fEwJzUEbxTFjOWzqJqpW+t+l8Z5dJGzFIwas3BkizreCJ4ORZHKRarV6NlA0?= =?us-ascii?q?TE/rsBTFOnTZowSbj8HRBjJZVtNfEgWDJY/leKzrnj5bzBc7lmSoMIf/2/WxRd?= =?us-ascii?q?jlrf3N9/cds6JRO1UmFqVoiTN+GGRKhUXM9q3yjef9H+owOjVkkvTUYIbDrq+8?= =?us-ascii?q?tZsnlyfx2VVAxoTPXO+q/2+gU6WXcxeJ00dvCEpqMAa6EuuZsX0WwW1sTiPuRt?= =?us-ascii?q?0c95RFfAqrQKA0KzZ5y6HCWUeCD1MctorsIkxXzNC/luImc75QCZjtbS9V32Q7?= =?us-ascii?q?PGXoCm0NCxTKnUNDQcGQgQt8djuuIx1hRunczrJOMZZlfWsQXepnW/M93N42t0?= =?us-ascii?q?uYQcw//3T1Tj6b/iE+vAlljII2zg=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3A2lyfR6gNEIseUICnXhi/sQL+O3BQXrQji2hC?= =?us-ascii?q?6mlwRA09TyX4raGTdZsguSMc5Ax7ZJhCo7690cu7Lk80nKQdibX5Vo3OYOCJgg?= =?us-ascii?q?GVEL0=3D?= X-IronPort-AV: E=Sophos;i="5.88,333,1635177600"; d="scan'208";a="122648105" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 15 Mar 2022 18:13:03 +0800 Received: from G08CNEXMBPEKD04.g08.fujitsu.local (unknown [10.167.33.201]) by cn.fujitsu.com (Postfix) with ESMTP id 8B6464D16FD7; Tue, 15 Mar 2022 18:13:01 +0800 (CST) Received: from G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.85) by G08CNEXMBPEKD04.g08.fujitsu.local (10.167.33.201) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:03 +0800 Received: from localhost.localdomain (10.167.225.141) by G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.23 via Frontend Transport; Tue, 15 Mar 2022 18:12:59 +0800 From: Li Zhijian To: , , , , , , CC: , , , , , , , Li Zhijian Subject: [RFC PATCH v3 1/7] RDMA: Allow registering MR with flush access flags Date: Tue, 15 Mar 2022 18:18:39 +0800 Message-ID: <20220315101845.4166983-2-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220315101845.4166983-1-lizhijian@fujitsu.com> References: <20220315101845.4166983-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-yoursite-MailScanner-ID: 8B6464D16FD7.A06AE X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: lizhijian@fujitsu.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It introduces new attributes/capabilities for device. Users can use ibv_reg_mr(3) to register flush access flags. Only the access flags also supported by device can be registered successfully. Signed-off-by: Li Zhijian --- V2: combine [03/10] RDMA/rxe: Allow registering FLUSH flags for supported d= evice only to this patch # Jason split RDMA_FLUSH to 2 capabilities Fix typo --- include/rdma/ib_verbs.h | 18 ++++++++++++++++-- include/uapi/rdma/ib_user_ioctl_verbs.h | 2 ++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 69d883f7fb41..465de3bab1e9 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -291,6 +291,9 @@ enum ib_device_cap_flags { /* The device supports padding incoming writes to cacheline. */ IB_DEVICE_PCI_WRITE_END_PADDING =3D (1ULL << 36), IB_DEVICE_ALLOW_USER_UNREG =3D (1ULL << 37), + /* Placement type attributes */ + IB_DEVICE_PLT_GLOBAL_VISIBILITY =3D (1ULL << 38), + IB_DEVICE_PLT_PERSISTENT =3D (1ULL << 39), }; =20 enum ib_atomic_cap { @@ -1444,10 +1447,14 @@ enum ib_access_flags { IB_ACCESS_ON_DEMAND =3D IB_UVERBS_ACCESS_ON_DEMAND, IB_ACCESS_HUGETLB =3D IB_UVERBS_ACCESS_HUGETLB, IB_ACCESS_RELAXED_ORDERING =3D IB_UVERBS_ACCESS_RELAXED_ORDERING, + IB_ACCESS_FLUSH_GLOBAL_VISIBILITY =3D IB_UVERBS_ACCESS_FLUSH_GLOBAL_VISIB= ILITY, + IB_ACCESS_FLUSH_PERSISTENT =3D IB_UVERBS_ACCESS_FLUSH_PERSISTENT, =20 + IB_ACCESS_FLUSHABLE =3D IB_ACCESS_FLUSH_GLOBAL_VISIBILITY | + IB_ACCESS_FLUSH_PERSISTENT, IB_ACCESS_OPTIONAL =3D IB_UVERBS_ACCESS_OPTIONAL_RANGE, IB_ACCESS_SUPPORTED =3D - ((IB_ACCESS_HUGETLB << 1) - 1) | IB_ACCESS_OPTIONAL, + ((IB_ACCESS_FLUSH_PERSISTENT << 1) - 1) | IB_ACCESS_OPTIONAL, }; =20 /* @@ -4300,6 +4307,7 @@ int ib_dealloc_xrcd_user(struct ib_xrcd *xrcd, struct= ib_udata *udata); static inline int ib_check_mr_access(struct ib_device *ib_dev, unsigned int flags) { + u64 device_cap =3D ib_dev->attrs.device_cap_flags; /* * Local write permission is required if remote write or * remote atomic permission is also requested. @@ -4312,7 +4320,13 @@ static inline int ib_check_mr_access(struct ib_devic= e *ib_dev, return -EINVAL; =20 if (flags & IB_ACCESS_ON_DEMAND && - !(ib_dev->attrs.device_cap_flags & IB_DEVICE_ON_DEMAND_PAGING)) + !(device_cap & IB_DEVICE_ON_DEMAND_PAGING)) + return -EINVAL; + + if ((flags & IB_ACCESS_FLUSH_GLOBAL_VISIBILITY && + !(device_cap & IB_DEVICE_PLT_GLOBAL_VISIBILITY)) || + (flags & IB_ACCESS_FLUSH_PERSISTENT && + !(device_cap & IB_DEVICE_PLT_PERSISTENT))) return -EINVAL; return 0; } diff --git a/include/uapi/rdma/ib_user_ioctl_verbs.h b/include/uapi/rdma/ib= _user_ioctl_verbs.h index 3072e5d6b692..2c28f90ec54c 100644 --- a/include/uapi/rdma/ib_user_ioctl_verbs.h +++ b/include/uapi/rdma/ib_user_ioctl_verbs.h @@ -57,6 +57,8 @@ enum ib_uverbs_access_flags { IB_UVERBS_ACCESS_ZERO_BASED =3D 1 << 5, IB_UVERBS_ACCESS_ON_DEMAND =3D 1 << 6, IB_UVERBS_ACCESS_HUGETLB =3D 1 << 7, + IB_UVERBS_ACCESS_FLUSH_GLOBAL_VISIBILITY =3D 1 << 8, + IB_UVERBS_ACCESS_FLUSH_PERSISTENT =3D 1 << 9, =20 IB_UVERBS_ACCESS_RELAXED_ORDERING =3D IB_UVERBS_ACCESS_OPTIONAL_FIRST, IB_UVERBS_ACCESS_OPTIONAL_RANGE =3D --=20 2.31.1 From nobody Mon Jun 22 23:59:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7B85C433FE for ; Tue, 15 Mar 2022 10:13:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346986AbiCOKOV (ORCPT ); Tue, 15 Mar 2022 06:14:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46758 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239017AbiCOKOR (ORCPT ); Tue, 15 Mar 2022 06:14:17 -0400 Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 79F946173; Tue, 15 Mar 2022 03:13:04 -0700 (PDT) IronPort-Data: =?us-ascii?q?A9a23=3AtRSjFqkBDuL/XMJ+DwpEVxjo5gyOJ0RdPkR7XQ2?= =?us-ascii?q?eYbTBsI5bpzdUzTQbD2uEOvyOZTOkLd5+Ptvk90IB6pDUm9QyTQBr+CA2RRqmi?= =?us-ascii?q?+KfW43BcR2Y0wB+jyH7ZBs+qZ1YM7EsFehsJpPnjkrrYuiJQUVUj/nSHOKmULe?= =?us-ascii?q?cY0ideCc/IMsfoUM68wIGqt4w6TSJK1vlVeLa+6UzCnf8s9JHGj58B5a4lf9al?= =?us-ascii?q?K+aVAX0EbAJTasjUFf2zxH5BX+ETE27ByOQroJ8RoZWSwtfpYxV8F81/z91Yj+?= =?us-ascii?q?kur39NEMXQL/OJhXIgX1TM0SgqkEa4HVsjeBgb7xBAatUo2zhc9RZzNRftZ2yS?= =?us-ascii?q?A4vFqPRmuUBSAQeGCZ7VUFD0Oadeybj4ZXLkyUqdFOpmZ2CFnoeJ5UV8/xsBmd?= =?us-ascii?q?O7fEwJzUEbxTFjOWzqJqpW+t+l8Z5dJGzFIwas3BkizreCJ4ORZHKRarV6NlA0?= =?us-ascii?q?TE/rsBTFOnTZowSbj8HRBjJZVtNfEgWDJY/leKzrnj5bzBc7lmSoMIf/2/WxRd?= =?us-ascii?q?jlrf3N9/cds6JRO1UmFqVoiTN+GGRKhUXM9q3yjef9H+owOjVkkvTUYIbDrq+8?= =?us-ascii?q?tZsnlyfx2VVAxoTPXO+q/2+gU6WXcxeJ00dvCEpqMAa6EuuZsX0WwW1sTiPuRt?= =?us-ascii?q?0c95RFfAqrQKA0KzZ5y6HCWUeCD1MctorsIkxXzNC/luImc75QCZjtbS9V32Q7?= =?us-ascii?q?PGXoCm0NCxTKnUNDQcGQgQt8djuuIx1hRunczrJOMZZlfWsQXepnW/M93N42t0?= =?us-ascii?q?uYQcw//3T1Tj6b/iE//AlljII2zg=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3Ad/6iVq/MPezAO+fXgz5uk+C2I+orL9Y04lQ7?= =?us-ascii?q?vn2ZKCY1TiX2rayTdZggviMc6wx+ZJhDo7+90cC7KBvhHPVOjLX5U43JYDXb?= X-IronPort-AV: E=Sophos;i="5.88,333,1635177600"; d="scan'208";a="122648104" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 15 Mar 2022 18:13:03 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id 6930B4D16FD8; Tue, 15 Mar 2022 18:13:02 +0800 (CST) Received: from G08CNEXJMPEKD02.g08.fujitsu.local (10.167.33.202) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:02 +0800 Received: from G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.85) by G08CNEXJMPEKD02.g08.fujitsu.local (10.167.33.202) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:04 +0800 Received: from localhost.localdomain (10.167.225.141) by G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.23 via Frontend Transport; Tue, 15 Mar 2022 18:13:00 +0800 From: Li Zhijian To: , , , , , , CC: , , , , , , , Li Zhijian Subject: [RFC PATCH v3 2/7] RDMA/rxe: Allow registering persistent flag for pmem MR only Date: Tue, 15 Mar 2022 18:18:40 +0800 Message-ID: <20220315101845.4166983-3-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220315101845.4166983-1-lizhijian@fujitsu.com> References: <20220315101845.4166983-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-yoursite-MailScanner-ID: 6930B4D16FD8.AFDAF X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: lizhijian@fujitsu.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Memory region could at most support 2 placement types: IB_ACCESS_FLUSH_PERSISTENT and IB_ACCESS_FLUSH_GLOBAL_VISIBILITY But we only allow user to register persistence flush to non-pmem MR. Signed-off-by: Li Zhijian --- V3: combine [RFC PATCH v2 1/9] RDMA: mr: Introduce is_pmem V2: update commit message, get rid of confusing ib_check_flush_access_flags= () # Tom --- drivers/infiniband/sw/rxe/rxe_mr.c | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe= /rxe_mr.c index 453ef3c9d535..4f5c4af19fe0 100644 --- a/drivers/infiniband/sw/rxe/rxe_mr.c +++ b/drivers/infiniband/sw/rxe/rxe_mr.c @@ -161,6 +161,28 @@ void rxe_mr_init_dma(struct rxe_pd *pd, int access, st= ruct rxe_mr *mr) mr->type =3D IB_MR_TYPE_DMA; } =20 +static bool iova_in_pmem(struct rxe_mr *mr, u64 iova, int length) +{ + char *vaddr; + int is_pmem; + + /* XXX: Shall me allow length =3D=3D 0 */ + if (length =3D=3D 0) { + return false; + } + /* check the 1st byte only to avoid crossing page boundary */ + vaddr =3D iova_to_vaddr(mr, iova, 1); + if (!vaddr) { + pr_warn("not a valid iova 0x%llx\n", iova); + return false; + } + + is_pmem =3D region_intersects(virt_to_phys(vaddr), 1, IORESOURCE_MEM, + IORES_DESC_PERSISTENT_MEMORY); + + return is_pmem =3D=3D REGION_INTERSECTS; +} + int rxe_mr_init_user(struct rxe_pd *pd, u64 start, u64 length, u64 iova, int access, struct rxe_mr *mr) { @@ -235,6 +257,16 @@ int rxe_mr_init_user(struct rxe_pd *pd, u64 start, u64= length, u64 iova, set->va =3D start; set->offset =3D ib_umem_offset(umem); =20 + // iova_in_pmem() must be called after set is updated + if (!iova_in_pmem(mr, iova, length) && + access & IB_ACCESS_FLUSH_PERSISTENT) { + pr_warn("Cannot register IB_ACCESS_FLUSH_PERSISTENT for non-pmem memory\= n"); + mr->state =3D RXE_MR_STATE_INVALID; + mr->umem =3D NULL; + err =3D -EINVAL; + goto err_release_umem; + } + return 0; =20 err_release_umem: --=20 2.31.1 From nobody Mon Jun 22 23:59:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B4E9C433FE for ; Tue, 15 Mar 2022 10:13:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347001AbiCOKO3 (ORCPT ); Tue, 15 Mar 2022 06:14:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346993AbiCOKOW (ORCPT ); Tue, 15 Mar 2022 06:14:22 -0400 Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C04D76547; Tue, 15 Mar 2022 03:13:09 -0700 (PDT) IronPort-Data: =?us-ascii?q?A9a23=3ABeTJ16xNgX04UnASnv56t+c4xyrEfRIJ4+MujC/?= =?us-ascii?q?XYbTApD4m0TEAzmJKXj3VPK6OazH2etpxaI218klQusTcz4UxHQtv/xmBbVoQ9?= =?us-ascii?q?5OdWo7xwmQcns+qBpSaChohtq3yU/GYRCwPZiKa9kfF3oTJ9yEmj/nSHuOkUYY?= =?us-ascii?q?oBwgqLeNaYHZ44f5cs75h6mJYqYDR7zKl4bsekeWGULOW82Ic3lYv1k62gEgHU?= =?us-ascii?q?MIeF98vlgdWifhj5DcynpSOZX4VDfnZw3DQGuG4EgMmLtsvwo1V/kuBl/ssIti?= =?us-ascii?q?j1LjmcEwWWaOUNg+L4pZUc/H6xEEc+WppieBmXBYfQR4/ZzGhm9FjyNRPtJW2Y?= =?us-ascii?q?Qk0PKzQg/lbWB5de817FfQcouGbcSHn4KR/yGWDKRMA2c5GFlk7NJcD/eB3GWx?= =?us-ascii?q?m+vkRKTRLZReG78qk0bCpW+s23px7BMbuNYIb/HpnyFnxCfcvR5/cTqPS6NlX9?= =?us-ascii?q?Dctj99DHLDVYM9xQTZmalLCJQJOPlMWAZcltOaumnT7NTZfrTq9ua0y6nPBigN?= =?us-ascii?q?r173kPMjWe/SLQ9lYmgCToWeu12D0BRcyN9GFzzeBtHW2iYfnlCPyQoUUEJW+6?= =?us-ascii?q?P9mgVTVzWsWYDUTX1+8qvmRjFC/V9NWbUcT/0IGsa833FCiSsHwTluzp3vslho?= =?us-ascii?q?dXcdAVu438geAzoLK7AuDQGsJVDhMbJohrsBebTgr0EKZ2snlADVHrrKYUzSe+?= =?us-ascii?q?62SoDf0PjIaRUcAaiAsXwoI+9Slq4hbs/5lZr6PC4bs1pusR262mGvM8UADa3w?= =?us-ascii?q?opZZj/82GEZrv2VpAfqT0czM=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3AdDD+Aa9M34wukXNUpPVuk+A8I+orL9Y04lQ7?= =?us-ascii?q?vn2YSXRuHPBw8Pre+sjztCWE8Qr5N0tBpTntAsW9qDbnhPtICOoqTNCftWvdyQ?= =?us-ascii?q?iVxehZhOOIqVDd8m/Fh4pgPMxbEpSWZueeMbEDt7eZ3OCnKadc/PC3tLCvmfzF?= =?us-ascii?q?z2pgCSVja6Rb5Q9/DQqBe3cGPzVuNN4oEoaG/Mpbq36FcXQTVM6yAX4IRKztvN?= =?us-ascii?q?vO/aiWGyIuNlo27hWUlzO05PrfGxic5B0XVDRC2vMD3AH+4nTE2pk=3D?= X-IronPort-AV: E=Sophos;i="5.88,333,1635177600"; d="scan'208";a="122648109" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 15 Mar 2022 18:13:03 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id 359534D16FD8; Tue, 15 Mar 2022 18:13:03 +0800 (CST) Received: from G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.85) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:02 +0800 Received: from localhost.localdomain (10.167.225.141) by G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.23 via Frontend Transport; Tue, 15 Mar 2022 18:13:01 +0800 From: Li Zhijian To: , , , , , , CC: , , , , , , , Li Zhijian Subject: [RFC PATCH v3 3/7] RDMA/rxe: Implement RC RDMA FLUSH service in requester side Date: Tue, 15 Mar 2022 18:18:41 +0800 Message-ID: <20220315101845.4166983-4-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220315101845.4166983-1-lizhijian@fujitsu.com> References: <20220315101845.4166983-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-yoursite-MailScanner-ID: 359534D16FD8.A1C7C X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: lizhijian@fujitsu.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It introudces a new packet format for FLUSH request. Signed-off-by: Li Zhijian --- V3: Fix sparse: incorrect type in assignment; Reported-by: kernel test robo= t V2: extend flush to include length field. --- drivers/infiniband/core/uverbs_cmd.c | 17 +++++++++++++++++ drivers/infiniband/sw/rxe/rxe_hdr.h | 20 ++++++++++++++++++++ drivers/infiniband/sw/rxe/rxe_opcode.c | 15 +++++++++++++++ drivers/infiniband/sw/rxe/rxe_opcode.h | 3 +++ drivers/infiniband/sw/rxe/rxe_req.c | 15 ++++++++++++++- include/rdma/ib_pack.h | 2 ++ include/rdma/ib_verbs.h | 10 ++++++++++ include/uapi/rdma/ib_user_verbs.h | 8 ++++++++ include/uapi/rdma/rdma_user_rxe.h | 7 +++++++ 9 files changed, 96 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core= /uverbs_cmd.c index 6b6393176b3c..632e1747fb60 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c @@ -2080,6 +2080,23 @@ static int ib_uverbs_post_send(struct uverbs_attr_bu= ndle *attrs) rdma->rkey =3D user_wr->wr.rdma.rkey; =20 next =3D &rdma->wr; + } else if (user_wr->opcode =3D=3D IB_WR_RDMA_FLUSH) { + struct ib_flush_wr *flush; + + next_size =3D sizeof(*flush); + flush =3D alloc_wr(next_size, user_wr->num_sge); + if (!flush) { + ret =3D -ENOMEM; + goto out_put; + } + + flush->remote_addr =3D user_wr->wr.flush.remote_addr; + flush->length =3D user_wr->wr.flush.length; + flush->rkey =3D user_wr->wr.flush.rkey; + flush->type =3D user_wr->wr.flush.type; + flush->level =3D user_wr->wr.flush.level; + + next =3D &flush->wr; } else if (user_wr->opcode =3D=3D IB_WR_ATOMIC_CMP_AND_SWP || user_wr->opcode =3D=3D IB_WR_ATOMIC_FETCH_AND_ADD) { struct ib_atomic_wr *atomic; diff --git a/drivers/infiniband/sw/rxe/rxe_hdr.h b/drivers/infiniband/sw/rx= e/rxe_hdr.h index e432f9e37795..8063b5018445 100644 --- a/drivers/infiniband/sw/rxe/rxe_hdr.h +++ b/drivers/infiniband/sw/rxe/rxe_hdr.h @@ -607,6 +607,25 @@ static inline void reth_set_len(struct rxe_pkt_info *p= kt, u32 len) rxe_opcode[pkt->opcode].offset[RXE_RETH], len); } =20 +/* + * FLUSH Extended Transport Header + */ +#define FETH_PLT_SHIFT 0UL +#define FETH_SEL_SHIFT 4UL +#define FETH_RESERVED_SHIFT 6UL +#define FETH_PLT_MASK ((1UL << FETH_SEL_SHIFT) - 1UL) +#define FETH_SEL_MASK (~FETH_PLT_MASK & ((1UL << FETH_RESERVED_SHIFT) - 1U= L)) + +static inline void feth_init(struct rxe_pkt_info *pkt, u8 type, u8 level) +{ + __be32 *p =3D (__be32 *) + (pkt->hdr + rxe_opcode[pkt->opcode].offset[RXE_FETH]); + u32 feth =3D ((level << FETH_SEL_SHIFT) & FETH_SEL_MASK) | + ((type << FETH_PLT_SHIFT) & FETH_PLT_MASK); + + *p =3D cpu_to_be32(feth); +} + /*************************************************************************= ***** * Atomic Extended Transport Header *************************************************************************= *****/ @@ -910,6 +929,7 @@ enum rxe_hdr_length { RXE_ATMETH_BYTES =3D sizeof(struct rxe_atmeth), RXE_IETH_BYTES =3D sizeof(struct rxe_ieth), RXE_RDETH_BYTES =3D sizeof(struct rxe_rdeth), + RXE_FETH_BYTES =3D sizeof(u32), }; =20 static inline size_t header_size(struct rxe_pkt_info *pkt) diff --git a/drivers/infiniband/sw/rxe/rxe_opcode.c b/drivers/infiniband/sw= /rxe/rxe_opcode.c index df596ba7527d..adea6c16dfb5 100644 --- a/drivers/infiniband/sw/rxe/rxe_opcode.c +++ b/drivers/infiniband/sw/rxe/rxe_opcode.c @@ -316,6 +316,21 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] =3D { RXE_AETH_BYTES, } }, + [IB_OPCODE_RC_RDMA_FLUSH] =3D { + .name =3D "IB_OPCODE_RC_RDMA_FLUSH", + .mask =3D RXE_FETH_MASK | RXE_RETH_MASK | RXE_FLUSH_MASK | + RXE_START_MASK | RXE_END_MASK | RXE_REQ_MASK, + .length =3D RXE_BTH_BYTES + RXE_FETH_BYTES + RXE_RETH_BYTES, + .offset =3D { + [RXE_BTH] =3D 0, + [RXE_FETH] =3D RXE_BTH_BYTES, + [RXE_RETH] =3D RXE_BTH_BYTES + + RXE_FETH_BYTES, + [RXE_PAYLOAD] =3D RXE_BTH_BYTES + + RXE_FETH_BYTES + + RXE_RETH_BYTES, + } + }, [IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE] =3D { .name =3D "IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE", .mask =3D RXE_AETH_MASK | RXE_ATMACK_MASK | RXE_ACK_MASK | diff --git a/drivers/infiniband/sw/rxe/rxe_opcode.h b/drivers/infiniband/sw= /rxe/rxe_opcode.h index 8f9aaaf260f2..dbc2eca8a92c 100644 --- a/drivers/infiniband/sw/rxe/rxe_opcode.h +++ b/drivers/infiniband/sw/rxe/rxe_opcode.h @@ -48,6 +48,7 @@ enum rxe_hdr_type { RXE_DETH, RXE_IMMDT, RXE_PAYLOAD, + RXE_FETH, NUM_HDR_TYPES }; =20 @@ -63,6 +64,7 @@ enum rxe_hdr_mask { RXE_IETH_MASK =3D BIT(RXE_IETH), RXE_RDETH_MASK =3D BIT(RXE_RDETH), RXE_DETH_MASK =3D BIT(RXE_DETH), + RXE_FETH_MASK =3D BIT(RXE_FETH), RXE_PAYLOAD_MASK =3D BIT(RXE_PAYLOAD), =20 RXE_REQ_MASK =3D BIT(NUM_HDR_TYPES + 0), @@ -80,6 +82,7 @@ enum rxe_hdr_mask { RXE_END_MASK =3D BIT(NUM_HDR_TYPES + 10), =20 RXE_LOOPBACK_MASK =3D BIT(NUM_HDR_TYPES + 12), + RXE_FLUSH_MASK =3D BIT(NUM_HDR_TYPES + 13), =20 RXE_READ_OR_ATOMIC_MASK =3D (RXE_READ_MASK | RXE_ATOMIC_MASK), RXE_WRITE_OR_SEND_MASK =3D (RXE_WRITE_MASK | RXE_SEND_MASK), diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rx= e/rxe_req.c index 5eb89052dd66..708138117136 100644 --- a/drivers/infiniband/sw/rxe/rxe_req.c +++ b/drivers/infiniband/sw/rxe/rxe_req.c @@ -220,6 +220,9 @@ static int next_opcode_rc(struct rxe_qp *qp, u32 opcode= , int fits) IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE : IB_OPCODE_RC_SEND_FIRST; =20 + case IB_WR_RDMA_FLUSH: + return IB_OPCODE_RC_RDMA_FLUSH; + case IB_WR_RDMA_READ: return IB_OPCODE_RC_RDMA_READ_REQUEST; =20 @@ -413,11 +416,18 @@ static struct sk_buff *init_req_packet(struct rxe_qp = *qp, =20 /* init optional headers */ if (pkt->mask & RXE_RETH_MASK) { - reth_set_rkey(pkt, ibwr->wr.rdma.rkey); + if (pkt->mask & RXE_FETH_MASK) + reth_set_rkey(pkt, ibwr->wr.flush.rkey); + else + reth_set_rkey(pkt, ibwr->wr.rdma.rkey); reth_set_va(pkt, wqe->iova); reth_set_len(pkt, wqe->dma.resid); } =20 + /* Fill Flush Extension Transport Header */ + if (pkt->mask & RXE_FETH_MASK) + feth_init(pkt, ibwr->wr.flush.type, ibwr->wr.flush.level); + if (pkt->mask & RXE_IMMDT_MASK) immdt_set_imm(pkt, ibwr->ex.imm_data); =20 @@ -477,6 +487,9 @@ static int finish_packet(struct rxe_qp *qp, struct rxe_= send_wqe *wqe, =20 memset(pad, 0, bth_pad(pkt)); } + } else if (pkt->mask & RXE_FLUSH_MASK) { + // oA19-2: shall have no payload. + wqe->dma.resid =3D 0; } =20 return 0; diff --git a/include/rdma/ib_pack.h b/include/rdma/ib_pack.h index a9162f25beaf..d19edb502de6 100644 --- a/include/rdma/ib_pack.h +++ b/include/rdma/ib_pack.h @@ -84,6 +84,7 @@ enum { /* opcode 0x15 is reserved */ IB_OPCODE_SEND_LAST_WITH_INVALIDATE =3D 0x16, IB_OPCODE_SEND_ONLY_WITH_INVALIDATE =3D 0x17, + IB_OPCODE_RDMA_FLUSH =3D 0x1C, =20 /* real constants follow -- see comment about above IB_OPCODE() macro for more details */ @@ -112,6 +113,7 @@ enum { IB_OPCODE(RC, FETCH_ADD), IB_OPCODE(RC, SEND_LAST_WITH_INVALIDATE), IB_OPCODE(RC, SEND_ONLY_WITH_INVALIDATE), + IB_OPCODE(RC, RDMA_FLUSH), =20 /* UC */ IB_OPCODE(UC, SEND_FIRST), diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 465de3bab1e9..8f04e45b56aa 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -1299,6 +1299,7 @@ struct ib_qp_attr { enum ib_wr_opcode { /* These are shared with userspace */ IB_WR_RDMA_WRITE =3D IB_UVERBS_WR_RDMA_WRITE, + IB_WR_RDMA_FLUSH =3D IB_UVERBS_WR_RDMA_FLUSH, IB_WR_RDMA_WRITE_WITH_IMM =3D IB_UVERBS_WR_RDMA_WRITE_WITH_IMM, IB_WR_SEND =3D IB_UVERBS_WR_SEND, IB_WR_SEND_WITH_IMM =3D IB_UVERBS_WR_SEND_WITH_IMM, @@ -1393,6 +1394,15 @@ struct ib_atomic_wr { u32 rkey; }; =20 +struct ib_flush_wr { + struct ib_send_wr wr; + u64 remote_addr; + u32 length; + u32 rkey; + u8 type; + u8 level; +}; + static inline const struct ib_atomic_wr *atomic_wr(const struct ib_send_wr= *wr) { return container_of(wr, struct ib_atomic_wr, wr); diff --git a/include/uapi/rdma/ib_user_verbs.h b/include/uapi/rdma/ib_user_= verbs.h index 7ee73a0652f1..c4131913ef6a 100644 --- a/include/uapi/rdma/ib_user_verbs.h +++ b/include/uapi/rdma/ib_user_verbs.h @@ -784,6 +784,7 @@ enum ib_uverbs_wr_opcode { IB_UVERBS_WR_RDMA_READ_WITH_INV =3D 11, IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP =3D 12, IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD =3D 13, + IB_UVERBS_WR_RDMA_FLUSH =3D 14, /* Review enum ib_wr_opcode before modifying this */ }; =20 @@ -797,6 +798,13 @@ struct ib_uverbs_send_wr { __u32 invalidate_rkey; } ex; union { + struct { + __aligned_u64 remote_addr; + __u32 length; + __u32 rkey; + __u8 type; + __u8 level; + } flush; struct { __aligned_u64 remote_addr; __u32 rkey; diff --git a/include/uapi/rdma/rdma_user_rxe.h b/include/uapi/rdma/rdma_use= r_rxe.h index f09c5c9e3dd5..3de56ed5c24f 100644 --- a/include/uapi/rdma/rdma_user_rxe.h +++ b/include/uapi/rdma/rdma_user_rxe.h @@ -82,6 +82,13 @@ struct rxe_send_wr { __u32 invalidate_rkey; } ex; union { + struct { + __aligned_u64 remote_addr; + __u32 length; + __u32 rkey; + __u8 type; + __u8 level; + } flush; struct { __aligned_u64 remote_addr; __u32 rkey; --=20 2.31.1 From nobody Mon Jun 22 23:59:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0E900C433F5 for ; Tue, 15 Mar 2022 10:13:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347041AbiCOKOi (ORCPT ); Tue, 15 Mar 2022 06:14:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47044 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347022AbiCOKO2 (ORCPT ); Tue, 15 Mar 2022 06:14:28 -0400 Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 6B78E13D18; Tue, 15 Mar 2022 03:13:13 -0700 (PDT) IronPort-Data: =?us-ascii?q?A9a23=3Ago5uHaoQoYMQnxqE7kS8F/Lhl61eBmIXZBIvgKr?= =?us-ascii?q?LsJaIsI5as4F+vjFNWGzXafuNZDbwKd50ad+1pBlTvpPczNMySFBkrHg1QiMRo?= =?us-ascii?q?6IpJ/zDcB6oYHn6wu4v7a5fx5xHLIGGdajYd1eEzvuWGuWn/SkUOZ2gHOKmUra?= =?us-ascii?q?eYnkpHGeIdQ964f5ds79g6mJXqYjha++9kYuaT/z3YDdJ6RYtWo4nw/7rRCdUg?= =?us-ascii?q?RjHkGhwUmrSyhx8lAS2e3E9VPrzLEwqRpfyatE88uWSH44vwFwll1418SvBCvv?= =?us-ascii?q?9+lr6WkYMBLDPPwmSkWcQUK+n6vRAjnVqlP9la7xHMgEK49mKt4kZJNFlsZ2iS?= =?us-ascii?q?QYrP6TKsOoAURhECDw4NqpDkFPCCSHl65LPnxSfKBMAxN0rVinaJ7Yw4P56CHt?= =?us-ascii?q?V8voYMD0lYRWKhubwy7W+IsF+l8YxPcuxZNtHkn5lxDDdS/0hRPjrR6TD49BH0?= =?us-ascii?q?TEoi8ZBNfbDbtUUaHxkaxGoSxFGPBEVTo0/mOOpj3zkWzxetF+R46Ew5gD70At?= =?us-ascii?q?02aP/dtXPfdmDSddWn26ZoH7L+yLyBRRyHNiSzjyt8X+2gOLL2yThV+o6Hb2x7?= =?us-ascii?q?PlshHWV2G0fCRRQXly+ydG8gEq5UNJ3LVIV9isn66M18SSDUt74dwGxpGaJr1g?= =?us-ascii?q?XXN84O+k77hydj6nZ+QCUAkAaQTNbLt8rrsk7QXotzFDht9foAyF/9aeZTHu16?= =?us-ascii?q?LiZt3WxNDITIGtEYjULJSMH7NbLsoA+lh+JRd8LLUIfprUZAhmpm3bT8nd43O5?= =?us-ascii?q?V0KY2O2yA1Qivq1qRSlLhEmbZPjnqY18=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3ArYOS1qOkDZL5/sBcTq+jsMiBIKoaSvp037BL?= =?us-ascii?q?7SFMoHNuHvBw+/rEoB1573HJYVQqN03I8OroUJVoKkmwyXca2+MsAYs=3D?= X-IronPort-AV: E=Sophos;i="5.88,333,1635177600"; d="scan'208";a="122648113" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 15 Mar 2022 18:13:09 +0800 Received: from G08CNEXMBPEKD04.g08.fujitsu.local (unknown [10.167.33.201]) by cn.fujitsu.com (Postfix) with ESMTP id 129CD4D16FD6; Tue, 15 Mar 2022 18:13:04 +0800 (CST) Received: from G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.85) by G08CNEXMBPEKD04.g08.fujitsu.local (10.167.33.201) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:05 +0800 Received: from localhost.localdomain (10.167.225.141) by G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.23 via Frontend Transport; Tue, 15 Mar 2022 18:13:02 +0800 From: Li Zhijian To: , , , , , , CC: , , , , , , , Li Zhijian Subject: [RFC PATCH v3 4/7] RDMA/rxe: Implement flush execution in responder side Date: Tue, 15 Mar 2022 18:18:42 +0800 Message-ID: <20220315101845.4166983-5-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220315101845.4166983-1-lizhijian@fujitsu.com> References: <20220315101845.4166983-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-yoursite-MailScanner-ID: 129CD4D16FD6.A3676 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: lizhijian@fujitsu.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In contrast to other opcodes, after a series of sanity checking, FLUSH opcode will do a Placement Type checking before it really do the FLUSH operation. We will persist data via arch_wb_cache_pmem(), which could be architecture specific. Signed-off-by: Li Zhijian --- V3: Fix sparse: incorrect type in assignment; Reported-by: kernel test robo= t V2: # from Tom - adjust start for WHOLE MR level - don't support DMA mr for flush - check flush return value - FLUSH only requires FLUSH access flags, not READ nor WRITE --- drivers/infiniband/sw/rxe/rxe_hdr.h | 28 ++++++ drivers/infiniband/sw/rxe/rxe_loc.h | 2 + drivers/infiniband/sw/rxe/rxe_mr.c | 4 +- drivers/infiniband/sw/rxe/rxe_resp.c | 135 +++++++++++++++++++++++++-- include/uapi/rdma/ib_user_verbs.h | 10 ++ 5 files changed, 171 insertions(+), 8 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_hdr.h b/drivers/infiniband/sw/rx= e/rxe_hdr.h index 8063b5018445..2fe98146130e 100644 --- a/drivers/infiniband/sw/rxe/rxe_hdr.h +++ b/drivers/infiniband/sw/rxe/rxe_hdr.h @@ -626,6 +626,34 @@ static inline void feth_init(struct rxe_pkt_info *pkt,= u8 type, u8 level) *p =3D cpu_to_be32(feth); } =20 +static inline u32 __feth_plt(void *arg) +{ + __be32 *fethp =3D arg; + u32 feth =3D be32_to_cpu(*fethp); + + return (feth & FETH_PLT_MASK) >> FETH_PLT_SHIFT; +} + +static inline u32 __feth_sel(void *arg) +{ + __be32 *fethp =3D arg; + u32 feth =3D be32_to_cpu(*fethp); + + return (feth & FETH_SEL_MASK) >> FETH_SEL_SHIFT; +} + +static inline u32 feth_plt(struct rxe_pkt_info *pkt) +{ + return __feth_plt(pkt->hdr + + rxe_opcode[pkt->opcode].offset[RXE_FETH]); +} + +static inline u32 feth_sel(struct rxe_pkt_info *pkt) +{ + return __feth_sel(pkt->hdr + + rxe_opcode[pkt->opcode].offset[RXE_FETH]); +} + /*************************************************************************= ***** * Atomic Extended Transport Header *************************************************************************= *****/ diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rx= e/rxe_loc.h index b1e174afb1d4..73c39ff11e28 100644 --- a/drivers/infiniband/sw/rxe/rxe_loc.h +++ b/drivers/infiniband/sw/rxe/rxe_loc.h @@ -80,6 +80,8 @@ int rxe_mr_copy(struct rxe_mr *mr, u64 iova, void *addr, = int length, enum rxe_mr_copy_dir dir); int copy_data(struct rxe_pd *pd, int access, struct rxe_dma_info *dma, void *addr, int length, enum rxe_mr_copy_dir dir); +void lookup_iova(struct rxe_mr *mr, u64 iova, int *m_out, int *n_out, + size_t *offset_out); void *iova_to_vaddr(struct rxe_mr *mr, u64 iova, int length); struct rxe_mr *lookup_mr(struct rxe_pd *pd, int access, u32 key, enum rxe_mr_lookup_type type); diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe= /rxe_mr.c index 4f5c4af19fe0..28bef8a39cd7 100644 --- a/drivers/infiniband/sw/rxe/rxe_mr.c +++ b/drivers/infiniband/sw/rxe/rxe_mr.c @@ -297,8 +297,8 @@ int rxe_mr_init_fast(struct rxe_pd *pd, int max_pages, = struct rxe_mr *mr) return err; } =20 -static void lookup_iova(struct rxe_mr *mr, u64 iova, int *m_out, int *n_ou= t, - size_t *offset_out) +void lookup_iova(struct rxe_mr *mr, u64 iova, int *m_out, int *n_out, + size_t *offset_out) { struct rxe_map_set *set =3D mr->cur_map_set; size_t offset =3D iova - set->iova + set->offset; diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/r= xe/rxe_resp.c index e0093fad4e0f..8ad35667a476 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -5,6 +5,7 @@ */ =20 #include +#include =20 #include "rxe.h" #include "rxe_loc.h" @@ -19,6 +20,7 @@ enum resp_states { RESPST_CHK_RESOURCE, RESPST_CHK_LENGTH, RESPST_CHK_RKEY, + RESPST_CHK_PLT, RESPST_EXECUTE, RESPST_READ_REPLY, RESPST_COMPLETE, @@ -35,6 +37,7 @@ enum resp_states { RESPST_ERR_TOO_MANY_RDMA_ATM_REQ, RESPST_ERR_RNR, RESPST_ERR_RKEY_VIOLATION, + RESPST_ERR_PLT_VIOLATION, RESPST_ERR_INVALIDATE_RKEY, RESPST_ERR_LENGTH, RESPST_ERR_CQ_OVERFLOW, @@ -53,6 +56,7 @@ static char *resp_state_name[] =3D { [RESPST_CHK_RESOURCE] =3D "CHK_RESOURCE", [RESPST_CHK_LENGTH] =3D "CHK_LENGTH", [RESPST_CHK_RKEY] =3D "CHK_RKEY", + [RESPST_CHK_PLT] =3D "CHK_PLACEMENT_TYPE", [RESPST_EXECUTE] =3D "EXECUTE", [RESPST_READ_REPLY] =3D "READ_REPLY", [RESPST_COMPLETE] =3D "COMPLETE", @@ -69,6 +73,7 @@ static char *resp_state_name[] =3D { [RESPST_ERR_TOO_MANY_RDMA_ATM_REQ] =3D "ERR_TOO_MANY_RDMA_ATM_REQ", [RESPST_ERR_RNR] =3D "ERR_RNR", [RESPST_ERR_RKEY_VIOLATION] =3D "ERR_RKEY_VIOLATION", + [RESPST_ERR_PLT_VIOLATION] =3D "ERR_PLACEMENT_TYPE_VIOLATION", [RESPST_ERR_INVALIDATE_RKEY] =3D "ERR_INVALIDATE_RKEY_VIOLATION", [RESPST_ERR_LENGTH] =3D "ERR_LENGTH", [RESPST_ERR_CQ_OVERFLOW] =3D "ERR_CQ_OVERFLOW", @@ -400,6 +405,24 @@ static enum resp_states check_length(struct rxe_qp *qp, } } =20 +static enum resp_states check_placement_type(struct rxe_qp *qp, + struct rxe_pkt_info *pkt) +{ + struct rxe_mr *mr =3D qp->resp.mr; + u32 plt =3D feth_plt(pkt); + + if ((plt & IB_EXT_PLT_GLB_VIS && + !(mr->access & IB_ACCESS_FLUSH_GLOBAL_VISIBILITY)) || + (plt & IB_EXT_PLT_PERSIST && + !(mr->access & IB_ACCESS_FLUSH_PERSISTENT))) { + pr_info("Target MR didn't support this placement type, registered flag: = %x, requested flag: %x\n", + (mr->access & IB_ACCESS_FLUSHABLE) >> 8, plt); + return RESPST_ERR_PLT_VIOLATION; + } + + return RESPST_EXECUTE; +} + static enum resp_states check_rkey(struct rxe_qp *qp, struct rxe_pkt_info *pkt) { @@ -413,7 +436,7 @@ static enum resp_states check_rkey(struct rxe_qp *qp, enum resp_states state; int access; =20 - if (pkt->mask & RXE_READ_OR_WRITE_MASK) { + if (pkt->mask & (RXE_READ_OR_WRITE_MASK | RXE_FLUSH_MASK)) { if (pkt->mask & RXE_RETH_MASK) { qp->resp.va =3D reth_va(pkt); qp->resp.offset =3D 0; @@ -421,8 +444,12 @@ static enum resp_states check_rkey(struct rxe_qp *qp, qp->resp.resid =3D reth_len(pkt); qp->resp.length =3D reth_len(pkt); } - access =3D (pkt->mask & RXE_READ_MASK) ? IB_ACCESS_REMOTE_READ - : IB_ACCESS_REMOTE_WRITE; + if (pkt->mask & RXE_FLUSH_MASK) + access =3D IB_ACCESS_FLUSHABLE; + else if (pkt->mask & RXE_READ_MASK) + access =3D IB_ACCESS_REMOTE_READ; + else + access =3D IB_ACCESS_REMOTE_WRITE; } else if (pkt->mask & RXE_ATOMIC_MASK) { qp->resp.va =3D atmeth_va(pkt); qp->resp.offset =3D 0; @@ -434,8 +461,10 @@ static enum resp_states check_rkey(struct rxe_qp *qp, } =20 /* A zero-byte op is not required to set an addr or rkey. */ + /* RXE_FETH_MASK carraies zero-byte playload */ if ((pkt->mask & RXE_READ_OR_WRITE_MASK) && (pkt->mask & RXE_RETH_MASK) && + !(pkt->mask & RXE_FETH_MASK) && reth_len(pkt) =3D=3D 0) { return RESPST_EXECUTE; } @@ -503,7 +532,7 @@ static enum resp_states check_rkey(struct rxe_qp *qp, WARN_ON_ONCE(qp->resp.mr); =20 qp->resp.mr =3D mr; - return RESPST_EXECUTE; + return pkt->mask & RXE_FETH_MASK ? RESPST_CHK_PLT : RESPST_EXECUTE; =20 err: if (mr) @@ -549,6 +578,93 @@ static enum resp_states write_data_in(struct rxe_qp *q= p, return rc; } =20 +static int nvdimm_flush_iova(struct rxe_mr *mr, u64 iova, int length) +{ + int err; + int bytes; + u8 *va; + struct rxe_map **map; + struct rxe_phys_buf *buf; + int m; + int i; + size_t offset; + + if (length =3D=3D 0) + return 0; + + if (mr->type =3D=3D IB_MR_TYPE_DMA) { + err =3D -EFAULT; + goto err1; + } + + err =3D mr_check_range(mr, iova, length); + if (err) { + err =3D -EFAULT; + goto err1; + } + + lookup_iova(mr, iova, &m, &i, &offset); + + map =3D mr->cur_map_set->map + m; + buf =3D map[0]->buf + i; + + while (length > 0) { + va =3D (u8 *)(uintptr_t)buf->addr + offset; + bytes =3D buf->size - offset; + + if (bytes > length) + bytes =3D length; + + arch_wb_cache_pmem(va, bytes); + + length -=3D bytes; + + offset =3D 0; + buf++; + i++; + + if (i =3D=3D RXE_BUF_PER_MAP) { + i =3D 0; + map++; + buf =3D map[0]->buf; + } + } + + return 0; + +err1: + return err; +} + +static enum resp_states process_flush(struct rxe_qp *qp, + struct rxe_pkt_info *pkt) +{ + u64 length, start; + u32 sel =3D feth_sel(pkt); + u32 plt =3D feth_plt(pkt); + struct rxe_mr *mr =3D qp->resp.mr; + + if (sel =3D=3D IB_EXT_SEL_MR_RANGE) { + start =3D qp->resp.va; + length =3D qp->resp.length; + } else { /* sel =3D=3D IB_EXT_SEL_MR_WHOLE */ + start =3D mr->cur_map_set->iova; + length =3D mr->cur_map_set->length; + } + + if (plt & IB_EXT_PLT_PERSIST) { + if (nvdimm_flush_iova(mr, start, length)) + return RESPST_ERR_RKEY_VIOLATION; + wmb(); + } else if (plt & IB_EXT_PLT_GLB_VIS) + wmb(); + + /* Prepare RDMA READ response of zero */ + qp->resp.resid =3D 0; + + return RESPST_READ_REPLY; +} + /* Guarantee atomicity of atomic operations at the machine level. */ static DEFINE_SPINLOCK(atomic_ops_lock); =20 @@ -801,6 +917,8 @@ static enum resp_states execute(struct rxe_qp *qp, stru= ct rxe_pkt_info *pkt) err =3D process_atomic(qp, pkt); if (err) return err; + } else if (pkt->mask & RXE_FLUSH_MASK) { + return process_flush(qp, pkt); } else { /* Unreachable */ WARN_ON_ONCE(1); @@ -1061,7 +1179,7 @@ static enum resp_states duplicate_request(struct rxe_= qp *qp, /* SEND. Ack again and cleanup. C9-105. */ send_ack(qp, pkt, AETH_ACK_UNLIMITED, prev_psn); return RESPST_CLEANUP; - } else if (pkt->mask & RXE_READ_MASK) { + } else if (pkt->mask & RXE_READ_MASK || pkt->mask & RXE_FLUSH_MASK) { struct resp_res *res; =20 res =3D find_resource(qp, pkt->psn); @@ -1100,7 +1218,7 @@ static enum resp_states duplicate_request(struct rxe_= qp *qp, /* Reset the resource, except length. */ res->read.va_org =3D iova; res->read.va =3D iova; - res->read.resid =3D resid; + res->read.resid =3D pkt->mask & RXE_FLUSH_MASK ? 0 : resid; =20 /* Replay the RDMA read reply. */ qp->resp.res =3D res; @@ -1247,6 +1365,9 @@ int rxe_responder(void *arg) case RESPST_CHK_RKEY: state =3D check_rkey(qp, pkt); break; + case RESPST_CHK_PLT: + state =3D check_placement_type(qp, pkt); + break; case RESPST_EXECUTE: state =3D execute(qp, pkt); break; @@ -1301,6 +1422,8 @@ int rxe_responder(void *arg) break; =20 case RESPST_ERR_RKEY_VIOLATION: + /* oA19-13 8 */ + case RESPST_ERR_PLT_VIOLATION: if (qp_type(qp) =3D=3D IB_QPT_RC) { /* Class C */ do_class_ac_error(qp, AETH_NAK_REM_ACC_ERR, diff --git a/include/uapi/rdma/ib_user_verbs.h b/include/uapi/rdma/ib_user_= verbs.h index c4131913ef6a..69a04bb828a0 100644 --- a/include/uapi/rdma/ib_user_verbs.h +++ b/include/uapi/rdma/ib_user_verbs.h @@ -105,6 +105,16 @@ enum { IB_USER_VERBS_EX_CMD_MODIFY_CQ }; =20 +enum ib_ext_placement_type { + IB_EXT_PLT_GLB_VIS =3D 1 << 0, + IB_EXT_PLT_PERSIST =3D 1 << 1, +}; + +enum ib_ext_selectivity_level { + IB_EXT_SEL_MR_RANGE =3D 0, /* select a MR range */ + IB_EXT_SEL_MR_WHOLE, /* select the whole MR */ +}; + /* * Make sure that all structs defined in this file remain laid out so * that they pack the same way on 32-bit and 64-bit architectures (to --=20 2.31.1 From nobody Mon Jun 22 23:59:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CCB2FC433FE for ; Tue, 15 Mar 2022 10:13:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347035AbiCOKOd (ORCPT ); Tue, 15 Mar 2022 06:14:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346992AbiCOKOX (ORCPT ); Tue, 15 Mar 2022 06:14:23 -0400 Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 55A08DEB5; Tue, 15 Mar 2022 03:13:10 -0700 (PDT) IronPort-Data: =?us-ascii?q?A9a23=3AhBydEa0djXv95CyUS/bD5dxwkn2cJEfYwER7XOP?= =?us-ascii?q?LsXnJgDIg32FSyGtOWm6Ob/rfZTT2ed0lYIm/o0tQ6JLTmNc2QQE+nZ1PZygU8?= =?us-ascii?q?JKaX7x1DatR0xu6d5SFFAQ+hyknQoGowPscEzmM9n9BDpC79SMmjfvQH+KlYAL?= =?us-ascii?q?5EnsZqTFMGX5JZS1Ly7ZRbr5A2bBVMivV0T/Ai5S31GyNh1aYBlkpB5er83uDi?= =?us-ascii?q?hhdVAQw5TTSbdgT1LPXeuJ84Jg3fcldJFOgKmVY83LTegrN8F251juxExYFAdX?= =?us-ascii?q?jnKv5c1ERX/jZOg3mZnh+AvDk20Yd4HdplPtT2Pk0MC+7jx2NnsJxyddMvJqYR?= =?us-ascii?q?xorP7HXhaIWVBww/yRWZPccpuOXeCHm2SCU5wicG5f2+N10FEw/J5Yf/OZvDEl?= =?us-ascii?q?B8PUZLHYGaRXrr/CnwqCqSLM03pwLI8ziPYdZsXZlpRndDP8gTo/ORb3H49Bw3?= =?us-ascii?q?Co5mc1PW/3ZYqIxZTNpKhaGfBxLPlYeDYkWneG0i325eDpdwHqJoq8++HqVwxZ?= =?us-ascii?q?21bHhItnUUt2MWchR2E2fowru+2n+BDkZOcaZxD7D9Wij7sfGnSrhX4QWPLum9?= =?us-ascii?q?/JriRuYwWl7IBgcUVywodG/lE+yWtsZIEsRkgIyqq0a6EWvVtTsGRa/pRasuh8?= =?us-ascii?q?aRsoVEOAg7gyJ4rTb7hzfBWUeSDNFLts8u6ceQT0sy0/Mhd/sDBRxv7CPD3GQ7?= =?us-ascii?q?LGZqXW1Iyd9BW0NagcWTAYd7p/oqekOYrjnJjp4OPftyISrRnermHbXxBXSTo4?= =?us-ascii?q?71aYjv5hXN3ib6950mqX0cw=3D=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3AcVIrt6zB6ejwBeSKxmPvKrPwyr1zdoMgy1kn?= =?us-ascii?q?xilNoRw8SK2lfqeV7Y0mPH7P+U4ssR4b6LO90cW7Lk80sKQFhbX5Xo3SOjUO2l?= =?us-ascii?q?HYTr2KhLGKq1aLdkHDH6xmpMBdmsNFaOEYY2IVsS+D2njcLz8/+qj6zImYwffZ?= =?us-ascii?q?02x2TRxnL4Vp7wJCAA6dFUFsLTM2f6YRJd6N4NZdvTq8dTAyZsS/PHMMWO/OvJ?= =?us-ascii?q?nlj5TjCCR2eiIP2U2fiy+y8r7mH1y91hcaaTlGxrAv6izkvmXCl96ej80=3D?= X-IronPort-AV: E=Sophos;i="5.88,333,1635177600"; d="scan'208";a="122648111" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 15 Mar 2022 18:13:09 +0800 Received: from G08CNEXMBPEKD04.g08.fujitsu.local (unknown [10.167.33.201]) by cn.fujitsu.com (Postfix) with ESMTP id 0F0194D16FD7; Tue, 15 Mar 2022 18:13:05 +0800 (CST) Received: from G08CNEXJMPEKD02.g08.fujitsu.local (10.167.33.202) by G08CNEXMBPEKD04.g08.fujitsu.local (10.167.33.201) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:07 +0800 Received: from G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.85) by G08CNEXJMPEKD02.g08.fujitsu.local (10.167.33.202) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:06 +0800 Received: from localhost.localdomain (10.167.225.141) by G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.23 via Frontend Transport; Tue, 15 Mar 2022 18:13:02 +0800 From: Li Zhijian To: , , , , , , CC: , , , , , , , Li Zhijian Subject: [RFC PATCH v3 5/7] RDMA/rxe: Implement flush completion Date: Tue, 15 Mar 2022 18:18:43 +0800 Message-ID: <20220315101845.4166983-6-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220315101845.4166983-1-lizhijian@fujitsu.com> References: <20220315101845.4166983-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-yoursite-MailScanner-ID: 0F0194D16FD7.A0883 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: lizhijian@fujitsu.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Introduce a new IB_UVERBS_WC_FLUSH code to tell userspace a FLUSH completion. Signed-off-by: Li Zhijian --- drivers/infiniband/sw/rxe/rxe_comp.c | 4 +++- include/rdma/ib_verbs.h | 1 + include/uapi/rdma/ib_user_verbs.h | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/sw/rxe/rxe_comp.c b/drivers/infiniband/sw/r= xe/rxe_comp.c index f363fe3fa414..e5b9d07eba93 100644 --- a/drivers/infiniband/sw/rxe/rxe_comp.c +++ b/drivers/infiniband/sw/rxe/rxe_comp.c @@ -104,6 +104,7 @@ static enum ib_wc_opcode wr_to_wc_opcode(enum ib_wr_opc= ode opcode) case IB_WR_LOCAL_INV: return IB_WC_LOCAL_INV; case IB_WR_REG_MR: return IB_WC_REG_MR; case IB_WR_BIND_MW: return IB_WC_BIND_MW; + case IB_WR_RDMA_FLUSH: return IB_WC_RDMA_FLUSH; =20 default: return 0xff; @@ -261,7 +262,8 @@ static inline enum comp_state check_ack(struct rxe_qp *= qp, */ case IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE: if (wqe->wr.opcode !=3D IB_WR_RDMA_READ && - wqe->wr.opcode !=3D IB_WR_RDMA_READ_WITH_INV) { + wqe->wr.opcode !=3D IB_WR_RDMA_READ_WITH_INV && + wqe->wr.opcode !=3D IB_WR_RDMA_FLUSH) { wqe->status =3D IB_WC_FATAL_ERR; return COMPST_ERROR; } diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 8f04e45b56aa..a73c746759b0 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -965,6 +965,7 @@ const char *__attribute_const__ ib_wc_status_msg(enum i= b_wc_status status); enum ib_wc_opcode { IB_WC_SEND =3D IB_UVERBS_WC_SEND, IB_WC_RDMA_WRITE =3D IB_UVERBS_WC_RDMA_WRITE, + IB_WC_RDMA_FLUSH =3D IB_UVERBS_WC_FLUSH, IB_WC_RDMA_READ =3D IB_UVERBS_WC_RDMA_READ, IB_WC_COMP_SWAP =3D IB_UVERBS_WC_COMP_SWAP, IB_WC_FETCH_ADD =3D IB_UVERBS_WC_FETCH_ADD, diff --git a/include/uapi/rdma/ib_user_verbs.h b/include/uapi/rdma/ib_user_= verbs.h index 69a04bb828a0..a8ba12aa04e6 100644 --- a/include/uapi/rdma/ib_user_verbs.h +++ b/include/uapi/rdma/ib_user_verbs.h @@ -476,6 +476,7 @@ enum ib_uverbs_wc_opcode { IB_UVERBS_WC_BIND_MW =3D 5, IB_UVERBS_WC_LOCAL_INV =3D 6, IB_UVERBS_WC_TSO =3D 7, + IB_UVERBS_WC_FLUSH =3D 8, }; =20 struct ib_uverbs_wc { --=20 2.31.1 From nobody Mon Jun 22 23:59:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC26BC433EF for ; Tue, 15 Mar 2022 10:13:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347028AbiCOKOn (ORCPT ); Tue, 15 Mar 2022 06:14:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47494 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347018AbiCOKO2 (ORCPT ); Tue, 15 Mar 2022 06:14:28 -0400 Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id BBF3813D02; Tue, 15 Mar 2022 03:13:12 -0700 (PDT) IronPort-Data: =?us-ascii?q?A9a23=3AQtD3JKA8uUhRZRVW/ybiw5YqxClBgxIJ4g17XOL?= =?us-ascii?q?fAgbqgj8kgzEDyGVKWmjVP/uJMGP0c94kOtmy9RwPvsKAx9UxeLYW3SszFioV8?= =?us-ascii?q?6IpJjg4wn/YZnrUdouaJK5ex512huLocYZkHhcwmj/3auK79SMkjPnRLlbBILW?= =?us-ascii?q?s1h5ZFFYMpBgJ2UoLd94R2uaEsPDha++/kYqaT/73ZDdJ7wVJ3lc8sMpvnv/AU?= =?us-ascii?q?MPa41v0tnRmDRxCUcS3e3M9VPrzLonpR5f0rxU9IwK0ewrD5OnREmLx9BFrBM6?= =?us-ascii?q?nk6rgbwsBRbu60Qqm0yIQAvb9xEMZ4HFaPqUTbZLwbW9TiieJntJwwdNlu4GyS?= =?us-ascii?q?BsyI+vHn+F1vxxwSnskY/EWoeabSZS4mYnJp6HcSFP22/hnFloxO40A9854BGh?= =?us-ascii?q?P8boTLzVlRgKShfCnwujjErFEicEqLc2tN4Qa0llkzDjfAukrR4jORari5cJRw?= =?us-ascii?q?zoxwMtJGJ72a8MfLzgpcxXEZxxGP0w/CZQikePujX76GxVEr1ecvrhx7HLUyQV?= =?us-ascii?q?9wrvsGNvTZtGOA85Smy6wom/B+Uz6DwscOdjZziCKmlqlhubVmiX/cIQMFbG5/?= =?us-ascii?q?7hhh1j77mkZDBodVXO9v/i1i0f4UNVaQ2QI/S8GsaE27EG6CNL6WnWQpH+Cow5?= =?us-ascii?q?ZWNdKFeA+wB+Cx7CS4AuDAGUACDlbZ7QOsM4wWCxvzFOMlvv3CjF19r6YU3SQ8?= =?us-ascii?q?vGTtzzaESoaIkcQZCIcQE0O6rHeTCsb5v7UZo87Vvfr0ZuuQnetqw1mZRMW390?= =?us-ascii?q?75fPnHY3nlbwfvw+Rmw=3D=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3ArdKukq+Udw6NvRCJiUZuk+A8I+orL9Y04lQ7?= =?us-ascii?q?vn2YSXRuHPBw8Pre+sjztCWE8Qr5N0tBpTntAsW9qDbnhPtICOoqTNCftWvdyQ?= =?us-ascii?q?iVxehZhOOIqVDd8m/Fh4pgPMxbEpSWZueeMbEDt7eZ3OCnKadc/PC3tLCvmfzF?= =?us-ascii?q?z2pgCSVja6Rb5Q9/DQqBe3cGPzVuNN4oEoaG/Mpbq36FcXQTVM6yAX4IRKztvN?= =?us-ascii?q?vO/aiWGyIuNlo27hWUlzO05PrfGxic5B0XVDRC2vMD3AH+4nTE2pk=3D?= X-IronPort-AV: E=Sophos;i="5.88,333,1635177600"; d="scan'208";a="122648114" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 15 Mar 2022 18:13:09 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id 934874D16FD8; Tue, 15 Mar 2022 18:13:05 +0800 (CST) Received: from G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.85) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:05 +0800 Received: from localhost.localdomain (10.167.225.141) by G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.23 via Frontend Transport; Tue, 15 Mar 2022 18:13:03 +0800 From: Li Zhijian To: , , , , , , CC: , , , , , , , Li Zhijian Subject: [RFC PATCH v3 6/7] RDMA/rxe: Enable RDMA FLUSH capability for rxe device Date: Tue, 15 Mar 2022 18:18:44 +0800 Message-ID: <20220315101845.4166983-7-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220315101845.4166983-1-lizhijian@fujitsu.com> References: <20220315101845.4166983-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-yoursite-MailScanner-ID: 934874D16FD8.AF0DA X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: lizhijian@fujitsu.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Now we are ready to enable RDMA FLUSH capability for RXE. It can support Global Visibility and Persistence placement types. Signed-off-by: Li Zhijian --- V2: adjust patch's order. move it here from [04/10] --- drivers/infiniband/sw/rxe/rxe_param.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/sw/rxe/rxe_param.h b/drivers/infiniband/sw/= rxe/rxe_param.h index 918270e34a35..281e1977b147 100644 --- a/drivers/infiniband/sw/rxe/rxe_param.h +++ b/drivers/infiniband/sw/rxe/rxe_param.h @@ -53,7 +53,9 @@ enum rxe_device_param { | IB_DEVICE_ALLOW_USER_UNREG | IB_DEVICE_MEM_WINDOW | IB_DEVICE_MEM_WINDOW_TYPE_2A - | IB_DEVICE_MEM_WINDOW_TYPE_2B, + | IB_DEVICE_MEM_WINDOW_TYPE_2B + | IB_DEVICE_PLT_GLOBAL_VISIBILITY + | IB_DEVICE_PLT_PERSISTENT, RXE_MAX_SGE =3D 32, RXE_MAX_WQE_SIZE =3D sizeof(struct rxe_send_wqe) + sizeof(struct ib_sge) * RXE_MAX_SGE, --=20 2.31.1 From nobody Mon Jun 22 23:59:16 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8ED39C433EF for ; Tue, 15 Mar 2022 10:13:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347054AbiCOKOr (ORCPT ); Tue, 15 Mar 2022 06:14:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347017AbiCOKO2 (ORCPT ); Tue, 15 Mar 2022 06:14:28 -0400 Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id BBAB8E03B; Tue, 15 Mar 2022 03:13:12 -0700 (PDT) IronPort-Data: =?us-ascii?q?A9a23=3A9Ma4CaL5kAEfsEsZFE+R3pQlxSXFcZb7ZxGrkP8?= =?us-ascii?q?bfHC93TJ3gjdVzTBJWGnXbvmLM2v1Kd1xboTloEwA75+Bm4NqS1BcGVNFFSwT8?= =?us-ascii?q?ZWfbTi6wuYcBwvLd4ubChsPA/w2MrEsF+hpCC+MzvuRGuK59yMkj/nRHuOU5NP?= =?us-ascii?q?sYUideyc1EU/Ntjozw4bVsqYw6TSIK1vlVeHa+qUzC3f5s9JACV/43orYwP9ZU?= =?us-ascii?q?FsejxtD1rA2TagjUFYzDBD5BrpHTU26ByOQroW5goeHq+j/ILGRpgs1/j8mDJW?= =?us-ascii?q?rj7T6blYXBLXVOGBiiFIPA+773EcE/Xd0j87XN9JFAatTozGIjdBwytREs7S+V?= =?us-ascii?q?AUoIrbR3u8aVnG0FgknZ/cYpO+eeCLXXcu7iheun2HX6+92AUgsJooe+v56KW5?= =?us-ascii?q?L/P0cbjsKa3irlfO00qO5ELE03uwsKcDqOMUUvXQI5TXYBPApXp3FW6jM6vdYw?= =?us-ascii?q?T4vi8EIFvHbD+IVYDwpblLfYhlLO14SE7o/mvulgj/0dDgwgE6SoKMs8S7c1gt?= =?us-ascii?q?02bT/M9v9e9qWSMETlUGdzkrC8mP/KhIXLtqSzXyC6H3ErubPlDn8XoY6EqO5+?= =?us-ascii?q?v9jxlaUwwQ7DRcSUlC7if+ni0K/UpRULEl80jYpqIAu/UizQ8i7VBq9yFaAvxg?= =?us-ascii?q?BS59THvc85QWl1KXZ+UCaC3ICQzoHb8Yp3OcyRDo3xhqTk9bgLSJgvafTSn+H8?= =?us-ascii?q?LqQ6zSoNkA9L2ANTT0FQBMIpdLqyLzfJDqnos1LSfbz14OqX2qrhW3ikcT3vJ1?= =?us-ascii?q?L5eZj6klx1Qyvb+qQm6X0?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3AxuRKR6CppNkkEqrlHelI55DYdb4zR+YMi2TC?= =?us-ascii?q?1yhKJyC9Ffbo8fxG/c5rrCMc5wxwZJhNo7y90ey7MBbhHP1OkO4s1NWZLWrbUQ?= =?us-ascii?q?KTRekIh+bfKn/baknDH4VmtJuIHZIQNDSJNykZsS/l2njEL/8QhMmA7LuzhfrT?= =?us-ascii?q?i1NkTQRRYalm6AtjYzzraXFedU1XA4YjDpqA6o5irzqkQ34eacO2HT0rRO7Gzu?= =?us-ascii?q?e77q7OUFoXAQI98gmSgXeN4L7+KRKR2RATSHdu7N4ZgBD4rzA=3D?= X-IronPort-AV: E=Sophos;i="5.88,333,1635177600"; d="scan'208";a="122648112" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 15 Mar 2022 18:13:09 +0800 Received: from G08CNEXMBPEKD04.g08.fujitsu.local (unknown [10.167.33.201]) by cn.fujitsu.com (Postfix) with ESMTP id 7D69D4D16FD9; Tue, 15 Mar 2022 18:13:06 +0800 (CST) Received: from G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.85) by G08CNEXMBPEKD04.g08.fujitsu.local (10.167.33.201) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 15 Mar 2022 18:13:08 +0800 Received: from localhost.localdomain (10.167.225.141) by G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.23 via Frontend Transport; Tue, 15 Mar 2022 18:13:04 +0800 From: Li Zhijian To: , , , , , , CC: , , , , , , , Li Zhijian Subject: [RFC PATCH v3 7/7] RDMA/rxe: Add RD FLUSH service support Date: Tue, 15 Mar 2022 18:18:45 +0800 Message-ID: <20220315101845.4166983-8-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220315101845.4166983-1-lizhijian@fujitsu.com> References: <20220315101845.4166983-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-yoursite-MailScanner-ID: 7D69D4D16FD9.AFFE1 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: lizhijian@fujitsu.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Since XRC has not been supported by the rxe, XRC FLUSH will not be supported until rxe implements XRC service. Signed-off-by: Li Zhijian --- I have not setup a RD environment to test this protocol --- drivers/infiniband/sw/rxe/rxe_opcode.c | 20 ++++++++++++++++++++ include/rdma/ib_pack.h | 1 + 2 files changed, 21 insertions(+) diff --git a/drivers/infiniband/sw/rxe/rxe_opcode.c b/drivers/infiniband/sw= /rxe/rxe_opcode.c index adea6c16dfb5..3d86129558f7 100644 --- a/drivers/infiniband/sw/rxe/rxe_opcode.c +++ b/drivers/infiniband/sw/rxe/rxe_opcode.c @@ -922,6 +922,26 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] =3D { RXE_RDETH_BYTES, } }, + [IB_OPCODE_RD_RDMA_FLUSH] =3D { + .name =3D "IB_OPCODE_RD_RDMA_FLUSH", + .mask =3D RXE_RDETH_MASK | RXE_FETH_MASK | RXE_RETH_MASK | + RXE_FLUSH_MASK | RXE_START_MASK | + RXE_END_MASK | RXE_REQ_MASK, + .length =3D RXE_BTH_BYTES + RXE_FETH_BYTES + RXE_RETH_BYTES, + .offset =3D { + [RXE_BTH] =3D 0, + [RXE_RDETH] =3D RXE_BTH_BYTES, + [RXE_FETH] =3D RXE_BTH_BYTES + + RXE_RDETH_BYTES, + [RXE_RETH] =3D RXE_BTH_BYTES + + RXE_RDETH_BYTES + + RXE_FETH_BYTES, + [RXE_PAYLOAD] =3D RXE_BTH_BYTES + + RXE_RDETH_BYTES + + RXE_FETH_BYTES + + RXE_RETH_BYTES, + } + }, =20 /* UD */ [IB_OPCODE_UD_SEND_ONLY] =3D { diff --git a/include/rdma/ib_pack.h b/include/rdma/ib_pack.h index d19edb502de6..40568a33ead8 100644 --- a/include/rdma/ib_pack.h +++ b/include/rdma/ib_pack.h @@ -151,6 +151,7 @@ enum { IB_OPCODE(RD, ATOMIC_ACKNOWLEDGE), IB_OPCODE(RD, COMPARE_SWAP), IB_OPCODE(RD, FETCH_ADD), + IB_OPCODE(RD, RDMA_FLUSH), =20 /* UD */ IB_OPCODE(UD, SEND_ONLY), --=20 2.31.1