import rdma-core-29.0-3.el8
This commit is contained in:
parent
a915409507
commit
b8d88e182f
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,2 @@
|
||||
SOURCES/rdma-core-26.0.tar.gz
|
||||
SOURCES/rdma-core-29.0.tar.gz
|
||||
SOURCES/rxe_cfg.8.gz
|
||||
|
@ -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
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
176
SOURCES/0002-mlx5-Allocate-accurate-aligned-DM-memory-size.patch
Normal file
176
SOURCES/0002-mlx5-Allocate-accurate-aligned-DM-memory-size.patch
Normal 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
|
||||
|
@ -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
|
||||
|
32
SOURCES/0004-buildlib-Fix-a-warning-from-newer-pythons.patch
Normal file
32
SOURCES/0004-buildlib-Fix-a-warning-from-newer-pythons.patch
Normal 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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
31
SOURCES/0006-verbs-Fix-ibv_create_wq-to-set-wq_context.patch
Normal file
31
SOURCES/0006-verbs-Fix-ibv_create_wq-to-set-wq_context.patch
Normal 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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
@ -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"
|
||||
|
@ -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
677
SOURCES/rxe_cfg
Executable 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;
|
@ -1,6 +1,6 @@
|
||||
Name: rdma-core
|
||||
Version: 26.0
|
||||
Release: 7%{?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,25 +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
|
||||
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}
|
||||
|
||||
@ -47,6 +43,7 @@ BuildRequires: valgrind-devel
|
||||
BuildRequires: systemd
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: sed
|
||||
BuildRequires: perl-generators
|
||||
|
||||
Requires: dracut, kmod, systemd
|
||||
%if 0%{?fedora} >= 24
|
||||
@ -75,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
|
||||
|
||||
@ -92,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}
|
||||
@ -112,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.
|
||||
@ -157,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
|
||||
@ -183,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
|
||||
@ -229,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
|
||||
@ -254,24 +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
|
||||
|
||||
%build
|
||||
|
||||
@ -299,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 \
|
||||
@ -336,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)
|
||||
@ -359,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
|
||||
@ -387,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
|
||||
@ -395,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
|
||||
@ -405,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
|
||||
@ -433,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/*
|
||||
@ -511,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
|
||||
@ -554,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
|
||||
@ -594,13 +571,31 @@ 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
|
||||
|
||||
* Tue Dec 17 2019 Honggang Li <honli@redhat.com> - 26.0-7
|
||||
- Build with Ninja.
|
||||
- Resolves: bz1783254
|
||||
|
Loading…
Reference in New Issue
Block a user