Hello community, here is the log from the commit of package rdma-core for openSUSE:Factory checked in at 2019-03-04 09:08:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rdma-core (Old) and /work/SRC/openSUSE:Factory/.rdma-core.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rdma-core" Mon Mar 4 09:08:09 2019 rev:28 rq:680357 version:22.1 Changes: -------- --- /work/SRC/openSUSE:Factory/rdma-core/rdma-core.changes 2019-02-08 13:48:00.614786564 +0100 +++ /work/SRC/openSUSE:Factory/.rdma-core.new.28833/rdma-core.changes 2019-03-04 09:08:12.936729621 +0100 @@ -1,0 +2,7 @@ +Fri Mar 1 07:07:49 UTC 2019 - Nicolas Morey-Chaisemartin <[email protected]> + +- Add patches to enable Broadcom's 57500 RoCE adapter (bsc#1125651): + - Update-kernel-headers.patch + - bnxt_re-lib-Enable-Broadcom-s-57500-RoCE-adapter.patch + +------------------------------------------------------------------- New: ---- Update-kernel-headers.patch bnxt_re-lib-Enable-Broadcom-s-57500-RoCE-adapter.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rdma-core.spec ++++++ --- /var/tmp/diff_new_pack.8Wywb6/_old 2019-03-04 09:08:14.516729356 +0100 +++ /var/tmp/diff_new_pack.8Wywb6/_new 2019-03-04 09:08:14.520729355 +0100 @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -54,6 +54,8 @@ Source1: baselibs.conf Source2: prebuild-pandoc.sh Source3: prebuilt-pandoc.tgz +Patch0: Update-kernel-headers.patch +Patch1: bnxt_re-lib-Enable-Broadcom-s-57500-RoCE-adapter.patch BuildRequires: binutils BuildRequires: cmake >= 2.8.11 BuildRequires: gcc @@ -341,6 +343,8 @@ %prep %setup -q -n %{name}-%{version}%{git_ver} +%patch0 +%patch1 #Extract prebuilt pandoc file in the buildlib directory (cd buildlib && tar xf %{S:3}) ++++++ Update-kernel-headers.patch ++++++ commit a1b591edcd84f52fc61ee945c0454f1933b1aeab Author: Yishai Hadas <[email protected]> Date: Sun Feb 10 10:43:12 2019 +0200 Update kernel headers To commit 2c1619edef61 ("IB/cma: Define option to set ack timeout and pack tos_set") Signed-off-by: Yishai Hadas <[email protected]> diff --git kernel-headers/rdma/bnxt_re-abi.h kernel-headers/rdma/bnxt_re-abi.h index a7a6111e50c7..dc52e3cf574c 100644 --- kernel-headers/rdma/bnxt_re-abi.h +++ kernel-headers/rdma/bnxt_re-abi.h @@ -44,6 +44,14 @@ #define BNXT_RE_ABI_VERSION 1 +#define BNXT_RE_CHIP_ID0_CHIP_NUM_SFT 0x00 +#define BNXT_RE_CHIP_ID0_CHIP_REV_SFT 0x10 +#define BNXT_RE_CHIP_ID0_CHIP_MET_SFT 0x18 + +enum { + BNXT_RE_UCNTX_CMASK_HAVE_CCTX = 0x1ULL +}; + struct bnxt_re_uctx_resp { __u32 dev_id; __u32 max_qp; @@ -51,6 +59,9 @@ struct bnxt_re_uctx_resp { __u32 cqe_sz; __u32 max_cqd; __u32 rsvd; + __aligned_u64 comp_mask; + __u32 chip_id0; + __u32 chip_id1; }; /* diff --git kernel-headers/rdma/ib_user_verbs.h kernel-headers/rdma/ib_user_verbs.h index 480d9a60b68e..0474c7400268 100644 --- kernel-headers/rdma/ib_user_verbs.h +++ kernel-headers/rdma/ib_user_verbs.h @@ -270,6 +270,8 @@ struct ib_uverbs_ex_query_device_resp { struct ib_uverbs_tm_caps tm_caps; struct ib_uverbs_cq_moderation_caps cq_moderation_caps; __aligned_u64 max_dm_size; + __u32 xrc_odp_caps; + __u32 reserved; }; struct ib_uverbs_query_port { diff --git kernel-headers/rdma/rdma_netlink.h kernel-headers/rdma/rdma_netlink.h index 2e18b77a817f..3a9e681e4257 100644 --- kernel-headers/rdma/rdma_netlink.h +++ kernel-headers/rdma/rdma_netlink.h @@ -5,8 +5,7 @@ #include <linux/types.h> enum { - RDMA_NL_RDMA_CM = 1, - RDMA_NL_IWCM, + RDMA_NL_IWCM = 2, RDMA_NL_RSVD, RDMA_NL_LS, /* RDMA Local Services */ RDMA_NL_NLDEV, /* RDMA device interface */ @@ -14,8 +13,7 @@ enum { }; enum { - RDMA_NL_GROUP_CM = 1, - RDMA_NL_GROUP_IWPM, + RDMA_NL_GROUP_IWPM = 2, RDMA_NL_GROUP_LS, RDMA_NL_NUM_GROUPS }; @@ -24,15 +22,17 @@ enum { #define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1)) #define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op) -enum { - RDMA_NL_RDMA_CM_ID_STATS = 0, - RDMA_NL_RDMA_CM_NUM_OPS -}; +/* The minimum version that the iwpm kernel supports */ +#define IWPM_UABI_VERSION_MIN 3 +/* The latest version that the iwpm kernel supports */ +#define IWPM_UABI_VERSION 4 + +/* iwarp port mapper message flags */ enum { - RDMA_NL_RDMA_CM_ATTR_SRC_ADDR = 1, - RDMA_NL_RDMA_CM_ATTR_DST_ADDR, - RDMA_NL_RDMA_CM_NUM_ATTR, + + /* Do not map the port for this IWPM request */ + IWPM_FLAGS_NO_PORT_MAP = (1 << 0), }; /* iwarp port mapper op-codes */ @@ -45,6 +45,7 @@ enum { RDMA_NL_IWPM_HANDLE_ERR, RDMA_NL_IWPM_MAPINFO, RDMA_NL_IWPM_MAPINFO_NUM, + RDMA_NL_IWPM_HELLO, RDMA_NL_IWPM_NUM_OPS }; @@ -83,20 +84,38 @@ enum { IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0, IWPM_NLA_MANAGE_MAPPING_SEQ, IWPM_NLA_MANAGE_ADDR, - IWPM_NLA_MANAGE_MAPPED_LOC_ADDR, + IWPM_NLA_MANAGE_FLAGS, + IWPM_NLA_MANAGE_MAPPING_MAX +}; + +enum { + IWPM_NLA_RMANAGE_MAPPING_UNSPEC = 0, + IWPM_NLA_RMANAGE_MAPPING_SEQ, + IWPM_NLA_RMANAGE_ADDR, + IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR, + /* The following maintains bisectability of rdma-core */ + IWPM_NLA_MANAGE_MAPPED_LOC_ADDR = IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR, IWPM_NLA_RMANAGE_MAPPING_ERR, IWPM_NLA_RMANAGE_MAPPING_MAX }; -#define IWPM_NLA_MANAGE_MAPPING_MAX 3 -#define IWPM_NLA_QUERY_MAPPING_MAX 4 #define IWPM_NLA_MAPINFO_SEND_MAX 3 +#define IWPM_NLA_REMOVE_MAPPING_MAX 3 enum { IWPM_NLA_QUERY_MAPPING_UNSPEC = 0, IWPM_NLA_QUERY_MAPPING_SEQ, IWPM_NLA_QUERY_LOCAL_ADDR, IWPM_NLA_QUERY_REMOTE_ADDR, + IWPM_NLA_QUERY_FLAGS, + IWPM_NLA_QUERY_MAPPING_MAX, +}; + +enum { + IWPM_NLA_RQUERY_MAPPING_UNSPEC = 0, + IWPM_NLA_RQUERY_MAPPING_SEQ, + IWPM_NLA_RQUERY_LOCAL_ADDR, + IWPM_NLA_RQUERY_REMOTE_ADDR, IWPM_NLA_RQUERY_MAPPED_LOC_ADDR, IWPM_NLA_RQUERY_MAPPED_REM_ADDR, IWPM_NLA_RQUERY_MAPPING_ERR, @@ -114,6 +133,7 @@ enum { IWPM_NLA_MAPINFO_UNSPEC = 0, IWPM_NLA_MAPINFO_LOCAL_ADDR, IWPM_NLA_MAPINFO_MAPPED_ADDR, + IWPM_NLA_MAPINFO_FLAGS, IWPM_NLA_MAPINFO_MAX }; @@ -132,6 +152,12 @@ enum { IWPM_NLA_ERR_MAX }; +enum { + IWPM_NLA_HELLO_UNSPEC = 0, + IWPM_NLA_HELLO_ABI_VERSION, + IWPM_NLA_HELLO_MAX +}; + /* * Local service operations: * RESOLVE - The client requests the local service to resolve a path. diff --git kernel-headers/rdma/rdma_user_cm.h kernel-headers/rdma/rdma_user_cm.h index 0d1e78ebad05..e42940a215a3 100644 --- kernel-headers/rdma/rdma_user_cm.h +++ kernel-headers/rdma/rdma_user_cm.h @@ -300,6 +300,10 @@ enum { RDMA_OPTION_ID_TOS = 0, RDMA_OPTION_ID_REUSEADDR = 1, RDMA_OPTION_ID_AFONLY = 2, + RDMA_OPTION_ID_ACK_TIMEOUT = 3 +}; + +enum { RDMA_OPTION_IB_PATH = 1 }; diff --git kernel-headers/rdma/rdma_user_rxe.h kernel-headers/rdma/rdma_user_rxe.h index 44ef6a3b7afc..aae2e696bb38 100644 --- kernel-headers/rdma/rdma_user_rxe.h +++ kernel-headers/rdma/rdma_user_rxe.h @@ -58,8 +58,7 @@ struct rxe_global_route { struct rxe_av { __u8 port_num; __u8 network_type; - __u16 reserved1; - __u32 reserved2; + __u8 dmac[6]; struct rxe_global_route grh; union { struct sockaddr_in _sockaddr_in; ++++++ bnxt_re-lib-Enable-Broadcom-s-57500-RoCE-adapter.patch ++++++ commit 885a8d3a3e2aa4e68f56c4c7d17abde437e0328b Author: Devesh Sharma <[email protected]> Date: Sun Jan 13 14:36:13 2019 -0500 bnxt_re/lib: Enable Broadcom's 57500 RoCE adapter This is to add Broadcom's 57500 series of adapters support to RoCE from libbnxt_re. Listing below the significant changes done as part of the patch. - Added the pci-id of the basic gen-p5 chip. - Adjust psn search memory allocation to suite new search psn structure. - Added chip context structure to select the appropriate execution flow in data-path and control path. - Fill psn search area as per new or older chip execution flow. - removed duplicate declaration of BNXT_RE_ABI_VERSION macro Signed-off-by: Devesh Sharma <[email protected]> diff --git providers/bnxt_re/bnxt_re-abi.h providers/bnxt_re/bnxt_re-abi.h index 65d048d3b00d..c6998e85b174 100644 --- providers/bnxt_re/bnxt_re-abi.h +++ providers/bnxt_re/bnxt_re-abi.h @@ -43,8 +43,6 @@ #include <rdma/bnxt_re-abi.h> #include <kernel-abi/bnxt_re-abi.h> -#define BNXT_RE_ABI_VERSION 1 - #define BNXT_RE_FULL_FLAG_DELTA 0x80 DECLARE_DRV_CMD(ubnxt_re_pd, IB_USER_VERBS_CMD_ALLOC_PD, @@ -246,6 +244,14 @@ struct bnxt_re_psns { __le32 flg_npsn; }; +struct bnxt_re_psns_ext { + __u32 opc_spsn; + __u32 flg_npsn; + __u16 st_slot_idx; + __u16 rsvd0; + __u32 rsvd1; +}; + struct bnxt_re_sge { __le64 pa; __le32 lkey; diff --git providers/bnxt_re/main.c providers/bnxt_re/main.c index 1cd4d8804128..d171748e4d1d 100644 --- providers/bnxt_re/main.c +++ providers/bnxt_re/main.c @@ -74,6 +74,7 @@ static const struct verbs_match_ent cna_table[] = { CNA(BROADCOM, 0x16EF), /* BCM57416 NPAR */ CNA(BROADCOM, 0x16F0), /* BCM58730 */ CNA(BROADCOM, 0x16F1), /* BCM57452 */ + CNA(BROADCOM, 0x1750), /* BCM57500 */ CNA(BROADCOM, 0xD800), /* BCM880xx VF */ CNA(BROADCOM, 0xD802), /* BCM58802 */ CNA(BROADCOM, 0xD804), /* BCM8804 SR */ @@ -108,6 +109,11 @@ static const struct verbs_context_ops bnxt_re_cntx_ops = { .destroy_ah = bnxt_re_destroy_ah }; +bool bnxt_re_is_chip_gen_p5(struct bnxt_re_chip_ctx *cctx) +{ + return cctx->chip_num == CHIP_NUM_57500; +} + /* Context Init functions */ static struct verbs_context *bnxt_re_alloc_context(struct ibv_device *vdev, int cmd_fd, @@ -133,6 +139,14 @@ static struct verbs_context *bnxt_re_alloc_context(struct ibv_device *vdev, dev->pg_size = resp.pg_size; dev->cqe_size = resp.cqe_sz; dev->max_cq_depth = resp.max_cqd; + if (resp.comp_mask & BNXT_RE_UCNTX_CMASK_HAVE_CCTX) { + cntx->cctx.chip_num = resp.chip_id0 & 0xFFFF; + cntx->cctx.chip_rev = (resp.chip_id0 >> + BNXT_RE_CHIP_ID0_CHIP_REV_SFT) & 0xFF; + cntx->cctx.chip_metal = (resp.chip_id0 >> + BNXT_RE_CHIP_ID0_CHIP_MET_SFT) & + 0xFF; + } pthread_spin_init(&cntx->fqlock, PTHREAD_PROCESS_PRIVATE); /* mmap shared page. */ cntx->shpg = mmap(NULL, dev->pg_size, PROT_READ | PROT_WRITE, diff --git providers/bnxt_re/main.h providers/bnxt_re/main.h index 0b5c749fba6a..be5734960475 100644 --- providers/bnxt_re/main.h +++ providers/bnxt_re/main.h @@ -54,7 +54,14 @@ #define DEV "bnxt_re : " -#define BNXT_RE_UD_QP_HW_STALL 0x400000 +#define BNXT_RE_UD_QP_HW_STALL 0x400000 + +#define CHIP_NUM_57500 0x1750 +struct bnxt_re_chip_ctx { + __u16 chip_num; + __u8 chip_rev; + __u8 chip_metal; +}; struct bnxt_re_dpi { __u32 dpindx; @@ -81,6 +88,7 @@ struct bnxt_re_cq { }; struct bnxt_re_wrid { + struct bnxt_re_psns_ext *psns_ext; struct bnxt_re_psns *psns; uint64_t wrid; uint32_t bytes; @@ -111,6 +119,7 @@ struct bnxt_re_srq { struct bnxt_re_qp { struct ibv_qp ibvqp; + struct bnxt_re_chip_ctx *cctx; struct bnxt_re_queue *sqq; struct bnxt_re_wrid *swrid; struct bnxt_re_queue *rqq; @@ -155,6 +164,7 @@ struct bnxt_re_context { struct verbs_context ibvctx; uint32_t dev_id; uint32_t max_qp; + struct bnxt_re_chip_ctx cctx; uint32_t max_srq; struct bnxt_re_dpi udpi; void *shpg; @@ -162,6 +172,9 @@ struct bnxt_re_context { pthread_spinlock_t fqlock; }; +/* Chip context related functions */ +bool bnxt_re_is_chip_gen_p5(struct bnxt_re_chip_ctx *cctx); + /* DB ring functions used internally*/ void bnxt_re_ring_rq_db(struct bnxt_re_qp *qp); void bnxt_re_ring_sq_db(struct bnxt_re_qp *qp); diff --git providers/bnxt_re/verbs.c providers/bnxt_re/verbs.c index 7786d24718d3..bec382b36838 100644 --- providers/bnxt_re/verbs.c +++ providers/bnxt_re/verbs.c @@ -844,9 +844,11 @@ static void bnxt_re_free_queues(struct bnxt_re_qp *qp) static int bnxt_re_alloc_queues(struct bnxt_re_qp *qp, struct ibv_qp_init_attr *attr, uint32_t pg_size) { + struct bnxt_re_psns_ext *psns_ext; struct bnxt_re_queue *que; struct bnxt_re_psns *psns; uint32_t psn_depth; + uint32_t psn_size; int ret, indx; que = qp->sqq; @@ -857,11 +859,12 @@ static int bnxt_re_alloc_queues(struct bnxt_re_qp *qp, que->diff = que->depth - attr->cap.max_send_wr; /* psn_depth extra entries of size que->stride */ - psn_depth = (que->depth * sizeof(struct bnxt_re_psns)) / - que->stride; - if ((que->depth * sizeof(struct bnxt_re_psns)) % que->stride) + psn_size = bnxt_re_is_chip_gen_p5(qp->cctx) ? + sizeof(struct bnxt_re_psns_ext) : + sizeof(struct bnxt_re_psns); + psn_depth = (que->depth * psn_size) / que->stride; + if ((que->depth * psn_size) % que->stride) psn_depth++; - que->depth += psn_depth; /* PSN-search memory is allocated without checking for * QP-Type. Kenrel driver do not map this memory if it @@ -875,6 +878,7 @@ static int bnxt_re_alloc_queues(struct bnxt_re_qp *qp, que->depth -= psn_depth; /* start of spsn space sizeof(struct bnxt_re_psns) each. */ psns = (que->va + que->stride * que->depth); + psns_ext = (struct bnxt_re_psns_ext *)psns; pthread_spin_init(&que->qlock, PTHREAD_PROCESS_PRIVATE); qp->swrid = calloc(que->depth, sizeof(struct bnxt_re_wrid)); if (!qp->swrid) { @@ -884,6 +888,13 @@ static int bnxt_re_alloc_queues(struct bnxt_re_qp *qp, for (indx = 0 ; indx < que->depth; indx++, psns++) qp->swrid[indx].psns = psns; + if (bnxt_re_is_chip_gen_p5(qp->cctx)) { + for (indx = 0 ; indx < que->depth; indx++, psns_ext++) { + qp->swrid[indx].psns_ext = psns_ext; + qp->swrid[indx].psns = (struct bnxt_re_psns *)psns_ext; + } + } + qp->cap.max_swr = que->depth; if (qp->rqq) { @@ -931,6 +942,7 @@ struct ibv_qp *bnxt_re_create_qp(struct ibv_pd *ibvpd, if (bnxt_re_alloc_queue_ptr(qp, attr)) goto fail; /* alloc queues */ + qp->cctx = &cntx->cctx; if (bnxt_re_alloc_queues(qp, attr, dev->pg_size)) goto failq; /* Fill ibv_cmd */ @@ -1094,26 +1106,36 @@ static int bnxt_re_build_sge(struct bnxt_re_sge *sge, struct ibv_sge *sg_list, return length; } -static void bnxt_re_fill_psns(struct bnxt_re_qp *qp, struct bnxt_re_psns *psns, +static void bnxt_re_fill_psns(struct bnxt_re_qp *qp, struct bnxt_re_wrid *wrid, uint8_t opcode, uint32_t len) { - uint32_t pkt_cnt = 0, nxt_psn; + uint32_t opc_spsn = 0, flg_npsn = 0; + struct bnxt_re_psns_ext *psns_ext; + uint32_t pkt_cnt = 0, nxt_psn = 0; + struct bnxt_re_psns *psns; + + psns = wrid->psns; + psns_ext = wrid->psns_ext; - memset(psns, 0, sizeof(*psns)); if (qp->qptyp == IBV_QPT_RC) { - psns->opc_spsn = htole32(qp->sq_psn & BNXT_RE_PSNS_SPSN_MASK); + opc_spsn = qp->sq_psn & BNXT_RE_PSNS_SPSN_MASK; pkt_cnt = (len / qp->mtu); if (len % qp->mtu) pkt_cnt++; if (len == 0) pkt_cnt = 1; nxt_psn = ((qp->sq_psn + pkt_cnt) & BNXT_RE_PSNS_NPSN_MASK); - psns->flg_npsn = htole32(nxt_psn); + flg_npsn = nxt_psn; qp->sq_psn = nxt_psn; } opcode = bnxt_re_ibv_wr_to_wc_opcd(opcode); - psns->opc_spsn |= htole32(((opcode & BNXT_RE_PSNS_OPCD_MASK) << - BNXT_RE_PSNS_OPCD_SHIFT)); + opc_spsn |= (((uint32_t)opcode & BNXT_RE_PSNS_OPCD_MASK) << + BNXT_RE_PSNS_OPCD_SHIFT); + memset(psns, 0, sizeof(*psns)); + psns->opc_spsn = htole32(opc_spsn); + psns->flg_npsn = htole32(flg_npsn); + if (bnxt_re_is_chip_gen_p5(qp->cctx)) + psns_ext->st_slot_idx = 0; } static void bnxt_re_fill_wrid(struct bnxt_re_wrid *wrid, struct ibv_send_wr *wr, @@ -1235,10 +1257,9 @@ int bnxt_re_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, { struct bnxt_re_qp *qp = to_bnxt_re_qp(ibvqp); struct bnxt_re_queue *sq = qp->sqq; - struct bnxt_re_bsqe *hdr; struct bnxt_re_wrid *wrid; - struct bnxt_re_psns *psns; uint8_t is_inline = false; + struct bnxt_re_bsqe *hdr; int ret = 0, bytes = 0; bool ring_db = false; void *sqe; @@ -1268,7 +1289,6 @@ int bnxt_re_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, sqe = (void *)(sq->va + (sq->tail * sq->stride)); wrid = &qp->swrid[sq->tail]; - psns = wrid->psns; memset(sqe, 0, bnxt_re_get_sqe_sz()); hdr = sqe; @@ -1318,7 +1338,7 @@ int bnxt_re_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, } bnxt_re_fill_wrid(wrid, wr, bytes, qp->cap.sqsig); - bnxt_re_fill_psns(qp, psns, wr->opcode, bytes); + bnxt_re_fill_psns(qp, wrid, wr->opcode, bytes); bnxt_re_incr_tail(sq); qp->wqe_cnt++; wr = wr->next;
