import rdma-core-29.0-3.el8

This commit is contained in:
CentOS Sources 2020-11-03 06:49:15 -05:00 committed by Andrew Lukoshko
parent 6e3909bd72
commit ff70bdc9e7
26 changed files with 45249 additions and 128306 deletions

3
.gitignore vendored
View File

@ -1 +1,2 @@
SOURCES/rdma-core-26.0.tar.gz
SOURCES/rdma-core-29.0.tar.gz
SOURCES/rxe_cfg.8.gz

View File

@ -1 +1,2 @@
5842fbf5833d01a0c3cd0ee8eff7b78436d83024 SOURCES/rdma-core-26.0.tar.gz
e070a7cc5f473acea1f795eb860929feb47569b7 SOURCES/rdma-core-29.0.tar.gz
9187638355d9bee854989bbfc6c2956301fd52aa SOURCES/rxe_cfg.8.gz

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +0,0 @@
From bb3c76ae13473a3002d57bc29d154542ce172419 Mon Sep 17 00:00:00 2001
From: Naresh Kumar PBS <nareshkumar.pbs@broadcom.com>
Date: Tue, 26 Nov 2019 04:05:21 -0500
Subject: [PATCH 1/2] bnxt_re/lib: Add remaining pci ids for gen P5 devices
Making a change to add pci ids for VF and NPAR devices.
Signed-off-by: Naresh Kumar PBS <nareshkumar.pbs@broadcom.com>
Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
---
providers/bnxt_re/main.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/providers/bnxt_re/main.c b/providers/bnxt_re/main.c
index b1194db7..e290a07b 100644
--- a/providers/bnxt_re/main.c
+++ b/providers/bnxt_re/main.c
@@ -76,9 +76,15 @@ static const struct verbs_match_ent cna_table[] = {
CNA(BROADCOM, 0x16F0), /* BCM58730 */
CNA(BROADCOM, 0x16F1), /* BCM57452 */
CNA(BROADCOM, 0x1750), /* BCM57500 */
+ CNA(BROADCOM, 0x1751), /* BCM57504 */
+ CNA(BROADCOM, 0x1752), /* BCM57502 */
+ CNA(BROADCOM, 0x1803), /* BCM57508 NPAR */
+ CNA(BROADCOM, 0x1804), /* BCM57504 NPAR */
+ CNA(BROADCOM, 0x1805), /* BCM57502 NPAR */
+ CNA(BROADCOM, 0x1807), /* BCM5750x VF */
CNA(BROADCOM, 0xD800), /* BCM880xx VF */
CNA(BROADCOM, 0xD802), /* BCM58802 */
- CNA(BROADCOM, 0xD804), /* BCM8804 SR */
+ CNA(BROADCOM, 0xD804), /* BCM8804 SR */
{}
};
--
2.21.0

View File

@ -1,99 +0,0 @@
From 2f6e9cb2087508d29bf525f652136ea23a007bc6 Mon Sep 17 00:00:00 2001
From: Honggang Li <honli@redhat.com>
Date: Fri, 7 Feb 2020 10:25:31 +0800
Subject: [PATCH] ibacm: Do not open non InfiniBand device
For dual port HCA, which has an InfiniBand port and an Ethernet port,
only open InfiniBand port will introduce segment fault issues.
Because the Ethernet port did not open yet, segment fault when active
the Ethernet port. The second segment fault issue happens when there
is asyn event on the Ethernet port.
We should skip pure iWARP or RoCE devices, but not device which has at
least one InfiniBand port.
Fixes: e9ffc0b3b940 ("ibacm: only open InfiniBand port")
Signed-off-by: Honggang Li <honli@redhat.com>
---
ibacm/src/acm.c | 47 ++++++++++++++++++++++++++---------------------
1 file changed, 26 insertions(+), 21 deletions(-)
diff --git a/ibacm/src/acm.c b/ibacm/src/acm.c
index ad313075c7bb..283620338c9d 100644
--- a/ibacm/src/acm.c
+++ b/ibacm/src/acm.c
@@ -2604,7 +2604,7 @@ static void acm_open_dev(struct ibv_device *ibdev)
struct ibv_context *verbs;
size_t size;
int i, ret;
- unsigned int opened_ib_port_cnt = 0;
+ bool has_ib_port = false;
acm_log(1, "%s\n", ibdev->name);
verbs = ibv_open_device(ibdev);
@@ -2619,6 +2619,27 @@ static void acm_open_dev(struct ibv_device *ibdev)
goto err1;
}
+ for (i = 0; i < attr.phys_port_cnt; i++) {
+ ret = ibv_query_port(verbs, i + 1, &port_attr);
+ if (ret) {
+ acm_log(0, "ERROR - ibv_query_port (%s, %d) return (%d)\n",
+ ibdev->name, i + 1, ret);
+ continue;
+ }
+
+ if (port_attr.link_layer == IBV_LINK_LAYER_INFINIBAND) {
+ acm_log(1, "%s port %d is an InfiniBand port\n", ibdev->name, i + 1);
+ has_ib_port = true;
+ } else {
+ acm_log(1, "%s port %d is not an InfiniBand port\n", ibdev->name, i + 1);
+ }
+ }
+
+ if (!has_ib_port) {
+ acm_log(1, "%s does not support InfiniBand.\n", ibdev->name);
+ goto err1;
+ }
+
size = sizeof(*dev) + sizeof(struct acmc_port) * attr.phys_port_cnt;
dev = (struct acmc_device *) calloc(1, size);
if (!dev)
@@ -2630,29 +2651,13 @@ 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++;
}
- 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;
- }
+ list_add(&dev_list, &dev->entry);
+
+ acm_log(1, "%s opened\n", ibdev->name);
+ return;
err1:
ibv_close_device(verbs);
--
2.24.1

View File

@ -1,60 +0,0 @@
From 2d7c483d8a855e01e7bf2d945ab8720a10262bab Mon Sep 17 00:00:00 2001
From: Luke Starrett <luke.starrett@broadcom.com>
Date: Tue, 26 Nov 2019 04:11:28 -0500
Subject: [PATCH 2/2] bnxt_re/lib: Recognize additional 5750x device ID's
BCM5750x family includes 57504 and 57502. Until recently the chip_num
register always conveyed 0x1750 (57508). Recent devices properly
reflect the SKU in the chip_num register. Update Phase5 checks to
reflect this.
Signed-off-by: Luke Starrett <luke.starrett@broadcom.com>
Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
---
providers/bnxt_re/main.c | 6 ++++--
providers/bnxt_re/main.h | 5 ++++-
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/providers/bnxt_re/main.c b/providers/bnxt_re/main.c
index e290a07b..803eff79 100644
--- a/providers/bnxt_re/main.c
+++ b/providers/bnxt_re/main.c
@@ -75,7 +75,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, 0x1750), /* BCM57508 */
CNA(BROADCOM, 0x1751), /* BCM57504 */
CNA(BROADCOM, 0x1752), /* BCM57502 */
CNA(BROADCOM, 0x1803), /* BCM57508 NPAR */
@@ -118,7 +118,9 @@ static const struct verbs_context_ops bnxt_re_cntx_ops = {
bool bnxt_re_is_chip_gen_p5(struct bnxt_re_chip_ctx *cctx)
{
- return cctx->chip_num == CHIP_NUM_57500;
+ return (cctx->chip_num == CHIP_NUM_57508 ||
+ cctx->chip_num == CHIP_NUM_57504 ||
+ cctx->chip_num == CHIP_NUM_57502);
}
/* Context Init functions */
diff --git a/providers/bnxt_re/main.h b/providers/bnxt_re/main.h
index be573496..368297e6 100644
--- a/providers/bnxt_re/main.h
+++ b/providers/bnxt_re/main.h
@@ -56,7 +56,10 @@
#define BNXT_RE_UD_QP_HW_STALL 0x400000
-#define CHIP_NUM_57500 0x1750
+#define CHIP_NUM_57508 0x1750
+#define CHIP_NUM_57504 0x1751
+#define CHIP_NUM_57502 0x1752
+
struct bnxt_re_chip_ctx {
__u16 chip_num;
__u8 chip_rev;
--
2.21.0

View File

@ -1,32 +0,0 @@
From 2e12d7ebf4a578d4b21b4432debf532503907aa5 Mon Sep 17 00:00:00 2001
From: Jason Gunthorpe <jgg@mellanox.com>
Date: Tue, 22 Oct 2019 11:04:29 -0300
Subject: [PATCH rdma-core 02/13] build: Do not enable -Wredundant-decls twice
[ Upstream commit 72918e16727c626717d327cc422654f2d211090d ]
It is already enabled later in cmake using a work around test for old
distros. Enabling it here breaks the work around.
Fixes: 819be5fb5469 ("build: Enable more warnings")
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
CMakeLists.txt | 1 -
1 file changed, 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fc17ef36..59ffdf83 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -216,7 +216,6 @@ RDMA_AddOptCFlag(CMAKE_C_FLAGS HAVE_C_WWRITE_STRINGS "-Wwrite-strings")
RDMA_AddOptCFlag(CMAKE_C_FLAGS HAVE_C_WFORMAT_2 "-Wformat=2")
RDMA_AddOptCFlag(CMAKE_C_FLAGS HAVE_C_WCAST_FUNCTION "-Wcast-function-type")
RDMA_AddOptCFlag(CMAKE_C_FLAGS HAVE_C_WFORMAT_NONLITERAL "-Wformat-nonliteral")
-RDMA_AddOptCFlag(CMAKE_C_FLAGS HAVE_C_WREDUNDANT_DECLS "-Wredundant-decls")
RDMA_AddOptCFlag(CMAKE_C_FLAGS HAVE_C_WDATE_TIME "-Wdate-time")
RDMA_AddOptCFlag(CMAKE_C_FLAGS HAVE_C_WNESTED_EXTERNS "-Wnested-externs")
--
2.20.1

View File

@ -0,0 +1,176 @@
From 0290582355c4c7f1a30c80b206f62d7ddaa2de05 Mon Sep 17 00:00:00 2001
From: Erez Shitrit <erezsh@mellanox.com>
Date: Thu, 20 Feb 2020 15:27:30 +0200
Subject: [PATCH 2/8] mlx5: Allocate accurate aligned DM memory size
[ Upstream commit 96bd5476194106deb4c9edaf405e92646623465a ]
Allocate the exact memory size and only when failed to allocate an aligned
memory size fallback to allocate double size of DM memory.
Fixes: 6235899cdf7a ("mlx5: ICM pool memory allocator")
Signed-off-by: Erez Shitrit <erezsh@mellanox.com>
Reviewed-by: Alex Vesker <valex@mellanox.com>
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
providers/mlx5/dr_icm_pool.c | 103 ++++++++++++++++++++++-------------
1 file changed, 64 insertions(+), 39 deletions(-)
diff --git a/providers/mlx5/dr_icm_pool.c b/providers/mlx5/dr_icm_pool.c
index 1e2853959b37..469e52552ccd 100644
--- a/providers/mlx5/dr_icm_pool.c
+++ b/providers/mlx5/dr_icm_pool.c
@@ -89,16 +89,72 @@ struct dr_icm_mr {
struct list_node mr_list;
};
-static struct dr_icm_mr *
-dr_icm_pool_mr_create(struct dr_icm_pool *pool,
- enum mlx5_ib_uapi_dm_type dm_type,
- size_t align_base)
+static int
+dr_icm_allocate_aligned_dm(struct dr_icm_pool *pool,
+ struct dr_icm_mr *icm_mr,
+ struct ibv_alloc_dm_attr *dm_attr)
{
struct mlx5dv_alloc_dm_attr mlx5_dm_attr = {};
+ size_t log_align_base = 0;
+ bool fallback = false;
+ struct mlx5_dm *dm;
+ size_t size;
+
+ /* create dm/mr for this pool */
+ size = dr_icm_pool_chunk_size_to_byte(pool->max_log_chunk_sz,
+ pool->icm_type);
+
+ if (pool->icm_type == DR_ICM_TYPE_STE) {
+ mlx5_dm_attr.type = MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM;
+ /* Align base is the biggest chunk size */
+ log_align_base = ilog32(size - 1);
+ } else if (pool->icm_type == DR_ICM_TYPE_MODIFY_ACTION) {
+ mlx5_dm_attr.type = MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM;
+ /* Align base is 64B */
+ log_align_base = ilog32(DR_ICM_MODIFY_HDR_ALIGN_BASE - 1);
+ }
+
+ dm_attr->length = size;
+
+alloc_dm:
+ icm_mr->dm = mlx5dv_alloc_dm(pool->dmn->ctx, dm_attr, &mlx5_dm_attr);
+ if (!icm_mr->dm) {
+ dr_dbg(pool->dmn, "Failed allocating DM\n");
+ return errno;
+ }
+
+ dm = to_mdm(icm_mr->dm);
+ icm_mr->icm_start_addr = dm->remote_va;
+
+ if (icm_mr->icm_start_addr & ((1UL << log_align_base) - 1)) {
+ uint64_t align_base;
+ uint64_t align_diff;
+
+ /* Fallback to previous implementation, ask for double size */
+ dr_dbg(pool->dmn, "Got not aligned memory: %zu last_try: %d\n",
+ log_align_base, fallback);
+ if (fallback) {
+ align_base = 1UL << log_align_base;
+ align_diff = icm_mr->icm_start_addr % align_base;
+ icm_mr->used_length = align_base - align_diff;
+ return 0;
+ }
+
+ mlx5_free_dm(icm_mr->dm);
+ /* retry to allocate, now double the size */
+ dm_attr->length = size * 2;
+ fallback = true;
+ goto alloc_dm;
+ }
+
+ return 0;
+}
+
+static struct dr_icm_mr *
+dr_icm_pool_mr_create(struct dr_icm_pool *pool)
+{
struct ibv_alloc_dm_attr dm_attr = {};
struct dr_icm_mr *icm_mr;
- struct mlx5_dm *dm;
- size_t align_diff;
icm_mr = calloc(1, sizeof(struct dr_icm_mr));
if (!icm_mr) {
@@ -106,20 +162,8 @@ dr_icm_pool_mr_create(struct dr_icm_pool *pool,
return NULL;
}
- icm_mr->pool = pool;
- list_node_init(&icm_mr->mr_list);
-
- mlx5_dm_attr.type = dm_type;
-
- /* 2^log_biggest_table * entry-size * double-for-alignment */
- dm_attr.length = dr_icm_pool_chunk_size_to_byte(pool->max_log_chunk_sz,
- pool->icm_type) * 2;
-
- icm_mr->dm = mlx5dv_alloc_dm(pool->dmn->ctx, &dm_attr, &mlx5_dm_attr);
- if (!icm_mr->dm) {
- dr_dbg(pool->dmn, "Failed allocating DM\n");
+ if (dr_icm_allocate_aligned_dm(pool, icm_mr, &dm_attr))
goto free_icm_mr;
- }
/* Register device memory */
icm_mr->mr = ibv_reg_dm_mr(pool->dmn->pd, icm_mr->dm, 0,
@@ -133,13 +177,6 @@ dr_icm_pool_mr_create(struct dr_icm_pool *pool,
goto free_dm;
}
- dm = to_mdm(icm_mr->dm);
- icm_mr->icm_start_addr = dm->remote_va;
-
- align_diff = icm_mr->icm_start_addr % align_base;
- if (align_diff)
- icm_mr->used_length = align_base - align_diff;
-
list_add_tail(&pool->icm_mr_list, &icm_mr->mr_list);
return icm_mr;
@@ -199,33 +236,21 @@ static int dr_icm_chunks_create(struct dr_icm_bucket *bucket)
{
size_t mr_free_size, mr_req_size, mr_row_size;
struct dr_icm_pool *pool = bucket->pool;
- enum mlx5_ib_uapi_dm_type dm_type;
struct dr_icm_chunk *chunk;
struct dr_icm_mr *icm_mr;
- size_t align_base;
int i;
mr_req_size = bucket->num_of_entries * bucket->entry_size;
mr_row_size = dr_icm_pool_chunk_size_to_byte(pool->max_log_chunk_sz,
pool->icm_type);
- if (pool->icm_type == DR_ICM_TYPE_STE) {
- dm_type = MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM;
- /* Align base is the biggest chunk size / row size */
- align_base = mr_row_size;
- } else {
- dm_type = MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM;
- /* Align base is 64B */
- align_base = DR_ICM_MODIFY_HDR_ALIGN_BASE;
- }
-
pthread_mutex_lock(&pool->mr_mutex);
icm_mr = list_tail(&pool->icm_mr_list, struct dr_icm_mr, mr_list);
if (icm_mr)
mr_free_size = icm_mr->mr->length - icm_mr->used_length;
if (!icm_mr || mr_free_size < mr_row_size) {
- icm_mr = dr_icm_pool_mr_create(pool, dm_type, align_base);
+ icm_mr = dr_icm_pool_mr_create(pool);
if (!icm_mr)
goto out_err;
}
--
2.25.4

View File

@ -1,34 +0,0 @@
From 382253d87dab98a7d082cd91e40eb59c8b70077b Mon Sep 17 00:00:00 2001
From: Noa Osherovich <noaos@mellanox.com>
Date: Mon, 28 Oct 2019 15:58:12 +0200
Subject: [PATCH rdma-core 03/13] man: Fix wrong field in ibv_wr_post's man
page
[ Upstream commit 5850789bb89df8f418d99b5dfb7f18bc3dd6cf58 ]
The example in the man page refers to a non-existing field.
Update to the correct field name.
Fixes: 58ef962809865 ('verbs: Introduce a new post send API')
Signed-off-by: Noa Osherovich <noaos@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
libibverbs/man/ibv_wr_post.3.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libibverbs/man/ibv_wr_post.3.md b/libibverbs/man/ibv_wr_post.3.md
index 4d5f80d6..ab7fc5f5 100644
--- a/libibverbs/man/ibv_wr_post.3.md
+++ b/libibverbs/man/ibv_wr_post.3.md
@@ -315,7 +315,7 @@ ibv_wr_set_sge(qpx, lkey, local_addr_1, length_1);
/* create 2nd WRITE_WITH_IMM WR entry */
qpx->wr_id = my_wr_id_2;
-qpx->send_flags = IBV_SEND_SIGNALED;
+qpx->wr_flags = IBV_SEND_SIGNALED;
ibv_wr_rdma_write_imm(qpx, rkey, remote_addr_2, htonl(0x1234));
ibv_set_wr_sge(qpx, lkey, local_addr_2, length_2);
--
2.20.1

View File

@ -0,0 +1,32 @@
From 27fd326938dbedc1f254caeb8cd087117e1f7cd7 Mon Sep 17 00:00:00 2001
From: Jason Gunthorpe <jgg@mellanox.com>
Date: Tue, 5 May 2020 20:16:14 -0300
Subject: [PATCH 4/8] buildlib: Fix a warning from newer pythons
[ Upstream commit 7ba12afad433c1ee29877fc51662a203935e6c78 ]
The % is typod into the string in check-build
Fixes: 7cff8245374c ("Have travis check shared library filenames")
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
buildlib/check-build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/buildlib/check-build b/buildlib/check-build
index ab8524e5b98f..4e52d0d4785a 100755
--- a/buildlib/check-build
+++ b/buildlib/check-build
@@ -84,7 +84,7 @@ def get_symbol_vers(fn,exported=True):
def check_lib_symver(args,fn):
g = re.match(r"lib([^.]+)\.so\.(\d+)\.(\d+)\.(.*)",fn);
if g.group(4) != args.PACKAGE_VERSION:
- raise ValueError("Shared Library filename %r does not have the package version %r (%r)%"(
+ raise ValueError("Shared Library filename %r does not have the package version %r (%r)"%(
fn,args.PACKAGE_VERSION,g.groups()));
# umad/etc used the wrong symbol version name when they moved to soname 3.0
--
2.25.4

View File

@ -1,85 +0,0 @@
From 252e5a0f63663da5128fe714a1e9ea8a35995696 Mon Sep 17 00:00:00 2001
From: Maxim Chicherin <maximc@mellanox.com>
Date: Mon, 19 Aug 2019 11:11:12 +0300
Subject: [PATCH rdma-core 04/13] pyverbs: Fix WC creation process
[ Upstream commit e83c7ff811544302ca3ecbcec23df0bb5b68d23f ]
In WC constructor, parameters assignment was incorrect and values
were not stored properly.
In addition, imm_data attribute was not initiated. imm_data represents
immediate data in network byte order if wc_flags & IBV_WC_WITH_IMM or
stores the invalidated rkey if wc_flags & IBV_WC_WITH_INV.
Fixes: 32165065ffbe ("pyverbs: Introducing completions related classes")
Signed-off-by: Maxim Chicherin <maximc@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
pyverbs/cq.pyx | 33 +++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)
mode change 100644 => 100755 pyverbs/cq.pyx
diff --git a/pyverbs/cq.pyx b/pyverbs/cq.pyx
old mode 100644
new mode 100755
index dc09924e..3ac5f704
--- a/pyverbs/cq.pyx
+++ b/pyverbs/cq.pyx
@@ -366,18 +366,19 @@ cdef class WC(PyverbsObject):
def __cinit__(self, wr_id=0, status=0, opcode=0, vendor_err=0, byte_len=0,
qp_num=0, src_qp=0, imm_data=0, wc_flags=0, pkey_index=0,
slid=0, sl=0, dlid_path_bits=0):
- self.wr_id = wr_id
- self.status = status
- self.opcode = opcode
- self.vendor_err = vendor_err
- self.byte_len = byte_len
- self.qp_num = qp_num
- self.src_qp = src_qp
- self.wc_flags = wc_flags
- self.pkey_index = pkey_index
- self.slid = slid
- self.sl = sl
- self.dlid_path_bits = dlid_path_bits
+ self.wc.wr_id = wr_id
+ self.wc.status = status
+ self.wc.opcode = opcode
+ self.wc.vendor_err = vendor_err
+ self.wc.byte_len = byte_len
+ self.wc.qp_num = qp_num
+ self.wc.src_qp = src_qp
+ self.wc.wc_flags = wc_flags
+ self.wc.pkey_index = pkey_index
+ self.wc.slid = slid
+ self.wc.imm_data = imm_data
+ self.wc.sl = sl
+ self.wc.dlid_path_bits = dlid_path_bits
@property
def wr_id(self):
@@ -456,6 +457,13 @@ cdef class WC(PyverbsObject):
def sl(self, val):
self.wc.sl = val
+ @property
+ def imm_data(self):
+ return self.wc.imm_data
+ @imm_data.setter
+ def imm_data(self, val):
+ self.wc.imm_data = val
+
@property
def dlid_path_bits(self):
return self.wc.dlid_path_bits
@@ -476,6 +484,7 @@ cdef class WC(PyverbsObject):
print_format.format('pkey index', self.pkey_index) +\
print_format.format('slid', self.slid) +\
print_format.format('sl', self.sl) +\
+ print_format.format('imm_data', self.imm_data) +\
print_format.format('dlid path bits', self.dlid_path_bits)
--
2.20.1

View File

@ -0,0 +1,35 @@
From 6e1a61ab829ba893858a50e799fcdbcd95169f35 Mon Sep 17 00:00:00 2001
From: Leon Romanovsky <leonro@mellanox.com>
Date: Wed, 22 Apr 2020 15:43:22 +0300
Subject: [PATCH 5/8] libibverbs: Fix description of ibv_get_device_guid man
page
[ Upstream commit 4ca5cafd29f619233b8deb0297cef0024fcd6e90 ]
There is a copy/paste error in the description of
ibv_get_device_guid(), fix it.
Fixes: 7aca81e64aa9 ("verbs: Switch simpler man pages over to markdown format")
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
libibverbs/man/ibv_get_device_guid.3.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libibverbs/man/ibv_get_device_guid.3.md b/libibverbs/man/ibv_get_device_guid.3.md
index 683900f974ca..6dc96001d0af 100644
--- a/libibverbs/man/ibv_get_device_guid.3.md
+++ b/libibverbs/man/ibv_get_device_guid.3.md
@@ -22,7 +22,7 @@ uint64_t ibv_get_device_guid(struct ibv_device *device);
# DESCRIPTION
-**ibv_get_device_name()** returns the Global Unique IDentifier (GUID) of the
+**ibv_get_device_guid()** returns the Global Unique IDentifier (GUID) of the
RDMA device *device*.
# RETURN VALUE
--
2.25.4

View File

@ -1,87 +0,0 @@
From 8720f4f288b12b8c89c6e237560986334c0949fa Mon Sep 17 00:00:00 2001
From: Maxim Chicherin <maximc@mellanox.com>
Date: Mon, 19 Aug 2019 13:59:56 +0300
Subject: [PATCH rdma-core 05/13] pyverbs: Fix CQ and PD assignment in QPAttr
[ Upstream commit d2c24c0d6514678cc8d56f8f2e28fcd6c2e68bbd ]
Fixed CQs assignment in QPInitAttr, QPInitAttrEx and QP objects:
Receive cq parameter was assigned to send_cq attribute in InitAttr
objects, and in QP rcq and scq attributes was not initialized properly.
Fixed PD assignment in QPInitAttrEx object:
In QPInitAttrEx pd pointer was not initialized with PD.pd pointer.
Fixes: 6d97a4af97b8 ("pyverbs: Avoid casting pointers to object type")
Signed-off-by: Maxim Chicherin <maximc@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
pyverbs/qp.pyx | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
mode change 100644 => 100755 pyverbs/qp.pyx
diff --git a/pyverbs/qp.pyx b/pyverbs/qp.pyx
old mode 100644
new mode 100755
index 576c0135..60973ca4
--- a/pyverbs/qp.pyx
+++ b/pyverbs/qp.pyx
@@ -104,9 +104,9 @@ cdef class QPInitAttr(PyverbsObject):
self.attr.qp_context = <void*>qp_context
if scq is not None:
if type(scq) is CQ:
- self.attr.send_cq = (<CQ>rcq).cq
+ self.attr.send_cq = (<CQ>scq).cq
elif type(scq) is CQEX:
- self.attr.send_cq = (<CQEX>rcq).ibv_cq
+ self.attr.send_cq = (<CQEX>scq).ibv_cq
else:
raise PyverbsUserError('Expected CQ/CQEX, got {t}'.\
format(t=type(scq)))
@@ -221,9 +221,9 @@ cdef class QPInitAttrEx(PyverbsObject):
_copy_caps(cap, self)
if scq is not None:
if type(scq) is CQ:
- self.attr.send_cq = (<CQ>rcq).cq
+ self.attr.send_cq = (<CQ>scq).cq
elif type(scq) is CQEX:
- self.attr.send_cq = (<CQEX>rcq).ibv_cq
+ self.attr.send_cq = (<CQEX>scq).ibv_cq
else:
raise PyverbsUserError('Expected CQ/CQEX, got {t}'.\
format(t=type(scq)))
@@ -251,7 +251,7 @@ cdef class QPInitAttrEx(PyverbsObject):
self.attr.comp_mask = comp_mask
if pd is not None:
self._pd = pd
- self.attr.pd = <v.ibv_pd*>pd.pd
+ self.attr.pd = pd.pd
self.attr.create_flags = create_flags
self.attr.max_tso_header = max_tso_header
self.attr.source_qpn = source_qpn
@@ -815,18 +815,20 @@ cdef class QP(PyverbsCM):
if type(init_attr.send_cq) == CQ:
cq = <CQ>init_attr.send_cq
cq.add_ref(self)
+ self.scq = cq
else:
cqex = <CQEX>init_attr.send_cq
cqex.add_ref(self)
- self.scq = cq
+ self.scq = cqex
if init_attr.send_cq != init_attr.recv_cq and init_attr.recv_cq is not None:
if type(init_attr.recv_cq) == CQ:
cq = <CQ>init_attr.recv_cq
cq.add_ref(self)
+ self.rcq = cq
else:
cqex = <CQEX>init_attr.recv_cq
cqex.add_ref(self)
- self.rcq = cq
+ self.rcq = cqex
def _create_qp(self, PD pd, QPInitAttr attr):
self.qp = v.ibv_create_qp(pd.pd, &attr.attr)
--
2.20.1

View File

@ -0,0 +1,31 @@
From 24eb020845273acb301b69779921284475303d3a Mon Sep 17 00:00:00 2001
From: Yishai Hadas <yishaih@mellanox.com>
Date: Sun, 19 Apr 2020 14:06:15 +0300
Subject: [PATCH 6/8] verbs: Fix ibv_create_wq() to set wq_context
[ Upstream commit 130dc94863e754402bb79d52ef89a72a94041def ]
Fix ibv_create_wq() to set wq_context upon a successful creation.
Fixes: 2864904f82bf ("Introduce Work Queue object and its verbs")
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
libibverbs/verbs.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/libibverbs/verbs.h b/libibverbs/verbs.h
index 288985d54975..5e256b4dc442 100644
--- a/libibverbs/verbs.h
+++ b/libibverbs/verbs.h
@@ -3073,6 +3073,7 @@ static inline struct ibv_wq *ibv_create_wq(struct ibv_context *context,
wq = vctx->create_wq(context, wq_init_attr);
if (wq) {
+ wq->wq_context = wq_init_attr->wq_context;
wq->events_completed = 0;
pthread_mutex_init(&wq->mutex, NULL);
pthread_cond_init(&wq->cond, NULL);
--
2.25.4

View File

@ -1,37 +0,0 @@
From 5639fce1322dd8ae1398f8a7f530197484fc1f9e Mon Sep 17 00:00:00 2001
From: Shay Drory <shayd@mellanox.com>
Date: Mon, 7 Oct 2019 12:09:05 +0300
Subject: [PATCH rdma-core 06/13] verbs: Set missing errno in ibv_cmd_reg_mr
[ Upstream commit f9e127a4bffa09ee72fc0ce92228296a4d1c1588 ]
Set missing errno in ibv_cmd_reg_mr() when implicit MR is used.
Fixes: d4021e743fda7 ("verbs: Fix implicit ODP MR support for 32 bit
systems")
Signed-off-by: Shay Drory <shayd@mellanox.com>
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
libibverbs/cmd.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/libibverbs/cmd.c b/libibverbs/cmd.c
index 3936e69b..26eaa479 100644
--- a/libibverbs/cmd.c
+++ b/libibverbs/cmd.c
@@ -340,8 +340,10 @@ int ibv_cmd_reg_mr(struct ibv_pd *pd, void *addr, size_t length,
* In that case set the value in the command to what kernel expects.
*/
if (access & IBV_ACCESS_ON_DEMAND) {
- if (length == SIZE_MAX && addr)
+ if (length == SIZE_MAX && addr) {
+ errno = EINVAL;
return EINVAL;
+ }
if (length == SIZE_MAX)
cmd->length = UINT64_MAX;
}
--
2.20.1

View File

@ -1,47 +0,0 @@
From 981c7553f55c8200e00e845224b283059dc07c92 Mon Sep 17 00:00:00 2001
From: Alex Vesker <valex@mellanox.com>
Date: Sun, 6 Oct 2019 11:22:37 +0300
Subject: [PATCH rdma-core 07/13] mlx5: Allow insertion of duplicate rules
using DR API
[ Upstream commit b7c0d4d4611ac14f18024a6388d75f672aa7457a ]
Duplicate rules were not allowed to be configured with SW steering,
unlike when working over root, fix to allow that.
This functionality is useful for replacing rules without dropping
packets.
Fixes: a91e8c2bbedf ('mlx5: Expose steering rule functionality')
Signed-off-by: Alex Vesker <valex@mellanox.com>
Reviewed-by: Erez Shitrit <erezsh@mellanox.com>
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
providers/mlx5/dr_rule.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/providers/mlx5/dr_rule.c b/providers/mlx5/dr_rule.c
index 1b873744..1e2d1813 100644
--- a/providers/mlx5/dr_rule.c
+++ b/providers/mlx5/dr_rule.c
@@ -815,12 +815,10 @@ again:
* it means that all the previous stes are the same,
* if so, this rule is duplicated.
*/
- if (dr_ste_is_last_in_rule(nic_matcher, matched_ste->ste_chain_location)) {
- dr_dbg(dmn, "Duplicate rule inserted, aborting\n");
- errno = EINVAL;
- return NULL;
- }
- return matched_ste;
+ if (!dr_ste_is_last_in_rule(nic_matcher, ste_location))
+ return matched_ste;
+
+ dr_dbg(dmn, "Duplicate rule inserted\n");
}
if (!skip_rehash && dr_rule_need_enlarge_hash(cur_htbl, dmn, nic_dmn)) {
--
2.20.1

View File

@ -1,39 +0,0 @@
From 37079bbdb4c6b14f475a8910393e013e40247815 Mon Sep 17 00:00:00 2001
From: Potnuri Bharat Teja <bharat@chelsio.com>
Date: Thu, 31 Oct 2019 16:05:59 +0530
Subject: [PATCH rdma-core 08/13] 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 <bharat@chelsio.com>
---
v0 -> v1:
- add missing description
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
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 7f595544..4d02c7a9 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

View File

@ -0,0 +1,79 @@
From fccce505db388fbea2d65fb662111702bc60ad25 Mon Sep 17 00:00:00 2001
From: Honggang Li <honli@redhat.com>
Date: Thu, 4 Jun 2020 14:33:38 +0800
Subject: [PATCH 8/8] libibverbs: Fix ABI_placeholder1 and ABI_placeholder2
assignment
The assignment of ABI_placeholder1 and ABI_placeholder2 must be
after the provider populated context_ex->ibv_create_flow and
context_ex->ibv_destroy_flow.
Applications, which compiled against old libibverbs released between
commit 501b53b30752 and 1111cf9895bb, will fail if they are linked
with libibverbs released after 1111cf9895bb and call ibv_create_flow.
[1] 501b53b30752 ("Fix create/destroy flow API")
Fixes: 1111cf9895bb ("verbs: Always allocate a verbs_context")
Signed-off-by: Honggang Li <honli@redhat.com>
(cherry picked from commit 88789b7ba618d55491026c74a9a31699805e5934)
Signed-off-by: Honggang Li <honli@redhat.com>
---
libibverbs/device.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/libibverbs/device.c b/libibverbs/device.c
index bc7df1b06435..db97655c2d9e 100644
--- a/libibverbs/device.c
+++ b/libibverbs/device.c
@@ -256,23 +256,6 @@ int verbs_init_context(struct verbs_context *context_ex,
context_ex->context.abi_compat = __VERBS_ABI_IS_EXTENDED;
context_ex->sz = sizeof(*context_ex);
- /*
- * In order to maintain backward/forward binary compatibility
- * with apps compiled against libibverbs-1.1.8 that use the
- * flow steering addition, we need to set the two
- * ABI_placeholder entries to match the driver set flow
- * entries. This is because apps compiled against
- * libibverbs-1.1.8 use an inline ibv_create_flow and
- * ibv_destroy_flow function that looks in the placeholder
- * spots for the proper entry points. For apps compiled
- * against libibverbs-1.1.9 and later, the inline functions
- * will be looking in the right place.
- */
- context_ex->ABI_placeholder1 =
- (void (*)(void))context_ex->ibv_create_flow;
- context_ex->ABI_placeholder2 =
- (void (*)(void))context_ex->ibv_destroy_flow;
-
context_ex->priv = calloc(1, sizeof(*context_ex->priv));
if (!context_ex->priv) {
errno = ENOMEM;
@@ -330,6 +313,23 @@ static void set_lib_ops(struct verbs_context *vctx)
#undef ibv_query_port
vctx->context.ops._compat_query_port = ibv_query_port;
vctx->query_port = __lib_query_port;
+
+ /*
+ * In order to maintain backward/forward binary compatibility
+ * with apps compiled against libibverbs-1.1.8 that use the
+ * flow steering addition, we need to set the two
+ * ABI_placeholder entries to match the driver set flow
+ * entries. This is because apps compiled against
+ * libibverbs-1.1.8 use an inline ibv_create_flow and
+ * ibv_destroy_flow function that looks in the placeholder
+ * spots for the proper entry points. For apps compiled
+ * against libibverbs-1.1.9 and later, the inline functions
+ * will be looking in the right place.
+ */
+ vctx->ABI_placeholder1 =
+ (void (*)(void))vctx->ibv_create_flow;
+ vctx->ABI_placeholder2 =
+ (void (*)(void))vctx->ibv_destroy_flow;
}
struct ibv_context *verbs_open_device(struct ibv_device *device, void *private_data)
--
2.25.4

View File

@ -1,45 +0,0 @@
From 3146dd6503fbb87b311caae47eeac739dc59bfd3 Mon Sep 17 00:00:00 2001
From: Potnuri Bharat Teja <bharat@chelsio.com>
Date: Mon, 4 Nov 2019 17:18:25 +0530
Subject: [PATCH rdma-core 09/13] cxgb4: always query device before
initializing chip version
[ Upstream commit df720f3658ca49aea89cb6e8f11980f30574d10a ]
chip_version may be initialized wrongly if alloc_context() is
invoked multiple times. therefore always query device to derive the
correct chip_version.
Fixes: c7e71b250268 ("cxgb4: fix chipversion initialization")
Signed-off-by: Rahul Kundu <rahul.kundu@chelsio.com>
Signed-off-by: Potnuri Bharat Teja <bharat@chelsio.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
providers/cxgb4/dev.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/providers/cxgb4/dev.c b/providers/cxgb4/dev.c
index 4d02c7a9..ecd87e6c 100644
--- a/providers/cxgb4/dev.c
+++ b/providers/cxgb4/dev.c
@@ -143,14 +143,11 @@ static struct verbs_context *c4iw_alloc_context(struct ibv_device *ibdev,
}
verbs_set_ops(&context->ibv_ctx, &c4iw_ctx_common_ops);
+ if (ibv_cmd_query_device(&context->ibv_ctx.context, &attr,
+ &raw_fw_ver, &qcmd, sizeof(qcmd)))
+ goto err_unmap;
if (!rhp->mmid2ptr) {
- int ret;
-
- ret = ibv_cmd_query_device(&context->ibv_ctx.context, &attr,
- &raw_fw_ver, &qcmd, sizeof(qcmd));
- if (ret)
- goto err_unmap;
rhp->max_mr = attr.max_mr;
rhp->mmid2ptr = calloc(attr.max_mr, sizeof(void *));
if (!rhp->mmid2ptr) {
--
2.20.1

View File

@ -1,469 +0,0 @@
From 6ce72aaa5963b28a2a01b47f332fa20c02eeb0db Mon Sep 17 00:00:00 2001
From: Jason Gunthorpe <jgg@mellanox.com>
Date: Thu, 31 Oct 2019 13:17:11 -0300
Subject: [PATCH rdma-core 10/13] buildlib: Remove travis CI
[ Upstream commit ae029ac74d62b12ea69127c91f83ad5944130764 ]
Azure Pipelines replaces it completely now, remove the word 'travis' from
the source tree.
v26 was supposed to transition to azp for releases and it lacks the
ability for travis to make the offical github tar.gz, so this needs to be
back ported.
Cc: stable@linux-rdma.org #v26
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
.travis.yml | 45 -----------
CMakeLists.txt | 2 +-
Documentation/stable.md | 8 +-
README.md | 12 +--
buildlib/cbuild | 173 ++--------------------------------------
buildlib/check-build | 6 --
buildlib/travis-build | 58 --------------
7 files changed, 17 insertions(+), 287 deletions(-)
delete mode 100644 .travis.yml
delete mode 100755 buildlib/travis-build
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index e00b0165..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-language: c
-dist: xenial
-addons:
- # We run our builds sequentially in one VM rather than try and use the
- # matrix feature. This is because Travis is unreasonably inefficient
- # doing this APT setup pass.
- apt:
- sources:
- - ubuntu-toolchain-r-test
- packages:
- - debhelper
- - dh-systemd
- - fakeroot
- - gcc-8
- - git-core
- - libnl-3-dev
- - libnl-route-3-dev
- - libudev-dev
- - make
- - ninja-build
- - pandoc
- - python-docutils
- - pkg-config
- - python
- - valgrind
- - sparse
- - wget
- - abi-compliance-checker
- - abi-dumper
-
- # 32 bit support packages
- - gcc-multilib
- # xenial craziness, need to give specific version of multilib,
- # in addition to general multilib
- - gcc-8-multilib
- - lib32gcc-8-dev
-
- # pyverbs
- - python3-dev
- - python3-pip
-
-before_script:
- - http_proxy= pip3 install cython
-script:
- - buildlib/travis-build
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 59ffdf83..b5da62b1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -44,7 +44,7 @@
# prefers python3 if available.
# -DNO_PYVERBS=1 (default, build pyverbs)
# Invoke cython to build pyverbs. Usually you will run with this option
-# is set, but it will be disabled for travis runs.
+# set
# -DENABLE_IBDIAGS_COMPAT=True (default False)
# Include obsolete scripts. These scripts are replaced by C programs with
# a different interface now.
diff --git a/Documentation/stable.md b/Documentation/stable.md
index 76f5cf32..c12b2768 100644
--- a/Documentation/stable.md
+++ b/Documentation/stable.md
@@ -10,7 +10,7 @@ Branched stable releases, off a mainline release, are on as-needed basis and lim
All bug fixes are to be backported from mainline and applied by stable branch maintainer.
-Branched stable releases will append an additional release number (e.g. 15.1) and will ensure that Travis CI reports a successful build.
+Branched stable releases will append an additional release number (e.g. 15.1) and will ensure that Azure Pipelines CI reports a successful build.
Regular stable releases will be generated at the same time as mainline releases.
Additional stable releases can be generated if the need arise (Needed by distributions or OFED).
@@ -73,17 +73,17 @@ so that latters patches/fixes can be checked against this reference.
To do that, the creator of the branch should run
```
-./buildlib/cbuild build-images travis
+./buildlib/cbuild build-images azp
mkdir ABI
touch ABI/.gitignore
git add ABI/.gitignore
git commit -m "ABI Files"
-./buildlib/cbuild pkg travis
+./buildlib/cbuild pkg azp
git add ABI/*
git commit --amend
```
-'cbuild pkg travis' will fail as the ABI verification step files, but it will
+'cbuild pkg azp' will fail as the ABI verification step files, but it will
produce the ABI reference files.
Note that the ABI directory must NOT be committed at any point in the master branch.
diff --git a/README.md b/README.md
index 451ff7fc..36273ad9 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Build Status](https://travis-ci.org/linux-rdma/rdma-core.svg?branch=master)](https://travis-ci.org/linux-rdma/rdma-core)
+[![Build Status](https://dev.azure.com/ucfconsort/rdma-core/_apis/build/status/linux-rdma.rdma-core?branchName=master)](https://dev.azure.com/ucfconsort/rdma-core/_build/latest?definitionId=2&branchName=master)
# RDMA Core Userspace Libraries and Daemons
@@ -137,13 +137,13 @@ Make sure that your contribution can be licensed under the same
license as the original code you are patching, and that you have all
necessary permissions to release your work.
-## TravisCI
+## Azure Pipelines CI
-Submitted patches must pass the TravisCI automatic builds without warnings.
-A build similar to TravisCI can be run locally using docker and the
+Submitted patches must pass the Azure Pipelines CI automatic builds without
+warnings. A build similar to AZP can be run locally using docker and the
'buildlib/cbuild' script.
```sh
-$ buildlib/cbuild build-images travis
-$ buildlib/cbuild pkg travis
+$ buildlib/cbuild build-images azp
+$ buildlib/cbuild pkg azp
```
diff --git a/buildlib/cbuild b/buildlib/cbuild
index 742a9e22..9825e099 100755
--- a/buildlib/cbuild
+++ b/buildlib/cbuild
@@ -290,100 +290,6 @@ class debian_experimental(APTEnvironment):
" ".join(sorted(self.pkgs))));
return res;
-class travis(APTEnvironment):
- """This parses the .travis.yml "apt" add on and converts it to a dockerfile,
- basically creating a container that is similar to what travis would
- use. Note this does not use the base travis image, nor does it install the
- typical travis packages."""
- docker_parent = "ubuntu:16.04";
- name = "travis";
- is_deb = True;
- _yaml = None;
-
- def get_yaml(self):
- if self._yaml:
- return self._yaml;
-
- # Load the commands from the travis file
- with open(".travis.yml") as F:
- self._yaml = yaml.safe_load(F);
- return self._yaml;
- yaml = property(get_yaml);
-
- def get_repos(self):
- """Return a list of things to add with apt-add-repository"""
- Source = collections.namedtuple("Source",["sourceline","key_url"]);
-
- # See https://github.com/travis-ci/apt-source-whitelist/blob/master/ubuntu.json
- pre_defined = {
- "ubuntu-toolchain-r-test": Source("ppa:ubuntu-toolchain-r/test",None),
- };
-
- # Unique the sources
- res = set();
- for src in self.yaml["addons"]["apt"]["sources"]:
- if isinstance(src,dict):
- res.add(Source(sourceline=src["sourceline"],
- key_url=src.get("key_url",None)));
- else:
- res.add(pre_defined[src]);
-
- # Add the sources
- scmds = [];
- scmds.extend("apt-key add /etc/apt/trusted.gpg.d/%s"%(os.path.basename(I.key_url))
- for I in res if I.key_url is not None);
- scmds.extend("http_proxy= apt-add-repository -y %s"%(pipes.quote(I.sourceline))
- for I in res);
-
- # Download the keys
- cmds = ["ADD %s /etc/apt/trusted.gpg.d/"%(I.key_url)
- for I in res if I.key_url is not None];
-
- cmds.append("RUN " + " && ".join(scmds));
- return cmds;
-
- def get_before_script(self):
- """Return a list of commands to run from before_script"""
- cmds = ["RUN useradd -ms /bin/bash travis && \\"
- "su -l -c %s"%(pipes.quote(" && ".join(self.yaml["before_script"]))) + " travis"];
- return cmds
-
- def get_clang(self):
- """We are using the clang that comes in travis, which is not part of our base
- docker container, install something similar by hand."""
- llvm_tar = "clang+llvm-7.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz"
- cmds = [
- """RUN wget -q http://releases.llvm.org/7.0.0/{0} -O /tmp/{0} && \\
- tar xf /tmp/{0} -C /usr/local/ && \\
- rm /tmp/{0} && \\
- (cd /usr/local/bin/ && ln -sf ../clang*/bin/clang-7 .)""".format(llvm_tar)];
- return cmds;
-
- def get_cython(self):
- return ["""RUN pip3 install cython"""]
-
- def get_docker_file(self,tmpdir):
- # First this to get apt-add-repository
- self.pkgs = {"software-properties-common"}
- res = APTEnvironment.get_docker_file(self,tmpdir);
-
- # Sources list from the travis.yml
- res.lines.extend(self.get_repos());
-
- # Package list from the travis.yml
- # Travis uses the new cmake built into the image, we need to get an
- # older version from ubuntu.
- res.lines.append("RUN apt-get update && apt-get install -y --no-install-recommends %s"%(
- " ".join(sorted(["cmake"] + self.yaml["addons"]["apt"]["packages"]))));
-
- # Adding before_script commands
- res.lines.extend(self.get_before_script())
-
- res.lines.extend(self.get_clang())
- res.lines.extend(self.get_cython())
-
- return res;
-
# -------------------------------------------------------------------------
class ZypperEnvironment(Environment):
@@ -521,7 +427,6 @@ deb [arch=arm64,ppc64el] http://ports.ubuntu.com/ bionic-updates main universe""
environments = [centos6(),
centos7(),
centos7_epel(),
- travis(),
xenial(),
bionic(),
jessie(),
@@ -572,7 +477,7 @@ def env_choices_pkg():
"""All the names that can be used with ToEnvAction"""
envs = set(("all",));
for I in environments:
- if I.name == "travis" or getattr(I,"is_deb",False) or getattr(I,"is_rpm",False):
+ if getattr(I,"is_deb",False) or getattr(I,"is_rpm",False):
envs.add(I.name);
envs.update(I.aliases);
return envs;
@@ -660,12 +565,12 @@ def get_tar_file(args,tarfn,pandoc_prebuilt=False):
return;
# When the OS does not support pandoc we got through the extra step to
- # build pandoc output in the travis container and include it in the
+ # build pandoc output in the azp container and include it in the
# tar.
if not args.use_prebuilt_pandoc:
- subprocess.check_call(["buildlib/cbuild","make","travis","docs"]);
+ subprocess.check_call(["buildlib/cbuild","make","azure_pipelines","docs"]);
- cmd_make_dist_tar(argparse.Namespace(BUILD="build-travis",tarfn=tarfn,
+ cmd_make_dist_tar(argparse.Namespace(BUILD="build-azure_pipelines",tarfn=tarfn,
script_pwd="",tag=None));
def run_rpm_build(args,spec_file,env):
@@ -839,70 +744,6 @@ def copy_abi_files(src):
print("Changed ABI File: ", ref_fn);
shutil.copy(cur_fn, ref_fn);
-def run_travis_build(args,env):
- with private_tmp(args) as tmpdir:
- os.mkdir(os.path.join(tmpdir,"src"));
- os.mkdir(os.path.join(tmpdir,"tmp"));
-
- opwd = os.getcwd();
- with inDirectory(os.path.join(tmpdir,"src")):
- subprocess.check_call(["git",
- "--git-dir",os.path.join(opwd,".git"),
- "reset","--hard","HEAD"]);
- subprocess.check_call(["git",
- "--git-dir",os.path.join(opwd,".git"),
- "fetch",
- "--no-tags",
- "https://github.com/linux-rdma/rdma-core.git","HEAD",
- "master"]);
- base = subprocess.check_output(["git",
- "--git-dir",os.path.join(opwd,".git"),
- "merge-base",
- "HEAD","FETCH_HEAD"]).decode().strip();
-
- home = os.path.join(os.path.sep,"home","travis");
- home_build = os.path.join(os.path.sep,home,"build");
-
- opts = [
- "run",
- "--read-only",
- "--rm=true",
- "-v","%s:%s"%(tmpdir, home_build),
- "-w",os.path.join(home_build,"src"),
- "-u",str(os.getuid()),
- "-e","TRAVIS_COMMIT_RANGE=%s..HEAD"%(base),
- "-e","TRAVIS_BRANCH=%s"%(base),
- "-e","TRAVIS_EVENT_TYPE=pull_request",
- "-e","HOME=%s"%(home),
- "-e","TMPDIR=%s"%(os.path.join(home_build,"tmp")),
- ] + map_git_args(opwd,os.path.join(home_build,"src"));
-
- # Load the commands from the travis file
- with open(os.path.join(opwd,".travis.yml")) as F:
- cmds = yaml.safe_load(F)["script"];
-
- with open(os.path.join(tmpdir,"go.sh"),"w") as F:
- print("#!/bin/bash", file=F);
- print("set -e", file=F);
- for I in cmds:
- print(I, file=F);
-
- if args.run_shell:
- opts.append("-ti");
- opts.append(env.image_name());
-
- if args.run_shell:
- opts.append("/bin/bash");
- else:
- opts.extend(["/bin/bash",os.path.join(home_build,"go.sh")]);
-
- try:
- docker_cmd(args,*opts);
- except subprocess.CalledProcessError as e:
- copy_abi_files(os.path.join(tmpdir, "src/ABI"));
- raise;
- copy_abi_files(os.path.join(tmpdir, "src/ABI"));
-
def run_azp_build(args,env):
# Load the commands from the pipelines file
with open("buildlib/azure-pipelines.yml") as F:
@@ -995,7 +836,7 @@ def args_pkg(parser):
parser.add_argument("--run-shell",default=False,action="store_true",
help="Instead of running the build, enter a shell");
parser.add_argument("--use-prebuilt-pandoc",default=False,action="store_true",
- help="Do not rebuild the pandoc cache in build-travis/pandoc-prebuilt/");
+ help="Do not rebuild the pandoc cache in build-azure_pipelines/pandoc-prebuilt/");
parser.add_argument("--with", default=[],action="append", dest="with_flags",
help="Enable specified feature in RPM builds");
parser.add_argument("--without", default=[],action="append", dest="without_flags",
@@ -1003,9 +844,7 @@ def args_pkg(parser):
def cmd_pkg(args):
"""Build a package in the given environment."""
for env in args.ENV:
- if env.name == "travis":
- run_travis_build(args,env);
- elif env.name == "azure_pipelines":
+ if env.name == "azure_pipelines":
run_azp_build(args,env);
elif getattr(env,"is_deb",False):
run_deb_build(args,env);
diff --git a/buildlib/check-build b/buildlib/check-build
index 46053527..ab8524e5 100755
--- a/buildlib/check-build
+++ b/buildlib/check-build
@@ -364,12 +364,6 @@ def get_cc_args_from_pkgconfig(args, name, static):
if not static:
return opts
- # The old pkg-config that travis uses incorrectly removes duplicated
- # flags, which breaks linking.
- if (name == "ibverbs" and
- subprocess.check_output(["pkg-config", "--version"]).decode().strip() == "0.26"):
- opts.insert(0, "-libverbs")
-
# Only static link the pkg-config stuff, otherwise we get warnings about
# static linking portions of glibc that need NSS.
opts.insert(0, "-Wl,-Bstatic")
diff --git a/buildlib/travis-build b/buildlib/travis-build
deleted file mode 100755
index 48c1c8f6..00000000
--- a/buildlib/travis-build
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/bash
-
-PATH=/home/`whoami`/.local/bin:$PATH
-
-# Stop on error
-set -e
-# Echo all commands to Travis log
-set -x
-
-mkdir build-travis build32 build-sparse
-
-# Build with latest clang first
-cd build-travis
-CC=clang-7 CFLAGS=-Werror cmake -GNinja .. -DIOCTL_MODE=both -DENABLE_STATIC=1
-ninja
-../buildlib/check-build --src .. --cc clang-7
-
-# 32 bit build to check format strings/etc
-cd ../build32
-# travis is not configured in a way that enables all 32 bit
-# packages. We could fix this with some sudo stuff.. For now turn off libnl
-CC=gcc-8 CFLAGS="-Werror -m32 -msse3" cmake -GNinja .. -DENABLE_RESOLVE_NEIGH=0 -DIOCTL_MODE=both -DNO_PYVERBS=1
-ninja
-
-# Run sparse on the subdirectories which are sparse clean
-cd ../build-sparse
-mv ../CMakeLists.txt ../CMakeLists-orig.txt
-grep -v "# NO SPARSE" ../CMakeLists-orig.txt > ../CMakeLists.txt
-CC=cgcc CFLAGS="-Werror" cmake -GNinja .. -DIOCTL_MODE=both -DNO_PYVERBS=1
-ninja | grep -v '^\[' | tee out
-# sparse does not fail gcc on messages
-if [ -s out ]; then
- false
-fi
-mv ../CMakeLists-orig.txt ../CMakeLists.txt
-
-# Test with coherent DMA mode disabled (ie as would be on ARM32, etc)
-cd ../build-travis
-cp ../util/udma_barrier.h ../util/udma_barrier.h.old
-echo "#error Fail" >> ../util/udma_barrier.h
-rm CMakeCache.txt
-CC=clang-7 CFLAGS=-Werror cmake -GNinja .. -DIOCTL_MODE=both
-ninja
-cp ../util/udma_barrier.h.old ../util/udma_barrier.h
-
-# Finally run through gcc-8 64 bit through the debian packaging This gives a
-# good clue if patches are changing packaging related things, the RPM stuff
-# will have to be audited by hand.
-
-# When running cmake through debian/rules it is hard to set -Werror,
-# instead force it on by changing the CMakeLists.txt
-cd ..
-echo 'set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")' >> buildlib/RDMA_EnableCStd.cmake
-sed -i -e 's/-DCMAKE_BUILD_TYPE=Release/-DCMAKE_BUILD_TYPE=Debug/g' debian/rules
-sed -i -e 's/ninja \(.*\)-v/ninja \1/g' debian/rules
-
-CC=gcc-8 debian/rules build
-fakeroot debian/rules binary
--
2.20.1

View File

@ -1,37 +0,0 @@
From 0f5201694034518656eb07f4ee2060c39c6255ce Mon Sep 17 00:00:00 2001
From: Jason Gunthorpe <jgg@mellanox.com>
Date: Thu, 7 Nov 2019 13:38:04 -0400
Subject: [PATCH rdma-core 11/13] build: Run CI builds on the stable branches
with azp support
[ Upstream commit 5770331de18e98449840238300a0bf4a436d2ee3 ]
v25 is the oldest stable branch that supports azp, before that travis is
required.
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
---
buildlib/azure-pipelines.yml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/buildlib/azure-pipelines.yml b/buildlib/azure-pipelines.yml
index 4eef7408..031824b2 100644
--- a/buildlib/azure-pipelines.yml
+++ b/buildlib/azure-pipelines.yml
@@ -2,6 +2,13 @@
trigger:
- master
+ - stable-v4*
+ - stable-v3*
+ - stable-v29
+ - stable-v28
+ - stable-v27
+ - stable-v26
+ - stable-v25
pr:
- master
--
2.20.1

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
Index: rdma-core-15/kernel-boot/rdma-hw-modules.rules
===================================================================
--- rdma-core-15.orig/kernel-boot/rdma-hw-modules.rules
+++ rdma-core-15/kernel-boot/rdma-hw-modules.rules
@@ -11,7 +11,11 @@ ENV{ID_NET_DRIVER}=="bnxt_en", RUN{built
ENV{ID_NET_DRIVER}=="cxgb3", RUN{builtin}+="kmod load iw_cxgb3"
diff --git a/kernel-boot/rdma-hw-modules.rules b/kernel-boot/rdma-hw-modules.rules
index bee416dbe719..97faa07b3340 100644
--- a/kernel-boot/rdma-hw-modules.rules
+++ b/kernel-boot/rdma-hw-modules.rules
@@ -10,7 +10,11 @@ ENV{ID_NET_DRIVER}=="be2net", RUN{builtin}+="kmod load ocrdma"
ENV{ID_NET_DRIVER}=="bnxt_en", RUN{builtin}+="kmod load bnxt_re"
ENV{ID_NET_DRIVER}=="cxgb4", RUN{builtin}+="kmod load iw_cxgb4"
ENV{ID_NET_DRIVER}=="hns", RUN{builtin}+="kmod load hns_roce"
-ENV{ID_NET_DRIVER}=="i40e", RUN{builtin}+="kmod load i40iw"

View File

@ -161,7 +161,7 @@ if [ "x$oldstyle" == "xn" ]; then
if [ -f $filepath_vpd ]; then
tmp=$ifs
ifs=":"
vpd_content=`cat $filepath_vpd`
vpd_content=`cat $filepath_vpd | tr -d '\0'`
devdesc=$(printf "%-15s" "$(echo $vpd_content | strings | head -1)")
partid=$(printf "%-11s" "$(echo $vpd_content | strings | head -4 | tail -1 | gawk '{print $1}')")
ifs=$tmp

677
SOURCES/rxe_cfg Executable file
View File

@ -0,0 +1,677 @@
#!/usr/bin/perl
# * Copyright (c) 2009-2011 Mellanox Technologies Ltd. All rights reserved.
# * Copyright (c) 2009-2011 System Fabric Works, Inc. All rights reserved.
# *
# * This software is available to you under a choice of one of two
# * licenses. You may choose to be licensed under the terms of the GNU
# * General Public License (GPL) Version 2, available from the file
# * COPYING in the main directory of this source tree, or the
# * OpenIB.org BSD license below:
# *
# * Redistribution and use in source and binary forms, with or
# * without modification, are permitted provided that the following
# * conditions are met:
# *
# * - Redistributions of source code must retain the above
# * copyright notice, this list of conditions and the following
# * disclaimer.
# *
# * - Redistributions in binary form must reproduce the above
# * copyright notice, this list of conditions and the following
# * disclaimer in the documentation and/or other materials
# * provided with the distribution.
# *
# * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# * SOFTWARE.
#
use warnings;
use strict;
use File::Basename;
use File::Path qw(make_path);
use Getopt::Long;
my $help = 0;
my $no_persist = 0;
my $debug = 0;
my $force = 0;
my $linkonly = 0;
my $parms = "/sys/module/rdma_rxe/parameters";
my $modprobe_opt = "";
my $modprobe_checked = "0";
my $persistence_path = "/var/lib/rxe";
my $persistence_file = "${persistence_path}/rxe";
my $num_persistent = 0;
my $sys = "/sys/module/rdma_rxe/parameters";
my %rxe_names;
my @rxe_array;
my %eth_names;
my @eth_list;
my %eth_driver;
my %link_state;
my %link_speed;
my %eth_mtu;
my %ipv4_addr;
my %rxe_mtu;
my @persistence_array;
my %persistence_hash;
my @mlx4_port;
my @mlx4_ether;
my @roce_list;
# Read a file and return its contents as a string.
sub read_file {
my $filename = shift;
my $result = "";
if (open(FILE, $filename)) {
$result = <FILE>;
close FILE;
}
return $result;
}
#get mapping between rxe and eth devices
sub get_names {
my $i = 0;
foreach my $rxe (glob("/sys/class/infiniband/rxe*")) {
$rxe = basename($rxe);
my $eth = read_file("/sys/class/infiniband/$rxe/parent");
chomp($eth);
if (($eth =~ /[\w]+[\d]/)
&& ($rxe =~ /rxe[0123456789]/)) {
# hash ethername to rxename
$rxe_names{$eth} = $rxe;
$rxe_array[$i++] = $rxe;
# hash rxename to ethername
$eth_names{$rxe} = $eth;
}
}
}
# get list of Mellanox RoCE ports
sub get_mlx4_list {
my $i = 0;
foreach my $mlx4 (glob("/sys/class/infiniband/mlx4_*")) {
$mlx4 = basename($mlx4);
foreach my $port (glob("/sys/class/infiniband/$mlx4/ports/*")) {
$port = basename($port);
my $link = read_file("$port/link_layer");
chomp($link);
if ($link =~ "Ethernet") {
$roce_list[$i++] = "$mlx4:$port";
}
}
}
}
#collect per device information
sub get_dev_info {
my @list;
my @fields;
my @lines;
my $line;
my $eth;
my $drv;
my $np;
my $i = 0;
my $j = 0;
get_mlx4_list();
my @my_eth_list = ();
foreach my $my_eth_dev (glob("/sys/class/net/*")) {
$my_eth_dev = basename($my_eth_dev);
if ($my_eth_dev ne "bonding_masters"){
my $my_dev_type = read_file("/sys/class/net/${my_eth_dev}/type");
chomp($my_dev_type);
if ($my_dev_type == "1") {
push(@my_eth_list, "$my_eth_dev");
}
}
}
@list = @my_eth_list;
foreach $eth (@list) {
chomp($eth);
$eth_list[$i++] = $eth;
@lines = `ethtool -i $eth`;
foreach $line (@lines) {
chomp($line);
@fields = split(/\s+/, $line);
chomp($fields[0]);
if ($fields[0] =~ /driver:/) {
$drv = $fields[1];
$eth_driver{$eth} = $drv;
if ($drv =~ /mlx4_en/ && scalar(@roce_list) > 0 ) {
$eth_names{$roce_list[$j++]} = $eth;
}
}
}
# get link status
$link_state{$eth} = "";
$link_speed{$eth} = "";
@lines = `ethtool $eth`;
foreach $line (@lines) {
chomp($line);
@fields = split(/:/, $line);
if (defined($fields[1])) {
$fields[1] =~ s/^\s+//g;
if ($fields[0] =~ "Link detected") {
$link_state{$eth} = $fields[1];
}
}
elsif ($line =~ "10000baseT") {
$link_speed{$eth} = "10GigE";
}
}
$ipv4_addr{$eth} = " ";
$eth_mtu{$eth} = "";
@lines = `ip addr show $eth`;
foreach $line (@lines) {
# get IP address
if ($line =~ /inet /) {
$line =~ s/^\s+inet ([0-9.]+)\//$1 /g;
@fields = split(/\s+/, $line);
$ipv4_addr{$eth} = $fields[0];
}
# get ethernet mtu
if ($line =~ /mtu /) {
$line =~ s/^.*mtu //g;
@fields = split(/\s+/, $line);
$eth_mtu{$eth} = $fields[0];
}
}
}
# get rxe mtu
foreach my $rxe (@rxe_array) {
@lines = `ibv_devinfo -d $rxe`;
foreach $line (@lines) {
if ($line =~ "active_mtu") {
$line =~ s/^\s+active_mtu:\s+//g;
chomp($line);
$rxe_mtu{$rxe} = $line;
}
}
$rxe_mtu{$rxe} = "(?)" if (!$rxe_mtu{$rxe});
}
}
# return string or the string "###" if string is all whitespace
sub set_field {
my $fld = $_[0];
if (defined($fld) && $fld =~ /\S/) {
return $fld;
} else {
return "###";
}
}
# format status output into fixed width columns
sub status_print {
my @fields;
my $field;
my @flen = ();
my $num_fields = 0;
my $i;
my $pad;
my $line;
# one pass to size the columns
foreach $line (@_) {
@fields = split(/\s+/, $line);
$i = 0;
foreach $field (@fields) {
if (!defined($flen[$i])) {
$flen[$i] = length($field);
}
else {
$flen[$i] = max($flen[$i], length($field));
}
$i++;
}
if ($i > $num_fields) {
$num_fields = $i;
}
}
# one pass to print
foreach $line (@_) {
print " ";
@fields = split(/\s+/, $line);
for ($i = 0; $i < $num_fields; $i++) {
if (defined($fields[$i])) {
$pad = $flen[$i] - length($fields[$i]) + 2;
}
else {
$pad = $flen[$i] + 2;
}
if (defined($fields[$i]) && ($fields[$i] ne "###")) {
print "$fields[$i]";
}
else {
print " ";
}
printf("%*s", $pad, "");
}
print "\n";
}
}
# check driver load status
sub check_module_status {
if (-e $sys) {
return 0;
} else {
return 1;
}
}
# print driver load status and ethertype for rdma_rxe and rdma_rxe_net
sub show_module_status {
print "rdma_rxe module not loaded\n" if (!(-e $sys));
}
# print rxe status
sub do_status {
my $instance = $_[0];
my $ln = 0;
my @outp;
my $rxe;
my $rmtu;
get_names();
get_dev_info();
show_module_status();
$outp[$ln++] = "Name\tLink\tDriver\t\tSpeed\tNMTU\tIPv4_addr\tRDEV\tRMTU";
foreach my $eth (@eth_list) {
# handle case where rxe_drivers are not loaded
if (defined($rxe_names{$eth})) {
$rxe = $rxe_names{$eth};
$rmtu = $rxe_mtu{$rxe};
}
else {
$rxe = "";
$rmtu = "";
}
if ((!defined($instance)
&& (($linkonly == 0) || ($link_state{$eth} =~ "yes")))
|| (defined($instance) && ($rxe =~ "$instance"))) {
$outp[$ln] = set_field("$eth");
$outp[$ln] .= "\t";
$outp[$ln] .= set_field("$link_state{$eth}");
$outp[$ln] .= "\t";
$outp[$ln] .= set_field(exists($eth_driver{$eth}) ? $eth_driver{$eth} : "");
$outp[$ln] .= "\t";
$outp[$ln] .= set_field("$link_speed{$eth}");
$outp[$ln] .= "\t";
$outp[$ln] .= set_field("$eth_mtu{$eth}");
$outp[$ln] .= "\t";
$outp[$ln] .= set_field("$ipv4_addr{$eth}");
$outp[$ln] .= "\t";
$outp[$ln] .= set_field("$rxe");
$outp[$ln] .= "\t";
$outp[$ln] .= set_field("$rmtu");
$ln++;
}
}
status_print(@outp);
}
# read file containing list of ethernet devices into a list
sub populate_persistence {
my $i = 0;
open FILE, $persistence_file;
while(<FILE>) {
my $line = $_;
chomp($line);
$line =~ s/^\s+//g;
if ($line =~ /[\w]+[\d]/) {
# in case we add fields later
my ($eth, $cruft) = split(/\s+/, $line, 2);
if ($eth =~ /^[\w]+[\d]/) {
$persistence_array[$i] = $eth;
$persistence_hash{$eth} = $i++;
}
}
}
close FILE;
$num_persistent = $i;
}
# print out list of ethernet devices to file
sub commit_persistent {
my $i;
my $eth;
open(PF, ">$persistence_file");
for ($i = 0; $i < $num_persistent; $i++) {
$eth = $persistence_array[$i];
if ($eth =~ /[\w]+[\d]/) {
print(PF "$persistence_array[$i]\n");
}
}
close(PF);
}
sub delete_persistent {
my $eth = $_[0];
if (defined($persistence_hash{$eth})) {
$persistence_array[$persistence_hash{$eth}] = "";
}
}
sub add_persistent {
my $eth = $_[0];
# Is this one already in the persistence list?
if (!defined($persistence_hash{$eth})) {
$persistence_array[$num_persistent] = $eth;
$persistence_hash{$eth} = $num_persistent;
$num_persistent++;
}
}
# add new rxe device to eth if not already up
sub rxe_add {
my $eth = $_[0];
if (!($eth =~ /[\w]+[\d]/)) {
print "eth_name ($eth) looks bogus\n";
return;
}
if (!defined($rxe_names{$eth})) {
system("echo '$eth' > $parms/add");
}
if (!$no_persist) {
add_persistent($eth);
commit_persistent();
}
}
sub rxe_remove {
my $arg2 = $_[0];
my $rxe;
my $eth;
print "remove $arg2\n" if ($debug > 0);
if ($arg2 =~ /[\w]+[\d]/) {
$eth = $arg2;
$rxe = $rxe_names{$eth};
}
elsif ($arg2 =~ /rxe[0123456789]/) {
$rxe = $arg2;
$eth = $eth_names{$rxe};
}
elsif ($arg2 eq "all") {
$rxe = "all";
}
if (($rxe eq "all") || ($rxe =~ /^rxe[0123456789]/)) {
my $cmd = "echo '$rxe' > $parms/remove";
#print "$cmd\n";
system($cmd);
if (!$no_persist) {
if ($rxe eq "all") {
unlink($persistence_file);
}
elsif ($eth =~/[\w]+[\d]/) {
delete_persistent($eth);
commit_persistent();
}
else {
print "Warning: Unable to resolve ethname; "
. "instance may persist on restart\n";
}
}
}
else {
print "rxe instance $rxe not found\n";
}
}
sub get_devinfo {
my $rxe = $_[0];
my $cmd = "ibv_devinfo -d $rxe";
return `$cmd`;
}
# allow unsupported modules to load in SLES11 if allowed
sub modprobe {
my $module = $_[0];
my $opts = $_[1];
my @lines;
my $line;
if ($modprobe_checked == "0") {
@lines = `modprobe -c`;
foreach $line (@lines) {
if ($line =~ /^allow_unsupported_modules *0/) {
$modprobe_opt = " --allow-unsupported-modules ";
last;
}
}
$modprobe_checked = "1";
}
if (!defined($opts)) {
$opts = "";
}
system("modprobe $modprobe_opt $module $opts");
}
# bring up rxe
sub do_start {
my $proto_str = "";
system("mkdir -p $persistence_path");
system("touch $persistence_file");
modprobe("ib_core");
modprobe("ib_uverbs");
modprobe("rdma_ucm");
modprobe("rdma_rxe");
populate_persistence();
system("udevadm control --reload");
foreach my $eth (@persistence_array) {
rxe_add($eth);
}
get_names();
foreach my $rxe (@rxe_array) {
my $stat = get_devinfo($rxe);
if ($stat =~ "PORT_DOWN") {
my $cmd = "ip link set $eth_names{$rxe} up";
system($cmd);
}
}
}
# check if argument is an integer
sub is_integer {
defined $_[0] && $_[0] =~ /^[+-]?\d+$/;
}
# remove all rxe devices and unload drivers
sub do_stop {
my $rxe;
foreach $rxe (@rxe_array) {
system("echo '$rxe' > $sys/remove");
}
if (-e $sys) {
system("rmmod rdma_rxe");
}
if (-e $sys) {
print "unable to unload drivers, reboot required\n";
}
}
sub do_debug {
my $arg2 = $_[0];
my $debugfile = "$parms/debug";
chomp($arg2);
if (!(-e "$debugfile")) {
print "Error: debug is compiled out of this rxe driver\n";
return;
}
if ($arg2 eq "on") { system("echo '31' > $debugfile"); }
elsif ($arg2 eq "off") { system("echo '0' > $debugfile"); }
elsif ($arg2 eq "0") { system("echo '0' > $debugfile"); }
elsif ($arg2 eq "") { }
elsif ($arg2 ge "0" && $arg2 le "31") {
system("echo '$arg2' > $debugfile");
}
else {
print "unrecognized debug cmd ($arg2)\n";
}
my $current = read_file($debugfile);
chomp($current);
if ($current > 0) {
print "Debug is ON ($current)\n";
}
elsif ($current == 0) {
print "Debug is OFF\n";
}
else {
print "Unrecognized debug value\n";
}
}
sub max {
my $a = $_[0];
my $b = $_[1];
return $a if ($a > $b);
return $b;
}
# show usage for rxe_cfg
sub usage {
print " Usage:\n";
print " rxe_cfg [options] start|stop|status|persistent\n";
print " rxe_cfg debug on|off|<num>\n";
print " rxe_cfg [-n] add <ndev>\n";
print " rxe_cfg [-n] remove <ndev>|<rdev>\n";
print "\n";
print " <ndev> = network device e.g. eth3\n";
print " <rdev> = rdma device e.g. rxe1\n";
print "\n";
print " Options:\n";
print " -h: print this usage information\n";
print " -n: do not make the configuration action persistent\n";
print " -v: print additional debug output\n";
print " -l: show status for interfaces with link up\n";
print " -p <num>: (start command only) - set ethertype\n";
}
sub main {
GetOptions(
"-h" => \$help,
"--help" => \$help,
"-n" => \$no_persist,
"-v:+" => \$debug,
"-f" => \$force,
"-l" => \$linkonly,
);
my $arg1 = $ARGV[0];
my $arg2 = $ARGV[1];
my $arg3 = $ARGV[2];
# status is the default
if (!defined($arg1) || ($arg1 =~ /status/)) {
do_status($arg2);
exit;
}
if ($help) {
usage();
exit;
}
# stuff that does not require modules to be loaded
if ($arg1 eq "help") { usage(); exit; }
elsif ($arg1 eq "start") { do_start(); do_status(); exit; }
elsif ($arg1 eq "persistent") { system("cat $persistence_file"); exit; }
# can't do much else, bail if modules aren't loaded
if (check_module_status()) {
exit;
}
# create persistence file if necessary
make_path($persistence_path);
if (!(-e $persistence_file)) {
`touch $persistence_file`;
}
# Get full context of the configuration
populate_persistence();
get_names();
get_dev_info();
# Stuff that requires the rdma_rxe module to be loaded
if ($arg1 eq "stop") { do_stop(); exit; }
elsif ($arg1 eq "debug") { do_debug($arg2); exit; }
elsif ($arg1 eq "add") { rxe_add($arg2); exit; }
elsif ($arg1 eq "remove") { rxe_remove($arg2); exit; }
elsif ($arg1 eq "help") { usage(); exit; }
}
main();
exit;

View File

@ -1,6 +1,6 @@
Name: rdma-core
Version: 26.0
Release: 8%{?dist}
Version: 29.0
Release: 3%{?dist}
Summary: RDMA core userspace libraries and daemons
# Almost everything is licensed under the OFA dual GPLv2, 2 Clause BSD license
@ -11,27 +11,21 @@ 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
Source1: ibdev2netdev
# Upstream had removed rxe_cfg from upstream git repo. RHEL-8.X has
# to keep it for backward compatibility. 'rxe_cfg' and 'rxe_cfg.8.gz'
# are extracted from libibverbs-26.0-8.el8 .
Source2: rxe_cfg
Source3: rxe_cfg.8.gz
Patch1: redhat-kernel-init-libi40iw-no-longer-tech-preview.patch
Patch2: i40iw-autoload-breaks-suspend.patch
Patch3: udev-keep-NAME_KERNEL-as-default-interface-naming-co.patch
# stable-vX patches
# stable-v29 patch
Patch101: 0001-ABI-Files.patch
Patch102: 0002-build-Do-not-enable-Wredundant-decls-twice.patch
Patch103: 0003-man-Fix-wrong-field-in-ibv_wr_post-s-man-page.patch
Patch104: 0004-pyverbs-Fix-WC-creation-process.patch
Patch105: 0005-pyverbs-Fix-CQ-and-PD-assignment-in-QPAttr.patch
Patch106: 0006-verbs-Set-missing-errno-in-ibv_cmd_reg_mr.patch
Patch107: 0007-mlx5-Allow-insertion-of-duplicate-rules-using-DR-API.patch
Patch108: 0008-cxgb4-free-appropriate-pointer-in-error-case.patch
Patch109: 0009-cxgb4-always-query-device-before-initializing-chip-v.patch
Patch110: 0010-buildlib-Remove-travis-CI.patch
Patch111: 0011-build-Run-CI-builds-on-the-stable-branches-with-azp-.patch
Patch112: 0012-build-Update-ABI-files.patch
# libbnxt_re support for some new device ids and generation id
Patch201: 0001-bnxt_re-lib-Add-remaining-pci-ids-for-gen-P5-devices.patch
Patch202: 0002-bnxt_re-lib-Recognize-additional-5750x-device-ID-s.patch
# Fix an ibacm segment fault issue
Patch301: 0001-ibacm-Do-not-open-non-InfiniBand-device.patch
Patch102: 0002-mlx5-Allocate-accurate-aligned-DM-memory-size.patch
Patch104: 0004-buildlib-Fix-a-warning-from-newer-pythons.patch
Patch105: 0005-libibverbs-Fix-description-of-ibv_get_device_guid-ma.patch
Patch106: 0006-verbs-Fix-ibv_create_wq-to-set-wq_context.patch
Patch108: 0008-libibverbs-Fix-ABI_placeholder1-and-ABI_placeholder2.patch
# Do not build static libs by default.
%define with_static %{?_with_static: 1} %{?!_with_static: 0}
@ -49,6 +43,7 @@ BuildRequires: valgrind-devel
BuildRequires: systemd
BuildRequires: python3-devel
BuildRequires: sed
BuildRequires: perl-generators
Requires: dracut, kmod, systemd
%if 0%{?fedora} >= 24
@ -77,7 +72,7 @@ BuildRequires: ninja-build
%else
# Fallback to make otherwise
BuildRequires: make
%define make_jobs make -v %{?_smp_mflags}
%define make_jobs make VERBOSE=1 %{?_smp_mflags}
%define cmake_install DESTDIR=%{buildroot} make install
%endif
@ -94,18 +89,12 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: libibverbs = %{version}-%{release}
Provides: libibverbs-devel = %{version}-%{release}
Obsoletes: libibverbs-devel < %{version}-%{release}
Provides: libibverbs-devel-static = %{version}-%{release}
Obsoletes: libibverbs-devel-static < %{version}-%{release}
Requires: libibumad = %{version}-%{release}
Provides: libibumad-devel = %{version}-%{release}
Obsoletes: libibumad-devel < %{version}-%{release}
Provides: libibumad-static = %{version}-%{release}
Obsoletes: libibumad-static < %{version}-%{release}
Requires: librdmacm = %{version}-%{release}
Provides: librdmacm-devel = %{version}-%{release}
Obsoletes: librdmacm-devel < %{version}-%{release}
Provides: librdmacm-static = %{version}-%{release}
Obsoletes: librdmacm-static < %{version}-%{release}
Requires: ibacm = %{version}-%{release}
Provides: ibacm-devel = %{version}-%{release}
Obsoletes: ibacm-devel < %{version}-%{release}
@ -114,16 +103,6 @@ Provides: infiniband-diags-devel = %{version}-%{release}
Obsoletes: infiniband-diags-devel < %{version}-%{release}
Provides: libibmad-devel = %{version}-%{release}
Obsoletes: libibmad-devel < %{version}-%{release}
Provides: libcxgb4-static = %{version}-%{release}
Obsoletes: libcxgb4-static < %{version}-%{release}
Provides: libhfi1-static = %{version}-%{release}
Obsoletes: libhfi1-static < %{version}-%{release}
Provides: libmlx4-static = %{version}-%{release}
Obsoletes: libmlx4-static < %{version}-%{release}
Provides: libmlx5-static = %{version}-%{release}
Obsoletes: libmlx5-static < %{version}-%{release}
Provides: libi40iw-devel-static = %{version}-%{release}
Obsoletes: libi40iw-devel-static < %{version}-%{release}
%description devel
RDMA core development libraries and headers.
@ -159,8 +138,6 @@ Obsoletes: libmlx5 < %{version}-%{release}
%endif
Provides: librxe = %{version}-%{release}
Obsoletes: librxe < %{version}-%{release}
Provides: libusnic_verbs = %{version}-%{release}
Obsoletes: libusnic_verbs < %{version}-%{release}
%description -n libibverbs
libibverbs is a library that allows userspace processes to use RDMA
@ -185,6 +162,9 @@ Device-specific plug-in ibverbs userspace drivers are included:
%package -n libibverbs-utils
Summary: Examples for the libibverbs library
Requires: libibverbs%{?_isa} = %{version}-%{release}
# rxe_cfg uses commands provided by these packages
Requires: iproute
Requires: ethtool
%description -n libibverbs-utils
Useful libibverbs example programs such as ibv_devinfo, which
@ -231,7 +211,7 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: libibverbs%{?_isa} = %{version}-%{release}
%description -n librdmacm
librdmacm provides a userspace RDMA Communication Managment API.
librdmacm provides a userspace RDMA Communication Management API.
%package -n librdmacm-utils
Summary: Examples for the librdmacm library
@ -256,25 +236,16 @@ 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.
%prep
%setup
%setup -q
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch101 -p1
%patch102 -p1
%patch103 -p1
%patch104 -p1
%patch105 -p1
%patch106 -p1
%patch107 -p1
%patch108 -p1
%patch109 -p1
%patch110 -p1
%patch111 -p1
%patch112 -p1
%patch201 -p1
%patch202 -p1
%patch301 -p1
%build
@ -302,7 +273,7 @@ discover and use SCSI devices via the SCSI RDMA Protocol over InfiniBand.
-DCMAKE_INSTALL_SYSTEMD_SERVICEDIR:PATH=%{_unitdir} \
-DCMAKE_INSTALL_INITDDIR:PATH=%{_initrddir} \
-DCMAKE_INSTALL_RUNDIR:PATH=%{_rundir} \
-DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir}/%{name}-%{version} \
-DCMAKE_INSTALL_DOCDIR:PATH=%{_docdir}/%{name} \
-DCMAKE_INSTALL_UDEV_RULESDIR:PATH=%{_udevrulesdir} \
-DCMAKE_INSTALL_PERLDIR:PATH=%{perl_vendorlib} \
-DWITH_IBDIAGS_COMPAT:BOOL=False \
@ -339,6 +310,10 @@ install -D -m0755 redhat/rdma.mlx4-setup.sh %{buildroot}%{_libexecdir}/mlx4-setu
# ibdev2netdev helper script
install -D -m0755 %{SOURCE1} %{buildroot}%{_bindir}/
# rxe_cfg
install -D -m0755 %{SOURCE2} %{buildroot}%{_bindir}/
install -D -m0644 %{SOURCE3} %{buildroot}%{_mandir}/man8/
# ibacm
bin/ib_acme -D . -O
# multi-lib conflict resolution hacks (bug 1429362)
@ -362,27 +337,28 @@ rm -f %{buildroot}/%{_libdir}/libibverbs/libipathverbs-rdmav*.so
rm -f %{buildroot}/%{_sysconfdir}/libibverbs.d/ipathverbs.driver
find %{buildroot} -name '*efa*' -exec rm -fv {} \;
# infiniband-diags
%post -n rdma-core
# we ship udev rules, so trigger an update.
/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
%post -n infiniband-diags -p /sbin/ldconfig
%postun -n infiniband-diags
%ldconfig_postun
# libibverbs
%post -n libibverbs -p /sbin/ldconfig
%postun -n libibverbs
%ldconfig_postun
# libibumad
%post -n libibumad -p /sbin/ldconfig
%postun -n libibumad
%ldconfig_postun
# librdmacm
%post -n librdmacm -p /sbin/ldconfig
%postun -n librdmacm
%ldconfig_postun
# ibacm
%post -n ibacm
%systemd_post ibacm.service
%preun -n ibacm
@ -390,7 +366,6 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
%postun -n ibacm
%systemd_postun_with_restart ibacm.service
# srp_daemon
%post -n srp_daemon
%systemd_post srp_daemon.service
%preun -n srp_daemon
@ -398,7 +373,6 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
%postun -n srp_daemon
%systemd_postun_with_restart srp_daemon.service
# iwpmd
%post -n iwpmd
%systemd_post iwpmd.service
%preun -n iwpmd
@ -408,9 +382,9 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
%files
%dir %{_sysconfdir}/rdma
%dir %{_docdir}/%{name}-%{version}
%doc %{_docdir}/%{name}-%{version}/README.md
%doc %{_docdir}/%{name}-%{version}/udev.md
%dir %{_docdir}/%{name}
%doc %{_docdir}/%{name}/README.md
%doc %{_docdir}/%{name}/udev.md
%config(noreplace) %{_sysconfdir}/rdma/*
%config(noreplace) %{_sysconfdir}/udev/rules.d/*
%ifnarch s390
@ -436,7 +410,7 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
%license COPYING.*
%files devel
%doc %{_docdir}/%{name}-%{version}/MAINTAINERS
%doc %{_docdir}/%{name}/MAINTAINERS
%dir %{_includedir}/infiniband
%dir %{_includedir}/rdma
%{_includedir}/infiniband/*
@ -514,34 +488,34 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
%{_libdir}/libmlx5.so.*
%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
%doc %{_docdir}/%{name}/libibverbs.md
%doc %{_docdir}/%{name}/rxe.md
%doc %{_docdir}/%{name}/tag_matching.md
%{_mandir}/man7/rxe*
%ifnarch s390
%{_mandir}/man7/mlx4dv*
%{_mandir}/man7/mlx5dv*
%endif
%{_mandir}/man8/rxe*
%files -n libibverbs-utils
%{_bindir}/ibv_*
%{_mandir}/man1/ibv_*
%{_bindir}/rxe_cfg
%{_mandir}/man8/rxe*
%files -n ibacm
%config(noreplace) %{_sysconfdir}/rdma/ibacm_opts.cfg
%{_bindir}/ib_acme
%{_sbindir}/ibacm
%{_mandir}/man1/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}-%{version}/ibacm.md
%doc %{_docdir}/%{name}/ibacm.md
%files -n iwpmd
%{_sbindir}/iwpmd
@ -557,7 +531,7 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
%{_libdir}/librdmacm*.so.*
%dir %{_libdir}/rsocket
%{_libdir}/rsocket/librspreload.so*
%doc %{_docdir}/%{name}-%{version}/librdmacm.md
%doc %{_docdir}/%{name}/librdmacm.md
%{_mandir}/man7/rsocket.*
%files -n librdmacm-utils
@ -597,13 +571,27 @@ find %{buildroot} -name '*efa*' -exec rm -fv {} \;
%{_sbindir}/srp_daemon
%{_sbindir}/srp_daemon.sh
%{_sbindir}/run_srp_daemon
%{_mandir}/man1/ibsrpdm.1*
%{_mandir}/man1/srp_daemon.1*
%{_mandir}/man5/srp_daemon.service.5*
%{_mandir}/man5/srp_daemon_port@.service.5*
%doc %{_docdir}/%{name}-%{version}/ibsrpdm.md
%{_mandir}/man8/ibsrpdm.8*
%{_mandir}/man8/srp_daemon.8*
%doc %{_docdir}/%{name}/ibsrpdm.md
%changelog
* Tue Jun 09 2020 Honggang Li <honli@redhat.com> - 29.0-3
- BuildRequires perl-generators
- Backport upstream stable-v29 commits
- Resolves: bz1845420
* Mon May 18 2020 Honggang Li <honli@redhat.com> - 29.0-2
- Suppress ibdev2netdev warning messgae
- Unversioned documentation directory
- Resolves: bz1794904, bz1824853
* Tue Apr 14 2020 Honggang Li <honli@redhat.com> - 29.0-1
- Update to upstream v29 release for features and fixes
- Resolves: bz1790624
* Fri Feb 07 2020 Honggang Li <honli@redhat.com> - 26.0-8
- Fix an ibacm segfault issue for dual port HCA support IB and Ethernet
- Resolves: bz1793736