First merge window pull request for 4.16
- Misc small driver fixups to
bnxt_re/hfi1/qib/hns/ocrdma/rdmavt/vmw_pvrdma/nes
- Several major feature adds to bnxt_re driver: SRIOV VF RoCE support,
HugePages support, extended hardware stats support, and SRQ support
- A notable number of fixes to the i40iw driver from debugging scale up
testing
- More work to enable the new hip08 chip in the hns driver
- Misc small ULP fixups to srp/srpt//ipoib
- Preparation for srp initiator and target to support the RDMA-CM
protocol for connections
- Add RDMA-CM support to srp initiator, srp target is still a WIP
- Fixes for a couple of places where ipoib could spam the dmesg log
- Fix encode/decode of FDR/EDR data rates in the core
- Many patches from Parav with ongoing work to clean up inconsistencies
and bugs in RoCE support around the rdma_cm
- mlx5 driver support for the userspace features 'thread domain', 'wallclock
timestamps' and 'DV Direct Connected transport'. Support for the firmware
dual port rocee capability
- Core support for more than 32 rdma devices in the char dev allocation
- kernel doc updates from Randy Dunlap
- New netlink uAPI for inspecting RDMA objects similar in spirit to 'ss'
- One minor change to the kobject code acked by GKH
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCgAGBQJacfljAAoJEDht9xV+IJsaUnwP+QFJvfIDEfRlfU2rTmcfymPs
Rz9bW1KLgETcJx/XOE2ba2DOaqdFr56TLflsDfEfOSIL8AtzBQqH3vTqEj49bBP7
4JZAkzWllUS/qoYD2XmvOM0IrIfFXzZtLM/lzLi+5dwK26x3GAB9hHXpKzUrJ1vj
I1Naq14qOFXoNBndEtZJqtIKOhR/Pnd6YtxAiNCmViZGdqm3DIU3D4VJhU5B7pO9
j6ovJs16wfJl/gV1iiz9xO49ViVFpwzSIzYE/Q2ZCegcrsF3EEVN2J4vZHkKgDuN
0/Ar/WOvkPzKBFR8hJ7M4kwp0Fy/69/U49s7kpGNxdhML9sU3+Qfse6JYGj0M9L8
01gTM0SShyAZMNAvjVFbIKLQPg806OAit4cooMwlObbwJ6b7B8K0uN17/uVIkIqp
gXqertyl1BLhUtTOby/8Fox/f/oEvaZksKiwcTKSb7D1Y5jGZZUPRknJ5SwAFWQB
RiTPJ6mY7BUsM9zuYQtRE8x2mpgIezYXFcrAz7iT76WuoZQgo1QLIyYRM1+MlhnC
wNrp5BtqoVfW2Ps0CbSdxJ9vDtDf3cwLg0RzcCB8+NJJccsRD9IVMDev/TDY5k9U
M9LxxtW3WuulRWgliU0Q9VaswUQoIao16vBMVL7GwUm+ClLvbRVoPe8jxgtfk+W3
GAANAI7Kv/vUoV/6CFfP
=sMXV
-----END PGP SIGNATURE-----
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull RDMA subsystem updates from Jason Gunthorpe:
"Overall this cycle did not have any major excitement, and did not
require any shared branch with netdev.
Lots of driver updates, particularly of the scale-up and performance
variety. The largest body of core work was Parav's patches fixing and
restructing some of the core code to make way for future RDMA
containerization.
Summary:
- misc small driver fixups to
bnxt_re/hfi1/qib/hns/ocrdma/rdmavt/vmw_pvrdma/nes
- several major feature adds to bnxt_re driver: SRIOV VF RoCE
support, HugePages support, extended hardware stats support, and
SRQ support
- a notable number of fixes to the i40iw driver from debugging scale
up testing
- more work to enable the new hip08 chip in the hns driver
- misc small ULP fixups to srp/srpt//ipoib
- preparation for srp initiator and target to support the RDMA-CM
protocol for connections
- add RDMA-CM support to srp initiator, srp target is still a WIP
- fixes for a couple of places where ipoib could spam the dmesg log
- fix encode/decode of FDR/EDR data rates in the core
- many patches from Parav with ongoing work to clean up
inconsistencies and bugs in RoCE support around the rdma_cm
- mlx5 driver support for the userspace features 'thread domain',
'wallclock timestamps' and 'DV Direct Connected transport'. Support
for the firmware dual port rocee capability
- core support for more than 32 rdma devices in the char dev
allocation
- kernel doc updates from Randy Dunlap
- new netlink uAPI for inspecting RDMA objects similar in spirit to 'ss'
- one minor change to the kobject code acked by Greg KH"
* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (259 commits)
RDMA/nldev: Provide detailed QP information
RDMA/nldev: Provide global resource utilization
RDMA/core: Add resource tracking for create and destroy PDs
RDMA/core: Add resource tracking for create and destroy CQs
RDMA/core: Add resource tracking for create and destroy QPs
RDMA/restrack: Add general infrastructure to track RDMA resources
RDMA/core: Save kernel caller name when creating PD and CQ objects
RDMA/core: Use the MODNAME instead of the function name for pd callers
RDMA: Move enum ib_cq_creation_flags to uapi headers
IB/rxe: Change RDMA_RXE kconfig to use select
IB/qib: remove qib_keys.c
IB/mthca: remove mthca_user.h
RDMA/cm: Fix access to uninitialized variable
RDMA/cma: Use existing netif_is_bond_master function
IB/core: Avoid SGID attributes query while converting GID from OPA to IB
RDMA/mlx5: Avoid memory leak in case of XRCD dealloc failure
IB/umad: Fix use of unprotected device pointer
IB/iser: Combine substrings for three messages
IB/iser: Delete an unnecessary variable initialisation in iser_send_data_out()
IB/iser: Delete an error message for a failed memory allocation in iser_send_data_out()
...
This commit is contained in:
commit
7b1cd95d65
187 changed files with 10232 additions and 4020 deletions
|
|
@ -79,6 +79,11 @@
|
|||
<< __mlx5_dw_bit_off(typ, fld))); \
|
||||
} while (0)
|
||||
|
||||
#define MLX5_ARRAY_SET(typ, p, fld, idx, v) do { \
|
||||
BUILD_BUG_ON(__mlx5_bit_off(typ, fld) % 32); \
|
||||
MLX5_SET(typ, p, fld[idx], v); \
|
||||
} while (0)
|
||||
|
||||
#define MLX5_SET_TO_ONES(typ, p, fld) do { \
|
||||
BUILD_BUG_ON(__mlx5_st_sz_bits(typ) % 32); \
|
||||
*((__be32 *)(p) + __mlx5_dw_off(typ, fld)) = \
|
||||
|
|
@ -244,6 +249,8 @@ enum {
|
|||
MLX5_NON_FP_BFREGS_PER_UAR,
|
||||
MLX5_UARS_IN_PAGE = PAGE_SIZE / MLX5_ADAPTER_PAGE_SIZE,
|
||||
MLX5_NON_FP_BFREGS_IN_PAGE = MLX5_NON_FP_BFREGS_PER_UAR * MLX5_UARS_IN_PAGE,
|
||||
MLX5_MIN_DYN_BFREGS = 512,
|
||||
MLX5_MAX_DYN_BFREGS = 1024,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -284,6 +291,7 @@ enum {
|
|||
MLX5_EVENT_QUEUE_TYPE_QP = 0,
|
||||
MLX5_EVENT_QUEUE_TYPE_RQ = 1,
|
||||
MLX5_EVENT_QUEUE_TYPE_SQ = 2,
|
||||
MLX5_EVENT_QUEUE_TYPE_DCT = 6,
|
||||
};
|
||||
|
||||
enum mlx5_event {
|
||||
|
|
@ -319,6 +327,8 @@ enum mlx5_event {
|
|||
MLX5_EVENT_TYPE_PAGE_FAULT = 0xc,
|
||||
MLX5_EVENT_TYPE_NIC_VPORT_CHANGE = 0xd,
|
||||
|
||||
MLX5_EVENT_TYPE_DCT_DRAINED = 0x1c,
|
||||
|
||||
MLX5_EVENT_TYPE_FPGA_ERROR = 0x20,
|
||||
};
|
||||
|
||||
|
|
@ -611,6 +621,11 @@ struct mlx5_eqe_pps {
|
|||
u8 rsvd2[12];
|
||||
} __packed;
|
||||
|
||||
struct mlx5_eqe_dct {
|
||||
__be32 reserved[6];
|
||||
__be32 dctn;
|
||||
};
|
||||
|
||||
union ev_data {
|
||||
__be32 raw[7];
|
||||
struct mlx5_eqe_cmd cmd;
|
||||
|
|
@ -626,6 +641,7 @@ union ev_data {
|
|||
struct mlx5_eqe_vport_change vport_change;
|
||||
struct mlx5_eqe_port_module port_module;
|
||||
struct mlx5_eqe_pps pps;
|
||||
struct mlx5_eqe_dct dct;
|
||||
} __packed;
|
||||
|
||||
struct mlx5_eqe {
|
||||
|
|
|
|||
|
|
@ -155,6 +155,13 @@ enum mlx5_dcbx_oper_mode {
|
|||
MLX5E_DCBX_PARAM_VER_OPER_AUTO = 0x3,
|
||||
};
|
||||
|
||||
enum mlx5_dct_atomic_mode {
|
||||
MLX5_ATOMIC_MODE_DCT_OFF = 20,
|
||||
MLX5_ATOMIC_MODE_DCT_NONE = 0 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
MLX5_ATOMIC_MODE_DCT_IB_COMP = 1 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
MLX5_ATOMIC_MODE_DCT_CX = 2 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_ATOMIC_OPS_CMP_SWAP = 1 << 0,
|
||||
MLX5_ATOMIC_OPS_FETCH_ADD = 1 << 1,
|
||||
|
|
@ -231,6 +238,9 @@ struct mlx5_bfreg_info {
|
|||
u32 ver;
|
||||
bool lib_uar_4k;
|
||||
u32 num_sys_pages;
|
||||
u32 num_static_sys_pages;
|
||||
u32 total_num_bfregs;
|
||||
u32 num_dyn_bfregs;
|
||||
};
|
||||
|
||||
struct mlx5_cmd_first {
|
||||
|
|
@ -430,6 +440,7 @@ enum mlx5_res_type {
|
|||
MLX5_RES_SRQ = 3,
|
||||
MLX5_RES_XSRQ = 4,
|
||||
MLX5_RES_XRQ = 5,
|
||||
MLX5_RES_DCT = MLX5_EVENT_QUEUE_TYPE_DCT,
|
||||
};
|
||||
|
||||
struct mlx5_core_rsc_common {
|
||||
|
|
@ -788,6 +799,7 @@ struct mlx5_clock {
|
|||
u32 nominal_c_mult;
|
||||
unsigned long overflow_period;
|
||||
struct delayed_work overflow_work;
|
||||
struct mlx5_core_dev *mdev;
|
||||
struct ptp_clock *ptp;
|
||||
struct ptp_clock_info ptp_info;
|
||||
struct mlx5_pps pps_info;
|
||||
|
|
@ -826,7 +838,7 @@ struct mlx5_core_dev {
|
|||
struct mlx5e_resources mlx5e_res;
|
||||
struct {
|
||||
struct mlx5_rsvd_gids reserved_gids;
|
||||
atomic_t roce_en;
|
||||
u32 roce_en;
|
||||
} roce;
|
||||
#ifdef CONFIG_MLX5_FPGA
|
||||
struct mlx5_fpga_device *fpga;
|
||||
|
|
@ -835,6 +847,8 @@ struct mlx5_core_dev {
|
|||
struct cpu_rmap *rmap;
|
||||
#endif
|
||||
struct mlx5_clock clock;
|
||||
struct mlx5_ib_clock_info *clock_info;
|
||||
struct page *clock_info_page;
|
||||
};
|
||||
|
||||
struct mlx5_db {
|
||||
|
|
@ -1103,7 +1117,7 @@ void mlx5_free_bfreg(struct mlx5_core_dev *mdev, struct mlx5_sq_bfreg *bfreg);
|
|||
unsigned int mlx5_core_reserved_gids_count(struct mlx5_core_dev *dev);
|
||||
int mlx5_core_roce_gid_set(struct mlx5_core_dev *dev, unsigned int index,
|
||||
u8 roce_version, u8 roce_l3_type, const u8 *gid,
|
||||
const u8 *mac, bool vlan, u16 vlan_id);
|
||||
const u8 *mac, bool vlan, u16 vlan_id, u8 port_num);
|
||||
|
||||
static inline int fw_initializing(struct mlx5_core_dev *dev)
|
||||
{
|
||||
|
|
@ -1225,6 +1239,31 @@ static inline bool mlx5_rl_is_supported(struct mlx5_core_dev *dev)
|
|||
return !!(dev->priv.rl_table.max_size);
|
||||
}
|
||||
|
||||
static inline int mlx5_core_is_mp_slave(struct mlx5_core_dev *dev)
|
||||
{
|
||||
return MLX5_CAP_GEN(dev, affiliate_nic_vport_criteria) &&
|
||||
MLX5_CAP_GEN(dev, num_vhca_ports) <= 1;
|
||||
}
|
||||
|
||||
static inline int mlx5_core_is_mp_master(struct mlx5_core_dev *dev)
|
||||
{
|
||||
return MLX5_CAP_GEN(dev, num_vhca_ports) > 1;
|
||||
}
|
||||
|
||||
static inline int mlx5_core_mp_enabled(struct mlx5_core_dev *dev)
|
||||
{
|
||||
return mlx5_core_is_mp_slave(dev) ||
|
||||
mlx5_core_is_mp_master(dev);
|
||||
}
|
||||
|
||||
static inline int mlx5_core_native_port_num(struct mlx5_core_dev *dev)
|
||||
{
|
||||
if (!mlx5_core_mp_enabled(dev))
|
||||
return 1;
|
||||
|
||||
return MLX5_CAP_GEN(dev, native_port_num);
|
||||
}
|
||||
|
||||
enum {
|
||||
MLX5_TRIGGERED_CMD_COMP = (u64)1 << 32,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -502,7 +502,7 @@ struct mlx5_ifc_ads_bits {
|
|||
u8 dei_cfi[0x1];
|
||||
u8 eth_prio[0x3];
|
||||
u8 sl[0x4];
|
||||
u8 port[0x8];
|
||||
u8 vhca_port_num[0x8];
|
||||
u8 rmac_47_32[0x10];
|
||||
|
||||
u8 rmac_31_0[0x20];
|
||||
|
|
@ -794,7 +794,10 @@ enum {
|
|||
};
|
||||
|
||||
struct mlx5_ifc_cmd_hca_cap_bits {
|
||||
u8 reserved_at_0[0x80];
|
||||
u8 reserved_at_0[0x30];
|
||||
u8 vhca_id[0x10];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
|
||||
u8 log_max_srq_sz[0x8];
|
||||
u8 log_max_qp_sz[0x8];
|
||||
|
|
@ -1067,7 +1070,12 @@ struct mlx5_ifc_cmd_hca_cap_bits {
|
|||
u8 reserved_at_5f8[0x3];
|
||||
u8 log_max_xrq[0x5];
|
||||
|
||||
u8 reserved_at_600[0x200];
|
||||
u8 affiliate_nic_vport_criteria[0x8];
|
||||
u8 native_port_num[0x8];
|
||||
u8 num_vhca_ports[0x8];
|
||||
u8 reserved_at_618[0x6];
|
||||
u8 sw_owner_id[0x1];
|
||||
u8 reserved_at_61f[0x1e1];
|
||||
};
|
||||
|
||||
enum mlx5_flow_destination_type {
|
||||
|
|
@ -2616,7 +2624,12 @@ struct mlx5_ifc_nic_vport_context_bits {
|
|||
u8 event_on_mc_address_change[0x1];
|
||||
u8 event_on_uc_address_change[0x1];
|
||||
|
||||
u8 reserved_at_40[0xf0];
|
||||
u8 reserved_at_40[0xc];
|
||||
|
||||
u8 affiliation_criteria[0x4];
|
||||
u8 affiliated_vhca_id[0x10];
|
||||
|
||||
u8 reserved_at_60[0xd0];
|
||||
|
||||
u8 mtu[0x10];
|
||||
|
||||
|
|
@ -3259,7 +3272,8 @@ struct mlx5_ifc_set_roce_address_in_bits {
|
|||
u8 op_mod[0x10];
|
||||
|
||||
u8 roce_address_index[0x10];
|
||||
u8 reserved_at_50[0x10];
|
||||
u8 reserved_at_50[0xc];
|
||||
u8 vhca_port_num[0x4];
|
||||
|
||||
u8 reserved_at_60[0x20];
|
||||
|
||||
|
|
@ -3879,7 +3893,8 @@ struct mlx5_ifc_query_roce_address_in_bits {
|
|||
u8 op_mod[0x10];
|
||||
|
||||
u8 roce_address_index[0x10];
|
||||
u8 reserved_at_50[0x10];
|
||||
u8 reserved_at_50[0xc];
|
||||
u8 vhca_port_num[0x4];
|
||||
|
||||
u8 reserved_at_60[0x20];
|
||||
};
|
||||
|
|
@ -5311,7 +5326,9 @@ struct mlx5_ifc_modify_nic_vport_context_out_bits {
|
|||
};
|
||||
|
||||
struct mlx5_ifc_modify_nic_vport_field_select_bits {
|
||||
u8 reserved_at_0[0x14];
|
||||
u8 reserved_at_0[0x12];
|
||||
u8 affiliation[0x1];
|
||||
u8 reserved_at_e[0x1];
|
||||
u8 disable_uc_local_lb[0x1];
|
||||
u8 disable_mc_local_lb[0x1];
|
||||
u8 node_guid[0x1];
|
||||
|
|
@ -5532,6 +5549,7 @@ struct mlx5_ifc_init_hca_in_bits {
|
|||
u8 op_mod[0x10];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
u8 sw_owner_id[4][0x20];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_init2rtr_qp_out_bits {
|
||||
|
|
|
|||
|
|
@ -473,6 +473,11 @@ struct mlx5_core_qp {
|
|||
int pid;
|
||||
};
|
||||
|
||||
struct mlx5_core_dct {
|
||||
struct mlx5_core_qp mqp;
|
||||
struct completion drained;
|
||||
};
|
||||
|
||||
struct mlx5_qp_path {
|
||||
u8 fl_free_ar;
|
||||
u8 rsvd3;
|
||||
|
|
@ -549,6 +554,9 @@ static inline struct mlx5_core_mkey *__mlx5_mr_lookup(struct mlx5_core_dev *dev,
|
|||
return radix_tree_lookup(&dev->priv.mkey_table.tree, key);
|
||||
}
|
||||
|
||||
int mlx5_core_create_dct(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_dct *qp,
|
||||
u32 *in, int inlen);
|
||||
int mlx5_core_create_qp(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_qp *qp,
|
||||
u32 *in,
|
||||
|
|
@ -558,8 +566,12 @@ int mlx5_core_qp_modify(struct mlx5_core_dev *dev, u16 opcode,
|
|||
struct mlx5_core_qp *qp);
|
||||
int mlx5_core_destroy_qp(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_qp *qp);
|
||||
int mlx5_core_destroy_dct(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_dct *dct);
|
||||
int mlx5_core_qp_query(struct mlx5_core_dev *dev, struct mlx5_core_qp *qp,
|
||||
u32 *out, int outlen);
|
||||
int mlx5_core_dct_query(struct mlx5_core_dev *dev, struct mlx5_core_dct *dct,
|
||||
u32 *out, int outlen);
|
||||
|
||||
int mlx5_core_set_delay_drop(struct mlx5_core_dev *dev,
|
||||
u32 timeout_usec);
|
||||
|
|
|
|||
|
|
@ -116,4 +116,8 @@ int mlx5_core_modify_hca_vport_context(struct mlx5_core_dev *dev,
|
|||
struct mlx5_hca_vport_context *req);
|
||||
int mlx5_nic_vport_update_local_lb(struct mlx5_core_dev *mdev, bool enable);
|
||||
int mlx5_nic_vport_query_local_lb(struct mlx5_core_dev *mdev, bool *status);
|
||||
|
||||
int mlx5_nic_vport_affiliate_multiport(struct mlx5_core_dev *master_mdev,
|
||||
struct mlx5_core_dev *port_mdev);
|
||||
int mlx5_nic_vport_unaffiliate_multiport(struct mlx5_core_dev *port_mdev);
|
||||
#endif /* __MLX5_VPORT_H__ */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue