mlx5-fixes-2018-12-13
-----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJcEiXXAAoJEEg/ir3gV/o+xxQH/jGS6GQrty9puL40sXKE4ryK GKVSwbKLnu4WatPcLe/CGxJwRoCVUUKfsbprsuy+oYxhUd5M5h6qu215kZgsfdDC CfxznbEj3o6mN+ZyZjL+F2gEG6e96bpkKvayb2a9YYQaY/9+V6CMKh3U5jHI+Q2V D4ToCjWbMXkQ0jsevfpV9W2T0DNfXIa5QGvsvH+D+PoLF/ke/YALZd+yJT0Cm9N2 /vp0qvnHnZO5YavEThN2Lh8f9AY/pAwuGgTrPyddfkZC/6QLH+c8948gF14V+03l Nz78uSpurQ97X511UBcabSQB0xTCHSAw3/SKCVSxFrpMvkhj4mTbjohwc567Gy4= =YxUz -----END PGP SIGNATURE----- Merge tag 'mlx5-fixes-2018-12-13' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux mlx5-fixes-2018-12-13 Subject: [pull request][net 0/9] Mellanox, mlx5 fixes 2018-12-13 Saeed Mahameed says: ==================== This series introduces some fixes to the mlx5 core and mlx5e netdevice driver. ======= Conflict with net-next: When merged with net-next this series will cause a moderate conflict: 1) in drivers/net/ethernet/mellanox/mlx5/core/en_tc.c (2 hunks) Take hunks from net only and just replace *attr->mirror_count to *attr->split_count 1.1) there is one more instance of slow_attr->mirror_count to be replaced with slow_attr->split_count, it doesn't appear in the conflict, it will cause a compilation error if left out. 2) in mlx5_ifc.h, take hunks only from net. Example for the merge resolution can be found at: https://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux.git/commit/?h=merge/mlx5-fixes&id=48830adf29804d85d77ed8a251d625db0eb5b8a8 branch merge/mlx5-fixes of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux (I simply merged this pull request tag into net-next and resolved the conflict) I don't know if it's ok with you, but to save your time, you can just: git pull git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux merge/mlx5-fixes Into net-next, before your next net merge, and you will have a clean merge of net into net-next (at least for mlx5 files). ====== Please pull and let me know if there's any problem. For -stable v4.18 338d615be484 ('net/mlx5e: Cancel DIM work on close SQ') 91f40f9904ad ('net/mlx5e: RX, Verify MPWQE stride size is in range') For -stable v4.19 c5c7e1c41bbe ('net/mlx5e: Remove unused UDP GSO remaining counter') ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
38ed22351c
|
@ -128,6 +128,8 @@ static bool mlx5e_rx_is_linear_skb(struct mlx5_core_dev *mdev,
|
|||
return !params->lro_en && frag_sz <= PAGE_SIZE;
|
||||
}
|
||||
|
||||
#define MLX5_MAX_MPWQE_LOG_WQE_STRIDE_SZ ((BIT(__mlx5_bit_sz(wq, log_wqe_stride_size)) - 1) + \
|
||||
MLX5_MPWQE_LOG_STRIDE_SZ_BASE)
|
||||
static bool mlx5e_rx_mpwqe_is_linear_skb(struct mlx5_core_dev *mdev,
|
||||
struct mlx5e_params *params)
|
||||
{
|
||||
|
@ -138,6 +140,9 @@ static bool mlx5e_rx_mpwqe_is_linear_skb(struct mlx5_core_dev *mdev,
|
|||
if (!mlx5e_rx_is_linear_skb(mdev, params))
|
||||
return false;
|
||||
|
||||
if (order_base_2(frag_sz) > MLX5_MAX_MPWQE_LOG_WQE_STRIDE_SZ)
|
||||
return false;
|
||||
|
||||
if (MLX5_CAP_GEN(mdev, ext_stride_num_range))
|
||||
return true;
|
||||
|
||||
|
@ -1396,6 +1401,7 @@ static void mlx5e_close_txqsq(struct mlx5e_txqsq *sq)
|
|||
struct mlx5_core_dev *mdev = c->mdev;
|
||||
struct mlx5_rate_limit rl = {0};
|
||||
|
||||
cancel_work_sync(&sq->dim.work);
|
||||
mlx5e_destroy_sq(mdev, sq->sqn);
|
||||
if (sq->rate_limit) {
|
||||
rl.rate = sq->rate_limit;
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
|
||||
#define MLX5E_REP_PARAMS_LOG_SQ_SIZE \
|
||||
max(0x6, MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE)
|
||||
#define MLX5E_REP_PARAMS_DEF_NUM_CHANNELS 1
|
||||
|
||||
static const char mlx5e_rep_driver_name[] = "mlx5e_rep";
|
||||
|
||||
|
@ -466,8 +467,8 @@ static void mlx5e_rep_update_flows(struct mlx5e_priv *priv,
|
|||
|
||||
ASSERT_RTNL();
|
||||
|
||||
if ((!neigh_connected && (e->flags & MLX5_ENCAP_ENTRY_VALID)) ||
|
||||
!ether_addr_equal(e->h_dest, ha))
|
||||
if ((e->flags & MLX5_ENCAP_ENTRY_VALID) &&
|
||||
(!neigh_connected || !ether_addr_equal(e->h_dest, ha)))
|
||||
mlx5e_tc_encap_flows_del(priv, e);
|
||||
|
||||
if (neigh_connected && !(e->flags & MLX5_ENCAP_ENTRY_VALID)) {
|
||||
|
@ -1083,9 +1084,7 @@ static int mlx5e_init_rep(struct mlx5_core_dev *mdev,
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
priv->channels.params.num_channels =
|
||||
mlx5e_get_netdev_max_channels(netdev);
|
||||
priv->channels.params.num_channels = MLX5E_REP_PARAMS_DEF_NUM_CHANNELS;
|
||||
|
||||
mlx5e_build_rep_params(mdev, &priv->channels.params, netdev->mtu);
|
||||
mlx5e_build_rep_netdev(netdev);
|
||||
|
|
|
@ -74,7 +74,6 @@ static const struct counter_desc sw_stats_desc[] = {
|
|||
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_recover) },
|
||||
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_cqes) },
|
||||
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_queue_wake) },
|
||||
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_udp_seg_rem) },
|
||||
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_cqe_err) },
|
||||
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_xdp_xmit) },
|
||||
{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_xdp_full) },
|
||||
|
@ -198,7 +197,6 @@ void mlx5e_grp_sw_update_stats(struct mlx5e_priv *priv)
|
|||
s->tx_nop += sq_stats->nop;
|
||||
s->tx_queue_stopped += sq_stats->stopped;
|
||||
s->tx_queue_wake += sq_stats->wake;
|
||||
s->tx_udp_seg_rem += sq_stats->udp_seg_rem;
|
||||
s->tx_queue_dropped += sq_stats->dropped;
|
||||
s->tx_cqe_err += sq_stats->cqe_err;
|
||||
s->tx_recover += sq_stats->recover;
|
||||
|
|
|
@ -87,7 +87,6 @@ struct mlx5e_sw_stats {
|
|||
u64 tx_recover;
|
||||
u64 tx_cqes;
|
||||
u64 tx_queue_wake;
|
||||
u64 tx_udp_seg_rem;
|
||||
u64 tx_cqe_err;
|
||||
u64 tx_xdp_xmit;
|
||||
u64 tx_xdp_full;
|
||||
|
@ -221,7 +220,6 @@ struct mlx5e_sq_stats {
|
|||
u64 csum_partial_inner;
|
||||
u64 added_vlan_packets;
|
||||
u64 nop;
|
||||
u64 udp_seg_rem;
|
||||
#ifdef CONFIG_MLX5_EN_TLS
|
||||
u64 tls_ooo;
|
||||
u64 tls_resync_bytes;
|
||||
|
|
|
@ -870,9 +870,9 @@ mlx5e_tc_offload_to_slow_path(struct mlx5_eswitch *esw,
|
|||
struct mlx5_flow_handle *rule;
|
||||
|
||||
memcpy(slow_attr, flow->esw_attr, sizeof(*slow_attr));
|
||||
slow_attr->action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,
|
||||
slow_attr->mirror_count = 0,
|
||||
slow_attr->dest_chain = FDB_SLOW_PATH_CHAIN,
|
||||
slow_attr->action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
|
||||
slow_attr->mirror_count = 0;
|
||||
slow_attr->dest_chain = FDB_SLOW_PATH_CHAIN;
|
||||
|
||||
rule = mlx5e_tc_offload_fdb_rules(esw, flow, spec, slow_attr);
|
||||
if (!IS_ERR(rule))
|
||||
|
@ -887,6 +887,9 @@ mlx5e_tc_unoffload_from_slow_path(struct mlx5_eswitch *esw,
|
|||
struct mlx5_esw_flow_attr *slow_attr)
|
||||
{
|
||||
memcpy(slow_attr, flow->esw_attr, sizeof(*slow_attr));
|
||||
slow_attr->action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
|
||||
slow_attr->mirror_count = 0;
|
||||
slow_attr->dest_chain = FDB_SLOW_PATH_CHAIN;
|
||||
mlx5e_tc_unoffload_fdb_rules(esw, flow, slow_attr);
|
||||
flow->flags &= ~MLX5E_TC_FLOW_SLOW;
|
||||
}
|
||||
|
@ -907,11 +910,10 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv,
|
|||
struct mlx5e_priv *out_priv;
|
||||
int err = 0, encap_err = 0;
|
||||
|
||||
/* if prios are not supported, keep the old behaviour of using same prio
|
||||
* for all offloaded rules.
|
||||
*/
|
||||
if (!mlx5_eswitch_prios_supported(esw))
|
||||
attr->prio = 1;
|
||||
if (!mlx5_eswitch_prios_supported(esw) && attr->prio != 1) {
|
||||
NL_SET_ERR_MSG(extack, "E-switch priorities unsupported, upgrade FW");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (attr->chain > max_chain) {
|
||||
NL_SET_ERR_MSG(extack, "Requested chain is out of supported range");
|
||||
|
@ -1094,10 +1096,9 @@ void mlx5e_tc_encap_flows_del(struct mlx5e_priv *priv,
|
|||
flow->rule[0] = rule;
|
||||
}
|
||||
|
||||
if (e->flags & MLX5_ENCAP_ENTRY_VALID) {
|
||||
e->flags &= ~MLX5_ENCAP_ENTRY_VALID;
|
||||
mlx5_packet_reformat_dealloc(priv->mdev, e->encap_id);
|
||||
}
|
||||
/* we know that the encap is valid */
|
||||
e->flags &= ~MLX5_ENCAP_ENTRY_VALID;
|
||||
mlx5_packet_reformat_dealloc(priv->mdev, e->encap_id);
|
||||
}
|
||||
|
||||
static struct mlx5_fc *mlx5e_tc_get_counter(struct mlx5e_tc_flow *flow)
|
||||
|
@ -2966,8 +2967,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
|
|||
NL_SET_ERR_MSG(extack, "Requested destination chain is out of supported range");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST |
|
||||
MLX5_FLOW_CONTEXT_ACTION_COUNT;
|
||||
action |= MLX5_FLOW_CONTEXT_ACTION_COUNT;
|
||||
attr->dest_chain = dest_chain;
|
||||
|
||||
continue;
|
||||
|
@ -2980,6 +2980,14 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
|
|||
if (!actions_match_supported(priv, exts, parse_attr, flow, extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (attr->dest_chain) {
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
|
||||
NL_SET_ERR_MSG(extack, "Mirroring goto chain rules isn't supported");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
attr->action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
|
||||
}
|
||||
|
||||
if (attr->mirror_count > 0 && !mlx5_esw_has_fwd_fdb(priv->mdev)) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"current firmware doesn't support split rule for port mirroring");
|
||||
|
|
|
@ -582,11 +582,13 @@ struct mlx5_ifc_flow_table_nic_cap_bits {
|
|||
};
|
||||
|
||||
struct mlx5_ifc_flow_table_eswitch_cap_bits {
|
||||
u8 reserved_at_0[0x1c];
|
||||
u8 fdb_multi_path_to_table[0x1];
|
||||
u8 reserved_at_1d[0x1];
|
||||
u8 reserved_at_0[0x1a];
|
||||
u8 multi_fdb_encap[0x1];
|
||||
u8 reserved_at_1e[0x1e1];
|
||||
u8 reserved_at_1b[0x1];
|
||||
u8 fdb_multi_path_to_table[0x1];
|
||||
u8 reserved_at_1d[0x3];
|
||||
|
||||
u8 reserved_at_20[0x1e0];
|
||||
|
||||
struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_esw_fdb;
|
||||
|
||||
|
|
Loading…
Reference in New Issue