From 757e3e4f609b0874a371b7d776d1667b7179014e Mon Sep 17 00:00:00 2001 From: eabdullin Date: Mon, 20 Oct 2025 08:37:51 +0000 Subject: [PATCH] import CS rdma-core-57.0-2.el9 --- ...ts-Ensure-graceful-resource-cleaning.patch | 89 +++++++++++++++++++ ...pyverbs-Change-PD-object-return-type.patch | 43 +++++++++ SPECS/rdma-core.spec | 10 ++- 3 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 SOURCES/0001-tests-Ensure-graceful-resource-cleaning.patch create mode 100644 SOURCES/0002-pyverbs-Change-PD-object-return-type.patch diff --git a/SOURCES/0001-tests-Ensure-graceful-resource-cleaning.patch b/SOURCES/0001-tests-Ensure-graceful-resource-cleaning.patch new file mode 100644 index 0000000..2b42364 --- /dev/null +++ b/SOURCES/0001-tests-Ensure-graceful-resource-cleaning.patch @@ -0,0 +1,89 @@ +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/SOURCES/0002-pyverbs-Change-PD-object-return-type.patch b/SOURCES/0002-pyverbs-Change-PD-object-return-type.patch new file mode 100644 index 0000000..844b206 --- /dev/null +++ b/SOURCES/0002-pyverbs-Change-PD-object-return-type.patch @@ -0,0 +1,43 @@ +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/SPECS/rdma-core.spec b/SPECS/rdma-core.spec index 5a67fa1..1620706 100644 --- a/SPECS/rdma-core.spec +++ b/SPECS/rdma-core.spec @@ -1,6 +1,6 @@ Name: rdma-core Version: 57.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: RDMA core userspace libraries and daemons # Almost everything is licensed under the OFA dual GPLv2, 2 Clause BSD license @@ -10,6 +10,8 @@ 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-tests-Ensure-graceful-resource-cleaning.patch +Patch0002: 0002-pyverbs-Change-PD-object-return-type.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 +268,8 @@ easy, object-oriented access to IB verbs. %prep %setup -q +%patch -P 0001 -p1 +%patch -P 0002 -p1 %if 0%{?fedora} %patch -P 9998 -p1 %endif @@ -629,6 +633,10 @@ fi %endif %changelog +* Thu Aug 07 2025 Kamal Heib - 57.0-2 +- Fix pyverbs tests +- Resolves: RHEL-107929, RHEL-107930 + * Tue May 27 2025 Kamal Heib - 57.0-1 - Rebase to upstream release v57.0 - Resolves: RHEL-76570, RHEL-45644, RHEL-72077, RHEL-68506, RHEL-94449