From 96ca5f0c5d24dd976a536d4c53548c5b4f797996 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Mar 31 2020 09:43:03 +0000 Subject: import rdma-core-22.4-1.el7 --- diff --git a/.gitignore b/.gitignore index f9fdfc1..47dd511 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/rdma-core-22.1.tar.gz +SOURCES/rdma-core-22.4.tar.gz diff --git a/.rdma-core.metadata b/.rdma-core.metadata index a6ec431..c3dfb32 100644 --- a/.rdma-core.metadata +++ b/.rdma-core.metadata @@ -1 +1 @@ -63b67ad27ba0998d716262d4baece854a8d0f830 SOURCES/rdma-core-22.1.tar.gz +cee363f1b8ef856bd80979a64684479cc55c8a0c SOURCES/rdma-core-22.4.tar.gz diff --git a/SOURCES/0000-rdma-core-v22.1-to-stable-v22-update.patch b/SOURCES/0000-rdma-core-v22.1-to-stable-v22-update.patch deleted file mode 100644 index a4c1a35..0000000 --- a/SOURCES/0000-rdma-core-v22.1-to-stable-v22-update.patch +++ /dev/null @@ -1,928 +0,0 @@ -commit 098d4238d9b9e584aaf4b9adb533defa6d310481 -Author: Mark Haywood -Date: Fri Apr 26 17:56:19 2019 +0200 - - ibacm: fix double hint.ai_family assignment in ib_acm_connect_open() - - [ Upstream commit 08843dc99669ae50c5ba204db644d5423fe8e910 ] - - It appears that a previous fix accidentally introduced a double - assignment to hint.ai_family and, in the process, accidentally removed - the assignment to hint.ai_protocol. This patch will fix both - assignments. - - Fixes: 579b6bf8 ("ibacm: Adding new configuration option 'server_mode'") - - Signed-off-by: Mark Haywood - Signed-off-by: Nicolas Morey-Chaisemartin - -commit 6c7d8a5152fccc0d17e7470318f925faed322b57 -Author: Mark Haywood -Date: Fri Apr 26 17:09:28 2019 +0200 - - ibacm: acme does not work if server_mode != unix - - [ Upstream commit 75ce9310735f7bcfc93e2bf442f0e5d268e0c5ab ] - - Running the ibacm server in mode loopback or open and then trying to run - ib_acme against it, fails: - - $ ib_acme -S 127.0.0.1 -v -f i -s 10.196.100.60 -d 10.196.1.60 - *** Error in `ib_acme': double free or corruption (fasttop): 0x000000000177c380 *** - ======= Backtrace: ========= - /lib64/libc.so.6(+0x7c619)[0x7f540121d619] - /lib64/libc.so.6(freeaddrinfo+0x28)[0x7f5401282fe8] - ib_acme[0x4049eb] - ib_acme[0x401841] - /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f54011c2c05] - ib_acme[0x40315b] - - In ib_acm_connect_open(), there is a double freeaddrinfo() that needs - to be fixed. And the socket close() should only be called if connect() - fails. - - Afterwards: - - $ ib_acme -S 127.0.0.1 -v -f i -s 10.196.100.60 -d 10.196.1.60 - Service: 127.0.0.1 - Destination: 10.196.1.60 - Source: 10.196.100.60 - Path information - dgid: fe80::10:e000:128:d021 - sgid: fe80::10:e000:128:d021 - dlid: 19 - slid: 19 - flow label: 0x0 - hop limit: 0 - tclass: 0 - reversible: 1 - pkey: 0xffff - sl: 0 - mtu: 4 - rate: 7 - packet lifetime: 0 - SA verification: success - - return status 0x0 - - Fixes: 579b6bf8 ("ibacm: Adding new configuration option 'server_mode'") - - Signed-off-by: Mark Haywood - Signed-off-by: Nicolas Morey-Chaisemartin - -commit d26a969c00c7743c25e0d3083aa3c1b926bd05cb -Author: Mark Haywood -Date: Fri Apr 26 16:40:14 2019 +0200 - - ibacm: ib_acm_connect() is doing too much - - [ Upstream commit c58daf0f1e6c71945907339afec17a350c0d49a6 ] - - The ib_acm_connect() function is performing multiple functions. It - handles setting up the connections for the three server modes, "unix", - "open" and "loop". The "open" and "loop" mode logic should share one - function. The "linux" mode logic should have its own function. - And ib_acm_connect() can call the appropriate helper function. - - Signed-off-by: Mark Haywood - Signed-off-by: Nicolas Morey-Chaisemartin - -commit aaba94df0afb6b3cf61f23a030410395f137c974 -Author: Mark Haywood -Date: Mon Apr 15 22:43:01 2019 +0200 - - verbs: The ibv_xsrq_pingpong "-c" option is broken - - [ Upstream commit 2bdfa37f61bb3899e0afcee497432e0b34c14a35 ] - - $ ibv_xsrq_pingpong -c 2 - Segmentation fault - - The getopt_long() optstring was modifed by 257470c2 to remove ':' from - the string leaving an optstring of "p:d:i:s:m:q:r:n:l:eg:c". The - explanation for this change in 257470c2 is: - - "Also, The buffer validation option doesn't require an extra parameter, - remove the extra ':' from all ibv_*_pingpong examples." - - In other ibv_*_pingpong examples, the "-c" option refers to the chk - (buffer validation) option. So, it made sense to make the change in - those example programs, but not in ibv_xsrq_pingpong. - - Fixes: 257470c2 ("verbs: Fix pingpong buffer validation") - - Signed-off-by: Mark Haywood - Signed-off-by: Nicolas Morey-Chaisemartin - -commit 17cb113341bd4933ea785c5aac0197b0fa836a1e -Author: Michael Guralnik -Date: Mon Apr 15 17:08:42 2019 +0300 - - mlx5: Fix masking service level in mlx5_create_ah - - [ Upstream commit 30978598c761a3f5b0e0cc4337107d91e897cf2e ] - - Fix masking of service level when creating AH to 4 bits in case of IB - link layer to match PRM definition. - - Fixes: 4e0c23429839 ("mlx5: Fix SL to Ethernet priority conversion") - Signed-off-by: Michael Guralnik - Signed-off-by: Yishai Hadas - Signed-off-by: Nicolas Morey-Chaisemartin - -commit 4ef38020957e478f8b5d1df0dea7fd60a25c7a9e -Author: Leon Romanovsky -Date: Wed Apr 17 16:46:36 2019 +0300 - - cmake: Explicitly convert build type to be STRING - - [ Upstream commit 10998b0068bd1503ed1c3c213c5450faf194e5cf ] - - The build type was declared As "String" instead of "STRING" and it - produced the following warning while rdma-core was built. - - CMake Warning (dev) at buildlib/RDMA_BuildType.cmake:11 (set): - implicitly converting 'String' to 'STRING' type. - Call Stack (most recent call first): - CMakeLists.txt:170 (RDMA_BuildType) - This warning is for project developers. Use -Wno-dev to suppress it. - - Fixes: 7cb1daa8d9e6 ("Be consistent about defining NDEBUG") - Signed-off-by: Leon Romanovsky - Signed-off-by: Nicolas Morey-Chaisemartin - -commit d05900db873f1a4ab6af1159ee87e50a15296352 -Author: Lijun Ou -Date: Sat Mar 23 10:05:09 2019 +0800 - - libhns: Bugfix for filtering zero length sge - - [ Upstream commit 1c2def4817f31c15342669144ef6bb894bd9616d ] - - When user posts a wqe with n sges, the driver needs to - determine to if each sge is valid and filter the invalid - sge, fill the number of valid sges into sq wqe. Hip08 - hardware allocates the correct memory location for each - valid sge based on the number of valid sge. For exmaple, - when posts a wqe with 3 sges. if 3 sge is valid, the first - and second sges will be filled into the wqe and the last - sge will fill the indpendent memory location which the - hardware allocated additionally. However, it will happen - error if the first and the second sges is invalid. - Because the driver will filter the first two sge and fill - the last sge into hardware. But the valid sge will be - stored in the extended memory and the correct way - should be stored in wqe. - - The other situation example as follows: - Posting five sge and have two invalid sge. - ________________________________________ - |___0____|__1____|___0____|__1___|___1__| - - the 0 express the sge is invalid, the 1 express the sge is valid. - Based on the above situation. the hardware will store the second - and the fourth sge into sq wqe. The last sge will be stored in - the extend memory location. the number of valid sge is 3. - - Fixes: 29ef2625c4e1 ("libhns: Filter for zero length of sge in hip08 userspace") - Signed-off-by: Lijun Ou - Signed-off-by: Nicolas Morey-Chaisemartin - -commit f3bb8968d3c1b622d586b51b6782ea26d4362489 -Author: Guy Levi -Date: Tue Mar 19 12:45:00 2019 +0200 - - buildlib: Ensure stanza is properly sorted - - [ Upstream commit 7d9a24f18372587608bcbfc42c3251d7697ea6ef ] - - A sanity check which verifies that the stanza version is the newest, - triggers a false alarm due to wrong sorting method. For example, a new - version tagged by 1.10 was sorted as older than 1.2 tag. Replacing the - sort method by LooseVersion from distutils fixes the issue. - - Fixes: 7cff8245374c ("Have travis check shared library filenames") - Signed-off-by: Guy Levi - Reviewed-by: Leon Romanovsky - Signed-off-by: Yishai Hadas - Signed-off-by: Nicolas Morey-Chaisemartin - -commit e02238eae4901cb2f0570b887c88f05824d76d47 -Author: Tzafrir Cohen -Date: Wed Mar 13 21:46:52 2019 +0200 - - debian: Create empty pyverbs package for builds without pyverbs - - [ Upstream commit ae52ee74cefcff13ebc6786a28740a881c38b2f0 ] - - Other parts of the standard Debian build toolchain (specifically: - dpkg-genchangelog, but possibly others) expect a package to exist. - - dpkg-genchanges: error: cannot fstat file - ../python3-pyverbs_23.0~201903120844+git272bb55~ubuntu16.04.1_amd64.deb: No such file or directory - dpkg-buildpackage: error: dpkg-genchanges gave error exit status 2 - - Link: https://launchpadlibrarian.net/414799420/buildlog_ubuntu-xenial-amd64.rdma-core_23.0~201903120844+git272bb55~ubuntu16.04.1_BUILDING.txt.gz - Fixes: 841c9f041f0af ("debian: Add pyverbs to Debian package") - Signed-off-by: Tzafrir Cohen - Signed-off-by: Leon Romanovsky - Signed-off-by: Nicolas Morey-Chaisemartin - -commit 90886054afbb91fdeb7df3fc7e6424eaec72fdea -Author: Artemy Kovalyov -Date: Sat Feb 23 16:40:17 2019 +0200 - - verbs: Fix attribute returning - - [ Upstream commit 888c598db4df509dfb2d44a151df7490450a118e ] - - Fix copying of returned attributes to chained buffers. - - Fixes: 776003b23f51 ("verbs: Allow all commands to be invoked by ioctl") - Fixes: a93098a32fdf ("verbs: Fix attribute preparation") - Signed-off-by: Artemy Kovalyov - Reviewed-by: Jason Gunthorpe - Signed-off-by: Yishai Hadas - Signed-off-by: Nicolas Morey-Chaisemartin - -commit c7c842a3cc4e0e7cca10613dc7e74e73fbbdf6f1 -Author: Tzafrir Cohen -Date: Thu Feb 28 15:19:06 2019 +0200 - - build: Fix pyverbs build issues on Debian - - [ Upstream commit ea5d6a50e76f3f6c88ac2db0b7143496d827100f ] - - Cython is used to build pyverbs, which is only supported in Python3. - Don't try to look for Cython if we don't have Python3. - Also update debian/rules file: - - configure: Check if Python3 is supported instead of relying on - EXTRA_CMAKE_FLAGS which is not set at this point. - - install: Add pyverbs to ignored missing packages if it wasn't built - (this decision will be taken by cmake at this point). - - build: Ignore pyverbs if it wasn't built. - - Fixes: 1ce4a3e8 ('pyverbs: Update cmake to include pyverbs package') - Signed-off-by: Tzafrir Cohen - Signed-off-by: Noa Osherovich - Signed-off-by: Jason Gunthorpe - Signed-off-by: Leon Romanovsky - Signed-off-by: Nicolas Morey-Chaisemartin - -commit 8043035f921f79ee723b764947f99398e580bc86 -Author: Leon Romanovsky -Date: Thu Mar 7 20:22:06 2019 +0200 - - travis: Change SuSE package target due to Travis CI failures - - [ Upstream commit b65dbb91bd80119065eaefb8c9bee773b8f347ec ] - - Change SuSE package target to leap due to random sigfaults while - running zypper command in tumbleweed under Travis CI environment. - - Signed-off-by: Leon Romanovsky - Signed-off-by: Nicolas Morey-Chaisemartin - -commit a4bbfc338f631648c65e02149f91da9939c21e2f -Author: Ariel Levkovich -Date: Mon Jan 21 22:09:00 2019 +0200 - - verbs: Avoid inline send when using device memory in rc_pingpong - - [ Upstream commit 9548325b725e1eb37b8f3553d54d27fac6cf1a92 ] - - Fix rc_pingpong example to avoid setting the inline send flag when using - device memory. - - When using device memory, posting send with inline data is not supported - since the device memory address is zero based and accessing it to copy - data will cause segmentation fault. - - Fixes: f06164d5ea8d ("verbs: Add device memory support in rc_pingpong example") - Signed-off-by: Ariel Levkovich - Signed-off-by: Yishai Hadas - Signed-off-by: Nicolas Morey-Chaisemartin - -commit 4b38d3cdfb939800976ad63fedaf8971439b6fa3 -Author: Ariel Levkovich -Date: Wed Feb 6 00:48:38 2019 +0200 - - mlx5: Use copy loop to read from device memory - - [ Upstream commit e84d7117aa0cbf47695dd0a663f6f1cb1d273e28 ] - - Revise the flow of copying data from device memory buffer to use a 4 - byte load loop since memcpy may use SSE instructions while the device - memory is an uncachable, IO mapped memory. - - Fixes: 9bb70e385874 ("mlx5: Device memory support") - Signed-off-by: Ariel Levkovich - Signed-off-by: Yishai Hadas - Signed-off-by: Nicolas Morey-Chaisemartin - -commit d38817ea554a9fd140e56414a7c74e7eef444c50 -Author: Mark Bloch -Date: Wed Feb 20 20:00:45 2019 +0000 - - verbs: clear cmd buffer when creating indirection table - - [ Upstream commit 34225464c1d165f63ffd462364810cc9f374109d ] - - Make sure we clear the cmd buffer, not doing so will make the kernel to - fail the command. - - Fixes: 75c65bbcadcd ("verbs: Consolidate duplicate code in create_rwq_ind_table") - Signed-off-by: Mark Bloch - Signed-off-by: Yishai Hadas - Signed-off-by: Nicolas Morey-Chaisemartin - -commit 9dcfa6cd2e0b84fcf74218198e98e18c04ec374f -Author: Lijun Ou -Date: Thu Feb 21 10:40:43 2019 +0800 - - libhns: Bugfix for using buffer length - - [ Upstream commit e25684538c95e0286de7bfd96a643c7b2d34deda ] - - We should use the length of buffer after aligned according the - input size for ibv_dontfork_range function. - - Fixes: c24583975044 ("libhns: Add verbs of qp support") - Signed-off-by: Lijun Ou - Signed-off-by: Nicolas Morey-Chaisemartin - -commit 23e3a5dac44f9ec81ee5402c5e45009715aee241 -Author: Bodong Wang -Date: Thu Sep 27 15:32:27 2018 -0500 - - mlx5: Fix incorrect error handling when SQ wqe count is 0 - - [ Upstream commit 37bd67876947fb600f4d1691391796778af89843 ] - - Driver allocates memory based on wqe count and checks whether the memory - allocation succeeded. However, this memory check should not be performed - when wqe count is 0. - - Fixes: 8c4791ae2395 ("libmlx5: First version of libmlx5") - Signed-off-by: Bodong Wang - Signed-off-by: Yishai Hadas - Signed-off-by: Nicolas Morey-Chaisemartin -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 8310ec6c..0a8ad522 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -360,23 +360,23 @@ else() - set(HAVE_FULL_SYMBOL_VERSIONS 1) - endif() - --if (${NO_PYVERBS}) -- set(CYTHON_EXECUTABLE "") --else () -- # Look for Python. We prefer some variant of python 3 if the system has it. -- FIND_PACKAGE(PythonInterp 3 QUIET) -- if (NOT ${PythonInterp_FOUND}) -- FIND_PACKAGE(PythonInterp REQUIRED) -- endif() -- FIND_PACKAGE(cython) --endif() -- - # Look for Python. We prefer some variant of python 3 if the system has it. - FIND_PACKAGE(PythonInterp 3 QUIET) --if (NOT ${PythonInterp_FOUND}) -+if (PythonInterp_FOUND) -+ # pyverbs can only use python3: -+ if (NO_PYVERBS) -+ set(CYTHON_EXECUTABLE "") -+ else() -+ FIND_PACKAGE(cython) -+ endif() -+else() -+ # But we still must have python (be it 2) for the build process: - FIND_PACKAGE(PythonInterp REQUIRED) -+ set(CYTHON_EXECUTABLE "") - endif() -+ - # A cython & python-devel installation that matches our selected interpreter. -+ - if (CYTHON_EXECUTABLE) - # cmake has really bad logic here, if PythonIterp has been run it tries to - # find a matching -devel installation but will happily return a non-matching -diff --git a/buildlib/RDMA_BuildType.cmake b/buildlib/RDMA_BuildType.cmake -index 0951edad..17206f51 100644 ---- a/buildlib/RDMA_BuildType.cmake -+++ b/buildlib/RDMA_BuildType.cmake -@@ -8,7 +8,7 @@ function(RDMA_BuildType) - # in performance contexts it doesn't make much sense to have the default build - # turn off the optimizer. - if(NOT CMAKE_BUILD_TYPE) -- set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE String -+ set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING - "Options are ${build_types}" - FORCE - ) -diff --git a/buildlib/cbuild b/buildlib/cbuild -index 9ced0de6..15095d0c 100755 ---- a/buildlib/cbuild -+++ b/buildlib/cbuild -@@ -641,10 +641,6 @@ def run_deb_build(args,env): - "-e","DEB_BUILD_OPTIONS=parallel=%u"%(multiprocessing.cpu_count()), - ]; - -- if not env.build_pyverbs: -- opts.append("-e"); -- opts.append("EXTRA_CMAKE_FLAGS=%s"%(' '.join(["-DNO_PYVERBS=1"]))); -- - # Create a go.py that will let us run the compilation as the user and - # then switch to root only for the packaging step. - with open(os.path.join(tmpdir,"go.py"),"w") as F: -diff --git a/buildlib/check-build b/buildlib/check-build -index 5ae0cc1c..348b0590 100755 ---- a/buildlib/check-build -+++ b/buildlib/check-build -@@ -14,6 +14,7 @@ import copy - import shlex - import pipes - from contextlib import contextmanager; -+from distutils.version import LooseVersion; - - def get_src_dir(): - """Get the source directory using git""" -@@ -106,7 +107,7 @@ def check_lib_symver(args,fn): - private,args.PACKAGE_VERSION)); - - syms = list(syms - private); -- syms.sort(key=lambda x:re.split('[._]',x)); -+ syms.sort(key=LooseVersion) - if newest_symver != syms[-1]: - raise ValueError("Symbol version %r implied by filename %r not the newest in ELF (%r)"%( - newest_symver,fn,syms)); -diff --git a/buildlib/package-build-test b/buildlib/package-build-test -index 46a1cf6f..29c17838 100755 ---- a/buildlib/package-build-test -+++ b/buildlib/package-build-test -@@ -11,7 +11,7 @@ if [ -e "/.dockerenv" ] || (grep -q docker /proc/self/cgroup &>/dev/null); then - exit 0 - fi - --for OS in centos7 tumbleweed -+for OS in centos7 leap - do - echo - echo "Checking package build for ${OS} ...." -diff --git a/debian/rules b/debian/rules -index dceb6352..2d5b2670 100755 ---- a/debian/rules -+++ b/debian/rules -@@ -37,14 +37,15 @@ DH_AUTO_CONFIGURE := "--" \ - $(EXTRA_CMAKE_FLAGS) - - override_dh_auto_configure: --ifeq ($(EXTRA_CMAKE_FLAGS), -DNO_PYVERBS=1) -- dh_auto_configure $(DH_AUTO_CONFIGURE) --else -- dh_auto_configure $(DH_AUTO_CONFIGURE) \ -- -DNO_PYVERBS=0 \ -- -DPYTHON_EXECUTABLE:PATH=/usr/bin/python3 \ -- -DCMAKE_INSTALL_PYTHON_ARCH_LIB:PATH=/usr/lib/python3/dist-packages --endif -+ if [ -e /usr/bin/python3 ]; then \ -+ dh_auto_configure $(DH_AUTO_CONFIGURE) \ -+ -DPYTHON_EXECUTABLE:PATH=/usr/bin/python3 \ -+ -DCMAKE_INSTALL_PYTHON_ARCH_LIB:PATH=/usr/lib/python3/dist-packages; \ -+ else \ -+ dh_auto_configure $(DH_AUTO_CONFIGURE) \ -+ -DNO_PYVERBS=1; \ -+ fi -+ - - override_dh_auto_build: - ninja -C build-deb -v -@@ -72,7 +73,11 @@ ifeq ($(EXTRA_CMAKE_FLAGS), -DNO_PYVERBS=1) - endif - INST_EXCLUDE := $(addprefix -X,$(INST_EXCLUDE)) - override_dh_install: -- dh_install --fail-missing $(INST_EXCLUDE) -+ if [ -e build-deb/python/pyverbs/__init__.py ]; then \ -+ dh_install --fail-missing $(INST_EXCLUDE); \ -+ else \ -+ dh_install -Npython3-pyverbs --fail-missing $(INST_EXCLUDE) --remaining-packages; \ -+ fi - - # cmake installs the correct init scripts in the correct place, just setup the - # pre-postrms -@@ -99,13 +104,6 @@ override_dh_strip: - dh_strip -plibrdmacm1 --dbg-package=librdmacm1-dbg - dh_strip --remaining-packages - --override_dh_builddeb: --ifeq ($(EXTRA_CMAKE_FLAGS), -DNO_PYVERBS=1) -- dh_builddeb -Npython3-pyverbs --remaining-packages --else -- dh_builddeb --remaining-package --endif -- - # Upstream encourages the use of 'build' as the developer build output - # directory, allow that directory to be present and still allow dh to work. - .PHONY: build -diff --git a/ibacm/src/libacm.c b/ibacm/src/libacm.c -index 1d9d7145..e50fbf43 100644 ---- a/ibacm/src/libacm.c -+++ b/ibacm/src/libacm.c -@@ -56,7 +56,7 @@ static void acm_set_server_port(void) - } - } - --int ib_acm_connect(char *dest) -+static int ib_acm_connect_open(char *dest) - { - struct addrinfo hint, *res; - int ret; -@@ -64,67 +64,72 @@ int ib_acm_connect(char *dest) - acm_set_server_port(); - memset(&hint, 0, sizeof hint); - -- if (dest && *dest != '/') { -- hint.ai_family = AF_INET; -- hint.ai_family = AF_UNSPEC; -- -- ret = getaddrinfo(dest, NULL, &hint, &res); -- if (ret) -- return ret; -- -- sock = socket(res->ai_family, res->ai_socktype, -- res->ai_protocol); -- if (sock == -1) { -- ret = errno; -- goto err1; -- } -+ hint.ai_family = AF_UNSPEC; -+ hint.ai_protocol = IPPROTO_TCP; - -- ((struct sockaddr_in *) res->ai_addr)->sin_port = -- htobe16(server_port); -- ret = connect(sock, res->ai_addr, res->ai_addrlen); -- if (ret) -- goto err2; -+ ret = getaddrinfo(dest, NULL, &hint, &res); -+ if (ret) -+ return ret; - -- freeaddrinfo(res); -+ sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); -+ if (sock == -1) { -+ ret = errno; -+ goto freeaddr; -+ } - --err2: -+ ((struct sockaddr_in *) res->ai_addr)->sin_port = htobe16(server_port); -+ ret = connect(sock, res->ai_addr, res->ai_addrlen); -+ if (ret) { - close(sock); - sock = -1; --err1: -- freeaddrinfo(res); -- } else { -- struct sockaddr_un addr; -- -- addr.sun_family = AF_UNIX; -- if (dest) { -- if (snprintf(addr.sun_path, sizeof(addr.sun_path), -- "%s", dest) >= sizeof(addr.sun_path)) { -- errno = ENAMETOOLONG; -- return errno; -- } -- } else { -- BUILD_ASSERT(sizeof(IBACM_IBACME_SERVER_PATH) <= -- sizeof(addr.sun_path)); -- strcpy(addr.sun_path, IBACM_IBACME_SERVER_PATH); -- } -+ } - -- sock = socket(AF_UNIX, SOCK_STREAM, 0); -- if (sock < 0) -- return errno; -+freeaddr: -+ freeaddrinfo(res); -+ return ret; -+} - -- if (connect(sock, -- (struct sockaddr *)&addr, sizeof(addr)) != 0) { -- ret = errno; -- close(sock); -- sock = -1; -- errno = ret; -- return ret; -+static int ib_acm_connect_unix(char *dest) -+{ -+ struct sockaddr_un addr; -+ int ret; -+ -+ addr.sun_family = AF_UNIX; -+ if (dest) { -+ if (snprintf(addr.sun_path, sizeof(addr.sun_path), -+ "%s", dest) >= sizeof(addr.sun_path)) { -+ errno = ENAMETOOLONG; -+ return errno; - } -+ } else { -+ BUILD_ASSERT(sizeof(IBACM_IBACME_SERVER_PATH) <= -+ sizeof(addr.sun_path)); -+ strcpy(addr.sun_path, IBACM_IBACME_SERVER_PATH); -+ } -+ -+ sock = socket(AF_UNIX, SOCK_STREAM, 0); -+ if (sock < 0) -+ return errno; -+ -+ if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) { -+ ret = errno; -+ close(sock); -+ sock = -1; -+ errno = ret; -+ return ret; - } - - return 0; - } - -+int ib_acm_connect(char *dest) -+{ -+ if (dest && *dest == '/') -+ return ib_acm_connect_unix(dest); -+ -+ return ib_acm_connect_open(dest); -+} -+ - void ib_acm_disconnect(void) - { - if (sock != -1) { -diff --git a/libibverbs/cmd.c b/libibverbs/cmd.c -index 34c71e56..5817c598 100644 ---- a/libibverbs/cmd.c -+++ b/libibverbs/cmd.c -@@ -1854,6 +1854,7 @@ int ibv_cmd_create_rwq_ind_table(struct ibv_context *context, - cmd_size = sizeof(*cmd) + num_tbl_entries * sizeof(cmd->wq_handles[0]); - cmd_size = (cmd_size + 7) / 8 * 8; - cmd = alloca(cmd_size); -+ memset(cmd, 0, cmd_size); - - for (i = 0; i < num_tbl_entries; i++) - cmd->wq_handles[i] = init_attr->ind_tbl[i]->handle; -diff --git a/libibverbs/cmd_ioctl.c b/libibverbs/cmd_ioctl.c -index 82ef2cd7..2a46c49c 100644 ---- a/libibverbs/cmd_ioctl.c -+++ b/libibverbs/cmd_ioctl.c -@@ -79,7 +79,6 @@ static void prepare_attrs(struct ibv_command_buffer *cmd) - } - - cmd->hdr.num_attrs = end - cmd->hdr.attrs; -- cmd->last_attr = end; - - /* - * We keep the in UHW uninlined until directly before sending to -@@ -113,7 +112,7 @@ static void finalize_attrs(struct ibv_command_buffer *cmd) - struct ibv_command_buffer *link; - struct ib_uverbs_attr *end; - -- for (end = cmd->hdr.attrs; end != cmd->last_attr; end++) -+ for (end = cmd->hdr.attrs; end != cmd->next_attr; end++) - finalize_attr(end); - - for (link = cmd->next; link; link = link->next) { -diff --git a/libibverbs/examples/rc_pingpong.c b/libibverbs/examples/rc_pingpong.c -index 8b2253d5..0f37f5df 100644 ---- a/libibverbs/examples/rc_pingpong.c -+++ b/libibverbs/examples/rc_pingpong.c -@@ -488,9 +488,8 @@ static struct pingpong_context *pp_init_ctx(struct ibv_device *ib_dev, int size, - } - - ibv_query_qp(ctx->qp, &attr, IBV_QP_CAP, &init_attr); -- if (init_attr.cap.max_inline_data >= size) { -+ if (init_attr.cap.max_inline_data >= size && !use_dm) - ctx->send_flags |= IBV_SEND_INLINE; -- } - } - - { -diff --git a/libibverbs/examples/xsrq_pingpong.c b/libibverbs/examples/xsrq_pingpong.c -index 4c0d825f..cfd3c34a 100644 ---- a/libibverbs/examples/xsrq_pingpong.c -+++ b/libibverbs/examples/xsrq_pingpong.c -@@ -876,7 +876,7 @@ int main(int argc, char *argv[]) - {} - }; - -- c = getopt_long(argc, argv, "p:d:i:s:m:n:l:eg:c", long_options, -+ c = getopt_long(argc, argv, "p:d:i:s:m:n:l:eg:c:", long_options, - NULL); - if (c == -1) - break; -diff --git a/providers/hns/hns_roce_u_buf.c b/providers/hns/hns_roce_u_buf.c -index f92ea651..27ed90c2 100644 ---- a/providers/hns/hns_roce_u_buf.c -+++ b/providers/hns/hns_roce_u_buf.c -@@ -46,7 +46,7 @@ int hns_roce_alloc_buf(struct hns_roce_buf *buf, unsigned int size, - if (buf->buf == MAP_FAILED) - return errno; - -- ret = ibv_dontfork_range(buf->buf, size); -+ ret = ibv_dontfork_range(buf->buf, buf->length); - if (ret) - munmap(buf->buf, buf->length); - -diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c -index af3bab1f..dd71fb14 100644 ---- a/providers/hns/hns_roce_u_hw_v2.c -+++ b/providers/hns/hns_roce_u_hw_v2.c -@@ -555,7 +555,6 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - unsigned int ind_sge; - unsigned int ind; - int nreq; -- int i; - void *wqe; - int ret = 0; - struct hns_roce_qp *qp = to_hr_qp(ibvqp); -@@ -563,7 +562,10 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - struct hns_roce_rc_sq_wqe *rc_sq_wqe; - struct hns_roce_v2_wqe_data_seg *dseg; - struct ibv_qp_attr attr; -+ int valid_num_sge; - int attr_mask; -+ int j; -+ int i; - - pthread_spin_lock(&qp->sq.lock); - -@@ -598,17 +600,25 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - memset(rc_sq_wqe, 0, sizeof(struct hns_roce_rc_sq_wqe)); - - qp->sq.wrid[ind & (qp->sq.wqe_cnt - 1)] = wr->wr_id; -- for (i = 0; i < wr->num_sge; i++) -+ -+ valid_num_sge = wr->num_sge; -+ j = 0; -+ -+ for (i = 0; i < wr->num_sge; i++) { -+ if (unlikely(!wr->sg_list[i].length)) -+ valid_num_sge--; -+ - rc_sq_wqe->msg_len = - htole32(le32toh(rc_sq_wqe->msg_len) + - wr->sg_list[i].length); -+ } - - if (wr->opcode == IBV_WR_SEND_WITH_IMM || - wr->opcode == IBV_WR_RDMA_WRITE_WITH_IMM) - rc_sq_wqe->immtdata = htole32(be32toh(wr->imm_data)); - - roce_set_field(rc_sq_wqe->byte_16, RC_SQ_WQE_BYTE_16_SGE_NUM_M, -- RC_SQ_WQE_BYTE_16_SGE_NUM_S, wr->num_sge); -+ RC_SQ_WQE_BYTE_16_SGE_NUM_S, valid_num_sge); - - roce_set_field(rc_sq_wqe->byte_20, - RC_SQ_WQE_BYTE_20_MSG_START_SGE_IDX_S, -@@ -774,7 +784,7 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - set_data_seg_v2(dseg, wr->sg_list); - wqe += sizeof(struct hns_roce_v2_wqe_data_seg); - set_atomic_seg(wqe, wr); -- } else if (wr->send_flags & IBV_SEND_INLINE && wr->num_sge) { -+ } else if (wr->send_flags & IBV_SEND_INLINE && valid_num_sge) { - if (le32toh(rc_sq_wqe->msg_len) > qp->max_inline_data) { - ret = EINVAL; - *bad_wr = wr; -@@ -801,7 +811,7 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - RC_SQ_WQE_BYTE_4_INLINE_S, 1); - } else { - /* set sge */ -- if (wr->num_sge <= 2) { -+ if (valid_num_sge <= 2) { - for (i = 0; i < wr->num_sge; i++) - if (likely(wr->sg_list[i].length)) { - set_data_seg_v2(dseg, -@@ -814,7 +824,7 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - RC_SQ_WQE_BYTE_20_MSG_START_SGE_IDX_S, - ind_sge & (qp->sge.sge_cnt - 1)); - -- for (i = 0; i < 2; i++) -+ for (i = 0; i < wr->num_sge && j < 2; i++) - if (likely(wr->sg_list[i].length)) { - set_data_seg_v2(dseg, - wr->sg_list + i); -@@ -824,10 +834,10 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - dseg = get_send_sge_ex(qp, ind_sge & - (qp->sge.sge_cnt - 1)); - -- for (i = 0; i < wr->num_sge - 2; i++) { -- if (likely(wr->sg_list[i + 2].length)) { -+ for (; i < wr->num_sge; i++) { -+ if (likely(wr->sg_list[i].length)) { - set_data_seg_v2(dseg, -- wr->sg_list + 2 + i); -+ wr->sg_list + i); - dseg++; - ind_sge++; - } -diff --git a/providers/mlx5/verbs.c b/providers/mlx5/verbs.c -index bab675f6..890ed980 100644 ---- a/providers/mlx5/verbs.c -+++ b/providers/mlx5/verbs.c -@@ -1452,13 +1452,13 @@ static int mlx5_alloc_qp_buf(struct ibv_context *context, - err = -1; - goto ex_wrid; - } -- } - -- qp->sq.wqe_head = malloc(qp->sq.wqe_cnt * sizeof(*qp->sq.wqe_head)); -- if (!qp->sq.wqe_head) { -- errno = ENOMEM; -- err = -1; -+ qp->sq.wqe_head = malloc(qp->sq.wqe_cnt * sizeof(*qp->sq.wqe_head)); -+ if (!qp->sq.wqe_head) { -+ errno = ENOMEM; -+ err = -1; - goto ex_wrid; -+ } - } - - if (qp->rq.wqe_cnt) { -@@ -2432,7 +2432,7 @@ struct ibv_ah *mlx5_create_ah(struct ibv_pd *pd, struct ibv_ah_attr *attr) - ah->av.fl_mlid = attr->src_path_bits & 0x7f; - ah->av.rlid = htobe16(attr->dlid); - grh = 1; -- ah->av.stat_rate_sl = (static_rate << 4) | (attr->sl & 0x7); -+ ah->av.stat_rate_sl = (static_rate << 4) | (attr->sl & 0xf); - } - if (attr->is_global) { - ah->av.tclass = attr->grh.traffic_class; -@@ -3494,13 +3494,14 @@ int mlx5_destroy_flow_action(struct ibv_flow_action *action) - return ret; - } - --static inline int mlx5_memcpy_to_dm(struct ibv_dm *ibdm, uint64_t dm_offset, -- const void *host_addr, size_t length) -+static inline int mlx5_access_dm(struct ibv_dm *ibdm, uint64_t dm_offset, -+ void *host_addr, size_t length, -+ uint32_t read) - { - struct mlx5_dm *dm = to_mdm(ibdm); - atomic_uint32_t *dm_ptr = - (atomic_uint32_t *)dm->start_va + dm_offset / 4; -- const uint32_t *host_ptr = host_addr; -+ uint32_t *host_ptr = host_addr; - const uint32_t *host_end = host_ptr + length / 4; - - if (dm_offset + length > dm->length) -@@ -3515,31 +3516,34 @@ static inline int mlx5_memcpy_to_dm(struct ibv_dm *ibdm, uint64_t dm_offset, - /* Copy granularity should be 4 Bytes since we enforce copy size to be - * a multiple of 4 bytes. - */ -- while (host_ptr != host_end) { -- atomic_store_explicit(dm_ptr, *host_ptr, memory_order_relaxed); -- host_ptr++; -- dm_ptr++; -+ if (read) { -+ while (host_ptr != host_end) { -+ *host_ptr = atomic_load_explicit(dm_ptr, -+ memory_order_relaxed); -+ host_ptr++; -+ dm_ptr++; -+ } -+ } else { -+ while (host_ptr != host_end) { -+ atomic_store_explicit(dm_ptr, *host_ptr, -+ memory_order_relaxed); -+ host_ptr++; -+ dm_ptr++; -+ } - } - - return 0; - } -+static inline int mlx5_memcpy_to_dm(struct ibv_dm *ibdm, uint64_t dm_offset, -+ const void *host_addr, size_t length) -+{ -+ return mlx5_access_dm(ibdm, dm_offset, (void *)host_addr, length, 0); -+} - - static inline int mlx5_memcpy_from_dm(void *host_addr, struct ibv_dm *ibdm, - uint64_t dm_offset, size_t length) - { -- struct mlx5_dm *dm = to_mdm(ibdm); -- void *dm_va = dm->start_va + dm_offset; -- -- if (dm_offset + length > dm->length) -- return EFAULT; -- -- /* DM access address must be aligned to 4 bytes */ -- if (dm_offset & 3) -- return EINVAL; -- -- memcpy(host_addr, dm_va, length); -- -- return 0; -+ return mlx5_access_dm(ibdm, dm_offset, host_addr, length, 1); - } - - struct ibv_dm *mlx5_alloc_dm(struct ibv_context *context, diff --git a/SOURCES/0001-srp_daemon-fix-a-double-free-segment-fault-for-ibsrp.patch b/SOURCES/0001-srp_daemon-fix-a-double-free-segment-fault-for-ibsrp.patch new file mode 100644 index 0000000..b33c8c0 --- /dev/null +++ b/SOURCES/0001-srp_daemon-fix-a-double-free-segment-fault-for-ibsrp.patch @@ -0,0 +1,51 @@ +From 213d508e72e5243db5711510b1d48b93b0aed9df Mon Sep 17 00:00:00 2001 +From: Honggang Li +Date: Thu, 19 Sep 2019 14:40:45 +0800 +Subject: [PATCH rdma-core 1/5] srp_daemon: fix a double free segment fault for + ibsrpdm + +[ Upstream commit 0b09980860a05ec5feb25f7849c2d703db5c157e ] + +Command: ./ibsrpdm -d /dev/infiniband/umadX + +Invalid free() / delete / delete[] / realloc() + at 0x4C320DC: free (vg_replace_malloc.c:540) + by 0x403BBB: free_config (srp_daemon.c:1811) + by 0x4031BE: ibsrpdm (srp_daemon.c:2113) + by 0x4031BE: main (srp_daemon.c:2153) + Address 0x5ee5fd0 is 0 bytes inside a block of size 16 free'd + at 0x4C320DC: free (vg_replace_malloc.c:540) + by 0x404851: translate_umad_to_ibdev_and_port (srp_daemon.c:729) + by 0x404851: set_conf_dev_and_port (srp_daemon.c:1586) + by 0x403171: ibsrpdm (srp_daemon.c:2092) + by 0x403171: main (srp_daemon.c:2153) + Block was alloc'd at + at 0x4C30EDB: malloc (vg_replace_malloc.c:309) + by 0x40478D: translate_umad_to_ibdev_and_port (srp_daemon.c:698) + by 0x40478D: set_conf_dev_and_port (srp_daemon.c:1586) + by 0x403171: ibsrpdm (srp_daemon.c:2092) + by 0x403171: main (srp_daemon.c:2153) + +Signed-off-by: Honggang Li +Reviewed-by: Bart Van Assche +Signed-off-by: Leon Romanovsky +Signed-off-by: Nicolas Morey-Chaisemartin +--- + srp_daemon/srp_daemon.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/srp_daemon/srp_daemon.c b/srp_daemon/srp_daemon.c +index baf4957a..82dc929f 100644 +--- a/srp_daemon/srp_daemon.c ++++ b/srp_daemon/srp_daemon.c +@@ -724,6 +724,7 @@ end: + if (ret) { + free(*ibport); + free(*ibdev); ++ *ibdev = NULL; + } + free(class_dev_path); + +-- +2.20.1 + diff --git a/SOURCES/0002-cxgb4-free-appropriate-pointer-in-error-case.patch b/SOURCES/0002-cxgb4-free-appropriate-pointer-in-error-case.patch new file mode 100644 index 0000000..8154ceb --- /dev/null +++ b/SOURCES/0002-cxgb4-free-appropriate-pointer-in-error-case.patch @@ -0,0 +1,39 @@ +From 2e940ac7836816efa47be134725934e9150c93db Mon Sep 17 00:00:00 2001 +From: Potnuri Bharat Teja +Date: Thu, 31 Oct 2019 16:05:59 +0530 +Subject: [PATCH rdma-core 2/5] cxgb4: free appropriate pointer in error case + +[ Upstream commit 151068ef86cc28d75b4cd73906b79c52fe55ee9c ] + +error unmap case wrongly frees only the cqid2ptr for qp/mmid2ptr. +This patch frees the appropriate pointer. + +Fixes: 9b2d3af5735e ("Query device to get the max supported stags, qps, and cqs") +Signed-off-by: Potnuri Bharat Teja +--- +v0 -> v1: +- add missing description +Signed-off-by: Nicolas Morey-Chaisemartin +--- + providers/cxgb4/dev.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/providers/cxgb4/dev.c b/providers/cxgb4/dev.c +index aba007f0..1377cf87 100644 +--- a/providers/cxgb4/dev.c ++++ b/providers/cxgb4/dev.c +@@ -203,9 +203,9 @@ err_free: + if (rhp->cqid2ptr) + free(rhp->cqid2ptr); + if (rhp->qpid2ptr) +- free(rhp->cqid2ptr); ++ free(rhp->qpid2ptr); + if (rhp->mmid2ptr) +- free(rhp->cqid2ptr); ++ free(rhp->mmid2ptr); + verbs_uninit_context(&context->ibv_ctx); + free(context); + return NULL; +-- +2.20.1 + diff --git a/SOURCES/0003-man-Fix-return-value-for-ibv_reg_dm_mr.patch b/SOURCES/0003-man-Fix-return-value-for-ibv_reg_dm_mr.patch new file mode 100644 index 0000000..4545904 --- /dev/null +++ b/SOURCES/0003-man-Fix-return-value-for-ibv_reg_dm_mr.patch @@ -0,0 +1,33 @@ +From 35a879329128596bdf0f1ac51fcd786cb1b59d86 Mon Sep 17 00:00:00 2001 +From: Noa Osherovich +Date: Sun, 10 Nov 2019 15:11:50 +0200 +Subject: [PATCH rdma-core 3/5] man: Fix return value for ibv_reg_dm_mr + +[ Upstream commit bd96015f5167dded567ecb73f11a04d1d00a8036 ] + +ibv_reg_dm_mr returns a struct ibv_mr pointer while man page defined +it as returning an int. Fix the description. + +Fixes: e1cebbf50c262 ('verbs: Add device memory (DM) support in libibverbs') +Signed-off-by: Noa Osherovich +Signed-off-by: Nicolas Morey-Chaisemartin +--- + libibverbs/man/ibv_alloc_dm.3 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libibverbs/man/ibv_alloc_dm.3 b/libibverbs/man/ibv_alloc_dm.3 +index d28a955c..28fa488a 100644 +--- a/libibverbs/man/ibv_alloc_dm.3 ++++ b/libibverbs/man/ibv_alloc_dm.3 +@@ -70,7 +70,7 @@ is done with a byte offset from the beginning of the region. + .sp + This type of registration is done using ibv_reg_dm_mr. + .sp +-.BI "int ibv_reg_dm_mr(struct ibv_pd " "*pd" ", struct ibv_dm " "*dm" ", uint64_t " "dm_offset", ++.BI "struct ibv_mr* ibv_reg_dm_mr(struct ibv_pd " "*pd" ", struct ibv_dm " "*dm" ", uint64_t " "dm_offset", + .BI " size_t " "length" ", uint32_t " "access"); + .sp + .I pd +-- +2.20.1 + diff --git a/SOURCES/0004-Update-kernel-headers.patch b/SOURCES/0004-Update-kernel-headers.patch new file mode 100644 index 0000000..c18aec9 --- /dev/null +++ b/SOURCES/0004-Update-kernel-headers.patch @@ -0,0 +1,68 @@ +From 12cee2d80a7e616c73d1de1d5ce1cbc8e33c524f Mon Sep 17 00:00:00 2001 +From: Yishai Hadas +Date: Thu, 2 May 2019 13:35:41 +0300 +Subject: [PATCH rdma-core 4/5] Update kernel headers + +To commit 7249c8ea227a ("IB/mlx5: Fix scatter to CQE in DCT QP +creation") + +Signed-off-by: Yishai Hadas +--- + kernel-headers/rdma/mlx5-abi.h | 1 + + kernel-headers/rdma/rdma_netlink.h | 20 ++++++++++++++++++-- + 2 files changed, 19 insertions(+), 2 deletions(-) + +diff --git a/kernel-headers/rdma/mlx5-abi.h b/kernel-headers/rdma/mlx5-abi.h +index 87b3198f..f4d4010b 100644 +--- a/kernel-headers/rdma/mlx5-abi.h ++++ b/kernel-headers/rdma/mlx5-abi.h +@@ -238,6 +238,7 @@ enum mlx5_ib_query_dev_resp_flags { + MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_COMP = 1 << 0, + MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_PAD = 1 << 1, + MLX5_IB_QUERY_DEV_RESP_PACKET_BASED_CREDIT_MODE = 1 << 2, ++ MLX5_IB_QUERY_DEV_RESP_FLAGS_SCAT2CQE_DCT = 1 << 3, + }; + + enum mlx5_ib_tunnel_offloads { +diff --git a/kernel-headers/rdma/rdma_netlink.h b/kernel-headers/rdma/rdma_netlink.h +index 2e18b77a..6791ccc7 100644 +--- a/kernel-headers/rdma/rdma_netlink.h ++++ b/kernel-headers/rdma/rdma_netlink.h +@@ -229,9 +229,11 @@ enum rdma_nldev_command { + RDMA_NLDEV_CMD_GET, /* can dump */ + RDMA_NLDEV_CMD_SET, + +- /* 3 - 4 are free to use */ ++ RDMA_NLDEV_CMD_NEWLINK, + +- RDMA_NLDEV_CMD_PORT_GET = 5, /* can dump */ ++ RDMA_NLDEV_CMD_DELLINK, ++ ++ RDMA_NLDEV_CMD_PORT_GET, /* can dump */ + + /* 6 - 8 are free to use */ + +@@ -430,6 +432,20 @@ enum rdma_nldev_attr { + RDMA_NLDEV_ATTR_DRIVER_S64, /* s64 */ + RDMA_NLDEV_ATTR_DRIVER_U64, /* u64 */ + ++ /* ++ * Indexes to get/set secific entry, ++ * for QP use RDMA_NLDEV_ATTR_RES_LQPN ++ */ ++ RDMA_NLDEV_ATTR_RES_PDN, /* u32 */ ++ RDMA_NLDEV_ATTR_RES_CQN, /* u32 */ ++ RDMA_NLDEV_ATTR_RES_MRN, /* u32 */ ++ RDMA_NLDEV_ATTR_RES_CM_IDN, /* u32 */ ++ RDMA_NLDEV_ATTR_RES_CTXN, /* u32 */ ++ /* ++ * Identifies the rdma driver. eg: "rxe" or "siw" ++ */ ++ RDMA_NLDEV_ATTR_LINK_TYPE, /* string */ ++ + /* + * Always the end + */ +-- +2.20.1 + diff --git a/SOURCES/0005-mlx5-Support-scatter-to-CQE-over-DCT-QP.patch b/SOURCES/0005-mlx5-Support-scatter-to-CQE-over-DCT-QP.patch new file mode 100644 index 0000000..8b58f61 --- /dev/null +++ b/SOURCES/0005-mlx5-Support-scatter-to-CQE-over-DCT-QP.patch @@ -0,0 +1,168 @@ +From d962bef7ac575c971f5792fc83dbccd17eb23989 Mon Sep 17 00:00:00 2001 +From: Alaa Hleihel +Date: Thu, 21 Nov 2019 16:25:34 -0500 +Subject: [PATCH rdma-core 5/5] mlx5: Support scatter to CQE over DCT QP + +Bugzilla: http://bugzilla.redhat.com/BZNUM +Upstream: origin/master +Conflicts: + - providers/mlx5/verbs.c + Had small context diff and dropped an hunk that is not relevant due to + missing patches. + +commit cd231947e19d5f40d55b8a493aa8c069b88df9e9 +Author: Guy Levi +Date: Tue Mar 26 09:40:17 2019 +0200 + + mlx5: Support scatter to CQE over DCT QP + + Scatter to CQE which is a performance feature has never been enabled on + DCT QP. + + A new capability which allows to enable the feature on DCT QP is + reported in query device related verb. Correspondingly, this patch + enables the feature functionality so it is aligned with other QPs and + the man page. It will be controlled by the legacy environment variable + and can be override by the DV creation flags. + + Fixes: b9967a9d722a ("mlx5: Create DC transport QPs") + Signed-off-by: Guy Levi + Signed-off-by: Yishai Hadas + +Signed-off-by: Jarod Wilson +--- + providers/mlx5/mlx5.h | 1 + + providers/mlx5/verbs.c | 37 +++++++++++++++++++++++++++---------- + 2 files changed, 28 insertions(+), 10 deletions(-) + +diff --git a/providers/mlx5/mlx5.h b/providers/mlx5/mlx5.h +index 75d599ad..4b6d903a 100644 +--- a/providers/mlx5/mlx5.h ++++ b/providers/mlx5/mlx5.h +@@ -186,6 +186,7 @@ enum mlx5_vendor_cap_flags { + MLX5_VENDOR_CAP_FLAGS_CQE_128B_COMP = 1 << 3, + MLX5_VENDOR_CAP_FLAGS_CQE_128B_PAD = 1 << 4, + MLX5_VENDOR_CAP_FLAGS_PACKET_BASED_CREDIT_MODE = 1 << 5, ++ MLX5_VENDOR_CAP_FLAGS_SCAT2CQE_DCT = 1 << 6, + }; + + enum { +diff --git a/providers/mlx5/verbs.c b/providers/mlx5/verbs.c +index 890ed980..dad20c4f 100644 +--- a/providers/mlx5/verbs.c ++++ b/providers/mlx5/verbs.c +@@ -1642,7 +1642,7 @@ enum { + static int create_dct(struct ibv_context *context, + struct ibv_qp_init_attr_ex *attr, + struct mlx5dv_qp_init_attr *mlx5_qp_attr, +- struct mlx5_qp *qp) ++ struct mlx5_qp *qp, uint32_t mlx5_create_flags) + { + struct mlx5_create_qp cmd = {}; + struct mlx5_create_qp_resp resp = {}; +@@ -1658,14 +1658,26 @@ static int create_dct(struct ibv_context *context, + return errno; + } + +- if (!check_comp_mask(mlx5_qp_attr->comp_mask, MLX5DV_QP_INIT_ATTR_MASK_DC)) { ++ if (!check_comp_mask(mlx5_qp_attr->comp_mask, ++ MLX5DV_QP_INIT_ATTR_MASK_DC | ++ MLX5DV_QP_INIT_ATTR_MASK_QP_CREATE_FLAGS)) { + mlx5_dbg(fp, MLX5_DBG_QP, + "Unsupported vendor comp_mask for %s\n", __func__); + errno = EINVAL; + return errno; + } + +- cmd.flags = MLX5_QP_FLAG_TYPE_DCT; ++ if (!check_comp_mask(mlx5_create_flags, MLX5_QP_FLAG_SCATTER_CQE)) { ++ mlx5_dbg(fp, MLX5_DBG_QP, ++ "Unsupported creation flags requested for DCT QP\n"); ++ errno = EINVAL; ++ return errno; ++ } ++ ++ if (!(ctx->vendor_cap_flags & MLX5_VENDOR_CAP_FLAGS_SCAT2CQE_DCT)) ++ mlx5_create_flags &= ~MLX5_QP_FLAG_SCATTER_CQE; ++ ++ cmd.flags = MLX5_QP_FLAG_TYPE_DCT | mlx5_create_flags; + cmd.access_key = mlx5_qp_attr->dc_init_attr.dct_access_key; + + if (ctx->cqe_version) { +@@ -1709,7 +1721,6 @@ static struct ibv_qp *create_qp(struct ibv_context *context, + int32_t usr_idx = 0; + uint32_t mlx5_create_flags = 0; + struct mlx5_bf *bf = NULL; +- bool scatter_to_cqe_configured = false; + FILE *fp = ctx->dbg_fp; + struct mlx5_parent_domain *mparent_domain; + struct mlx5_ib_create_qp_resp *resp_drv; +@@ -1745,6 +1756,9 @@ static struct ibv_qp *create_qp(struct ibv_context *context, + memset(&resp, 0, sizeof(resp)); + memset(&resp_ex, 0, sizeof(resp_ex)); + ++ if (use_scatter_to_cqe()) ++ mlx5_create_flags |= MLX5_QP_FLAG_SCATTER_CQE; ++ + if (mlx5_qp_attr) { + if (!check_comp_mask(mlx5_qp_attr->comp_mask, + MLX5_DV_CREATE_QP_SUP_COMP_MASK)) { +@@ -1792,14 +1806,13 @@ static struct ibv_qp *create_qp(struct ibv_context *context, + errno = EINVAL; + goto err; + } +- scatter_to_cqe_configured = true; ++ mlx5_create_flags &= ~MLX5_QP_FLAG_SCATTER_CQE; + } + if (mlx5_qp_attr->create_flags & + MLX5DV_QP_CREATE_ALLOW_SCATTER_TO_CQE) { + mlx5_create_flags |= + (MLX5_QP_FLAG_ALLOW_SCATTER_CQE | + MLX5_QP_FLAG_SCATTER_CQE); +- scatter_to_cqe_configured = true; + } + if (mlx5_qp_attr->create_flags & + MLX5DV_QP_CREATE_PACKET_BASED_CREDIT_MODE) +@@ -1810,7 +1823,8 @@ static struct ibv_qp *create_qp(struct ibv_context *context, + if (attr->qp_type == IBV_QPT_DRIVER) { + if (mlx5_qp_attr->comp_mask & MLX5DV_QP_INIT_ATTR_MASK_DC) { + if (mlx5_qp_attr->dc_init_attr.dc_type == MLX5DV_DCTYPE_DCT) { +- ret = create_dct(context, attr, mlx5_qp_attr, qp); ++ ret = create_dct(context, attr, mlx5_qp_attr, ++ qp, mlx5_create_flags); + if (ret) + goto err; + return ibqp; +@@ -1833,6 +1847,9 @@ static struct ibv_qp *create_qp(struct ibv_context *context, + } + + if (attr->comp_mask & IBV_QP_INIT_ATTR_RX_HASH) { ++ /* Scatter2CQE is unsupported for RSS QP */ ++ mlx5_create_flags &= ~MLX5_QP_FLAG_SCATTER_CQE; ++ + ret = mlx5_cmd_create_rss_qp(context, attr, qp, + mlx5_create_flags); + if (ret) +@@ -1846,9 +1863,6 @@ static struct ibv_qp *create_qp(struct ibv_context *context, + if (qp->wq_sig) + cmd.flags |= MLX5_QP_FLAG_SIGNATURE; + +- if (!scatter_to_cqe_configured && use_scatter_to_cqe()) +- cmd.flags |= MLX5_QP_FLAG_SCATTER_CQE; +- + ret = mlx5_calc_wq_size(ctx, attr, qp); + if (ret < 0) { + errno = -ret; +@@ -2887,6 +2901,9 @@ int mlx5_query_device_ex(struct ibv_context *context, + if (resp.flags & MLX5_IB_QUERY_DEV_RESP_PACKET_BASED_CREDIT_MODE) + mctx->vendor_cap_flags |= MLX5_VENDOR_CAP_FLAGS_PACKET_BASED_CREDIT_MODE; + ++ if (resp.flags & MLX5_IB_QUERY_DEV_RESP_FLAGS_SCAT2CQE_DCT) ++ mctx->vendor_cap_flags |= MLX5_VENDOR_CAP_FLAGS_SCAT2CQE_DCT; ++ + major = (raw_fw_ver >> 32) & 0xffff; + minor = (raw_fw_ver >> 16) & 0xffff; + sub_minor = raw_fw_ver & 0xffff; +-- +2.20.1 + diff --git a/SOURCES/0006-ibacm-only-open-InfiniBand-port.patch b/SOURCES/0006-ibacm-only-open-InfiniBand-port.patch new file mode 100644 index 0000000..6425ce7 --- /dev/null +++ b/SOURCES/0006-ibacm-only-open-InfiniBand-port.patch @@ -0,0 +1,87 @@ +From 52d1c4346e17454cee315e8c3027dc0cb4779dc0 Mon Sep 17 00:00:00 2001 +From: Honggang Li +Date: Tue, 11 Jun 2019 19:33:25 -0400 +Subject: [PATCH rdma-core] ibacm: only open InfiniBand port +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The low 64 bits of cxgb3 and cxgb4 devices' GID are zeros. If the +"provider" was set in the option file, ibacm will fail with segment fault. + +$ sed -i -e 's/# provider ibacmp 0xFE80000000000000/provider ibacmp 0xFE80000000000000/g' /etc/rdma/ibacm_opts.cfg +$ /usr/sbin/ibacm --systemd +Segmentation fault (core dumped) +$ gdb /usr/sbin/ibacm core.ibacm +(gdb) bt +0 0x00005625a4809217 in acm_assign_provider (port=0x5625a4bc6f28) at /usr/src/debug/rdma-core-25.0-1.el8.x86_64/ibacm/src/acm.c:2285 +1 acm_port_up (port=0x5625a4bc6f28) at /usr/src/debug/rdma-core-25.0-1.el8.x86_64/ibacm/src/acm.c:2372 +2 0x00005625a48073d2 in acm_activate_devices () at /usr/src/debug/rdma-core-25.0-1.el8.x86_64/ibacm/src/acm.c:2564 +3 main (argc=, argv=) at /usr/src/debug/rdma-core-25.0-1.el8.x86_64/ibacm/src/acm.c:3270 + +Note: The rpm was built with tarball generated from upstream repo. The last +commit is aa41a65ec86bdb9c1c86e57885ee588b39558238. + +acm_open_dev function should not open a umad port for iWARP or RoCE +devices. + +Signed-off-by: Honggang Li +Reviewed-by: HÃ¥kon Bugge +Signed-off-by: Jason Gunthorpe +--- + ibacm/src/acm.c | 26 ++++++++++++++++++++++---- + 1 file changed, 22 insertions(+), 4 deletions(-) + +diff --git a/ibacm/src/acm.c b/ibacm/src/acm.c +index 37dec065..46d33ba2 100644 +--- a/ibacm/src/acm.c ++++ b/ibacm/src/acm.c +@@ -2589,9 +2589,11 @@ static void acm_open_dev(struct ibv_device *ibdev) + { + struct acmc_device *dev; + struct ibv_device_attr attr; ++ struct ibv_port_attr port_attr; + struct ibv_context *verbs; + size_t size; + int i, ret; ++ unsigned int opened_ib_port_cnt = 0; + + acm_log(1, "%s\n", ibdev->name); + verbs = ibv_open_device(ibdev); +@@ -2617,13 +2619,29 @@ static void acm_open_dev(struct ibv_device *ibdev) + list_head_init(&dev->prov_dev_context_list); + + for (i = 0; i < dev->port_cnt; i++) { ++ acm_log(1, "%s port %d\n", ibdev->name, i + 1); ++ ret = ibv_query_port(dev->device.verbs, i + 1, &port_attr); ++ if (ret) { ++ acm_log(0, "ERROR - ibv_query_port (%d)\n", ret); ++ continue; ++ } ++ if (port_attr.link_layer != IBV_LINK_LAYER_INFINIBAND) { ++ acm_log(1, "not an InfiniBand port\n"); ++ continue; ++ } ++ + acm_open_port(&dev->port[i], dev, i + 1); ++ opened_ib_port_cnt++; + } + +- list_add(&dev_list, &dev->entry); +- +- acm_log(1, "%s opened\n", ibdev->name); +- return; ++ if (opened_ib_port_cnt) { ++ list_add(&dev_list, &dev->entry); ++ acm_log(1, "%d InfiniBand %s opened for %s\n", ++ opened_ib_port_cnt, ++ opened_ib_port_cnt == 1 ? "port" : "ports", ++ ibdev->name); ++ return; ++ } + + err1: + ibv_close_device(verbs); +-- +2.20.1 + diff --git a/SOURCES/0101-Update-kernel-headers.patch b/SOURCES/0101-Update-kernel-headers.patch deleted file mode 100644 index 9ac096b..0000000 --- a/SOURCES/0101-Update-kernel-headers.patch +++ /dev/null @@ -1,211 +0,0 @@ -From 8779ea3cf3f1d80a29951b217f8c6a454f0a2c5a Mon Sep 17 00:00:00 2001 -From: Yishai Hadas -Date: Sun, 10 Feb 2019 10:43:12 +0200 -Subject: [PATCH rdma-core 1/2] Update kernel headers - -To commit 2c1619edef61 ("IB/cma: Define option to set ack timeout and -pack tos_set") - -Signed-off-by: Yishai Hadas ---- - kernel-headers/rdma/bnxt_re-abi.h | 11 ++++++ - kernel-headers/rdma/ib_user_verbs.h | 2 ++ - kernel-headers/rdma/rdma_netlink.h | 54 +++++++++++++++++++++-------- - kernel-headers/rdma/rdma_user_cm.h | 4 +++ - kernel-headers/rdma/rdma_user_rxe.h | 3 +- - 5 files changed, 58 insertions(+), 16 deletions(-) - -diff --git a/kernel-headers/rdma/bnxt_re-abi.h b/kernel-headers/rdma/bnxt_re-abi.h -index a7a6111e..dc52e3cf 100644 ---- a/kernel-headers/rdma/bnxt_re-abi.h -+++ b/kernel-headers/rdma/bnxt_re-abi.h -@@ -44,6 +44,14 @@ - - #define BNXT_RE_ABI_VERSION 1 - -+#define BNXT_RE_CHIP_ID0_CHIP_NUM_SFT 0x00 -+#define BNXT_RE_CHIP_ID0_CHIP_REV_SFT 0x10 -+#define BNXT_RE_CHIP_ID0_CHIP_MET_SFT 0x18 -+ -+enum { -+ BNXT_RE_UCNTX_CMASK_HAVE_CCTX = 0x1ULL -+}; -+ - struct bnxt_re_uctx_resp { - __u32 dev_id; - __u32 max_qp; -@@ -51,6 +59,9 @@ struct bnxt_re_uctx_resp { - __u32 cqe_sz; - __u32 max_cqd; - __u32 rsvd; -+ __aligned_u64 comp_mask; -+ __u32 chip_id0; -+ __u32 chip_id1; - }; - - /* -diff --git a/kernel-headers/rdma/ib_user_verbs.h b/kernel-headers/rdma/ib_user_verbs.h -index 480d9a60..0474c740 100644 ---- a/kernel-headers/rdma/ib_user_verbs.h -+++ b/kernel-headers/rdma/ib_user_verbs.h -@@ -270,6 +270,8 @@ struct ib_uverbs_ex_query_device_resp { - struct ib_uverbs_tm_caps tm_caps; - struct ib_uverbs_cq_moderation_caps cq_moderation_caps; - __aligned_u64 max_dm_size; -+ __u32 xrc_odp_caps; -+ __u32 reserved; - }; - - struct ib_uverbs_query_port { -diff --git a/kernel-headers/rdma/rdma_netlink.h b/kernel-headers/rdma/rdma_netlink.h -index 2e18b77a..3a9e681e 100644 ---- a/kernel-headers/rdma/rdma_netlink.h -+++ b/kernel-headers/rdma/rdma_netlink.h -@@ -5,8 +5,7 @@ - #include - - enum { -- RDMA_NL_RDMA_CM = 1, -- RDMA_NL_IWCM, -+ RDMA_NL_IWCM = 2, - RDMA_NL_RSVD, - RDMA_NL_LS, /* RDMA Local Services */ - RDMA_NL_NLDEV, /* RDMA device interface */ -@@ -14,8 +13,7 @@ enum { - }; - - enum { -- RDMA_NL_GROUP_CM = 1, -- RDMA_NL_GROUP_IWPM, -+ RDMA_NL_GROUP_IWPM = 2, - RDMA_NL_GROUP_LS, - RDMA_NL_NUM_GROUPS - }; -@@ -24,15 +22,17 @@ enum { - #define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1)) - #define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op) - --enum { -- RDMA_NL_RDMA_CM_ID_STATS = 0, -- RDMA_NL_RDMA_CM_NUM_OPS --}; -+/* The minimum version that the iwpm kernel supports */ -+#define IWPM_UABI_VERSION_MIN 3 - -+/* The latest version that the iwpm kernel supports */ -+#define IWPM_UABI_VERSION 4 -+ -+/* iwarp port mapper message flags */ - enum { -- RDMA_NL_RDMA_CM_ATTR_SRC_ADDR = 1, -- RDMA_NL_RDMA_CM_ATTR_DST_ADDR, -- RDMA_NL_RDMA_CM_NUM_ATTR, -+ -+ /* Do not map the port for this IWPM request */ -+ IWPM_FLAGS_NO_PORT_MAP = (1 << 0), - }; - - /* iwarp port mapper op-codes */ -@@ -45,6 +45,7 @@ enum { - RDMA_NL_IWPM_HANDLE_ERR, - RDMA_NL_IWPM_MAPINFO, - RDMA_NL_IWPM_MAPINFO_NUM, -+ RDMA_NL_IWPM_HELLO, - RDMA_NL_IWPM_NUM_OPS - }; - -@@ -83,20 +84,38 @@ enum { - IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0, - IWPM_NLA_MANAGE_MAPPING_SEQ, - IWPM_NLA_MANAGE_ADDR, -- IWPM_NLA_MANAGE_MAPPED_LOC_ADDR, -+ IWPM_NLA_MANAGE_FLAGS, -+ IWPM_NLA_MANAGE_MAPPING_MAX -+}; -+ -+enum { -+ IWPM_NLA_RMANAGE_MAPPING_UNSPEC = 0, -+ IWPM_NLA_RMANAGE_MAPPING_SEQ, -+ IWPM_NLA_RMANAGE_ADDR, -+ IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR, -+ /* The following maintains bisectability of rdma-core */ -+ IWPM_NLA_MANAGE_MAPPED_LOC_ADDR = IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR, - IWPM_NLA_RMANAGE_MAPPING_ERR, - IWPM_NLA_RMANAGE_MAPPING_MAX - }; - --#define IWPM_NLA_MANAGE_MAPPING_MAX 3 --#define IWPM_NLA_QUERY_MAPPING_MAX 4 - #define IWPM_NLA_MAPINFO_SEND_MAX 3 -+#define IWPM_NLA_REMOVE_MAPPING_MAX 3 - - enum { - IWPM_NLA_QUERY_MAPPING_UNSPEC = 0, - IWPM_NLA_QUERY_MAPPING_SEQ, - IWPM_NLA_QUERY_LOCAL_ADDR, - IWPM_NLA_QUERY_REMOTE_ADDR, -+ IWPM_NLA_QUERY_FLAGS, -+ IWPM_NLA_QUERY_MAPPING_MAX, -+}; -+ -+enum { -+ IWPM_NLA_RQUERY_MAPPING_UNSPEC = 0, -+ IWPM_NLA_RQUERY_MAPPING_SEQ, -+ IWPM_NLA_RQUERY_LOCAL_ADDR, -+ IWPM_NLA_RQUERY_REMOTE_ADDR, - IWPM_NLA_RQUERY_MAPPED_LOC_ADDR, - IWPM_NLA_RQUERY_MAPPED_REM_ADDR, - IWPM_NLA_RQUERY_MAPPING_ERR, -@@ -114,6 +133,7 @@ enum { - IWPM_NLA_MAPINFO_UNSPEC = 0, - IWPM_NLA_MAPINFO_LOCAL_ADDR, - IWPM_NLA_MAPINFO_MAPPED_ADDR, -+ IWPM_NLA_MAPINFO_FLAGS, - IWPM_NLA_MAPINFO_MAX - }; - -@@ -132,6 +152,12 @@ enum { - IWPM_NLA_ERR_MAX - }; - -+enum { -+ IWPM_NLA_HELLO_UNSPEC = 0, -+ IWPM_NLA_HELLO_ABI_VERSION, -+ IWPM_NLA_HELLO_MAX -+}; -+ - /* - * Local service operations: - * RESOLVE - The client requests the local service to resolve a path. -diff --git a/kernel-headers/rdma/rdma_user_cm.h b/kernel-headers/rdma/rdma_user_cm.h -index 0d1e78eb..e42940a2 100644 ---- a/kernel-headers/rdma/rdma_user_cm.h -+++ b/kernel-headers/rdma/rdma_user_cm.h -@@ -300,6 +300,10 @@ enum { - RDMA_OPTION_ID_TOS = 0, - RDMA_OPTION_ID_REUSEADDR = 1, - RDMA_OPTION_ID_AFONLY = 2, -+ RDMA_OPTION_ID_ACK_TIMEOUT = 3 -+}; -+ -+enum { - RDMA_OPTION_IB_PATH = 1 - }; - -diff --git a/kernel-headers/rdma/rdma_user_rxe.h b/kernel-headers/rdma/rdma_user_rxe.h -index 44ef6a3b..aae2e696 100644 ---- a/kernel-headers/rdma/rdma_user_rxe.h -+++ b/kernel-headers/rdma/rdma_user_rxe.h -@@ -58,8 +58,7 @@ struct rxe_global_route { - struct rxe_av { - __u8 port_num; - __u8 network_type; -- __u16 reserved1; -- __u32 reserved2; -+ __u8 dmac[6]; - struct rxe_global_route grh; - union { - struct sockaddr_in _sockaddr_in; --- -2.20.1 - diff --git a/SOURCES/0102-bnxt_re-lib-Enable-Broadcom-s-57500-RoCE-adapter.patch b/SOURCES/0102-bnxt_re-lib-Enable-Broadcom-s-57500-RoCE-adapter.patch deleted file mode 100644 index 40a6257..0000000 --- a/SOURCES/0102-bnxt_re-lib-Enable-Broadcom-s-57500-RoCE-adapter.patch +++ /dev/null @@ -1,287 +0,0 @@ -From 7089c4caf0e2ffa37d6a663b9fc7d05624841bf0 Mon Sep 17 00:00:00 2001 -From: Devesh Sharma -Date: Sun, 13 Jan 2019 14:36:13 -0500 -Subject: [PATCH rdma-core 2/2] bnxt_re/lib: Enable Broadcom's 57500 RoCE - adapter - -This is to add Broadcom's 57500 series of adapters support -to RoCE from libbnxt_re. Listing below the significant changes -done as part of the patch. - - - Added the pci-id of the basic gen-p5 chip. - - Adjust psn search memory allocation to suite new search - psn structure. - - Added chip context structure to select the appropriate - execution flow in data-path and control path. - - Fill psn search area as per new or older chip execution - flow. - - removed duplicate declaration of BNXT_RE_ABI_VERSION macro - -Signed-off-by: Devesh Sharma ---- - providers/bnxt_re/bnxt_re-abi.h | 10 +++++-- - providers/bnxt_re/main.c | 14 +++++++++ - providers/bnxt_re/main.h | 15 +++++++++- - providers/bnxt_re/verbs.c | 50 +++++++++++++++++++++++---------- - 4 files changed, 71 insertions(+), 18 deletions(-) - -diff --git a/providers/bnxt_re/bnxt_re-abi.h b/providers/bnxt_re/bnxt_re-abi.h -index 65d048d3..c6998e85 100644 ---- a/providers/bnxt_re/bnxt_re-abi.h -+++ b/providers/bnxt_re/bnxt_re-abi.h -@@ -43,8 +43,6 @@ - #include - #include - --#define BNXT_RE_ABI_VERSION 1 -- - #define BNXT_RE_FULL_FLAG_DELTA 0x80 - - DECLARE_DRV_CMD(ubnxt_re_pd, IB_USER_VERBS_CMD_ALLOC_PD, -@@ -246,6 +244,14 @@ struct bnxt_re_psns { - __le32 flg_npsn; - }; - -+struct bnxt_re_psns_ext { -+ __u32 opc_spsn; -+ __u32 flg_npsn; -+ __u16 st_slot_idx; -+ __u16 rsvd0; -+ __u32 rsvd1; -+}; -+ - struct bnxt_re_sge { - __le64 pa; - __le32 lkey; -diff --git a/providers/bnxt_re/main.c b/providers/bnxt_re/main.c -index 1cd4d880..d171748e 100644 ---- a/providers/bnxt_re/main.c -+++ b/providers/bnxt_re/main.c -@@ -74,6 +74,7 @@ static const struct verbs_match_ent cna_table[] = { - CNA(BROADCOM, 0x16EF), /* BCM57416 NPAR */ - CNA(BROADCOM, 0x16F0), /* BCM58730 */ - CNA(BROADCOM, 0x16F1), /* BCM57452 */ -+ CNA(BROADCOM, 0x1750), /* BCM57500 */ - CNA(BROADCOM, 0xD800), /* BCM880xx VF */ - CNA(BROADCOM, 0xD802), /* BCM58802 */ - CNA(BROADCOM, 0xD804), /* BCM8804 SR */ -@@ -108,6 +109,11 @@ static const struct verbs_context_ops bnxt_re_cntx_ops = { - .destroy_ah = bnxt_re_destroy_ah - }; - -+bool bnxt_re_is_chip_gen_p5(struct bnxt_re_chip_ctx *cctx) -+{ -+ return cctx->chip_num == CHIP_NUM_57500; -+} -+ - /* Context Init functions */ - static struct verbs_context *bnxt_re_alloc_context(struct ibv_device *vdev, - int cmd_fd, -@@ -133,6 +139,14 @@ static struct verbs_context *bnxt_re_alloc_context(struct ibv_device *vdev, - dev->pg_size = resp.pg_size; - dev->cqe_size = resp.cqe_sz; - dev->max_cq_depth = resp.max_cqd; -+ if (resp.comp_mask & BNXT_RE_UCNTX_CMASK_HAVE_CCTX) { -+ cntx->cctx.chip_num = resp.chip_id0 & 0xFFFF; -+ cntx->cctx.chip_rev = (resp.chip_id0 >> -+ BNXT_RE_CHIP_ID0_CHIP_REV_SFT) & 0xFF; -+ cntx->cctx.chip_metal = (resp.chip_id0 >> -+ BNXT_RE_CHIP_ID0_CHIP_MET_SFT) & -+ 0xFF; -+ } - pthread_spin_init(&cntx->fqlock, PTHREAD_PROCESS_PRIVATE); - /* mmap shared page. */ - cntx->shpg = mmap(NULL, dev->pg_size, PROT_READ | PROT_WRITE, -diff --git a/providers/bnxt_re/main.h b/providers/bnxt_re/main.h -index 0b5c749f..be573496 100644 ---- a/providers/bnxt_re/main.h -+++ b/providers/bnxt_re/main.h -@@ -54,7 +54,14 @@ - - #define DEV "bnxt_re : " - --#define BNXT_RE_UD_QP_HW_STALL 0x400000 -+#define BNXT_RE_UD_QP_HW_STALL 0x400000 -+ -+#define CHIP_NUM_57500 0x1750 -+struct bnxt_re_chip_ctx { -+ __u16 chip_num; -+ __u8 chip_rev; -+ __u8 chip_metal; -+}; - - struct bnxt_re_dpi { - __u32 dpindx; -@@ -81,6 +88,7 @@ struct bnxt_re_cq { - }; - - struct bnxt_re_wrid { -+ struct bnxt_re_psns_ext *psns_ext; - struct bnxt_re_psns *psns; - uint64_t wrid; - uint32_t bytes; -@@ -111,6 +119,7 @@ struct bnxt_re_srq { - - struct bnxt_re_qp { - struct ibv_qp ibvqp; -+ struct bnxt_re_chip_ctx *cctx; - struct bnxt_re_queue *sqq; - struct bnxt_re_wrid *swrid; - struct bnxt_re_queue *rqq; -@@ -155,6 +164,7 @@ struct bnxt_re_context { - struct verbs_context ibvctx; - uint32_t dev_id; - uint32_t max_qp; -+ struct bnxt_re_chip_ctx cctx; - uint32_t max_srq; - struct bnxt_re_dpi udpi; - void *shpg; -@@ -162,6 +172,9 @@ struct bnxt_re_context { - pthread_spinlock_t fqlock; - }; - -+/* Chip context related functions */ -+bool bnxt_re_is_chip_gen_p5(struct bnxt_re_chip_ctx *cctx); -+ - /* DB ring functions used internally*/ - void bnxt_re_ring_rq_db(struct bnxt_re_qp *qp); - void bnxt_re_ring_sq_db(struct bnxt_re_qp *qp); -diff --git a/providers/bnxt_re/verbs.c b/providers/bnxt_re/verbs.c -index 7786d247..bec382b3 100644 ---- a/providers/bnxt_re/verbs.c -+++ b/providers/bnxt_re/verbs.c -@@ -844,9 +844,11 @@ static void bnxt_re_free_queues(struct bnxt_re_qp *qp) - static int bnxt_re_alloc_queues(struct bnxt_re_qp *qp, - struct ibv_qp_init_attr *attr, - uint32_t pg_size) { -+ struct bnxt_re_psns_ext *psns_ext; - struct bnxt_re_queue *que; - struct bnxt_re_psns *psns; - uint32_t psn_depth; -+ uint32_t psn_size; - int ret, indx; - - que = qp->sqq; -@@ -857,11 +859,12 @@ static int bnxt_re_alloc_queues(struct bnxt_re_qp *qp, - que->diff = que->depth - attr->cap.max_send_wr; - - /* psn_depth extra entries of size que->stride */ -- psn_depth = (que->depth * sizeof(struct bnxt_re_psns)) / -- que->stride; -- if ((que->depth * sizeof(struct bnxt_re_psns)) % que->stride) -+ psn_size = bnxt_re_is_chip_gen_p5(qp->cctx) ? -+ sizeof(struct bnxt_re_psns_ext) : -+ sizeof(struct bnxt_re_psns); -+ psn_depth = (que->depth * psn_size) / que->stride; -+ if ((que->depth * psn_size) % que->stride) - psn_depth++; -- - que->depth += psn_depth; - /* PSN-search memory is allocated without checking for - * QP-Type. Kenrel driver do not map this memory if it -@@ -875,6 +878,7 @@ static int bnxt_re_alloc_queues(struct bnxt_re_qp *qp, - que->depth -= psn_depth; - /* start of spsn space sizeof(struct bnxt_re_psns) each. */ - psns = (que->va + que->stride * que->depth); -+ psns_ext = (struct bnxt_re_psns_ext *)psns; - pthread_spin_init(&que->qlock, PTHREAD_PROCESS_PRIVATE); - qp->swrid = calloc(que->depth, sizeof(struct bnxt_re_wrid)); - if (!qp->swrid) { -@@ -884,6 +888,13 @@ static int bnxt_re_alloc_queues(struct bnxt_re_qp *qp, - - for (indx = 0 ; indx < que->depth; indx++, psns++) - qp->swrid[indx].psns = psns; -+ if (bnxt_re_is_chip_gen_p5(qp->cctx)) { -+ for (indx = 0 ; indx < que->depth; indx++, psns_ext++) { -+ qp->swrid[indx].psns_ext = psns_ext; -+ qp->swrid[indx].psns = (struct bnxt_re_psns *)psns_ext; -+ } -+ } -+ - qp->cap.max_swr = que->depth; - - if (qp->rqq) { -@@ -931,6 +942,7 @@ struct ibv_qp *bnxt_re_create_qp(struct ibv_pd *ibvpd, - if (bnxt_re_alloc_queue_ptr(qp, attr)) - goto fail; - /* alloc queues */ -+ qp->cctx = &cntx->cctx; - if (bnxt_re_alloc_queues(qp, attr, dev->pg_size)) - goto failq; - /* Fill ibv_cmd */ -@@ -1094,26 +1106,36 @@ static int bnxt_re_build_sge(struct bnxt_re_sge *sge, struct ibv_sge *sg_list, - return length; - } - --static void bnxt_re_fill_psns(struct bnxt_re_qp *qp, struct bnxt_re_psns *psns, -+static void bnxt_re_fill_psns(struct bnxt_re_qp *qp, struct bnxt_re_wrid *wrid, - uint8_t opcode, uint32_t len) - { -- uint32_t pkt_cnt = 0, nxt_psn; -+ uint32_t opc_spsn = 0, flg_npsn = 0; -+ struct bnxt_re_psns_ext *psns_ext; -+ uint32_t pkt_cnt = 0, nxt_psn = 0; -+ struct bnxt_re_psns *psns; -+ -+ psns = wrid->psns; -+ psns_ext = wrid->psns_ext; - -- memset(psns, 0, sizeof(*psns)); - if (qp->qptyp == IBV_QPT_RC) { -- psns->opc_spsn = htole32(qp->sq_psn & BNXT_RE_PSNS_SPSN_MASK); -+ opc_spsn = qp->sq_psn & BNXT_RE_PSNS_SPSN_MASK; - pkt_cnt = (len / qp->mtu); - if (len % qp->mtu) - pkt_cnt++; - if (len == 0) - pkt_cnt = 1; - nxt_psn = ((qp->sq_psn + pkt_cnt) & BNXT_RE_PSNS_NPSN_MASK); -- psns->flg_npsn = htole32(nxt_psn); -+ flg_npsn = nxt_psn; - qp->sq_psn = nxt_psn; - } - opcode = bnxt_re_ibv_wr_to_wc_opcd(opcode); -- psns->opc_spsn |= htole32(((opcode & BNXT_RE_PSNS_OPCD_MASK) << -- BNXT_RE_PSNS_OPCD_SHIFT)); -+ opc_spsn |= (((uint32_t)opcode & BNXT_RE_PSNS_OPCD_MASK) << -+ BNXT_RE_PSNS_OPCD_SHIFT); -+ memset(psns, 0, sizeof(*psns)); -+ psns->opc_spsn = htole32(opc_spsn); -+ psns->flg_npsn = htole32(flg_npsn); -+ if (bnxt_re_is_chip_gen_p5(qp->cctx)) -+ psns_ext->st_slot_idx = 0; - } - - static void bnxt_re_fill_wrid(struct bnxt_re_wrid *wrid, struct ibv_send_wr *wr, -@@ -1235,10 +1257,9 @@ int bnxt_re_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - { - struct bnxt_re_qp *qp = to_bnxt_re_qp(ibvqp); - struct bnxt_re_queue *sq = qp->sqq; -- struct bnxt_re_bsqe *hdr; - struct bnxt_re_wrid *wrid; -- struct bnxt_re_psns *psns; - uint8_t is_inline = false; -+ struct bnxt_re_bsqe *hdr; - int ret = 0, bytes = 0; - bool ring_db = false; - void *sqe; -@@ -1268,7 +1289,6 @@ int bnxt_re_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - - sqe = (void *)(sq->va + (sq->tail * sq->stride)); - wrid = &qp->swrid[sq->tail]; -- psns = wrid->psns; - - memset(sqe, 0, bnxt_re_get_sqe_sz()); - hdr = sqe; -@@ -1318,7 +1338,7 @@ int bnxt_re_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - } - - bnxt_re_fill_wrid(wrid, wr, bytes, qp->cap.sqsig); -- bnxt_re_fill_psns(qp, psns, wr->opcode, bytes); -+ bnxt_re_fill_psns(qp, wrid, wr->opcode, bytes); - bnxt_re_incr_tail(sq); - qp->wqe_cnt++; - wr = wr->next; --- -2.20.1 - diff --git a/SOURCES/0103-mlx5-Add-new-device-IDs.patch b/SOURCES/0103-mlx5-Add-new-device-IDs.patch deleted file mode 100644 index a4a3470..0000000 --- a/SOURCES/0103-mlx5-Add-new-device-IDs.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 63080234b4a9f992c5d990fd8fac0fdec0f45638 Mon Sep 17 00:00:00 2001 -From: Yishai Hadas -Date: Sun, 10 Mar 2019 12:03:58 +0200 -Subject: [PATCH rdma-core] mlx5: Add new device IDs - -Add ConnectX-6 DX HCA ID. - -In addition, add "ConnectX family mlx5Gen Virtual Function" device ID. -Every new HCA VF will be identified with this device ID. - -Signed-off-by: Yishai Hadas ---- - providers/mlx5/mlx5.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/providers/mlx5/mlx5.c b/providers/mlx5/mlx5.c -index 08edfd85..1faae919 100644 ---- a/providers/mlx5/mlx5.c -+++ b/providers/mlx5/mlx5.c -@@ -74,6 +74,8 @@ static const struct verbs_match_ent hca_table[] = { - HCA(MELLANOX, 0x101a), /* ConnectX-5 Ex VF */ - HCA(MELLANOX, 0x101b), /* ConnectX-6 */ - HCA(MELLANOX, 0x101c), /* ConnectX-6 VF */ -+ HCA(MELLANOX, 0x101d), /* ConnectX-6 DX */ -+ HCA(MELLANOX, 0x101e), /* ConnectX family mlx5Gen Virtual Function */ - HCA(MELLANOX, 0xa2d2), /* BlueField integrated ConnectX-5 network controller */ - HCA(MELLANOX, 0xa2d3), /* BlueField integrated ConnectX-5 network controller VF */ - {} --- -2.20.1 - diff --git a/SOURCES/rdma-core-unclamp-ipoib-mtu.patch b/SOURCES/rdma-core-unclamp-ipoib-mtu.patch new file mode 100644 index 0000000..521aa84 --- /dev/null +++ b/SOURCES/rdma-core-unclamp-ipoib-mtu.patch @@ -0,0 +1,32 @@ +--- rdma-core-22.1.orig/redhat/rdma.ifup-ib 2019-08-27 10:15:27.537044097 -0400 ++++ rdma-core-22.1/redhat/rdma.ifup-ib 2019-08-27 10:14:42.453131658 -0400 +@@ -110,19 +110,25 @@ if [ -e /sys/class/net/${DEVICE}/mode ]; + # cycle, allowing people to change the mode without rebooting + if [ "${CONNECTED_MODE}" = yes ]; then + echo connected > /sys/class/net/${DEVICE}/mode +- # cap the MTU where we should based upon mode ++ # set default MTU based upon mode if none specified + [ -z "$MTU" ] && MTU=65520 +- [ "$MTU" -gt 65520 ] && MTU=65520 + else + echo datagram > /sys/class/net/${DEVICE}/mode +- # cap the MTU where we should based upon mode ++ # set default MTU based upon mode if none specified + [ -z "$MTU" ] && MTU=2044 +- [ "$MTU" -gt 4092 ] && MTU=4092 ++ fi ++ # cap the MTU to roughly the same as Ethernet's max MTU ++ if [ "$MTU" -gt 65520 ]; then ++ MTU=65520 ++ net_log $"Warning: capping device ${DEVICE} MTU to ${MTU}." + fi + fi + + if [ -n "${MTU}" ]; then + ip link set dev ${DEVICE} mtu ${MTU} ++ if [ "$?" ]; then ++ net_log $"Error setting device ${DEVICE} MTU to ${MTU}, using HW default." ++ fi + fi + + # slave device? diff --git a/SPECS/rdma-core.spec b/SPECS/rdma-core.spec index 0fdaf6f..7c76cfa 100644 --- a/SPECS/rdma-core.spec +++ b/SPECS/rdma-core.spec @@ -1,11 +1,8 @@ Name: rdma-core -Version: 22.1 -Release: 3%{?dist} +Version: 22.4 +Release: 1%{?dist} Summary: RDMA core userspace libraries and daemons -%ifnarch %{arm} -%define dma_coherent 1 -%endif # 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 @@ -13,8 +10,6 @@ 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 -# Diff between v22.1 and head of stable-v22 branch -Patch0: 0000-rdma-core-v22.1-to-stable-v22-update.patch # Red Hat patches Patch1: 0001-redhat-kernel-init-ocrdma-is-tech-preview-too.patch Patch2: 0002-redhat-kernel-init-libi40iw-no-longer-tech-preview.patch @@ -23,10 +18,15 @@ Patch4: 0004-Revert-redhat-remove-files-that-we-no-longer-use.patch Patch5: 0005-fix_mtu_limiting_for_ipoib.patch Patch6: 0006-srp_daemon-Remove-unsupported-systemd-configurations.patch Patch7: 0007-srp_daemon-srp_daemon.service-should-be-started-afte.patch -# Additional upstream patches from master branch -Patch101: 0101-Update-kernel-headers.patch -Patch102: 0102-bnxt_re-lib-Enable-Broadcom-s-57500-RoCE-adapter.patch -Patch103: 0103-mlx5-Add-new-device-IDs.patch +Patch8: rdma-core-unclamp-ipoib-mtu.patch +# Additional upstream patches from stable-vX/master branch +Patch101: 0001-srp_daemon-fix-a-double-free-segment-fault-for-ibsrp.patch +Patch102: 0002-cxgb4-free-appropriate-pointer-in-error-case.patch +Patch103: 0003-man-Fix-return-value-for-ibv_reg_dm_mr.patch +# Patches backported from master branch +Patch104: 0004-Update-kernel-headers.patch +Patch105: 0005-mlx5-Support-scatter-to-CQE-over-DCT-QP.patch +Patch106: 0006-ibacm-only-open-InfiniBand-port.patch # Do not build static libs by default. %define with_static %{?_with_static: 1} %{?!_with_static: 0} @@ -60,6 +60,8 @@ Obsoletes: libibcm < %{version}-%{release} # the ndd utility moved from infiniband-diags to rdma-core Conflicts: infiniband-diags <= 1.6.5 Requires: pciutils +# 32-bit arm is missing required arch-specific memory barriers, +ExcludeArch: %{arm} # Since we recommend developers use Ninja, so should packagers, for consistency. %define CMAKE_FLAGS %{nil} @@ -110,12 +112,10 @@ Provides: libhfi1-static = %{version}-%{release} Obsoletes: libhfi1-static < %{version}-%{release} Provides: libipathverbs-static = %{version}-%{release} Obsoletes: libipathverbs-static < %{version}-%{release} -%if 0%{?dma_coherent} Provides: libmlx4-static = %{version}-%{release} Obsoletes: libmlx4-static < %{version}-%{release} Provides: libmlx5-static = %{version}-%{release} Obsoletes: libmlx5-static < %{version}-%{release} -%endif Provides: libnes-static = %{version}-%{release} Obsoletes: libnes-static < %{version}-%{release} Provides: libocrdma-static = %{version}-%{release} @@ -145,14 +145,12 @@ Provides: libi40iw = %{version}-%{release} Obsoletes: libi40iw < %{version}-%{release} Provides: libipathverbs = %{version}-%{release} Obsoletes: libipathverbs < %{version}-%{release} -%if 0%{?dma_coherent} Provides: libmlx4 = %{version}-%{release} Obsoletes: libmlx4 < %{version}-%{release} %ifnarch s390 Provides: libmlx5 = %{version}-%{release} Obsoletes: libmlx5 < %{version}-%{release} %endif -%endif Provides: libmthca = %{version}-%{release} Obsoletes: libmthca < %{version}-%{release} Provides: libnes = %{version}-%{release} @@ -272,7 +270,6 @@ discover and use SCSI devices via the SCSI RDMA Protocol over InfiniBand. %prep %setup -%patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 @@ -280,9 +277,13 @@ discover and use SCSI devices via the SCSI RDMA Protocol over InfiniBand. %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 %patch101 -p1 %patch102 -p1 %patch103 -p1 +%patch104 -p1 +%patch105 -p1 +%patch106 -p1 %build @@ -333,22 +334,16 @@ mkdir -p %{buildroot}%{dracutlibdir}/modules.d/05rdma mkdir -p %{buildroot}%{sysmodprobedir} install -D -m0644 redhat/rdma.conf %{buildroot}/%{_sysconfdir}/rdma/rdma.conf install -D -m0644 redhat/rdma.sriov-vfs %{buildroot}/%{_sysconfdir}/rdma/sriov-vfs -%if 0%{?dma_coherent} install -D -m0644 redhat/rdma.mlx4.conf %{buildroot}/%{_sysconfdir}/rdma/mlx4.conf -%endif install -D -m0755 redhat/rdma.ifup-ib %{buildroot}/%{_sysconfdir}/sysconfig/network-scripts/ifup-ib install -D -m0755 redhat/rdma.ifdown-ib %{buildroot}/%{_sysconfdir}/sysconfig/network-scripts/ifdown-ib install -D -m0644 redhat/rdma.service %{buildroot}%{_unitdir}/rdma.service install -D -m0755 redhat/rdma.modules-setup.sh %{buildroot}%{dracutlibdir}/modules.d/05rdma/module-setup.sh install -D -m0644 redhat/rdma.udev-rules %{buildroot}%{_udevrulesdir}/98-rdma.rules -%if 0%{?dma_coherent} install -D -m0644 redhat/rdma.mlx4.sys.modprobe %{buildroot}%{sysmodprobedir}/libmlx4.conf -%endif install -D -m0755 redhat/rdma.kernel-init %{buildroot}%{_libexecdir}/rdma-init-kernel install -D -m0755 redhat/rdma.sriov-init %{buildroot}%{_libexecdir}/rdma-set-sriov-vf -%if 0%{?dma_coherent} install -D -m0755 redhat/rdma.mlx4-setup.sh %{buildroot}%{_libexecdir}/mlx4-setup.sh -%endif # ibacm bin/ib_acme -D . -O @@ -397,11 +392,9 @@ rm -rf %{buildroot}/%{_initrddir}/ %doc %{_docdir}/%{name}-%{version}/udev.md %config(noreplace) %{_sysconfdir}/rdma/* %config(noreplace) %{_sysconfdir}/udev/rules.d/* -%if 0%{?dma_coherent} %ifnarch s390 %config(noreplace) %{_sysconfdir}/modprobe.d/mlx4.conf %endif -%endif %config(noreplace) %{_sysconfdir}/modprobe.d/truescale.conf %{_sysconfdir}/sysconfig/network-scripts/* %{_unitdir}/rdma-hw.target @@ -410,14 +403,10 @@ rm -rf %{buildroot}/%{_initrddir}/ %dir %{dracutlibdir}/modules.d/05rdma %{dracutlibdir}/modules.d/05rdma/module-setup.sh %{_udevrulesdir}/* -%if 0%{?dma_coherent} %{sysmodprobedir}/libmlx4.conf -%endif %{_libexecdir}/rdma-init-kernel %{_libexecdir}/rdma-set-sriov-vf -%if 0%{?dma_coherent} %{_libexecdir}/mlx4-setup.sh -%endif %{_libexecdir}/truescale-serdes.cmds %{_sbindir}/rdma-ndd %{_unitdir}/rdma-ndd.service @@ -439,13 +428,11 @@ rm -rf %{buildroot}/%{_initrddir}/ %{_mandir}/man3/rdma* %{_mandir}/man3/umad* %{_mandir}/man3/*_to_ibv_rate.* -%if 0%{?dma_coherent} %ifnarch s390 %{_mandir}/man3/mlx4dv* %{_mandir}/man3/mlx5dv* %{_mandir}/man7/mlx5dv* %endif -%endif %{_mandir}/man7/rdma_cm.* %files -n libibverbs @@ -453,24 +440,20 @@ rm -rf %{buildroot}/%{_initrddir}/ %dir %{_libdir}/libibverbs %{_libdir}/libibverbs*.so.* %{_libdir}/libibverbs/*.so -%if 0%{?dma_coherent} %ifnarch s390 %{_libdir}/libmlx4.so.* %{_libdir}/libmlx5.so.* %endif -%endif %config(noreplace) %{_sysconfdir}/libibverbs.d/*.driver %doc %{_docdir}/%{name}-%{version}/libibverbs.md %doc %{_docdir}/%{name}-%{version}/rxe.md %doc %{_docdir}/%{name}-%{version}/tag_matching.md %{_bindir}/rxe_cfg %{_mandir}/man7/rxe* -%if 0%{?dma_coherent} %ifnarch s390 %{_mandir}/man7/mlx4dv* %{_mandir}/man7/mlx5dv* %endif -%endif %{_mandir}/man8/rxe* %files -n libibverbs-utils @@ -552,6 +535,18 @@ rm -rf %{buildroot}/%{_initrddir}/ %doc %{_docdir}/%{name}-%{version}/ibsrpdm.md %changelog +* Thu Nov 21 2019 Jarod Wilson 22.4-1 +- Update to v22.4 stable release +- Support mlx5 scatter to CQE over DCT QP +- Fix ibacm segfault on non-IB hardware +- Resolves: rhbz#1715489 +- Resolves: rhbz#1712296 + +* Tue Aug 27 2019 Jarod Wilson 22.3-1 +- Update to v22.3 stable release +- Unclamp IPoIP MTUs +- Resolves: rhbz#1647541 + * Thu May 30 2019 Jarod Wilson 22.1-3 - Actually apply ConnectX-6 DX device ID patch - Related: rhbz#1687426