From b789dafe53cc08027a997db4fdb8f8a13f6096a3 Mon Sep 17 00:00:00 2001 From: Kamal Heib Date: Wed, 5 Aug 2026 15:37:10 -0400 Subject: [PATCH] Fix missing rdma kernel modules from installer initrd Revert upstream dracut non-hostonly check to fix missing rdma modules in installer initrd Upstream commit 85afa2bc9214 changed the dracut 50rdma module to return 255 (skip) in non-hostonly mode, which prevents rdma kernel modules from being included in the installer initrd. Revert this change so the module returns 0 (include) in non-hostonly mode, ensuring rdma modules are available during installation. Resolves: RHEL-163406 Signed-off-by: Kamal Heib --- ...-not-install-dracut-module-in-non-ho.patch | 27 ++++++ ...ts-Ensure-graceful-resource-cleaning.patch | 89 ------------------- ...pyverbs-Change-PD-object-return-type.patch | 43 --------- rdma-core.spec | 8 +- 4 files changed, 34 insertions(+), 133 deletions(-) create mode 100644 0001-Revert-dracut-do-not-install-dracut-module-in-non-ho.patch delete mode 100644 0001-tests-Ensure-graceful-resource-cleaning.patch delete mode 100644 0002-pyverbs-Change-PD-object-return-type.patch diff --git a/0001-Revert-dracut-do-not-install-dracut-module-in-non-ho.patch b/0001-Revert-dracut-do-not-install-dracut-module-in-non-ho.patch new file mode 100644 index 0000000..4b691c4 --- /dev/null +++ b/0001-Revert-dracut-do-not-install-dracut-module-in-non-ho.patch @@ -0,0 +1,27 @@ +From c685d42987f92790772dd81806ff7d233d3e69ae Mon Sep 17 00:00:00 2001 +From: Kamal Heib +Date: Wed, 5 Aug 2026 11:54:44 -0400 +Subject: [PATCH] Revert "dracut: do not install dracut module in non-hostonly + by default" + +This reverts commit 85afa2bc9214dbc7f0921066099fa1d63dff2370. +--- + kernel-boot/dracut/50rdma/module-setup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel-boot/dracut/50rdma/module-setup.sh b/kernel-boot/dracut/50rdma/module-setup.sh +index e4929e9a1225..09162062060a 100644 +--- a/kernel-boot/dracut/50rdma/module-setup.sh ++++ b/kernel-boot/dracut/50rdma/module-setup.sh +@@ -3,7 +3,7 @@ + check() { + [ -n "$hostonly" ] && [ -e /sys/class/infiniband_verbs/uverbs0 ] && return 0 + [ -n "$hostonly" ] && return 255 +- return 255 ++ return 0 + } + + depends() { +-- +2.55.0 + diff --git a/0001-tests-Ensure-graceful-resource-cleaning.patch b/0001-tests-Ensure-graceful-resource-cleaning.patch deleted file mode 100644 index 2b42364..0000000 --- a/0001-tests-Ensure-graceful-resource-cleaning.patch +++ /dev/null @@ -1,89 +0,0 @@ -From a9eb7409fb0b6af5dc54ae222286926b6a028ef0 Mon Sep 17 00:00:00 2001 -From: Edward Srouji -Date: Tue, 4 Mar 2025 16:02:35 +0200 -Subject: [PATCH] tests: Ensure graceful resource cleaning - -A SEGFAULT was observed recently on some environments with -python 3.12.X. -To work around the issue and ensure that python garbage collector exiting -gracefully, a new decorator was added that catches SkipTest unittest -exceptions and closes the context and its underlying resources. - -An a example of a segmentation fault occurrence that this test fixes: -$ python3 tests/run_tests.py test_mlx5_dma_memcpy -sTraceback (most recent call last): - File "cq.pyx", line 359, in pyverbs.cq.CQEX.close -pyverbs.pyverbs_error.PyverbsRDMAError: Failed to destroy CQEX. Errno: -9, Bad file descriptor -Exception ignored in: 'pyverbs.cq.CQEX.__dealloc__' -Traceback (most recent call last): - File "cq.pyx", line 359, in pyverbs.cq.CQEX.close -pyverbs.pyverbs_error.PyverbsRDMAError: Failed to destroy CQEX. Errno: -9, Bad file descriptor -Segmentation fault (core dumped) - -Signed-off-by: Edward Srouji ---- - tests/base.py | 32 +++++++++++++++++++++++++++++++- - 1 file changed, 31 insertions(+), 1 deletion(-) - -diff --git a/tests/base.py b/tests/base.py -index 2738714612ec..c6ffa1beca1a 100644 ---- a/tests/base.py -+++ b/tests/base.py -@@ -3,6 +3,7 @@ - - import multiprocessing as mp - import subprocess -+import functools - import unittest - import tempfile - import random -@@ -532,7 +533,35 @@ class RDMACMBaseTest(RDMATestCase): - sys.exit(2) - - --class BaseResources(object): -+def catch_skiptest(func): -+ """ -+ Decorator to catch unittest.SkipTest in __init__ resource functions. -+ It gracefully closes the context and all of its underlying resources. -+ """ -+ @functools.wraps(func) -+ def wrapper(self, *args, **kwargs): -+ try: -+ func(self, *args, **kwargs) -+ except unittest.SkipTest as e: -+ if hasattr(self, 'ctx') and self.ctx: -+ self.ctx.close() -+ raise e -+ return wrapper -+ -+ -+class SkipTestMeta(type): -+ """ -+ Metaclass to automatically wrap __init__ in catch_skiptest. -+ It should only be used in resource classes, such as those inheriting from -+ BaseResources. -+ """ -+ def __new__(cls, name, bases, dct): -+ if "__init__" in dct: -+ dct["__init__"] = catch_skiptest(dct["__init__"]) -+ return super().__new__(cls, name, bases, dct) -+ -+ -+class BaseResources(object, metaclass=SkipTestMeta): - """ - BaseResources class is a base aggregator object which contains basic - resources like Context and PD. It opens a context over the given device -@@ -548,6 +577,7 @@ class BaseResources(object): - self.dev_name = dev_name - self.gid_index = gid_index - self.ib_port = ib_port -+ self.ctx = None - self.create_context() - self.create_pd() - --- -2.49.0 - diff --git a/0002-pyverbs-Change-PD-object-return-type.patch b/0002-pyverbs-Change-PD-object-return-type.patch deleted file mode 100644 index 844b206..0000000 --- a/0002-pyverbs-Change-PD-object-return-type.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 47c3855f3b84c47cb471cbba8090a6997e07be57 Mon Sep 17 00:00:00 2001 -From: Shachar Kagan -Date: Mon, 28 Apr 2025 17:18:18 +0300 -Subject: [PATCH] pyverbs: Change PD object return type - -Change PD object return type to be compatible with Cython 3.x - -Signed-off-by: Shachar Kagan -Signed-off-by: Edward Srouji ---- - pyverbs/pd.pyx | 2 +- - pyverbs/providers/mlx5/mlx5dv_objects.pyx | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/pyverbs/pd.pyx b/pyverbs/pd.pyx -index 2d84e0b68d10..d8845e8a058b 100644 ---- a/pyverbs/pd.pyx -+++ b/pyverbs/pd.pyx -@@ -151,7 +151,7 @@ cdef class PD(PyverbsCM): - - @property - def pd(self): -- return self.pd -+ return self.pd - - - cdef void *pd_alloc(v.ibv_pd *pd, void *pd_context, size_t size, -diff --git a/pyverbs/providers/mlx5/mlx5dv_objects.pyx b/pyverbs/providers/mlx5/mlx5dv_objects.pyx -index e7776205a150..0567e81a06e8 100644 ---- a/pyverbs/providers/mlx5/mlx5dv_objects.pyx -+++ b/pyverbs/providers/mlx5/mlx5dv_objects.pyx -@@ -182,7 +182,7 @@ cdef class Mlx5DvObj(PyverbsObject): - self.dv_qp = dv_qp - if pd: - dv_pd = Mlx5DvPD() -- self.obj.pd.in_ = pd.pd -+ self.obj.pd.in_ = pd.pd - self.obj.pd.out = &(dv_pd.dv_pd) - self.dv_pd = dv_pd - if srq: --- -2.49.0 - diff --git a/rdma-core.spec b/rdma-core.spec index 26f3656..c0c488a 100644 --- a/rdma-core.spec +++ b/rdma-core.spec @@ -1,6 +1,6 @@ Name: rdma-core Version: 61.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: RDMA core userspace libraries and daemons # Almost everything is licensed under the OFA dual GPLv2, 2 Clause BSD license @@ -10,6 +10,7 @@ Summary: RDMA core userspace libraries and daemons 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 +Patch0001: 0001-Revert-dracut-do-not-install-dracut-module-in-non-ho.patch Patch9998: 9998-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch Patch9999: 9999-udev-keep-NAME_KERNEL-as-default-interface-naming-co.patch # Do not build static libs by default. @@ -266,6 +267,7 @@ easy, object-oriented access to IB verbs. %prep %setup -q +%patch -P 0001 -p1 %if 0%{?fedora} %patch -P 9998 -p1 %endif @@ -631,6 +633,10 @@ fi %endif %changelog +* Wed Aug 05 2026 Kamal Heib - 61.0-3 +- Fix missing rdma kernel modules from installer initrd +- Resolves: RHEL-163406 + * Wed Jan 07 2026 Kamal Heib - 61.0-2 - Rebuilt for gating testing - Resolves: RHEL-98270, RHEL-97696, RHEL-97692, RHEL-97648, RHEL-95331