Merge branch 'mlx5_ipoib_qpn' into rdma.git for-next
Michael Guralnik says: ==================== This series handles IPoIB child interface creation with setting interface's HW address. In current implementation, lladdr requested by user is ignored and overwritten. Child interface gets the same GID as the parent interface and a QP number which is assigned by the underlying drivers. In this series we fix this behavior so that user's requested address is assigned to the newly created interface. As specific QP number request is not supported for all vendors, QP number requested by user will still be overwritten when this is not supported. Behavior of creation of child interfaces through the sysfs mechanism or without specifying a requested address, stays the same. ==================== Based on the mlx5-next branch at git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux due to dependencies. * branch 'mlx5_ipoib_qpn': RDMA/ipoib: Handle user-supplied address when creating child net/mlx5: Enable QP number request when creating IPoIB underlay QP Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
Коммит
f11f3f76c7
|
@ -1892,8 +1892,15 @@ static void ipoib_child_init(struct net_device *ndev)
|
|||
|
||||
priv->max_ib_mtu = ppriv->max_ib_mtu;
|
||||
set_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags);
|
||||
memcpy(priv->dev->dev_addr, ppriv->dev->dev_addr, INFINIBAND_ALEN);
|
||||
memcpy(&priv->local_gid, &ppriv->local_gid, sizeof(priv->local_gid));
|
||||
if (memchr_inv(priv->dev->dev_addr, 0, INFINIBAND_ALEN))
|
||||
memcpy(&priv->local_gid, priv->dev->dev_addr + 4,
|
||||
sizeof(priv->local_gid));
|
||||
else {
|
||||
memcpy(priv->dev->dev_addr, ppriv->dev->dev_addr,
|
||||
INFINIBAND_ALEN);
|
||||
memcpy(&priv->local_gid, &ppriv->local_gid,
|
||||
sizeof(priv->local_gid));
|
||||
}
|
||||
}
|
||||
|
||||
static int ipoib_ndo_init(struct net_device *ndev)
|
||||
|
|
|
@ -182,7 +182,7 @@ mlx5e_notify_hw(struct mlx5_wq_cyc *wq, u16 pc, void __iomem *uar_map,
|
|||
|
||||
static inline bool mlx5e_transport_inline_tx_wqe(struct mlx5_wqe_ctrl_seg *cseg)
|
||||
{
|
||||
return cseg && !!cseg->tisn;
|
||||
return cseg && !!cseg->tis_tir_num;
|
||||
}
|
||||
|
||||
static inline u8
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#define MLX5E_KTLS_PROGRESS_WQE_SZ \
|
||||
(offsetof(struct mlx5e_tx_wqe, tls_progress_params_ctx) + \
|
||||
MLX5_ST_SZ_BYTES(tls_progress_params))
|
||||
sizeof(struct mlx5_wqe_tls_progress_params_seg))
|
||||
#define MLX5E_KTLS_PROGRESS_WQEBBS \
|
||||
(DIV_ROUND_UP(MLX5E_KTLS_PROGRESS_WQE_SZ, MLX5_SEND_WQE_BB))
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ build_static_params(struct mlx5e_umr_wqe *wqe, u16 pc, u32 sqn,
|
|||
cseg->qpn_ds = cpu_to_be32((sqn << MLX5_WQE_CTRL_QPN_SHIFT) |
|
||||
STATIC_PARAMS_DS_CNT);
|
||||
cseg->fm_ce_se = fence ? MLX5_FENCE_MODE_INITIATOR_SMALL : 0;
|
||||
cseg->tisn = cpu_to_be32(priv_tx->tisn << 8);
|
||||
cseg->tis_tir_num = cpu_to_be32(priv_tx->tisn << 8);
|
||||
|
||||
ucseg->flags = MLX5_UMR_INLINE;
|
||||
ucseg->bsf_octowords = cpu_to_be16(MLX5_ST_SZ_BYTES(tls_static_params) / 16);
|
||||
|
@ -75,10 +75,14 @@ build_static_params(struct mlx5e_umr_wqe *wqe, u16 pc, u32 sqn,
|
|||
static void
|
||||
fill_progress_params_ctx(void *ctx, struct mlx5e_ktls_offload_context_tx *priv_tx)
|
||||
{
|
||||
MLX5_SET(tls_progress_params, ctx, tisn, priv_tx->tisn);
|
||||
MLX5_SET(tls_progress_params, ctx, record_tracker_state,
|
||||
struct mlx5_wqe_tls_progress_params_seg *params;
|
||||
|
||||
params = ctx;
|
||||
|
||||
params->tis_tir_num = cpu_to_be32(priv_tx->tisn);
|
||||
MLX5_SET(tls_progress_params, params->ctx, record_tracker_state,
|
||||
MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_START);
|
||||
MLX5_SET(tls_progress_params, ctx, auth_state,
|
||||
MLX5_SET(tls_progress_params, params->ctx, auth_state,
|
||||
MLX5E_TLS_PROGRESS_PARAMS_AUTH_STATE_NO_OFFLOAD);
|
||||
}
|
||||
|
||||
|
@ -284,7 +288,7 @@ tx_post_resync_dump(struct mlx5e_txqsq *sq, skb_frag_t *frag, u32 tisn, bool fir
|
|||
|
||||
cseg->opmod_idx_opcode = cpu_to_be32((sq->pc << 8) | MLX5_OPCODE_DUMP);
|
||||
cseg->qpn_ds = cpu_to_be32((sq->sqn << 8) | ds_cnt);
|
||||
cseg->tisn = cpu_to_be32(tisn << 8);
|
||||
cseg->tis_tir_num = cpu_to_be32(tisn << 8);
|
||||
cseg->fm_ce_se = first ? MLX5_FENCE_MODE_INITIATOR_SMALL : 0;
|
||||
|
||||
fsz = skb_frag_size(frag);
|
||||
|
|
|
@ -305,7 +305,7 @@ err_out:
|
|||
void mlx5e_tls_handle_tx_wqe(struct mlx5e_txqsq *sq, struct mlx5_wqe_ctrl_seg *cseg,
|
||||
struct mlx5e_accel_tx_tls_state *state)
|
||||
{
|
||||
cseg->tisn = cpu_to_be32(state->tls_tisn << 8);
|
||||
cseg->tis_tir_num = cpu_to_be32(state->tls_tisn << 8);
|
||||
}
|
||||
|
||||
static int tls_update_resync_sn(struct net_device *netdev,
|
||||
|
|
|
@ -44,16 +44,6 @@
|
|||
#include "lib/mpfs.h"
|
||||
#include "en/tc_ct.h"
|
||||
|
||||
#define FDB_TC_MAX_CHAIN 3
|
||||
#define FDB_FT_CHAIN (FDB_TC_MAX_CHAIN + 1)
|
||||
#define FDB_TC_SLOW_PATH_CHAIN (FDB_FT_CHAIN + 1)
|
||||
|
||||
/* The index of the last real chain (FT) + 1 as chain zero is valid as well */
|
||||
#define FDB_NUM_CHAINS (FDB_FT_CHAIN + 1)
|
||||
|
||||
#define FDB_TC_MAX_PRIO 16
|
||||
#define FDB_TC_LEVELS_PER_PRIO 2
|
||||
|
||||
#ifdef CONFIG_MLX5_ESWITCH
|
||||
|
||||
#define ESW_OFFLOADS_DEFAULT_NUM_GROUPS 15
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
#include "diag/fs_tracepoint.h"
|
||||
#include "accel/ipsec.h"
|
||||
#include "fpga/ipsec.h"
|
||||
#include "eswitch.h"
|
||||
|
||||
#define INIT_TREE_NODE_ARRAY_SIZE(...) (sizeof((struct init_tree_node[]){__VA_ARGS__}) /\
|
||||
sizeof(struct init_tree_node))
|
||||
|
|
|
@ -39,6 +39,16 @@
|
|||
#include <linux/llist.h>
|
||||
#include <steering/fs_dr.h>
|
||||
|
||||
#define FDB_TC_MAX_CHAIN 3
|
||||
#define FDB_FT_CHAIN (FDB_TC_MAX_CHAIN + 1)
|
||||
#define FDB_TC_SLOW_PATH_CHAIN (FDB_FT_CHAIN + 1)
|
||||
|
||||
/* The index of the last real chain (FT) + 1 as chain zero is valid as well */
|
||||
#define FDB_NUM_CHAINS (FDB_FT_CHAIN + 1)
|
||||
|
||||
#define FDB_TC_MAX_PRIO 16
|
||||
#define FDB_TC_LEVELS_PER_PRIO 2
|
||||
|
||||
struct mlx5_modify_hdr {
|
||||
enum mlx5_flow_namespace_type ns_type;
|
||||
union {
|
||||
|
|
|
@ -226,13 +226,20 @@ void mlx5i_uninit_underlay_qp(struct mlx5e_priv *priv)
|
|||
|
||||
int mlx5i_create_underlay_qp(struct mlx5e_priv *priv)
|
||||
{
|
||||
unsigned char *dev_addr = priv->netdev->dev_addr;
|
||||
u32 out[MLX5_ST_SZ_DW(create_qp_out)] = {};
|
||||
u32 in[MLX5_ST_SZ_DW(create_qp_in)] = {};
|
||||
struct mlx5i_priv *ipriv = priv->ppriv;
|
||||
void *addr_path;
|
||||
int qpn = 0;
|
||||
int ret = 0;
|
||||
void *qpc;
|
||||
|
||||
if (MLX5_CAP_GEN(priv->mdev, mkey_by_name)) {
|
||||
qpn = (dev_addr[1] << 16) + (dev_addr[2] << 8) + dev_addr[3];
|
||||
MLX5_SET(create_qp_in, in, input_qpn, qpn);
|
||||
}
|
||||
|
||||
qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
|
||||
MLX5_SET(qpc, qpc, st, MLX5_QP_ST_UD);
|
||||
MLX5_SET(qpc, qpc, pm_state, MLX5_QP_PM_MIGRATED);
|
||||
|
|
|
@ -557,6 +557,9 @@ static int handle_hca_cap(struct mlx5_core_dev *dev, void *set_ctx)
|
|||
if (MLX5_CAP_GEN_MAX(dev, release_all_pages))
|
||||
MLX5_SET(cmd_hca_cap, set_hca_cap, release_all_pages, 1);
|
||||
|
||||
if (MLX5_CAP_GEN_MAX(dev, mkey_by_name))
|
||||
MLX5_SET(cmd_hca_cap, set_hca_cap, mkey_by_name, 1);
|
||||
|
||||
return set_caps(dev, set_ctx, MLX5_SET_HCA_CAP_OP_MOD_GENERAL_DEVICE);
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
#ifndef MLX5_CORE_CQ_H
|
||||
#define MLX5_CORE_CQ_H
|
||||
|
||||
#include <rdma/ib_verbs.h>
|
||||
#include <linux/mlx5/driver.h>
|
||||
#include <linux/refcount.h>
|
||||
|
||||
|
|
|
@ -458,6 +458,15 @@ enum {
|
|||
MLX5_OPC_MOD_TLS_TIR_PROGRESS_PARAMS = 0x2,
|
||||
};
|
||||
|
||||
struct mlx5_wqe_tls_static_params_seg {
|
||||
u8 ctx[MLX5_ST_SZ_BYTES(tls_static_params)];
|
||||
};
|
||||
|
||||
struct mlx5_wqe_tls_progress_params_seg {
|
||||
__be32 tis_tir_num;
|
||||
u8 ctx[MLX5_ST_SZ_BYTES(tls_progress_params)];
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_SET_PORT_RESET_QKEY = 0,
|
||||
MLX5_SET_PORT_GUID0 = 16,
|
||||
|
|
|
@ -1392,7 +1392,10 @@ struct mlx5_ifc_cmd_hca_cap_bits {
|
|||
u8 bf[0x1];
|
||||
u8 driver_version[0x1];
|
||||
u8 pad_tx_eth_packet[0x1];
|
||||
u8 reserved_at_263[0x8];
|
||||
u8 reserved_at_263[0x3];
|
||||
u8 mkey_by_name[0x1];
|
||||
u8 reserved_at_267[0x4];
|
||||
|
||||
u8 log_bf_reg_size[0x5];
|
||||
|
||||
u8 reserved_at_270[0x8];
|
||||
|
@ -7712,8 +7715,10 @@ struct mlx5_ifc_create_qp_in_bits {
|
|||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
u8 reserved_at_40[0x8];
|
||||
u8 input_qpn[0x18];
|
||||
|
||||
u8 reserved_at_60[0x20];
|
||||
u8 opt_param_mask[0x20];
|
||||
|
||||
u8 ece[0x20];
|
||||
|
@ -10638,16 +10643,13 @@ struct mlx5_ifc_tls_static_params_bits {
|
|||
};
|
||||
|
||||
struct mlx5_ifc_tls_progress_params_bits {
|
||||
u8 reserved_at_0[0x8];
|
||||
u8 tisn[0x18];
|
||||
|
||||
u8 next_record_tcp_sn[0x20];
|
||||
|
||||
u8 hw_resync_tcp_sn[0x20];
|
||||
|
||||
u8 record_tracker_state[0x2];
|
||||
u8 auth_state[0x2];
|
||||
u8 reserved_at_64[0x4];
|
||||
u8 reserved_at_44[0x4];
|
||||
u8 hw_offset_record_number[0x18];
|
||||
};
|
||||
|
||||
|
|
|
@ -209,7 +209,7 @@ struct mlx5_wqe_ctrl_seg {
|
|||
__be32 general_id;
|
||||
__be32 imm;
|
||||
__be32 umr_mkey;
|
||||
__be32 tisn;
|
||||
__be32 tis_tir_num;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче