commit 6ed600b17449fad0c2cf1e7871f9a48b8e9988d6 Author: CentOS Sources Date: Tue May 17 06:37:40 2022 -0400 import rdma-core-37.2-1.el9 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..583a721 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/rdma-core-37.2.tar.gz diff --git a/.rdma-core.metadata b/.rdma-core.metadata new file mode 100644 index 0000000..be54804 --- /dev/null +++ b/.rdma-core.metadata @@ -0,0 +1 @@ +ec4596f069873bc3119f0cf2ed076a0aef61c2cf SOURCES/rdma-core-37.2.tar.gz diff --git a/SOURCES/0001-bnxt_re-lib-Check-pointer-validity-while-freeing-que.patch b/SOURCES/0001-bnxt_re-lib-Check-pointer-validity-while-freeing-que.patch new file mode 100644 index 0000000..5e7ae39 --- /dev/null +++ b/SOURCES/0001-bnxt_re-lib-Check-pointer-validity-while-freeing-que.patch @@ -0,0 +1,41 @@ +From 02fb24d24bd705822254133fa82c007ab3487af8 Mon Sep 17 00:00:00 2001 +From: Selvin Xavier +Date: Sun, 16 Jan 2022 11:10:08 -0800 +Subject: [PATCH] bnxt_re/lib: Check pointer validity while freeing queue + pointers + +qp->jrqq can be NULL in SRQ case or when accessed from error path. +Avoid segfault by adding check before accessing qp->jrqq and qp->jsqq. + +Fixes: f92837e29fd4 ("bnxt_re/lib: consolidate hwque and swque in common structure") +Signed-off-by: Selvin Xavier +--- + providers/bnxt_re/verbs.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/providers/bnxt_re/verbs.c b/providers/bnxt_re/verbs.c +index 14fb58b7..ca113537 100644 +--- a/providers/bnxt_re/verbs.c ++++ b/providers/bnxt_re/verbs.c +@@ -820,10 +820,14 @@ static int bnxt_re_check_qp_limits(struct bnxt_re_context *cntx, + + static void bnxt_re_free_queue_ptr(struct bnxt_re_qp *qp) + { +- free(qp->jrqq->hwque); +- free(qp->jrqq); +- free(qp->jsqq->hwque); +- free(qp->jsqq); ++ if (qp->jrqq) { ++ free(qp->jrqq->hwque); ++ free(qp->jrqq); ++ } ++ if (qp->jsqq) { ++ free(qp->jsqq->hwque); ++ free(qp->jsqq); ++ } + } + + static int bnxt_re_alloc_queue_ptr(struct bnxt_re_qp *qp, +-- +2.31.1 + diff --git a/SOURCES/0001-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch b/SOURCES/0001-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch new file mode 100644 index 0000000..7ee61e6 --- /dev/null +++ b/SOURCES/0001-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch @@ -0,0 +1,42 @@ +From 1c63f25b55ca4f5317e1c85b548469bbc747e147 Mon Sep 17 00:00:00 2001 +From: "Goldman, Adam" +Date: Tue, 4 Feb 2020 08:55:20 -0500 +Subject: [PATCH] kernel-boot: Do not perform device rename on OPA devices + +PSM2 will not run with recent rdma-core releases. Several tools and +libraries like PSM2, require the hfi1 name to be present. + +Recent rdma-core releases added a new feature to rename kernel devices, +but the default configuration will not work with hfi1 fabrics. + +Related opa-psm2 github issue: + https://github.com/intel/opa-psm2/issues/43 + +Fixes: 5b4099d47be3 ("kernel-boot: Perform device rename to make stable names") +Reviewed-by: Mike Marciniszyn +Signed-off-by: Goldman, Adam +--- + kernel-boot/rdma-persistent-naming.rules | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/kernel-boot/rdma-persistent-naming.rules b/kernel-boot/rdma-persistent-naming.rules +index 6f9c53a5..3ce34ea9 100644 +--- a/kernel-boot/rdma-persistent-naming.rules ++++ b/kernel-boot/rdma-persistent-naming.rules +@@ -26,10 +26,10 @@ + # Device type = RoCE + # mlx5_0 -> rocex525400c0fe123455 + # +-ACTION=="add", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FALLBACK" ++ACTION=="add", SUBSYSTEM=="infiniband", KERNEL!="hfi1*", PROGRAM="rdma_rename %k NAME_FALLBACK" + + # Example: + # * NAME_FIXED + # fixed name for specific board_id + # +-#ACTION=="add", ATTR{board_id}=="MSF0010110035", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FIXED myib" +\ No newline at end of file ++#ACTION=="add", ATTR{board_id}=="MSF0010110035", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FIXED myib" +-- +2.30.1 + diff --git a/SOURCES/0001-mlx5-Initialize-wr_data-when-post-a-work-request.patch b/SOURCES/0001-mlx5-Initialize-wr_data-when-post-a-work-request.patch new file mode 100644 index 0000000..8fc4815 --- /dev/null +++ b/SOURCES/0001-mlx5-Initialize-wr_data-when-post-a-work-request.patch @@ -0,0 +1,44 @@ +From 3ea45d65d42e5daf032164240abebec82e987f90 Mon Sep 17 00:00:00 2001 +From: Mark Zhang +Date: Mon, 20 Dec 2021 11:19:46 +0200 +Subject: [PATCH] mlx5: Initialize wr_data when post a work request + +[ Upstream commit 4c905646de3e75bdccada4abe9f0d273d76eaf50 ] + +With raw_wqe feature enabled, the wc opcode will be set to +IBV_WC_DRIVER2 if the wr_data is set to it. +So if wr_data is not initialized, there's a chance that it happens to be +IBV_WC_DRIVER2, then the application gets this wc opcode unexpectedly. + +Fixes: 8ff1c5c3c411 ("mlx5: Introduce mlx5dv_wr_raw_wqe builder") +Signed-off-by: Mark Zhang +Signed-off-by: Yishai Hadas +Signed-off-by: Nicolas Morey-Chaisemartin +--- + providers/mlx5/qp.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/providers/mlx5/qp.c b/providers/mlx5/qp.c +index 70c1afb2..8a99f504 100644 +--- a/providers/mlx5/qp.c ++++ b/providers/mlx5/qp.c +@@ -871,6 +871,7 @@ static inline int _mlx5_post_send(struct ibv_qp *ibqp, struct ibv_send_wr *wr, + + seg += sizeof *ctrl; + size = sizeof *ctrl / 16; ++ qp->sq.wr_data[idx] = 0; + + switch (ibqp->qp_type) { + case IBV_QPT_XRC_SEND: +@@ -1251,6 +1252,8 @@ static inline void _common_wqe_init_op(struct ibv_qp_ex *ibqp, int ib_op, + mqp->sq.wr_data[idx] = IBV_WC_DRIVER1; + else if (mlx5_op == MLX5_OPCODE_MMO) + mqp->sq.wr_data[idx] = IBV_WC_DRIVER3; ++ else ++ mqp->sq.wr_data[idx] = 0; + + ctrl = mlx5_get_send_wqe(mqp, idx); + *(uint32_t *)((void *)ctrl + 8) = 0; +-- +2.31.1 + diff --git a/SOURCES/0001-tests-Fix-comparing-qp_state-for-iWARP-providers.patch b/SOURCES/0001-tests-Fix-comparing-qp_state-for-iWARP-providers.patch new file mode 100644 index 0000000..f9c7395 --- /dev/null +++ b/SOURCES/0001-tests-Fix-comparing-qp_state-for-iWARP-providers.patch @@ -0,0 +1,63 @@ +From 698f2ae804767635342694d31d9590fe6ad2217e Mon Sep 17 00:00:00 2001 +From: Kamal Heib +Date: Wed, 8 Dec 2021 16:12:11 +0200 +Subject: [PATCH] tests: Fix comparing qp_state for iWARP providers. + +The initial QP state for iWARP providers is IBV_QPS_INIT (not +IBV_QPS_RESET), Change the test to handle this case. + +Signed-off-by: Kamal Heib +--- + tests/test_qp.py | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/tests/test_qp.py b/tests/test_qp.py +index b952c95e..a66f724f 100644 +--- a/tests/test_qp.py ++++ b/tests/test_qp.py +@@ -14,6 +14,7 @@ from pyverbs.pyverbs_error import PyverbsRDMAError + from pyverbs.qp import QPInitAttr, QPAttr, QP + from tests.base import PyverbsAPITestCase + import pyverbs.utils as pu ++import pyverbs.device as d + import pyverbs.enums as e + from pyverbs.pd import PD + from pyverbs.cq import CQ +@@ -177,6 +178,11 @@ class QPTest(PyverbsAPITestCase): + self.assertLessEqual(orig_cap.max_recv_sge, init_attr.cap.max_recv_sge) + self.assertLessEqual(orig_cap.max_inline_data, init_attr.cap.max_inline_data) + ++ def get_node_type(self): ++ for dev in d.get_device_list(): ++ if dev.name.decode() == self.ctx.name: ++ return dev.node_type ++ + def query_qp_common_test(self, qp_type): + with PD(self.ctx) as pd: + with CQ(self.ctx, 100, None, None, 0) as cq: +@@ -190,14 +196,20 @@ class QPTest(PyverbsAPITestCase): + caps = qia.cap + qp = self.create_qp(pd, qia, False, False, self.ib_port) + qp_attr, qp_init_attr = qp.query(e.IBV_QP_STATE | e.IBV_QP_CAP) +- self.verify_qp_attrs(caps, e.IBV_QPS_RESET, qp_init_attr, qp_attr) ++ if self.get_node_type() == e.IBV_NODE_RNIC: ++ self.verify_qp_attrs(caps, e.IBV_QPS_INIT, qp_init_attr, qp_attr) ++ else: ++ self.verify_qp_attrs(caps, e.IBV_QPS_RESET, qp_init_attr, qp_attr) + + # Extended QP + qia = get_qp_init_attr_ex(cq, pd, self.attr, self.attr_ex, qp_type) + caps = qia.cap # Save them to verify values later + qp = self.create_qp(self.ctx, qia, True, False, self.ib_port) + qp_attr, qp_init_attr = qp.query(e.IBV_QP_STATE | e.IBV_QP_CAP) +- self.verify_qp_attrs(caps, e.IBV_QPS_RESET, qp_init_attr, qp_attr) ++ if self.get_node_type() == e.IBV_NODE_RNIC: ++ self.verify_qp_attrs(caps, e.IBV_QPS_INIT, qp_init_attr, qp_attr) ++ else: ++ self.verify_qp_attrs(caps, e.IBV_QPS_RESET, qp_init_attr, qp_attr) + + def test_query_rc_qp(self): + """ +-- +2.31.1 + diff --git a/SOURCES/udev-keep-NAME_KERNEL-as-default-interface-naming-co.patch b/SOURCES/udev-keep-NAME_KERNEL-as-default-interface-naming-co.patch new file mode 100644 index 0000000..d7276ad --- /dev/null +++ b/SOURCES/udev-keep-NAME_KERNEL-as-default-interface-naming-co.patch @@ -0,0 +1,31 @@ +From 538cd05b34bf15076ce40273926d7580d421a670 Mon Sep 17 00:00:00 2001 +From: Jarod Wilson +Date: Wed, 21 Aug 2019 17:09:13 -0400 +Subject: [PATCH] udev: keep NAME_KERNEL as default interface naming convention + +Signed-off-by: Jarod Wilson +--- + kernel-boot/rdma-persistent-naming.rules | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/kernel-boot/rdma-persistent-naming.rules b/kernel-boot/rdma-persistent-naming.rules +index 6f9c53a5..b5413edb 100644 +--- a/kernel-boot/rdma-persistent-naming.rules ++++ b/kernel-boot/rdma-persistent-naming.rules +@@ -26,10 +26,10 @@ + # Device type = RoCE + # mlx5_0 -> rocex525400c0fe123455 + # +-ACTION=="add", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FALLBACK" ++ACTION=="add", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_KERNEL" + + # Example: + # * NAME_FIXED + # fixed name for specific board_id + # +-#ACTION=="add", ATTR{board_id}=="MSF0010110035", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FIXED myib" +\ No newline at end of file ++#ACTION=="add", ATTR{board_id}=="MSF0010110035", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FIXED myib" +-- +2.30.1 + diff --git a/SPECS/rdma-core.spec b/SPECS/rdma-core.spec new file mode 100644 index 0000000..317c4f9 --- /dev/null +++ b/SPECS/rdma-core.spec @@ -0,0 +1,783 @@ +Name: rdma-core +Version: 37.2 +Release: 1%{?dist} +Summary: RDMA core userspace libraries and daemons + +# Almost everything is licensed under the OFA dual GPLv2, 2 Clause BSD license +# providers/ipathverbs/ Dual licensed using a BSD license with an extra patent clause +# providers/rxe/ Incorporates code from ipathverbs and contains the patent clause +# providers/hfi1verbs Uses the 3 Clause BSD license +License: GPLv2 or BSD +Url: https://github.com/linux-rdma/rdma-core +Source: https://github.com/linux-rdma/rdma-core/releases/download/v%{version}/%{name}-%{version}.tar.gz +Patch1: 0001-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch +Patch2: udev-keep-NAME_KERNEL-as-default-interface-naming-co.patch +Patch3: 0001-tests-Fix-comparing-qp_state-for-iWARP-providers.patch +Patch4: 0001-bnxt_re-lib-Check-pointer-validity-while-freeing-que.patch +Patch5: 0001-mlx5-Initialize-wr_data-when-post-a-work-request.patch +# Do not build static libs by default. +%define with_static %{?_with_static: 1} %{?!_with_static: 0} + +# 32-bit arm is missing required arch-specific memory barriers, +ExcludeArch: %{arm} + +BuildRequires: binutils +BuildRequires: cmake >= 2.8.11 +BuildRequires: gcc +BuildRequires: libudev-devel +BuildRequires: pkgconfig +BuildRequires: pkgconfig(libnl-3.0) +BuildRequires: pkgconfig(libnl-route-3.0) +BuildRequires: /usr/bin/rst2man +BuildRequires: valgrind-devel +BuildRequires: systemd +BuildRequires: systemd-devel +%if 0%{?fedora} >= 32 || 0%{?rhel} >= 8 +%define with_pyverbs %{?_with_pyverbs: 1} %{?!_with_pyverbs: %{?!_without_pyverbs: 1} %{?_without_pyverbs: 0}} +%else +%define with_pyverbs %{?_with_pyverbs: 1} %{?!_with_pyverbs: 0} +%endif +%if %{with_pyverbs} +BuildRequires: python3-devel +BuildRequires: python3-Cython +%else +%if 0%{?rhel} >= 8 || 0%{?fedora} >= 30 +BuildRequires: python3 +%else +BuildRequires: python +%endif +%endif + +%if 0%{?rhel} >= 8 || 0%{?fedora} >= 30 || %{with_pyverbs} +BuildRequires: python3-docutils +%else +BuildRequires: python-docutils +%endif + +%if 0%{?fedora} >= 21 || 0%{?rhel} >= 8 +BuildRequires: perl-generators +%endif + +Requires: pciutils +# Red Hat/Fedora previously shipped redhat/ as a stand-alone +# package called 'rdma', which we're supplanting here. +Provides: rdma = %{version}-%{release} +Obsoletes: rdma < %{version}-%{release} +Conflicts: infiniband-diags <= 1.6.7 + +# Since we recommend developers use Ninja, so should packagers, for consistency. +%define CMAKE_FLAGS %{nil} +%if 0%{?fedora} >= 23 || 0%{?rhel} >= 8 +# Ninja was introduced in FC23 +BuildRequires: ninja-build +%define CMAKE_FLAGS -GNinja +%if 0%{?fedora} >= 33 || 0%{?rhel} >= 9 +%define make_jobs ninja-build -C %{_vpath_builddir} -v %{?_smp_mflags} +%define cmake_install DESTDIR=%{buildroot} ninja-build -C %{_vpath_builddir} install +%else +%define make_jobs ninja-build -v %{?_smp_mflags} +%define cmake_install DESTDIR=%{buildroot} ninja-build install +%endif +%else +# Fallback to make otherwise +BuildRequires: make +%define make_jobs make VERBOSE=1 %{?_smp_mflags} +%define cmake_install DESTDIR=%{buildroot} make install +%endif + +%if 0%{?fedora} >= 25 || 0%{?rhel} == 8 +# pandoc was introduced in FC25, Centos8 +BuildRequires: pandoc +%endif + +%if 0%{?fedora} >= 34 +# self obsoletes to remove i686 multilib package when updating to F34 +Obsoletes: rdma-core < 34.0-3 +%endif + +%description +RDMA core userspace infrastructure and documentation, including initialization +scripts, kernel driver-specific modprobe override configs, IPoIB network +scripts, dracut rules, and the rdma-ndd utility. + +%package devel +Summary: RDMA core development libraries and headers +Requires: libibverbs%{?_isa} = %{version}-%{release} +Provides: libibverbs-devel = %{version}-%{release} +Obsoletes: libibverbs-devel < %{version}-%{release} +Requires: libibumad%{?_isa} = %{version}-%{release} +Provides: libibumad-devel = %{version}-%{release} +Obsoletes: libibumad-devel < %{version}-%{release} +Requires: librdmacm%{?_isa} = %{version}-%{release} +Provides: librdmacm-devel = %{version}-%{release} +Obsoletes: librdmacm-devel < %{version}-%{release} +Provides: ibacm-devel = %{version}-%{release} +Obsoletes: ibacm-devel < %{version}-%{release} +Requires: infiniband-diags%{?_isa} = %{version}-%{release} +Provides: infiniband-diags-devel = %{version}-%{release} +Obsoletes: infiniband-diags-devel < %{version}-%{release} +Provides: libibmad-devel = %{version}-%{release} +Obsoletes: libibmad-devel < %{version}-%{release} +%if %{with_static} +# Since our pkg-config files include private references to these packages they +# need to have their .pc files installed too, even for dynamic linking, or +# pkg-config breaks. +BuildRequires: pkgconfig(libnl-3.0) +BuildRequires: pkgconfig(libnl-route-3.0) +%endif + +%description devel +RDMA core development libraries and headers. + +%package -n infiniband-diags +Summary: InfiniBand Diagnostic Tools +Requires: libibumad%{?_isa} = %{version}-%{release} +Provides: perl(IBswcountlimits) +Provides: libibmad = %{version}-%{release} +Obsoletes: libibmad < %{version}-%{release} +Obsoletes: openib-diags < 1.3 + +%description -n infiniband-diags +This package provides IB diagnostic programs and scripts needed to diagnose an +IB subnet. infiniband-diags now also provides libibmad. libibmad provides +low layer IB functions for use by the IB diagnostic and management +programs. These include MAD, SA, SMP, and other basic IB functions. + +%package -n libibverbs +Summary: A library and drivers for direct userspace use of RDMA (InfiniBand/iWARP/RoCE) hardware +Provides: libcxgb4 = %{version}-%{release} +Obsoletes: libcxgb4 < %{version}-%{release} +Provides: libefa = %{version}-%{release} +Obsoletes: libefa < %{version}-%{release} +Provides: libhfi1 = %{version}-%{release} +Obsoletes: libhfi1 < %{version}-%{release} +Provides: libirdma = %{version}-%{release} +Obsoletes: libirdma < %{version}-%{release} +Provides: libmlx4 = %{version}-%{release} +Obsoletes: libmlx4 < %{version}-%{release} +Provides: libmlx5 = %{version}-%{release} +Obsoletes: libmlx5 < %{version}-%{release} +Provides: librxe = %{version}-%{release} +Obsoletes: librxe < %{version}-%{release} +%if 0%{?fedora} == 34 +Obsoletes: libibverbs-core < %{version}-%{release} +%endif + +%description -n libibverbs +libibverbs is a library that allows userspace processes to use RDMA +"verbs" as described in the InfiniBand Architecture Specification and +the RDMA Protocol Verbs Specification. This includes direct hardware +access from userspace to InfiniBand/iWARP adapters (kernel bypass) for +fast path operations. + +Device-specific plug-in ibverbs userspace drivers are included: + +- libcxgb4: Chelsio T4 iWARP HCA +- libefa: Amazon Elastic Fabric Adapter +- libhfi1: Intel Omni-Path HFI +- libhns: HiSilicon Hip06 SoC +- libirdma: Intel Ethernet Connection RDMA +- libmlx4: Mellanox ConnectX-3 InfiniBand HCA +- libmlx5: Mellanox Connect-IB/X-4+ InfiniBand HCA +- libqedr: QLogic QL4xxx RoCE HCA +- librxe: A software implementation of the RoCE protocol +- libsiw: A software implementation of the iWarp protocol +- libvmw_pvrdma: VMware paravirtual RDMA device + +%package -n libibverbs-utils +Summary: Examples for the libibverbs library +Requires: libibverbs%{?_isa} = %{version}-%{release} + +%description -n libibverbs-utils +Useful libibverbs example programs such as ibv_devinfo, which +displays information about RDMA devices. + +%package -n ibacm +Summary: InfiniBand Communication Manager Assistant +%{?systemd_requires} +Requires: libibumad%{?_isa} = %{version}-%{release} +Requires: libibverbs%{?_isa} = %{version}-%{release} + +%description -n ibacm +The ibacm daemon helps reduce the load of managing path record lookups on +large InfiniBand fabrics by providing a user space implementation of what +is functionally similar to an ARP cache. The use of ibacm, when properly +configured, can reduce the SA packet load of a large IB cluster from O(n^2) +to O(n). The ibacm daemon is started and normally runs in the background, +user applications need not know about this daemon as long as their app +uses librdmacm to handle connection bring up/tear down. The librdmacm +library knows how to talk directly to the ibacm daemon to retrieve data. + +%package -n iwpmd +Summary: iWarp Port Mapper userspace daemon +%{?systemd_requires} + +%description -n iwpmd +iwpmd provides a userspace service for iWarp drivers to claim +tcp ports through the standard socket interface. + +%package -n libibumad +Summary: OpenFabrics Alliance InfiniBand umad (userspace management datagram) library + +%description -n libibumad +libibumad provides the userspace management datagram (umad) library +functions, which sit on top of the umad modules in the kernel. These +are used by the IB diagnostic and management tools, including OpenSM. + +%package -n librdmacm +Summary: Userspace RDMA Connection Manager +Requires: libibverbs%{?_isa} = %{version}-%{release} + +%description -n librdmacm +librdmacm provides a userspace RDMA Communication Management API. + +%package -n librdmacm-utils +Summary: Examples for the librdmacm library +Requires: librdmacm%{?_isa} = %{version}-%{release} +Requires: libibverbs%{?_isa} = %{version}-%{release} + +%description -n librdmacm-utils +Example test programs for the librdmacm library. + +%package -n srp_daemon +Summary: Tools for using the InfiniBand SRP protocol devices +Obsoletes: srptools <= 1.0.3 +Provides: srptools = %{version}-%{release} +Obsoletes: openib-srptools <= 0.0.6 +%{?systemd_requires} +Requires: libibumad%{?_isa} = %{version}-%{release} +Requires: libibverbs%{?_isa} = %{version}-%{release} + +%description -n srp_daemon +In conjunction with the kernel ib_srp driver, srp_daemon allows you to +discover and use SCSI devices via the SCSI RDMA Protocol over InfiniBand. + +%if %{with_pyverbs} +%package -n python3-pyverbs +Summary: Python3 API over IB verbs +%{?python_provide:%python_provide python3-pyverbs} +Requires: librdmacm%{?_isa} = %{version}-%{release} +Requires: libibverbs%{?_isa} = %{version}-%{release} + +%description -n python3-pyverbs +Pyverbs is a Cython-based Python API over libibverbs, providing an +easy, object-oriented access to IB verbs. +%endif + +%prep +%setup -q +%if 0%{?fedora} +%patch1 -p1 +%endif +%if 0%{?rhel} +%patch2 -p1 +%endif +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 + +%build + +# New RPM defines _rundir, usually as /run +%if 0%{?_rundir:1} +%else +%define _rundir /var/run +%endif + +%{!?EXTRA_CMAKE_FLAGS: %define EXTRA_CMAKE_FLAGS %{nil}} + +# Pass all of the rpm paths directly to GNUInstallDirs and our other defines. +%cmake %{CMAKE_FLAGS} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_BINDIR:PATH=%{_bindir} \ + -DCMAKE_INSTALL_SBINDIR:PATH=%{_sbindir} \ + -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \ + -DCMAKE_INSTALL_LIBEXECDIR:PATH=%{_libexecdir} \ + -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=%{_localstatedir} \ + -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=%{_sharedstatedir} \ + -DCMAKE_INSTALL_INCLUDEDIR:PATH=%{_includedir} \ + -DCMAKE_INSTALL_INFODIR:PATH=%{_infodir} \ + -DCMAKE_INSTALL_MANDIR:PATH=%{_mandir} \ + -DCMAKE_INSTALL_SYSCONFDIR:PATH=%{_sysconfdir} \ + -DCMAKE_INSTALL_SYSTEMD_SERVICEDIR:PATH=%{_unitdir} \ + -DCMAKE_INSTALL_INITDDIR:PATH=%{_initrddir} \ + -DCMAKE_INSTALL_RUNDIR:PATH=%{_rundir} \ + -DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir}/%{name} \ + -DCMAKE_INSTALL_UDEV_RULESDIR:PATH=%{_udevrulesdir} \ + -DCMAKE_INSTALL_PERLDIR:PATH=%{perl_vendorlib} \ + -DENABLE_IBDIAGS_COMPAT:BOOL=False \ +%if %{with_static} + -DENABLE_STATIC=1 \ +%endif + %{EXTRA_CMAKE_FLAGS} \ +%if %{defined __python3} + -DPYTHON_EXECUTABLE:PATH=%{__python3} \ + -DCMAKE_INSTALL_PYTHON_ARCH_LIB:PATH=%{python3_sitearch} \ +%endif +%if %{with_pyverbs} + -DNO_PYVERBS=0 +%else + -DNO_PYVERBS=1 +%endif +%make_jobs + +%install +%cmake_install + +mkdir -p %{buildroot}/%{_sysconfdir}/rdma + +# Red Hat specific glue +%global dracutlibdir %{_prefix}/lib/dracut +%global sysmodprobedir %{_prefix}/lib/modprobe.d +mkdir -p %{buildroot}%{_sysconfdir}/udev/rules.d +mkdir -p %{buildroot}%{_libexecdir} +mkdir -p %{buildroot}%{_udevrulesdir} +mkdir -p %{buildroot}%{dracutlibdir}/modules.d/05rdma +mkdir -p %{buildroot}%{sysmodprobedir} +install -D -m0644 redhat/rdma.mlx4.conf %{buildroot}/%{_sysconfdir}/rdma/mlx4.conf +install -D -m0755 redhat/rdma.modules-setup.sh %{buildroot}%{dracutlibdir}/modules.d/05rdma/module-setup.sh +install -D -m0644 redhat/rdma.mlx4.sys.modprobe %{buildroot}%{sysmodprobedir}/libmlx4.conf +install -D -m0755 redhat/rdma.mlx4-setup.sh %{buildroot}%{_libexecdir}/mlx4-setup.sh +rm -f %{buildroot}%{_sysconfdir}/rdma/modules/rdma.conf +install -D -m0644 redhat/rdma.conf %{buildroot}%{_sysconfdir}/rdma/modules/rdma.conf + +# ibacm +(if [ -d %{__cmake_builddir} ]; then cd %{__cmake_builddir}; fi + ./bin/ib_acme -D . -O && + install -D -m0644 ibacm_opts.cfg %{buildroot}%{_sysconfdir}/rdma/) + +# Delete the package's init.d scripts +rm -rf %{buildroot}/%{_initrddir}/ +rm -f %{buildroot}/%{_sbindir}/srp_daemon.sh + +# Remove ibverbs provider libs we don't support +rm -f %{buildroot}/%{_libdir}/libibverbs/libcxgb3-rdmav*.so +rm -f %{buildroot}/%{_sysconfdir}/libibverbs.d/cxgb3.driver +rm -f %{buildroot}/%{_libdir}/libibverbs/libocrdma-rdmav*.so +rm -f %{buildroot}/%{_sysconfdir}/libibverbs.d/ocrdma.driver +rm -f %{buildroot}/%{_libdir}/libibverbs/libnes-rdmav*.so +rm -f %{buildroot}/%{_sysconfdir}/libibverbs.d/nes.driver +rm -f %{buildroot}/%{_libdir}/libibverbs/libmthca-rdmav*.so +rm -f %{buildroot}/%{_sysconfdir}/libibverbs.d/mthca.driver +rm -f %{buildroot}/%{_libdir}/libibverbs/libipathverbs-rdmav*.so +rm -f %{buildroot}/%{_sysconfdir}/libibverbs.d/ipathverbs.driver + +%ldconfig_scriptlets -n libibverbs + +%ldconfig_scriptlets -n libibumad + +%ldconfig_scriptlets -n librdmacm + +%post -n rdma-core +if [ -x /sbin/udevadm ]; then +/sbin/udevadm trigger --subsystem-match=infiniband --action=change || true +/sbin/udevadm trigger --subsystem-match=net --action=change || true +/sbin/udevadm trigger --subsystem-match=infiniband_mad --action=change || true +fi + +%post -n ibacm +%systemd_post ibacm.service +%preun -n ibacm +%systemd_preun ibacm.service +%postun -n ibacm +%systemd_postun_with_restart ibacm.service + +%post -n srp_daemon +%systemd_post srp_daemon.service +%preun -n srp_daemon +%systemd_preun srp_daemon.service +%postun -n srp_daemon +%systemd_postun_with_restart srp_daemon.service + +%post -n iwpmd +%systemd_post iwpmd.service +%preun -n iwpmd +%systemd_preun iwpmd.service +%postun -n iwpmd +%systemd_postun_with_restart iwpmd.service + +%files +%dir %{_sysconfdir}/rdma +%dir %{_docdir}/%{name} +%doc %{_docdir}/%{name}/README.md +%doc %{_docdir}/%{name}/rxe.md +%doc %{_docdir}/%{name}/udev.md +%doc %{_docdir}/%{name}/tag_matching.md +%config(noreplace) %{_sysconfdir}/rdma/mlx4.conf +%config(noreplace) %{_sysconfdir}/rdma/modules/infiniband.conf +%config(noreplace) %{_sysconfdir}/rdma/modules/iwarp.conf +%config(noreplace) %{_sysconfdir}/rdma/modules/opa.conf +%config(noreplace) %{_sysconfdir}/rdma/modules/rdma.conf +%config(noreplace) %{_sysconfdir}/rdma/modules/roce.conf +%config(noreplace) %{_sysconfdir}/udev/rules.d/* +%dir %{_sysconfdir}/modprobe.d +%config(noreplace) %{_sysconfdir}/modprobe.d/mlx4.conf +%config(noreplace) %{_sysconfdir}/modprobe.d/truescale.conf +%{_unitdir}/rdma-hw.target +%{_unitdir}/rdma-load-modules@.service +%dir %{dracutlibdir} +%dir %{dracutlibdir}/modules.d +%dir %{dracutlibdir}/modules.d/05rdma +%{dracutlibdir}/modules.d/05rdma/module-setup.sh +%dir %{_udevrulesdir} +%{_udevrulesdir}/../rdma_rename +%{_udevrulesdir}/60-rdma-ndd.rules +%{_udevrulesdir}/60-rdma-persistent-naming.rules +%{_udevrulesdir}/75-rdma-description.rules +%{_udevrulesdir}/90-rdma-hw-modules.rules +%{_udevrulesdir}/90-rdma-ulp-modules.rules +%{_udevrulesdir}/90-rdma-umad.rules +%dir %{sysmodprobedir} +%{sysmodprobedir}/libmlx4.conf +%{_libexecdir}/mlx4-setup.sh +%{_libexecdir}/truescale-serdes.cmds +%{_sbindir}/rdma-ndd +%{_unitdir}/rdma-ndd.service +%{_mandir}/man7/rxe* +%{_mandir}/man8/rdma-ndd.* +%license COPYING.* + +%files devel +%doc %{_docdir}/%{name}/MAINTAINERS +%dir %{_includedir}/infiniband +%dir %{_includedir}/rdma +%{_includedir}/infiniband/* +%{_includedir}/rdma/* +%if %{with_static} +%{_libdir}/lib*.a +%endif +%{_libdir}/lib*.so +%{_libdir}/pkgconfig/*.pc +%{_mandir}/man3/efadv* +%{_mandir}/man3/ibv_* +%{_mandir}/man3/rdma* +%{_mandir}/man3/umad* +%{_mandir}/man3/*_to_ibv_rate.* +%{_mandir}/man7/rdma_cm.* +%{_mandir}/man3/mlx5dv* +%{_mandir}/man3/mlx4dv* +%{_mandir}/man7/efadv* +%{_mandir}/man7/mlx5dv* +%{_mandir}/man7/mlx4dv* +%{_mandir}/man3/ibnd_* + +%files -n infiniband-diags +%{_sbindir}/ibaddr +%{_mandir}/man8/ibaddr* +%{_sbindir}/ibnetdiscover +%{_mandir}/man8/ibnetdiscover* +%{_sbindir}/ibping +%{_mandir}/man8/ibping* +%{_sbindir}/ibportstate +%{_mandir}/man8/ibportstate* +%{_sbindir}/ibroute +%{_mandir}/man8/ibroute.* +%{_sbindir}/ibstat +%{_mandir}/man8/ibstat.* +%{_sbindir}/ibsysstat +%{_mandir}/man8/ibsysstat* +%{_sbindir}/ibtracert +%{_mandir}/man8/ibtracert* +%{_sbindir}/perfquery +%{_mandir}/man8/perfquery* +%{_sbindir}/sminfo +%{_mandir}/man8/sminfo* +%{_sbindir}/smpdump +%{_mandir}/man8/smpdump* +%{_sbindir}/smpquery +%{_mandir}/man8/smpquery* +%{_sbindir}/saquery +%{_mandir}/man8/saquery* +%{_sbindir}/vendstat +%{_mandir}/man8/vendstat* +%{_sbindir}/iblinkinfo +%{_mandir}/man8/iblinkinfo* +%{_sbindir}/ibqueryerrors +%{_mandir}/man8/ibqueryerrors* +%{_sbindir}/ibcacheedit +%{_mandir}/man8/ibcacheedit* +%{_sbindir}/ibccquery +%{_mandir}/man8/ibccquery* +%{_sbindir}/ibccconfig +%{_mandir}/man8/ibccconfig* +%{_sbindir}/dump_fts +%{_mandir}/man8/dump_fts* +%{_sbindir}/ibhosts +%{_mandir}/man8/ibhosts* +%{_sbindir}/ibswitches +%{_mandir}/man8/ibswitches* +%{_sbindir}/ibnodes +%{_mandir}/man8/ibnodes* +%{_sbindir}/ibrouters +%{_mandir}/man8/ibrouters* +%{_sbindir}/ibfindnodesusing.pl +%{_mandir}/man8/ibfindnodesusing* +%{_sbindir}/ibidsverify.pl +%{_mandir}/man8/ibidsverify* +%{_sbindir}/check_lft_balance.pl +%{_mandir}/man8/check_lft_balance* +%{_sbindir}/dump_lfts.sh +%{_mandir}/man8/dump_lfts* +%{_sbindir}/dump_mfts.sh +%{_mandir}/man8/dump_mfts* +%{_sbindir}/ibstatus +%{_mandir}/man8/ibstatus* +%{_mandir}/man8/infiniband-diags* +%{_libdir}/libibmad*.so.* +%{_libdir}/libibnetdisc*.so.* +%{perl_vendorlib}/IBswcountlimits.pm +%config(noreplace) %{_sysconfdir}/infiniband-diags/error_thresholds +%config(noreplace) %{_sysconfdir}/infiniband-diags/ibdiag.conf + +%files -n libibverbs +%dir %{_sysconfdir}/libibverbs.d +%dir %{_libdir}/libibverbs +%{_libdir}/libefa.so.* +%{_libdir}/libibverbs*.so.* +%{_libdir}/libibverbs/*.so +%{_libdir}/libmlx5.so.* +%{_libdir}/libmlx4.so.* +%config(noreplace) %{_sysconfdir}/libibverbs.d/*.driver +%doc %{_docdir}/%{name}/libibverbs.md + +%files -n libibverbs-utils +%{_bindir}/ibv_* +%{_mandir}/man1/ibv_* + +%files -n ibacm +%config(noreplace) %{_sysconfdir}/rdma/ibacm_opts.cfg +%{_bindir}/ib_acme +%{_sbindir}/ibacm +%{_mandir}/man1/ib_acme.* +%{_mandir}/man7/ibacm.* +%{_mandir}/man7/ibacm_prov.* +%{_mandir}/man8/ibacm.* +%{_unitdir}/ibacm.service +%{_unitdir}/ibacm.socket +%dir %{_libdir}/ibacm +%{_libdir}/ibacm/* +%doc %{_docdir}/%{name}/ibacm.md + +%files -n iwpmd +%{_sbindir}/iwpmd +%{_unitdir}/iwpmd.service +%config(noreplace) %{_sysconfdir}/rdma/modules/iwpmd.conf +%config(noreplace) %{_sysconfdir}/iwpmd.conf +%{_udevrulesdir}/90-iwpmd.rules +%{_mandir}/man8/iwpmd.* +%{_mandir}/man5/iwpmd.* + +%files -n libibumad +%{_libdir}/libibumad*.so.* + +%files -n librdmacm +%{_libdir}/librdmacm*.so.* +%dir %{_libdir}/rsocket +%{_libdir}/rsocket/*.so* +%doc %{_docdir}/%{name}/librdmacm.md +%{_mandir}/man7/rsocket.* + +%files -n librdmacm-utils +%{_bindir}/cmtime +%{_bindir}/mckey +%{_bindir}/rcopy +%{_bindir}/rdma_client +%{_bindir}/rdma_server +%{_bindir}/rdma_xclient +%{_bindir}/rdma_xserver +%{_bindir}/riostream +%{_bindir}/rping +%{_bindir}/rstream +%{_bindir}/ucmatose +%{_bindir}/udaddy +%{_bindir}/udpong +%{_mandir}/man1/cmtime.* +%{_mandir}/man1/mckey.* +%{_mandir}/man1/rcopy.* +%{_mandir}/man1/rdma_client.* +%{_mandir}/man1/rdma_server.* +%{_mandir}/man1/rdma_xclient.* +%{_mandir}/man1/rdma_xserver.* +%{_mandir}/man1/riostream.* +%{_mandir}/man1/rping.* +%{_mandir}/man1/rstream.* +%{_mandir}/man1/ucmatose.* +%{_mandir}/man1/udaddy.* +%{_mandir}/man1/udpong.* + +%files -n srp_daemon +%config(noreplace) %{_sysconfdir}/srp_daemon.conf +%config(noreplace) %{_sysconfdir}/rdma/modules/srp_daemon.conf +%{_libexecdir}/srp_daemon/start_on_all_ports +%{_unitdir}/srp_daemon.service +%{_unitdir}/srp_daemon_port@.service +%{_sbindir}/ibsrpdm +%{_sbindir}/srp_daemon +%{_sbindir}/run_srp_daemon +%{_udevrulesdir}/60-srp_daemon.rules +%{_mandir}/man5/srp_daemon.service.5* +%{_mandir}/man5/srp_daemon_port@.service.5* +%{_mandir}/man8/ibsrpdm.8* +%{_mandir}/man8/srp_daemon.8* +%doc %{_docdir}/%{name}/ibsrpdm.md + +%if %{with_pyverbs} +%files -n python3-pyverbs +%{python3_sitearch}/pyverbs +%{_docdir}/%{name}/tests/*.py +%endif + +%changelog +* Tue Jan 18 2022 Honggang Li - 37.2-1 +- Rebase to upstream release v37.2 +- Resolves: rhbz#2035043, rhbz#2034948 + +* Wed Oct 20 2021 Honggang Li - 37.1-1 +- Rebase to upstream release v37.1 +- Resolves: rhbz#1994803 + +* Tue Aug 10 2021 Mohan Boddu - 35.0-3 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Wed Jun 16 2021 Honggang Li - 35.0-2 +- Bump the version tag and rebuild because of brew system issue +- Related: rhbz#1858568 + +* Tue May 25 2021 Honggang Li - 35.0-1 +- Rebase to upstream release v35.0 +- Resolves: rhbz#1858568, rhbz#1877133, rhbz#1869457 + +* Fri Apr 16 2021 Mohan Boddu - 34.0-4 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Tue Mar 30 2021 Pete Walter - 34.0-3 +- Add self obsoletes to remove i686 multilib package when updating to F34 + +* Mon Mar 08 2021 Honggang Li - 34.0-2 +- RHEL9 will use prebuild doc + +* Wed Mar 03 2021 Honggang Li - 34.0-1 +- Rebase to upstream release v34.0 + +* Mon Feb 01 2021 Honggang Li - 33.0-5 +- Disable HCA rename for ELN + +* Wed Jan 27 2021 Fedora Release Engineering - 33.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jan 25 2021 Honggang Li - 33.0-3 +- Fix ELN build issue + +* Thu Jan 21 2021 Honggang Li - 33.0-2 +- libibverbs obsoletes libibverbs-core for fedora-34 + +* Mon Jan 18 2021 Honggang Li - 33.0-1 +- Rebase to upstream release v33.0 + +* Mon Jan 18 2021 Honggang Li - 32.0-2 +- Remove base package dependency from all sub-packages +- Resolves: bz1901086 + +* Thu Oct 29 2020 Honggang Li - 32.0-1 +- Rebase to upstream release v32.0 + +* Mon Sep 14 2020 Peter Robinson - 31.0-2 +- Split out libibverbs to sub package for libpcap + +* Wed Aug 19 2020 Honggang Li - 31.0-1 +- Rebase to upstream release v31.0 + +* Thu Jul 30 2020 Honggang Li - 30.0-6 +- Update cmake options + +* Wed Jul 29 2020 Fedora Release Engineering - 30.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jul 02 2020 Stephen Gallagher - 30.0-4 +- Don't throw script errors if udev is not installed + +* Wed Jul 1 2020 Jeff Law - 30.0-3 +- Disable LTO + +* Thu Jun 25 2020 Zbigniew Jędrzejewski-Szmek - 30.0-2 +- Drop dependencies on systemd (#1837812) + +* Mon Jun 15 2020 Honggang Li - 30.0-1 +- Rebase to upstream release v30.0 + +* Tue May 26 2020 Miro Hrončok - 29.0-2 +- Rebuilt for Python 3.9 + +* Mon Apr 13 2020 Honggang Li - 29.0-1 +- Rebase to upstream release v29.0 + +* Wed Feb 12 2020 Honggang Li - 28.0-1 +- Rebase to upstream release v28.0 + +* Thu Jan 30 2020 Fedora Release Engineering - 27.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Sun Jan 19 2020 Orion Poplawski - 27.0-3 +- Fix typo in requires + +* Sun Jan 19 2020 Honggang Li - 27.0-2 +- Backport some spec improvement from upstream + +* Thu Dec 12 2019 Honggang Li - 27.0-1 +- Rebase to upstream release v27.0 + +* Thu Nov 28 2019 Honggang Li - 26.1-1 +- Rebase to upstream release v26.1 + +* Fri Jul 26 2019 Fedora Release Engineering - 20.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sat Feb 02 2019 Fedora Release Engineering - 20.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Jan 23 2019 Björn Esser - 20.1-2 +- Append curdir to CMake invokation. (#1668512) + +* Fri Oct 19 2018 Jarod Wilson - 20.1-1 +- Long overdue update to upstream v20.1 stable release + +* Sat Jul 14 2018 Fedora Release Engineering - 16.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Sun Mar 18 2018 Iryna Shcherbina - 16.2-4 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Tue Feb 06 2018 Orion Poplawski - 16.2-3 +- Build for s390/x + +* Tue Feb 06 2018 Patrick Uiterwijk - 16.2-2 +- Fix escaped macro + +* Sun Feb 04 2018 Doug Ledford - 16.2-1 +- Update to rdma-core-16.2 +- Drop the old sysv initscript files + +* Wed Aug 09 2017 Jarod Wilson - 14-4 +- Make use of systemd_requires, own srp_daemon dir + +* Tue Aug 01 2017 Jarod Wilson - 14-3 +- Revert work-around for ppc64le library issues +- Add Obsoletes/Provides for libusnic_verbs + +* Thu Jul 27 2017 Fedora Release Engineering - 14-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 25 2017 Jarod Wilson - 14-1 +- Update to upstream v14 release +- Sync packaging updates from RHEL and upstream + +* Sat Feb 11 2017 Fedora Release Engineering - 12-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Jan 27 2017 Jarod Wilson - 12-1 +- Update to upstream final v12 release + +* Wed Jan 25 2017 Jarod Wilson - 12-0.1.rc3.1 +- Initial import to Fedora package database via post-v12-rc3 git snapshot