summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHanoh Haim <hhaim@cisco.com>2017-02-27 15:28:14 +0200
committerHanoh Haim <hhaim@cisco.com>2017-02-27 15:44:34 +0200
commit9948fdf7520aac4dbee7c0abcdc5151cb8aec213 (patch)
treed7d6ed8e5e9ff89e6c08e356403fff8f0523582f
parent636b54879f9017deb00a28eaf4ab54cf0e6455de (diff)
mlx5 change local ibverb to OFED 4.0 lib
Signed-off-by: Hanoh Haim <hhaim@cisco.com>
-rwxr-xr-xdoc/trex_book.asciidoc56
-rw-r--r--external_libs/ibverbs/include/infiniband/driver.h35
-rw-r--r--external_libs/ibverbs/include/infiniband/driver_exp.h7
-rw-r--r--external_libs/ibverbs/include/infiniband/kern-abi.h64
-rw-r--r--external_libs/ibverbs/include/infiniband/kern-abi_exp.h22
-rw-r--r--external_libs/ibverbs/include/infiniband/mlx5_hw.h7
-rw-r--r--external_libs/ibverbs/include/infiniband/verbs.h160
-rw-r--r--external_libs/ibverbs/include/infiniband/verbs_exp.h83
-rw-r--r--external_libs/ibverbs/libibverbs.abin937626 -> 152878 bytes
-rw-r--r--external_libs/ibverbs/libibverbs.la41
-rw-r--r--external_libs/ibverbs/libibverbs.lai41
-rw-r--r--external_libs/ibverbs/libibverbs.sobin494224 -> 100920 bytes
-rw-r--r--external_libs/ibverbs/libibverbs.so.1bin494224 -> 100920 bytes
-rw-r--r--external_libs/ibverbs/libibverbs.so.1.0.0bin494224 -> 100920 bytes
-rwxr-xr-xlinux_dpdk/ws_main.py2
-rw-r--r--scripts/dumy_libs/libibverbs.so.1bin494224 -> 0 bytes
-rw-r--r--scripts/dumy_libs/libnl-3.so.200bin110096 -> 0 bytes
-rw-r--r--scripts/dumy_libs/libnl-route-3.so.200bin293640 -> 0 bytes
18 files changed, 307 insertions, 211 deletions
diff --git a/doc/trex_book.asciidoc b/doc/trex_book.asciidoc
index 3f0db6c0..6d614f19 100755
--- a/doc/trex_book.asciidoc
+++ b/doc/trex_book.asciidoc
@@ -2813,6 +2813,62 @@ There is a task to automate the production of thess reports
Cause: rte_eth_dev_filter_ctrl: err=-22, port=2
----
+==== Build with native OFED
+
+In some case there is a need to build the dpdk-mlx5 with different OFED (not just 4.0 maybe newer)
+to do so run this on native machine
+
+[source,bash]
+----
+[csi-trex-07]> ./b configure
+Setting top to : /auto/srg-sce-swinfra-usr/emb/users/hhaim/work/depot/asr1k/emb/private/hhaim/bp_sim_git/trex-core
+Setting out to : /auto/srg-sce-swinfra-usr/emb/users/hhaim/work/depot/asr1k/emb/private/hhaim/bp_sim_git/trex-core/linux_dpdk/build_dpdk
+Checking for program 'g++, c++' : /bin/g++
+Checking for program 'ar' : /bin/ar
+Checking for program 'gcc, cc' : /bin/gcc
+Checking for program 'ar' : /bin/ar
+Checking for program 'ldd' : /bin/ldd
+Checking for library z : yes
+Checking for OFED : Found needed version 4.0 #1
+Checking for library ibverbs : yes
+'configure' finished successfully (1.826s)
+----
+<1> make sure it was identify
+
+
+[source,python]
+----
+ index fba7540..a55fe6b 100755
+ --- a/linux_dpdk/ws_main.py
+ +++ b/linux_dpdk/ws_main.py
+ @@ -143,8 +143,11 @@ def missing_pkg_msg(fedora, ubuntu):
+ def check_ofed(ctx):
+ ctx.start_msg('Checking for OFED')
+ ofed_info='/usr/bin/ofed_info'
+ - ofed_ver= '-3.4-'
+ - ofed_ver_show= 'v3.4'
+ +
+ + ofed_ver_re = re.compile('.*[-](\d)[.](\d)[-].*')
+ +
+ + ofed_ver= 40 <1>
+ + ofed_ver_show= '4.0'
+
+
+ --- a/scripts/dpdk_setup_ports.py
+ +++ b/scripts/dpdk_setup_ports.py
+ @@ -366,8 +366,8 @@ Other network devices
+
+ ofed_ver_re = re.compile('.*[-](\d)[.](\d)[-].*')
+
+ - ofed_ver= 34
+ - ofed_ver_show= '3.4-1'
+ + ofed_ver= 40 <2>
+ + ofed_ver_show= '4.0'
+----
+<1> change to new version
+<2> change to new version
+
+
=== Cisco VIC support
diff --git a/external_libs/ibverbs/include/infiniband/driver.h b/external_libs/ibverbs/include/infiniband/driver.h
index b59bc452..6b0edf5e 100644
--- a/external_libs/ibverbs/include/infiniband/driver.h
+++ b/external_libs/ibverbs/include/infiniband/driver.h
@@ -86,12 +86,6 @@ enum verbs_qp_mask {
VERBS_QP_RESERVED = 1 << 1
};
-struct verbs_mw {
- struct ibv_mw mw;
- uint32_t handle;
- enum ibv_mw_type type;
-};
-
struct verbs_qp {
struct ibv_qp qp;
uint32_t comp_mask;
@@ -111,6 +105,16 @@ int ibv_cmd_query_device(struct ibv_context *context,
struct ibv_device_attr *device_attr,
uint64_t *raw_fw_ver,
struct ibv_query_device *cmd, size_t cmd_size);
+int ibv_cmd_query_device_ex(struct ibv_context *context,
+ const struct ibv_query_device_ex_input *input,
+ struct ibv_device_attr_ex *attr, size_t attr_size,
+ uint64_t *raw_fw_ver,
+ struct ibv_query_device_ex *cmd,
+ size_t cmd_core_size,
+ size_t cmd_size,
+ struct ibv_query_device_resp_ex *resp,
+ size_t resp_core_size,
+ size_t resp_size);
int ibv_cmd_query_port(struct ibv_context *context, uint8_t port_num,
struct ibv_port_attr *port_attr,
struct ibv_query_port *cmd, size_t cmd_size);
@@ -135,12 +139,17 @@ int ibv_cmd_reg_mr(struct ibv_pd *pd, void *addr, size_t length,
struct ibv_mr *mr, struct ibv_reg_mr *cmd,
size_t cmd_size,
struct ibv_reg_mr_resp *resp, size_t resp_size);
+int ibv_cmd_rereg_mr(struct ibv_mr *mr, uint32_t flags, void *addr,
+ size_t length, uint64_t hca_va, int access,
+ struct ibv_pd *pd, struct ibv_rereg_mr *cmd,
+ size_t cmd_sz, struct ibv_rereg_mr_resp *resp,
+ size_t resp_sz);
int ibv_cmd_dereg_mr(struct ibv_mr *mr);
int ibv_cmd_alloc_mw(struct ibv_pd *pd, enum ibv_mw_type type,
- struct verbs_mw *mw, struct ibv_alloc_mw *cmd,
+ struct ibv_mw *mw, struct ibv_alloc_mw *cmd,
size_t cmd_size,
struct ibv_alloc_mw_resp *resp, size_t resp_size);
-int ibv_cmd_dealloc_mw(struct verbs_mw *mw,
+int ibv_cmd_dealloc_mw(struct ibv_mw *mw,
struct ibv_dealloc_mw *cmd, size_t cmd_size);
int ibv_cmd_create_cq(struct ibv_context *context, int cqe,
struct ibv_comp_channel *channel,
@@ -197,7 +206,9 @@ int ibv_cmd_post_recv(struct ibv_qp *ibqp, struct ibv_recv_wr *wr,
int ibv_cmd_post_srq_recv(struct ibv_srq *srq, struct ibv_recv_wr *wr,
struct ibv_recv_wr **bad_wr);
int ibv_cmd_create_ah(struct ibv_pd *pd, struct ibv_ah *ah,
- struct ibv_ah_attr *attr);
+ struct ibv_ah_attr *attr,
+ struct ibv_create_ah_resp *resp,
+ size_t resp_size);
int ibv_cmd_destroy_ah(struct ibv_ah *ah);
int ibv_cmd_attach_mcast(struct ibv_qp *qp, const union ibv_gid *gid, uint16_t lid);
int ibv_cmd_detach_mcast(struct ibv_qp *qp, const union ibv_gid *gid, uint16_t lid);
@@ -211,10 +222,10 @@ int ibv_cmd_destroy_flow(struct ibv_flow *flow_id);
int ibv_dontfork_range(void *base, size_t size);
int ibv_dofork_range(void *base, size_t size);
-void ibv_cmd_query_device_assign(struct ibv_device_attr *device_attr,
- uint64_t *raw_fw_ver,
- struct ibv_query_device_resp *resp);
+void copy_query_dev_fields(struct ibv_device_attr *device_attr,
+ struct ibv_query_device_resp *resp,
+ uint64_t *raw_fw_ver);
/*
* sysfs helper functions
*/
diff --git a/external_libs/ibverbs/include/infiniband/driver_exp.h b/external_libs/ibverbs/include/infiniband/driver_exp.h
index 31e4a5a8..4cc6d805 100644
--- a/external_libs/ibverbs/include/infiniband/driver_exp.h
+++ b/external_libs/ibverbs/include/infiniband/driver_exp.h
@@ -125,13 +125,6 @@ int ibv_exp_cmd_create_rwq_ind_table(struct ibv_context *context,
size_t resp_core_size,
size_t resp_size);
int ibv_exp_cmd_destroy_rwq_ind_table(struct ibv_exp_rwq_ind_table *rwq_ind_table);
-int ibv_exp_cmd_rereg_mr(struct ibv_mr *mr, uint32_t flags, void *addr,
- size_t length, uint64_t hca_va, int access,
- struct ibv_pd *pd, struct ibv_exp_rereg_mr_attr *attr,
- struct ibv_exp_rereg_mr *cmd,
- size_t lib_cmd_sz, size_t drv_cmd_sz,
- struct ibv_exp_rereg_mr_resp *resp,
- size_t lib_resp_sz, size_t drv_resp_sz);
/*
* ibv_exp_cmd_getenv
*
diff --git a/external_libs/ibverbs/include/infiniband/kern-abi.h b/external_libs/ibverbs/include/infiniband/kern-abi.h
index a6964bb7..f77f4c48 100644
--- a/external_libs/ibverbs/include/infiniband/kern-abi.h
+++ b/external_libs/ibverbs/include/infiniband/kern-abi.h
@@ -102,10 +102,16 @@ enum {
#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80ul
+/* use this mask for creating extended commands */
+#define IB_USER_VERBS_CMD_EXTENDED_MASK \
+ (IB_USER_VERBS_CMD_FLAG_EXTENDED << \
+ IB_USER_VERBS_CMD_FLAGS_SHIFT)
+
enum {
- IB_USER_VERBS_CMD_CREATE_FLOW = (IB_USER_VERBS_CMD_FLAG_EXTENDED <<
- IB_USER_VERBS_CMD_FLAGS_SHIFT) +
+ IB_USER_VERBS_CMD_QUERY_DEVICE_EX = IB_USER_VERBS_CMD_EXTENDED_MASK |
+ IB_USER_VERBS_CMD_QUERY_DEVICE,
+ IB_USER_VERBS_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_EXTENDED_MASK +
IB_USER_VERBS_CMD_THRESHOLD,
IB_USER_VERBS_CMD_DESTROY_FLOW
};
@@ -147,18 +153,10 @@ struct ex_hdr {
};
};
-enum ibv_event_rsc_type {
- IBV_EVENT_RSC_CQ,
- IBV_EVENT_RSC_QP,
- IBV_EVENT_RSC_DCT,
- IBV_EVENT_RSC_SRQ,
- IBV_EVENT_RSC_DEVICE,
-};
-
struct ibv_kern_async_event {
__u64 element;
__u32 event_type;
- __u32 rsc_type;
+ __u32 reserved;
};
struct ibv_comp_event {
@@ -256,6 +254,29 @@ struct ibv_query_device_resp {
__u8 reserved[4];
};
+struct ibv_query_device_ex {
+ struct ex_hdr hdr;
+ __u32 comp_mask;
+ __u32 reserved;
+};
+
+struct ibv_odp_caps_resp {
+ __u64 general_caps;
+ struct {
+ __u32 rc_odp_caps;
+ __u32 uc_odp_caps;
+ __u32 ud_odp_caps;
+ } per_transport_caps;
+ __u32 reserved;
+};
+
+struct ibv_query_device_resp_ex {
+ struct ibv_query_device_resp base;
+ __u32 comp_mask;
+ __u32 response_length;
+ struct ibv_odp_caps_resp odp_caps;
+};
+
struct ibv_query_port {
__u32 command;
__u16 in_words;
@@ -349,6 +370,26 @@ struct ibv_reg_mr_resp {
__u32 rkey;
};
+struct ibv_rereg_mr {
+ __u32 command;
+ __u16 in_words;
+ __u16 out_words;
+ __u64 response;
+ __u32 mr_handle;
+ __u32 flags;
+ __u64 start;
+ __u64 length;
+ __u64 hca_va;
+ __u32 pd_handle;
+ __u32 access_flags;
+ __u64 driver_data[0];
+};
+
+struct ibv_rereg_mr_resp {
+ __u32 lkey;
+ __u32 rkey;
+};
+
struct ibv_dereg_mr {
__u32 command;
__u16 in_words;
@@ -376,6 +417,7 @@ struct ibv_dealloc_mw {
__u16 in_words;
__u16 out_words;
__u32 mw_handle;
+ __u32 reserved;
};
struct ibv_create_comp_channel {
diff --git a/external_libs/ibverbs/include/infiniband/kern-abi_exp.h b/external_libs/ibverbs/include/infiniband/kern-abi_exp.h
index b03f19fb..56a43679 100644
--- a/external_libs/ibverbs/include/infiniband/kern-abi_exp.h
+++ b/external_libs/ibverbs/include/infiniband/kern-abi_exp.h
@@ -310,7 +310,8 @@ struct ibv_exp_query_device_resp {
__u32 max_device_ctx;
struct ibv_exp_mp_rq_caps_resp mp_rq_caps;
__u16 wq_vlan_offloads_cap;
- __u8 reserved1[6];
+ __u8 reserved1[2];
+ __u32 ec_w_mask;
struct ibv_exp_ec_caps_resp ec_caps;
struct ibv_exp_masked_atomic_caps masked_atomic_caps;
__u16 rx_pad_end_addr_align;
@@ -443,9 +444,9 @@ struct ibv_exp_modify_qp {
__u64 dct_key;
__u32 exp_attr_mask;
__u32 flow_entropy;
- __u64 driver_data[0];
__u32 rate_limit;
__u32 reserved1;
+ __u64 driver_data[0];
};
enum ibv_exp_create_cq_comp_mask {
@@ -573,14 +574,8 @@ struct ibv_exp_create_wq {
__u64 user_handle;
__u32 pd_handle;
__u32 cq_handle;
- __u32 srq_handle;
__u32 max_recv_wr;
__u32 max_recv_sge;
- __u32 reserved;
- struct ibv_exp_cmd_wq_mp_rq mp_rq;
- __u16 wq_vlan_offloads;
- __u8 reserved1[6];
- __u64 flags;
};
struct ibv_exp_create_wq_resp {
@@ -598,22 +593,25 @@ struct ib_exp_destroy_wq {
__u32 wq_handle;
};
+struct ibv_destroy_wq_resp {
+ __u32 comp_mask;
+ __u32 response_length;
+ __u32 events_reported;
+ __u32 reserved;
+};
+
struct ib_exp_modify_wq {
struct ex_hdr hdr;
__u32 comp_mask;
__u32 wq_handle;
__u32 wq_state;
__u32 curr_wq_state;
- __u16 wq_vlan_offloads;
- __u8 reserved[6];
};
struct ibv_exp_create_rwq_ind_table {
struct ex_hdr hdr;
__u32 comp_mask;
- __u32 pd_handle;
__u32 log_ind_tbl_size;
- __u32 reserved;
/* Following are wq handles based on log_ind_tbl_size, must be 64 bytes aligned.
* __u32 wq_handle1
* __u32 wq_handle2
diff --git a/external_libs/ibverbs/include/infiniband/mlx5_hw.h b/external_libs/ibverbs/include/infiniband/mlx5_hw.h
index 2ac217d0..bcef1600 100644
--- a/external_libs/ibverbs/include/infiniband/mlx5_hw.h
+++ b/external_libs/ibverbs/include/infiniband/mlx5_hw.h
@@ -31,6 +31,7 @@
#define MLX5_CQ_DB_REQ_NOT (0 << 24)
#define MLX5E_CQE_FORMAT_MASK 0xc
+
enum mlx5_alloc_type { MXM_MLX5_ALLOC_TYPE_DUMMY };
enum mlx5_rsc_type { MXM_MLX5_RSC_TYPE_DUMMY };
enum mlx5_db_method { MXM_MLX5_DB_TYPE_DUMMY };
@@ -51,13 +52,11 @@ enum {
MLX5_OPCODE_SEND_IMM = 0x0b,
MLX5_OPCODE_TSO = 0x0e,
MLX5_OPC_MOD_MPW = 0x01,
- MLX5_OPCODE_LSO_MPW = 0x0e,
MLX5_OPCODE_RDMA_READ = 0x10,
MLX5_OPCODE_ATOMIC_CS = 0x11,
MLX5_OPCODE_ATOMIC_FA = 0x12,
MLX5_OPCODE_ATOMIC_MASKED_CS = 0x14,
MLX5_OPCODE_ATOMIC_MASKED_FA = 0x15,
- MLX5_OPCODE_BIND_MW = 0x18,
MLX5_OPCODE_FMR = 0x19,
MLX5_OPCODE_LOCAL_INVAL = 0x1b,
MLX5_OPCODE_CONFIG_CMD = 0x1f,
@@ -249,7 +248,7 @@ struct mlx5_wqe_umr_ctrl_seg {
uint8_t flags;
uint8_t rsvd0[3];
uint16_t klm_octowords;
- uint16_t bsf_octowords;
+ uint16_t translation_offset;
uint64_t mkey_mask;
uint8_t rsvd1[32];
};
@@ -571,6 +570,7 @@ struct mlx5_wq {
volatile uint32_t *db;
int wqe_shift;
int offset;
+ uint32_t *wr_data;
};
@@ -640,6 +640,7 @@ struct mlx5_qp {
struct mlx5_ah {
struct ibv_ah ibv_ah;
struct mlx5_wqe_av av;
+ int kern_ah;
};
diff --git a/external_libs/ibverbs/include/infiniband/verbs.h b/external_libs/ibverbs/include/infiniband/verbs.h
index 6a8d7cc1..342d0522 100644
--- a/external_libs/ibverbs/include/infiniband/verbs.h
+++ b/external_libs/ibverbs/include/infiniband/verbs.h
@@ -41,6 +41,7 @@
#include <stddef.h>
#include <errno.h>
#include <infiniband/ofa_verbs.h>
+#include <string.h>
#ifdef __cplusplus
# define BEGIN_C_DECLS extern "C" {
@@ -124,7 +125,11 @@ enum ibv_device_cap_flags {
IBV_DEVICE_RC_RNR_NAK_GEN = 1 << 12,
IBV_DEVICE_SRQ_RESIZE = 1 << 13,
IBV_DEVICE_N_NOTIFY_CQ = 1 << 14,
+ IBV_DEVICE_MEM_WINDOW = 1 << 17,
IBV_DEVICE_XRC = 1 << 20,
+ IBV_DEVICE_MEM_MGT_EXTENSIONS = 1 << 21,
+ IBV_DEVICE_MEM_WINDOW_TYPE_2A = 1 << 23,
+ IBV_DEVICE_MEM_WINDOW_TYPE_2B = 1 << 24,
IBV_DEVICE_MANAGED_FLOW_STEERING = 1 << 29
};
@@ -145,7 +150,7 @@ struct ibv_device_attr {
uint32_t hw_ver;
int max_qp;
int max_qp_wr;
- int device_cap_flags;
+ uint32_t device_cap_flags;
int max_sge;
int max_sge_rd;
int max_cq;
@@ -177,6 +182,39 @@ struct ibv_device_attr {
uint8_t phys_port_cnt;
};
+/* An extensible input struct for possible future extensions of the
+ * ibv_query_device_ex verb. */
+struct ibv_query_device_ex_input {
+ uint32_t comp_mask;
+};
+
+enum ibv_odp_transport_cap_bits {
+ IBV_ODP_SUPPORT_SEND = 1 << 0,
+ IBV_ODP_SUPPORT_RECV = 1 << 1,
+ IBV_ODP_SUPPORT_WRITE = 1 << 2,
+ IBV_ODP_SUPPORT_READ = 1 << 3,
+ IBV_ODP_SUPPORT_ATOMIC = 1 << 4,
+};
+
+struct ibv_odp_caps {
+ uint64_t general_caps;
+ struct {
+ uint32_t rc_odp_caps;
+ uint32_t uc_odp_caps;
+ uint32_t ud_odp_caps;
+ } per_transport_caps;
+};
+
+enum ibv_odp_general_caps {
+ IBV_ODP_SUPPORT = 1 << 0,
+};
+
+struct ibv_device_attr_ex {
+ struct ibv_device_attr orig_attr;
+ uint32_t comp_mask;
+ struct ibv_odp_caps odp_caps;
+};
+
enum ibv_mtu {
IBV_MTU_256 = 1,
IBV_MTU_512 = 2,
@@ -327,6 +365,7 @@ enum ibv_wc_opcode {
IBV_WC_COMP_SWAP,
IBV_WC_FETCH_ADD,
IBV_WC_BIND_MW,
+ IBV_WC_LOCAL_INV,
/*
* Set value of IBV_WC_RECV so consumers can test if a completion is a
* receive by testing (opcode & IBV_WC_RECV).
@@ -337,7 +376,8 @@ enum ibv_wc_opcode {
enum ibv_wc_flags {
IBV_WC_GRH = 1 << 0,
- IBV_WC_WITH_IMM = 1 << 1
+ IBV_WC_WITH_IMM = 1 << 1,
+ IBV_WC_WITH_INV = 1 << 3
};
struct ibv_wc {
@@ -346,7 +386,10 @@ struct ibv_wc {
enum ibv_wc_opcode opcode;
uint32_t vendor_err;
uint32_t byte_len;
- uint32_t imm_data; /* in network byte order */
+ /* When (wc_flags & IBV_WC_WITH_IMM): Immediate data in network byte order.
+ * When (wc_flags & IBV_WC_WITH_INV): Stores the invalidated rkey.
+ */
+ uint32_t imm_data;
uint32_t qp_num;
uint32_t src_qp;
int wc_flags;
@@ -361,7 +404,16 @@ enum ibv_access_flags {
IBV_ACCESS_REMOTE_WRITE = (1<<1),
IBV_ACCESS_REMOTE_READ = (1<<2),
IBV_ACCESS_REMOTE_ATOMIC = (1<<3),
- IBV_ACCESS_MW_BIND = (1<<4)
+ IBV_ACCESS_MW_BIND = (1<<4),
+ IBV_ACCESS_ZERO_BASED = (1<<5),
+ IBV_ACCESS_ON_DEMAND = (1<<6),
+};
+
+struct ibv_mw_bind_info {
+ struct ibv_mr *mr;
+ uint64_t addr;
+ uint64_t length;
+ int mw_access_flags; /* use ibv_access_flags */
};
struct ibv_pd {
@@ -389,7 +441,8 @@ enum ibv_rereg_mr_flags {
IBV_REREG_MR_CHANGE_TRANSLATION = (1 << 0),
IBV_REREG_MR_CHANGE_PD = (1 << 1),
IBV_REREG_MR_CHANGE_ACCESS = (1 << 2),
- IBV_REREG_MR_KEEP_VALID = (1 << 3)
+ IBV_REREG_MR_KEEP_VALID = (1 << 3),
+ IBV_REREG_MR_FLAGS_SUPPORTED = ((IBV_REREG_MR_KEEP_VALID << 1) - 1)
};
struct ibv_mr {
@@ -411,6 +464,8 @@ struct ibv_mw {
struct ibv_context *context;
struct ibv_pd *pd;
uint32_t rkey;
+ uint32_t handle;
+ enum ibv_mw_type type;
};
struct ibv_global_route {
@@ -678,7 +733,10 @@ enum ibv_wr_opcode {
IBV_WR_SEND_WITH_IMM,
IBV_WR_RDMA_READ,
IBV_WR_ATOMIC_CMP_AND_SWP,
- IBV_WR_ATOMIC_FETCH_AND_ADD
+ IBV_WR_ATOMIC_FETCH_AND_ADD,
+ IBV_WR_LOCAL_INV,
+ IBV_WR_BIND_MW,
+ IBV_WR_SEND_WITH_INV,
};
enum ibv_send_flags {
@@ -728,6 +786,11 @@ struct ibv_send_wr {
uint32_t xrc_remote_srq_num;
};
+ struct {
+ struct ibv_mw *mw;
+ uint32_t rkey;
+ struct ibv_mw_bind_info bind_info;
+ } bind_mw;
};
struct ibv_recv_wr {
@@ -739,11 +802,8 @@ struct ibv_recv_wr {
struct ibv_mw_bind {
uint64_t wr_id;
- struct ibv_mr *mr;
- void *addr;
- size_t length;
int send_flags;
- int mw_access_flags;
+ struct ibv_mw_bind_info bind_info;
};
struct ibv_srq {
@@ -964,7 +1024,7 @@ struct ibv_context_ops {
int (*dealloc_pd)(struct ibv_pd *pd);
struct ibv_mr * (*reg_mr)(struct ibv_pd *pd, void *addr, size_t length,
int access);
- struct ibv_mr * (*rereg_mr)(struct ibv_mr *mr,
+ int (*rereg_mr)(struct ibv_mr *mr,
int flags,
struct ibv_pd *pd, void *addr,
size_t length,
@@ -1032,6 +1092,10 @@ enum verbs_context_mask {
};
struct verbs_context {
+ int (*query_device_ex)(struct ibv_context *context,
+ const struct ibv_query_device_ex_input *input,
+ struct ibv_device_attr_ex *attr,
+ size_t attr_size);
/* "grows up" - new fields go here */
int (*_reserved_2) (void);
int (*destroy_flow) (struct ibv_flow *flow);
@@ -1234,6 +1298,26 @@ static inline int ibv_close_xrcd(struct ibv_xrcd *xrcd)
struct ibv_mr *ibv_reg_mr(struct ibv_pd *pd, void *addr,
size_t length, int access);
+
+enum ibv_rereg_mr_err_code {
+ /* Old MR is valid, invalid input */
+ IBV_REREG_MR_ERR_INPUT = -1,
+ /* Old MR is valid, failed via dont fork on new address range */
+ IBV_REREG_MR_ERR_DONT_FORK_NEW = -2,
+ /* New MR is valid, failed via do fork on old address range */
+ IBV_REREG_MR_ERR_DO_FORK_OLD = -3,
+ /* MR shouldn't be used, command error */
+ IBV_REREG_MR_ERR_CMD = -4,
+ /* MR shouldn't be used, command error, invalid fork state on new address range */
+ IBV_REREG_MR_ERR_CMD_AND_DO_FORK_NEW = -5,
+};
+
+/**
+ * ibv_rereg_mr - Re-Register a memory region
+ */
+int ibv_rereg_mr(struct ibv_mr *mr, int flags,
+ struct ibv_pd *pd, void *addr,
+ size_t length, int access);
/**
* ibv_dereg_mr - Deregister a memory region
*/
@@ -1243,18 +1327,16 @@ int ibv_dereg_mr(struct ibv_mr *mr);
* ibv_alloc_mw - Allocate a memory window
*/
static inline struct ibv_mw *ibv_alloc_mw(struct ibv_pd *pd,
- enum ibv_mw_type type)
+ enum ibv_mw_type type)
{
+ struct ibv_mw *mw;
+
if (!pd->context->ops.alloc_mw) {
errno = ENOSYS;
return NULL;
}
- struct ibv_mw *mw = pd->context->ops.alloc_mw(pd, type);
- if (mw) {
- mw->context = pd->context;
- mw->pd = pd;
- }
+ mw = pd->context->ops.alloc_mw(pd, type);
return mw;
}
@@ -1267,16 +1349,29 @@ static inline int ibv_dealloc_mw(struct ibv_mw *mw)
}
/**
- * ibv_inc_rkey - increase the 8 lsb in the given rkey
+ * ibv_inc_rkey - Increase the 8 lsb in the given rkey
*/
static inline uint32_t ibv_inc_rkey(uint32_t rkey)
{
const uint32_t mask = 0x000000ff;
- uint8_t newtag = (uint8_t) ((rkey + 1) & mask);
+ uint8_t newtag = (uint8_t)((rkey + 1) & mask);
+
return (rkey & ~mask) | newtag;
}
/**
+ * ibv_bind_mw - Bind a memory window to a region
+ */
+static inline int ibv_bind_mw(struct ibv_qp *qp, struct ibv_mw *mw,
+ struct ibv_mw_bind *mw_bind)
+{
+ if (mw->type != IBV_MW_TYPE_1)
+ return EINVAL;
+
+ return mw->context->ops.bind_mw(qp, mw, mw_bind);
+}
+
+/**
* ibv_create_comp_channel - Create a completion event channel
*/
struct ibv_comp_channel *ibv_create_comp_channel(struct ibv_context *context);
@@ -1489,6 +1584,33 @@ ibv_create_qp_ex(struct ibv_context *context, struct ibv_qp_init_attr_ex *qp_ini
}
/**
+ * ibv_query_device_ex - Get extended device properties
+ */
+static inline int
+ibv_query_device_ex(struct ibv_context *context,
+ const struct ibv_query_device_ex_input *input,
+ struct ibv_device_attr_ex *attr)
+{
+ struct verbs_context *vctx;
+ int ret;
+
+ vctx = verbs_get_ctx_op(context, query_device_ex);
+ if (!vctx)
+ goto legacy;
+
+ ret = vctx->query_device_ex(context, input, attr, sizeof(*attr));
+ if (ret == ENOSYS)
+ goto legacy;
+
+ return ret;
+
+legacy:
+ memset(attr, 0, sizeof(*attr));
+ ret = ibv_query_device(context, &attr->orig_attr);
+ return ret;
+}
+
+/**
* ibv_open_qp - Open a shareable queue pair.
*/
static inline struct ibv_qp *
diff --git a/external_libs/ibverbs/include/infiniband/verbs_exp.h b/external_libs/ibverbs/include/infiniband/verbs_exp.h
index ae94deb8..9fef8187 100644
--- a/external_libs/ibverbs/include/infiniband/verbs_exp.h
+++ b/external_libs/ibverbs/include/infiniband/verbs_exp.h
@@ -165,8 +165,9 @@ enum ibv_exp_device_attr_comp_mask {
IBV_EXP_DEVICE_ATTR_RX_PAD_END_ALIGN = (1 << 20),
IBV_EXP_DEVICE_ATTR_TSO_CAPS = (1 << 21),
IBV_EXP_DEVICE_ATTR_PACKET_PACING_CAPS = (1 << 22),
+ IBV_EXP_DEVICE_ATTR_EC_GF_BASE = (1 << 23),
/* set supported bits for validity check */
- IBV_EXP_DEVICE_ATTR_RESERVED = (1 << 23),
+ IBV_EXP_DEVICE_ATTR_RESERVED = (1 << 24),
};
struct ibv_exp_device_calc_cap {
@@ -197,7 +198,7 @@ enum ibv_odp_general_cap_bits {
IBV_EXP_ODP_SUPPORT = 1 << 0,
};
-enum ibv_odp_transport_cap_bits {
+enum ibv_exp_odp_transport_cap_bits {
IBV_EXP_ODP_SUPPORT_SEND = 1 << 0,
IBV_EXP_ODP_SUPPORT_RECV = 1 << 1,
IBV_EXP_ODP_SUPPORT_WRITE = 1 << 2,
@@ -349,6 +350,11 @@ struct ibv_exp_device_attr {
int rx_pad_end_addr_align;
struct ibv_exp_tso_caps tso_caps;
struct ibv_exp_packet_pacing_caps packet_pacing_caps;
+ uint32_t ec_w_mask;
+};
+
+enum {
+ IBV_EXP_ACCESS_FLAGS_SHIFT = 0x0F
};
enum ibv_exp_access_flags {
@@ -428,10 +434,10 @@ enum ibv_exp_wr_opcode {
IBV_EXP_WR_RDMA_READ = IBV_WR_RDMA_READ,
IBV_EXP_WR_ATOMIC_CMP_AND_SWP = IBV_WR_ATOMIC_CMP_AND_SWP,
IBV_EXP_WR_ATOMIC_FETCH_AND_ADD = IBV_WR_ATOMIC_FETCH_AND_ADD,
+ IBV_EXP_WR_LOCAL_INV = IBV_WR_LOCAL_INV,
+ IBV_EXP_WR_BIND_MW = IBV_WR_BIND_MW,
+ IBV_EXP_WR_SEND_WITH_INV = IBV_WR_SEND_WITH_INV,
- IBV_EXP_WR_SEND_WITH_INV = 8 + IBV_EXP_START_ENUM,
- IBV_EXP_WR_LOCAL_INV = 10 + IBV_EXP_START_ENUM,
- IBV_EXP_WR_BIND_MW = 14 + IBV_EXP_START_ENUM,
IBV_EXP_WR_TSO = 15 + IBV_EXP_START_ENUM,
IBV_EXP_WR_SEND_ENABLE = 0x20 + IBV_EXP_START_ENUM,
IBV_EXP_WR_RECV_ENABLE,
@@ -1083,22 +1089,6 @@ struct ibv_exp_cq_attr {
uint32_t cq_cap_flags;
};
-enum ibv_exp_rereg_mr_flags {
- IBV_EXP_REREG_MR_CHANGE_TRANSLATION = IBV_REREG_MR_CHANGE_TRANSLATION,
- IBV_EXP_REREG_MR_CHANGE_PD = IBV_REREG_MR_CHANGE_PD,
- IBV_EXP_REREG_MR_CHANGE_ACCESS = IBV_REREG_MR_CHANGE_ACCESS,
- IBV_EXP_REREG_MR_KEEP_VALID = IBV_REREG_MR_KEEP_VALID,
- IBV_EXP_REREG_MR_FLAGS_SUPPORTED = ((IBV_EXP_REREG_MR_KEEP_VALID << 1) - 1)
-};
-
-enum ibv_exp_rereg_mr_attr_mask {
- IBV_EXP_REREG_MR_ATTR_RESERVED = (1 << 0)
-};
-
-struct ibv_exp_rereg_mr_attr {
- uint32_t comp_mask; /* use ibv_exp_rereg_mr_attr_mask */
-};
-
/*
* Flags for ibv_exp_reg_shared_mr_in struct comp_mask
*/
@@ -1317,7 +1307,7 @@ enum ibv_exp_wc_opcode {
IBV_EXP_WC_COMP_SWAP,
IBV_EXP_WC_FETCH_ADD,
IBV_EXP_WC_BIND_MW,
- IBV_EXP_WC_LOCAL_INV = 7,
+ IBV_EXP_WC_LOCAL_INV,
IBV_EXP_WC_MASKED_COMP_SWAP = 9,
IBV_EXP_WC_MASKED_FETCH_ADD = 10,
IBV_EXP_WC_TSO,
@@ -1333,8 +1323,8 @@ enum ibv_exp_wc_opcode {
enum ibv_exp_wc_flags {
IBV_EXP_WC_GRH = IBV_WC_GRH,
IBV_EXP_WC_WITH_IMM = IBV_WC_WITH_IMM,
+ IBV_EXP_WC_WITH_INV = IBV_WC_WITH_INV,
- IBV_EXP_WC_WITH_INV = IBV_EXP_START_FLAG << 2,
IBV_EXP_WC_WITH_SL = IBV_EXP_START_FLAG << 4,
IBV_EXP_WC_WITH_SLID = IBV_EXP_START_FLAG << 5,
IBV_EXP_WC_WITH_TIMESTAMP = IBV_EXP_START_FLAG << 6,
@@ -1516,18 +1506,6 @@ struct ibv_exp_mkey_list_container_attr {
};
/*
- * Flags for ibv_exp_rereg_out struct comp_mask
- */
-enum ibv_exp_rereg_mr_comp_mask {
- IBV_EXP_REREG_MR_RESERVED = (1 << 0)
-};
-
-struct ibv_exp_rereg_out {
- int need_dofork;
- uint32_t comp_mask; /* use ibv_exp_rereg_mr_comp_mask */
-};
-
-/*
* Flags for ibv_exp_dereg_out struct comp_mask
*/
enum ibv_exp_dereg_mr_comp_mask {
@@ -2218,6 +2196,8 @@ struct ibv_exp_peer_abort_peek;
struct verbs_context_exp {
/* "grows up" - new fields go here */
+ struct ibv_ah * (*drv_exp_ibv_create_kah)(struct ibv_pd *pd,
+ struct ibv_exp_ah_attr *attr_exp);
int (*exp_peer_peek_cq)(struct ibv_cq *ibcq,
struct ibv_exp_peer_peek *peek_ctx);
int (*exp_peer_abort_peek_cq)(struct ibv_cq *ibcq,
@@ -2285,12 +2265,8 @@ struct verbs_context_exp {
const char *value, int overwrite);
struct verbs_environment *venv;
int (*drv_exp_dereg_mr)(struct ibv_mr *mr, struct ibv_exp_dereg_out *out);
- int (*exp_rereg_mr)(struct ibv_mr *mr, int flags, struct ibv_pd *pd,
- void *addr, size_t length, uint64_t access,
- struct ibv_exp_rereg_mr_attr *attr);
- int (*drv_exp_rereg_mr)(struct ibv_mr *mr, int flags, struct ibv_pd *pd,
- void *addr, size_t length, uint64_t access,
- struct ibv_exp_rereg_mr_attr *attr, struct ibv_exp_rereg_out *out);
+ void (*ABI_placeholder2)(void);
+ void (*ABI_placeholder1)(void);
int (*drv_exp_prefetch_mr)(struct ibv_mr *mr,
struct ibv_exp_prefetch_attr *attr);
int (*lib_exp_prefetch_mr)(struct ibv_mr *mr,
@@ -2368,6 +2344,7 @@ struct verbs_context_exp {
/* must be located as last field */
};
+#define ETHERNET_LL_SIZE 6
static inline struct verbs_context_exp *verbs_get_exp_ctx(struct ibv_context *ctx)
{
@@ -2955,7 +2932,7 @@ static inline int ibv_exp_query_port(struct ibv_context *context,
&port_attr->port_attr);
/* Check that only valid flags were given */
- if ((!port_attr->comp_mask & IBV_EXP_QUERY_PORT_ATTR_MASK1) ||
+ if (!(port_attr->comp_mask & IBV_EXP_QUERY_PORT_ATTR_MASK1) ||
(port_attr->comp_mask & ~IBV_EXP_QUERY_PORT_ATTR_MASKS) ||
(port_attr->mask1 & ~IBV_EXP_QUERY_PORT_MASK)) {
errno = EINVAL;
@@ -3357,28 +3334,6 @@ ibv_exp_alloc_mkey_list_memory(struct ibv_exp_mkey_list_container_attr *attr)
}
/**
- * ibv_rereg_mr - Re-Register a memory region
- *
- * For exp_access use ibv_exp_access_flags
- */
-static inline int ibv_exp_rereg_mr(struct ibv_mr *mr, int flags,
- struct ibv_pd *pd, void *addr,
- size_t length, uint64_t exp_access,
- struct ibv_exp_rereg_mr_attr *attr)
-{
- struct verbs_context_exp *vctx;
-
- vctx = verbs_get_exp_ctx_op(mr->context, exp_rereg_mr);
- if (!vctx)
- return errno = ENOSYS;
-
- IBV_EXP_RET_EINVAL_ON_INVALID_COMP_MASK(attr->comp_mask,
- IBV_EXP_REREG_MR_ATTR_RESERVED - 1);
-
- return vctx->exp_rereg_mr(mr, flags, pd, addr, length, exp_access, attr);
-}
-
-/**
* ibv_exp_create_res_domain - create resource domain
*/
static inline struct ibv_exp_res_domain *ibv_exp_create_res_domain(struct ibv_context *context,
diff --git a/external_libs/ibverbs/libibverbs.a b/external_libs/ibverbs/libibverbs.a
index e62d4c4e..3565b61c 100644
--- a/external_libs/ibverbs/libibverbs.a
+++ b/external_libs/ibverbs/libibverbs.a
Binary files differ
diff --git a/external_libs/ibverbs/libibverbs.la b/external_libs/ibverbs/libibverbs.la
deleted file mode 100644
index 332deb34..00000000
--- a/external_libs/ibverbs/libibverbs.la
+++ /dev/null
@@ -1,41 +0,0 @@
-# libibverbs.la - a libtool library file
-# Generated by libtool (GNU libtool) 2.4.2
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='libibverbs.so.1'
-
-# Names of this library.
-library_names='libibverbs.so.1.0.0 libibverbs.so.1 libibverbs.so'
-
-# The name of the static archive.
-old_library='libibverbs.a'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags=''
-
-# Libraries that this one depends upon.
-dependency_libs=' -lnl-route-3 -lnl-3 -lpthread -ldl'
-
-# Names of additional weak libraries provided by this library
-weak_library_names=''
-
-# Version information for libibverbs.
-current=1
-age=0
-revision=0
-
-# Is this an already installed library?
-installed=no
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=no
-
-# Files to dlopen/dlpreopen
-dlopen=''
-dlpreopen=''
-
-# Directory that this library needs to be installed in:
-libdir='/usr/local/lib'
diff --git a/external_libs/ibverbs/libibverbs.lai b/external_libs/ibverbs/libibverbs.lai
deleted file mode 100644
index 3580def8..00000000
--- a/external_libs/ibverbs/libibverbs.lai
+++ /dev/null
@@ -1,41 +0,0 @@
-# libibverbs.la - a libtool library file
-# Generated by libtool (GNU libtool) 2.4.2
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='libibverbs.so.1'
-
-# Names of this library.
-library_names='libibverbs.so.1.0.0 libibverbs.so.1 libibverbs.so'
-
-# The name of the static archive.
-old_library='libibverbs.a'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags=''
-
-# Libraries that this one depends upon.
-dependency_libs=' -lnl-route-3 -lnl-3 -lpthread -ldl'
-
-# Names of additional weak libraries provided by this library
-weak_library_names=''
-
-# Version information for libibverbs.
-current=1
-age=0
-revision=0
-
-# Is this an already installed library?
-installed=yes
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=no
-
-# Files to dlopen/dlpreopen
-dlopen=''
-dlpreopen=''
-
-# Directory that this library needs to be installed in:
-libdir='/usr/local/lib'
diff --git a/external_libs/ibverbs/libibverbs.so b/external_libs/ibverbs/libibverbs.so
index bd93569d..dbcd20a7 100644
--- a/external_libs/ibverbs/libibverbs.so
+++ b/external_libs/ibverbs/libibverbs.so
Binary files differ
diff --git a/external_libs/ibverbs/libibverbs.so.1 b/external_libs/ibverbs/libibverbs.so.1
index bd93569d..dbcd20a7 100644
--- a/external_libs/ibverbs/libibverbs.so.1
+++ b/external_libs/ibverbs/libibverbs.so.1
Binary files differ
diff --git a/external_libs/ibverbs/libibverbs.so.1.0.0 b/external_libs/ibverbs/libibverbs.so.1.0.0
index bd93569d..dbcd20a7 100644
--- a/external_libs/ibverbs/libibverbs.so.1.0.0
+++ b/external_libs/ibverbs/libibverbs.so.1.0.0
Binary files differ
diff --git a/linux_dpdk/ws_main.py b/linux_dpdk/ws_main.py
index a55fe6be..190b391e 100755
--- a/linux_dpdk/ws_main.py
+++ b/linux_dpdk/ws_main.py
@@ -1101,7 +1101,7 @@ files_list=[
'daemon_server'
];
-files_dir=['cap2','avl','cfg','ko','automation', 'external_libs', 'python-lib','stl','exp','dumy_libs']
+files_dir=['cap2','avl','cfg','ko','automation', 'external_libs', 'python-lib','stl','exp']
class Env(object):
diff --git a/scripts/dumy_libs/libibverbs.so.1 b/scripts/dumy_libs/libibverbs.so.1
deleted file mode 100644
index bd93569d..00000000
--- a/scripts/dumy_libs/libibverbs.so.1
+++ /dev/null
Binary files differ
diff --git a/scripts/dumy_libs/libnl-3.so.200 b/scripts/dumy_libs/libnl-3.so.200
deleted file mode 100644
index 9eaaac9d..00000000
--- a/scripts/dumy_libs/libnl-3.so.200
+++ /dev/null
Binary files differ
diff --git a/scripts/dumy_libs/libnl-route-3.so.200 b/scripts/dumy_libs/libnl-route-3.so.200
deleted file mode 100644
index 9e1835f1..00000000
--- a/scripts/dumy_libs/libnl-route-3.so.200
+++ /dev/null
Binary files differ