- Update to rdma-core v33.1 - No release notes available - Drop support for libnes - Drop support for libnes by removing patch: - Revert-libnes-Remove-libnes-from-rdma-core.patch - Refresh patches against latest sources: - Revert-libcxgb3-Remove-libcxgb3-from-rdma-core.patch - cxgb3-nes-fix-declaration-of-free_context.patch has been replaced by cxgb3-fix-declaration-of-free_context.patch - Add patches for cxgb3 support against newest API - cxgb3-fix-support-for-new-uquery-API.patch - Enable LTO support - Trigger udevadm in rdma-ndd %post (bsc#1182391) OBS-URL: https://build.opensuse.org/request/show/873708 OBS-URL: https://build.opensuse.org/package/show/science:HPC/rdma-core?expand=0&rev=145
102 lines
3.4 KiB
Diff
102 lines
3.4 KiB
Diff
commit e8b7609a257e2fd31bc5909913205f88ae9b458c
|
|
Author: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
|
Date: Fri Feb 19 09:10:10 2021 +0100
|
|
|
|
cxgb3: fix support for new uquery API
|
|
|
|
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
|
|
|
|
diff --git providers/cxgb3/iwch.c providers/cxgb3/iwch.c
|
|
index 2bfca4f58f21..25ce55461a5d 100644
|
|
--- providers/cxgb3/iwch.c
|
|
+++ providers/cxgb3/iwch.c
|
|
@@ -78,7 +78,7 @@ static const struct verbs_match_ent hca_table[] = {
|
|
static void iwch_free_context(struct ibv_context *ibctx);
|
|
|
|
static const struct verbs_context_ops iwch_ctx_common_ops = {
|
|
- .query_device = iwch_query_device,
|
|
+ .query_device_ex = iwch_query_device,
|
|
.query_port = iwch_query_port,
|
|
.alloc_pd = iwch_alloc_pd,
|
|
.dealloc_pd = iwch_free_pd,
|
|
@@ -178,6 +178,19 @@ static void iwch_uninit_device(struct verbs_device *verbs_device)
|
|
free(dev);
|
|
}
|
|
|
|
+static int _ibv_get_fw_ver(char *value, size_t len, struct verbs_sysfs_dev *sysfs_dev)
|
|
+{
|
|
+
|
|
+ /*
|
|
+ * NOTE: This can only be called by a driver inside the dev_list_lock,
|
|
+ * ie during context setup or otherwise.
|
|
+ */
|
|
+ assert(pthread_mutex_trylock(&dev_list_lock) != 0);
|
|
+
|
|
+ return (ibv_read_ibdev_sysfs_file(value, len, sysfs_dev, "fw_ver") <= 0);
|
|
+}
|
|
+
|
|
+
|
|
static bool iwch_device_match(struct verbs_sysfs_dev *sysfs_dev)
|
|
{
|
|
char value[32], *cp;
|
|
@@ -191,7 +204,7 @@ static bool iwch_device_match(struct verbs_sysfs_dev *sysfs_dev)
|
|
* Verify that the firmware major number matches. Major number
|
|
* mismatches are fatal. Minor number mismatches are tolerated.
|
|
*/
|
|
- if (ibv_get_fw_ver(value, sizeof(value), sysfs_dev))
|
|
+ if (_ibv_get_fw_ver(value, sizeof(value), sysfs_dev))
|
|
return false;
|
|
|
|
cp = strtok(value+1, ".");
|
|
diff --git providers/cxgb3/iwch.h providers/cxgb3/iwch.h
|
|
index c7d85d3aab2e..c228197bd483 100644
|
|
--- providers/cxgb3/iwch.h
|
|
+++ providers/cxgb3/iwch.h
|
|
@@ -143,7 +143,8 @@ static inline unsigned long long_log2(unsigned long x)
|
|
}
|
|
|
|
extern int iwch_query_device(struct ibv_context *context,
|
|
- struct ibv_device_attr *attr);
|
|
+ const struct ibv_query_device_ex_input *input,
|
|
+ struct ibv_device_attr_ex *attr, size_t attr_size);
|
|
extern int iwch_query_port(struct ibv_context *context, uint8_t port,
|
|
struct ibv_port_attr *attr);
|
|
|
|
diff --git providers/cxgb3/verbs.c providers/cxgb3/verbs.c
|
|
index 39a44192e29c..35cde9199279 100644
|
|
--- providers/cxgb3/verbs.c
|
|
+++ providers/cxgb3/verbs.c
|
|
@@ -42,23 +42,27 @@
|
|
#include "iwch.h"
|
|
#include "iwch-abi.h"
|
|
|
|
-int iwch_query_device(struct ibv_context *context, struct ibv_device_attr *attr)
|
|
+int iwch_query_device(struct ibv_context *context,
|
|
+ const struct ibv_query_device_ex_input *input,
|
|
+ struct ibv_device_attr_ex *attr, size_t attr_size)
|
|
{
|
|
- struct ibv_query_device cmd;
|
|
+ struct ib_uverbs_ex_query_device_resp resp;
|
|
+ size_t resp_size = sizeof(resp);
|
|
uint64_t raw_fw_ver;
|
|
unsigned major, minor, sub_minor;
|
|
int ret;
|
|
|
|
- ret = ibv_cmd_query_device(context, attr, &raw_fw_ver, &cmd,
|
|
- sizeof cmd);
|
|
+ ret = ibv_cmd_query_device_any(context, input, attr, attr_size, &resp,
|
|
+ &resp_size);
|
|
if (ret)
|
|
return ret;
|
|
|
|
+ raw_fw_ver = resp.base.fw_ver;
|
|
major = (raw_fw_ver >> 32) & 0xffff;
|
|
minor = (raw_fw_ver >> 16) & 0xffff;
|
|
sub_minor = raw_fw_ver & 0xffff;
|
|
|
|
- snprintf(attr->fw_ver, sizeof attr->fw_ver,
|
|
+ snprintf(attr->orig_attr.fw_ver, sizeof(attr->orig_attr.fw_ver),
|
|
"%d.%d.%d", major, minor, sub_minor);
|
|
|
|
return 0;
|