diff --git a/0061-libhns-Skip-resolving-MAC-for-RDMA-over-UBLink.patch b/0061-libhns-Skip-resolving-MAC-for-RDMA-over-UBLink.patch new file mode 100644 index 0000000000000000000000000000000000000000..c9055c13be39119339540ec5e2d9816decf494ed --- /dev/null +++ b/0061-libhns-Skip-resolving-MAC-for-RDMA-over-UBLink.patch @@ -0,0 +1,155 @@ +From c77fa69a300e97cc37bb5189f79e3a1ca6f30ac5 Mon Sep 17 00:00:00 2001 +From: Chengchang Tang +Date: Thu, 26 Oct 2023 14:35:03 +0800 +Subject: [PATCH] libhns: Skip resolving MAC for RDMA over UBLink + +driver inclusion +category: feature +bugzilla: https://gitee.com/openeuler/kernel/issues/I8AL44 + +For RDMA over UBLink, MAC Layer if replaced by UBLink, and thus the +MAC addr is not nedded. So skip the MAC addr resolving for this mode. + +Signed-off-by: Chengchang Tang +Signed-off-by: Haoyue Xu +Signed-off-by: Junxian Huang +--- + providers/hns/hns_roce_u.c | 37 +++++++++++++++++++++++++++++++- + providers/hns/hns_roce_u.h | 9 ++++---- + providers/hns/hns_roce_u_hw_v2.c | 2 +- + providers/hns/hns_roce_u_verbs.c | 3 ++- + 4 files changed, 44 insertions(+), 7 deletions(-) + +diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c +index 02ad880..cef64ec 100644 +--- a/providers/hns/hns_roce_u.c ++++ b/providers/hns/hns_roce_u.c +@@ -56,6 +56,7 @@ static const struct verbs_match_ent hca_table[] = { + VERBS_PCI_MATCH(PCI_VENDOR_ID_HUAWEI, 0xA22C, &hns_roce_u_hw_v2), + VERBS_PCI_MATCH(PCI_VENDOR_ID_HUAWEI, 0xA22D, &hns_roce_u_hw_v2), + VERBS_PCI_MATCH(PCI_VENDOR_ID_HUAWEI, 0xA22F, &hns_roce_u_hw_v2), ++ VERBS_PCI_MATCH(PCI_VENDOR_ID_HUAWEI, 0xA26A, &hns_roce_u_hw_v2), + {} + }; + +@@ -95,6 +96,23 @@ static const struct verbs_context_ops hns_common_ops = { + .alloc_parent_domain = hns_roce_u_alloc_pad, + }; + ++static struct { ++ uint32_t device_id; ++ enum hns_device_link_type link_type; ++} device_link_types[] = { ++ {0xA222, HNS_DEV_LINK_TYPE_ETH}, ++ {0xA223, HNS_DEV_LINK_TYPE_ETH}, ++ {0xA224, HNS_DEV_LINK_TYPE_ETH}, ++ {0xA225, HNS_DEV_LINK_TYPE_ETH}, ++ {0xA226, HNS_DEV_LINK_TYPE_ETH}, ++ {0xA228, HNS_DEV_LINK_TYPE_ETH}, ++ {0xA22F, HNS_DEV_LINK_TYPE_ETH}, ++ {0xA227, HNS_DEV_LINK_TYPE_HCCS}, ++ {0xA22C, HNS_DEV_LINK_TYPE_HCCS}, ++ {0xA22D, HNS_DEV_LINK_TYPE_HCCS}, ++ {0xA26A, HNS_DEV_LINK_TYPE_UB} ++}; ++ + static int mmap_dca(struct hns_roce_context *ctx, int cmd_fd, + int page_size, size_t size, uint64_t mmap_key) + { +@@ -256,6 +274,21 @@ static int hns_roce_mmap(struct hns_roce_device *hr_dev, + return 0; + } + ++static int get_link_type(uint32_t device_id, ++ enum hns_device_link_type *link_type) ++{ ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(device_link_types); i++) { ++ if (device_id == device_link_types[i].device_id) { ++ *link_type = device_link_types[i].link_type; ++ return 0; ++ } ++ } ++ ++ return ENOENT; ++} ++ + static uint32_t calc_table_shift(uint32_t entry_count, uint32_t size_shift) + { + uint32_t count_shift = hr_ilog32(entry_count); +@@ -302,7 +335,6 @@ static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev, + &resp.ibv_resp, sizeof(resp))) + goto err_free; + +- hr_dev->mac_type = resp.mac_type; + hr_dev->congest_type = resp.congest_type; + + if (!resp.cqe_size) +@@ -338,6 +370,9 @@ static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev, + goto err_free; + + hr_dev->hw_version = dev_attrs.hw_ver; ++ if (get_link_type(dev_attrs.vendor_part_id, &hr_dev->link_type)) ++ hr_dev->link_type = resp.mac_type; ++ + context->max_qp_wr = dev_attrs.max_qp_wr; + context->max_sge = dev_attrs.max_sge; + context->max_cqe = dev_attrs.max_cqe; +diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h +index 197bde9..662eb8a 100644 +--- a/providers/hns/hns_roce_u.h ++++ b/providers/hns/hns_roce_u.h +@@ -161,9 +161,10 @@ enum { + #define HNS_ROCE_SRQ_TABLE_BITS 8 + #define HNS_ROCE_SRQ_TABLE_SIZE BIT(HNS_ROCE_SRQ_TABLE_BITS) + +-enum { +- HNAE3_MAC_ETH, +- HNAE3_MAC_ROH, ++enum hns_device_link_type { ++ HNS_DEV_LINK_TYPE_ETH, ++ HNS_DEV_LINK_TYPE_HCCS, ++ HNS_DEV_LINK_TYPE_UB, + }; + + struct hns_roce_device { +@@ -171,7 +172,7 @@ struct hns_roce_device { + int page_size; + const struct hns_roce_u_hw *u_hw; + int hw_version; +- uint8_t mac_type; ++ enum hns_device_link_type link_type; + uint8_t congest_type; + }; + +diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c +index 714a34e..fbd02dc 100644 +--- a/providers/hns/hns_roce_u_hw_v2.c ++++ b/providers/hns/hns_roce_u_hw_v2.c +@@ -1431,7 +1431,7 @@ static int set_ud_wqe(void *wqe, struct hns_roce_qp *qp, struct ibv_send_wr *wr, + if (ret) + return ret; + +- if (hr_dev->mac_type == HNAE3_MAC_ROH) ++ if (hr_dev->link_type == HNS_DEV_LINK_TYPE_HCCS) + ud_sq_wqe->dmac[0] = 0xFF; + + ret = fill_ud_data_seg(ud_sq_wqe, qp, wr, sge_info); +diff --git a/providers/hns/hns_roce_u_verbs.c b/providers/hns/hns_roce_u_verbs.c +index 1c2d94d..c3b01a0 100644 +--- a/providers/hns/hns_roce_u_verbs.c ++++ b/providers/hns/hns_roce_u_verbs.c +@@ -2019,7 +2019,8 @@ struct ibv_ah *hns_roce_u_create_ah(struct ibv_pd *pd, struct ibv_ah_attr *attr) + if (ibv_cmd_create_ah(pd, &ah->ibv_ah, attr, &resp.ibv_resp, sizeof(resp))) + goto err; + +- if (ibv_resolve_eth_l2_from_gid(pd->context, attr, ah->av.mac, NULL)) ++ if (hr_dev->link_type != HNS_DEV_LINK_TYPE_UB && ++ ibv_resolve_eth_l2_from_gid(pd->context, attr, ah->av.mac, NULL)) + goto err; + + if (resp.tc_mode == HNS_ROCE_TC_MAP_MODE_DSCP) +-- +2.25.1 + diff --git a/rdma-core.spec b/rdma-core.spec index c685ac1261ed292d5e8194f2352da67439895229..36bb097121a3d8efdd70d29dc0ae6f39a28dde87 100644 --- a/rdma-core.spec +++ b/rdma-core.spec @@ -1,6 +1,6 @@ Name: rdma-core Version: 41.0 -Release: 17 +Release: 18 Summary: RDMA core userspace libraries and daemons License: GPLv2 or BSD Url: https://github.com/linux-rdma/rdma-core @@ -66,6 +66,7 @@ patch56: 0057-libhns-Fix-missing-reset-notification.patch patch57: 0058-libhns-Support-flexible-WQE-buffer-page-size.patch patch58: 0059-Update-kernel-headers.patch patch59: 0060-libhns-Support-SRQ-record-doorbell.patch +patch60: 0061-libhns-Skip-resolving-MAC-for-RDMA-over-UBLink.patch BuildRequires: binutils cmake >= 2.8.11 gcc libudev-devel pkgconfig pkgconfig(libnl-3.0) BuildRequires: pkgconfig(libnl-route-3.0) valgrind-devel systemd systemd-devel @@ -313,6 +314,12 @@ fi %{_mandir}/* %changelog +* Thu Oct 26 2023 Juan Zhou - 41.0-18 +- Type: requirement +- ID: NA +- SUG: NA +- DESC: Skip resolving MAC for RDMA over UBLink + * Wed Oct 25 2023 Ran Zhou - 41.0-17 - Type: requirement - ID: NA