Skip to content

Commit 6f076ce

Browse files
committed
Merge branch 'mlx5-fixes-2020-12-01'
Saeed Mahameed says: ==================== mlx5 fixes 2020-12-01 This series introduces some fixes to mlx5 driver. ==================== Link: https://lore.kernel.org/r/20201203043946.235385-1-saeedm@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents 9608fa6 + d421e46 commit 6f076ce

7 files changed

Lines changed: 51 additions & 10 deletions

File tree

drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ static void accel_fs_tcp_set_ipv4_flow(struct mlx5_flow_spec *spec, struct sock
4444
outer_headers.dst_ipv4_dst_ipv6.ipv4_layout.ipv4);
4545
}
4646

47+
#if IS_ENABLED(CONFIG_IPV6)
4748
static void accel_fs_tcp_set_ipv6_flow(struct mlx5_flow_spec *spec, struct sock *sk)
4849
{
4950
MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, outer_headers.ip_protocol);
@@ -63,6 +64,7 @@ static void accel_fs_tcp_set_ipv6_flow(struct mlx5_flow_spec *spec, struct sock
6364
outer_headers.dst_ipv4_dst_ipv6.ipv6_layout.ipv6),
6465
0xff, 16);
6566
}
67+
#endif
6668

6769
void mlx5e_accel_fs_del_sk(struct mlx5_flow_handle *rule)
6870
{

drivers/net/ethernet/mellanox/mlx5/core/en_tx.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,9 @@ ipsec_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb,
161161
}
162162

163163
static inline void
164-
mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg)
164+
mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb,
165+
struct mlx5e_accel_tx_state *accel,
166+
struct mlx5_wqe_eth_seg *eseg)
165167
{
166168
if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
167169
eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM;
@@ -173,6 +175,11 @@ mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct
173175
eseg->cs_flags |= MLX5_ETH_WQE_L4_CSUM;
174176
sq->stats->csum_partial++;
175177
}
178+
#ifdef CONFIG_MLX5_EN_TLS
179+
} else if (unlikely(accel && accel->tls.tls_tisn)) {
180+
eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM | MLX5_ETH_WQE_L4_CSUM;
181+
sq->stats->csum_partial++;
182+
#endif
176183
} else if (unlikely(eseg->flow_table_metadata & cpu_to_be32(MLX5_ETH_WQE_FT_META_IPSEC))) {
177184
ipsec_txwqe_build_eseg_csum(sq, skb, eseg);
178185

@@ -607,12 +614,13 @@ void mlx5e_tx_mpwqe_ensure_complete(struct mlx5e_txqsq *sq)
607614
}
608615

609616
static bool mlx5e_txwqe_build_eseg(struct mlx5e_priv *priv, struct mlx5e_txqsq *sq,
610-
struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg)
617+
struct sk_buff *skb, struct mlx5e_accel_tx_state *accel,
618+
struct mlx5_wqe_eth_seg *eseg)
611619
{
612620
if (unlikely(!mlx5e_accel_tx_eseg(priv, skb, eseg)))
613621
return false;
614622

615-
mlx5e_txwqe_build_eseg_csum(sq, skb, eseg);
623+
mlx5e_txwqe_build_eseg_csum(sq, skb, accel, eseg);
616624

617625
return true;
618626
}
@@ -639,7 +647,7 @@ netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev)
639647
if (mlx5e_tx_skb_supports_mpwqe(skb, &attr)) {
640648
struct mlx5_wqe_eth_seg eseg = {};
641649

642-
if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &eseg)))
650+
if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &accel, &eseg)))
643651
return NETDEV_TX_OK;
644652

645653
mlx5e_sq_xmit_mpwqe(sq, skb, &eseg, netdev_xmit_more());
@@ -656,7 +664,7 @@ netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev)
656664
/* May update the WQE, but may not post other WQEs. */
657665
mlx5e_accel_tx_finish(sq, wqe, &accel,
658666
(struct mlx5_wqe_inline_seg *)(wqe->data + wqe_attr.ds_cnt_inl));
659-
if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &wqe->eth)))
667+
if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &accel, &wqe->eth)))
660668
return NETDEV_TX_OK;
661669

662670
mlx5e_sq_xmit_wqe(sq, skb, &attr, &wqe_attr, wqe, pi, netdev_xmit_more());
@@ -675,7 +683,7 @@ void mlx5e_sq_xmit_simple(struct mlx5e_txqsq *sq, struct sk_buff *skb, bool xmit
675683
mlx5e_sq_calc_wqe_attr(skb, &attr, &wqe_attr);
676684
pi = mlx5e_txqsq_get_next_pi(sq, wqe_attr.num_wqebbs);
677685
wqe = MLX5E_TX_FETCH_WQE(sq, pi);
678-
mlx5e_txwqe_build_eseg_csum(sq, skb, &wqe->eth);
686+
mlx5e_txwqe_build_eseg_csum(sq, skb, NULL, &wqe->eth);
679687
mlx5e_sq_xmit_wqe(sq, skb, &attr, &wqe_attr, wqe, pi, xmit_more);
680688
}
681689

@@ -944,7 +952,7 @@ void mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
944952

945953
mlx5i_txwqe_build_datagram(av, dqpn, dqkey, datagram);
946954

947-
mlx5e_txwqe_build_eseg_csum(sq, skb, eseg);
955+
mlx5e_txwqe_build_eseg_csum(sq, skb, NULL, eseg);
948956

949957
eseg->mss = attr.mss;
950958

drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,24 @@ static void release_all_pages(struct mlx5_core_dev *dev, u32 func_id,
422422
npages, ec_function, func_id);
423423
}
424424

425+
static u32 fwp_fill_manage_pages_out(struct fw_page *fwp, u32 *out, u32 index,
426+
u32 npages)
427+
{
428+
u32 pages_set = 0;
429+
unsigned int n;
430+
431+
for_each_clear_bit(n, &fwp->bitmask, MLX5_NUM_4K_IN_PAGE) {
432+
MLX5_ARRAY_SET64(manage_pages_out, out, pas, index + pages_set,
433+
fwp->addr + (n * MLX5_ADAPTER_PAGE_SIZE));
434+
pages_set++;
435+
436+
if (!--npages)
437+
break;
438+
}
439+
440+
return pages_set;
441+
}
442+
425443
static int reclaim_pages_cmd(struct mlx5_core_dev *dev,
426444
u32 *in, int in_size, u32 *out, int out_size)
427445
{
@@ -448,8 +466,7 @@ static int reclaim_pages_cmd(struct mlx5_core_dev *dev,
448466
fwp = rb_entry(p, struct fw_page, rb_node);
449467
p = rb_next(p);
450468

451-
MLX5_ARRAY_SET64(manage_pages_out, out, pas, i, fwp->addr);
452-
i++;
469+
i += fwp_fill_manage_pages_out(fwp, out, i, npages - i);
453470
}
454471

455472
MLX5_SET(manage_pages_out, out, output_num_entries, i);

drivers/net/ethernet/mellanox/mlx5/core/steering/dr_cmd.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ int mlx5dr_cmd_query_device(struct mlx5_core_dev *mdev,
9292
caps->eswitch_manager = MLX5_CAP_GEN(mdev, eswitch_manager);
9393
caps->gvmi = MLX5_CAP_GEN(mdev, vhca_id);
9494
caps->flex_protocols = MLX5_CAP_GEN(mdev, flex_parser_protocols);
95+
caps->sw_format_ver = MLX5_CAP_GEN(mdev, steering_format_version);
9596

9697
if (mlx5dr_matcher_supp_flex_parser_icmp_v4(caps)) {
9798
caps->flex_parser_id_icmp_dw0 = MLX5_CAP_GEN(mdev, flex_parser_id_icmp_dw0);

drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,11 @@ static int dr_domain_caps_init(struct mlx5_core_dev *mdev,
223223
if (ret)
224224
return ret;
225225

226+
if (dmn->info.caps.sw_format_ver != MLX5_STEERING_FORMAT_CONNECTX_5) {
227+
mlx5dr_err(dmn, "SW steering is not supported on this device\n");
228+
return -EOPNOTSUPP;
229+
}
230+
226231
ret = dr_domain_query_fdb_caps(mdev, dmn);
227232
if (ret)
228233
return ret;

drivers/net/ethernet/mellanox/mlx5/core/steering/dr_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,7 @@ struct mlx5dr_cmd_caps {
625625
u8 max_ft_level;
626626
u16 roce_min_src_udp;
627627
u8 num_esw_ports;
628+
u8 sw_format_ver;
628629
bool eswitch_manager;
629630
bool rx_sw_owner;
630631
bool tx_sw_owner;

include/linux/mlx5/mlx5_ifc.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1223,6 +1223,11 @@ enum mlx5_fc_bulk_alloc_bitmask {
12231223

12241224
#define MLX5_FC_BULK_NUM_FCS(fc_enum) (MLX5_FC_BULK_SIZE_FACTOR * (fc_enum))
12251225

1226+
enum {
1227+
MLX5_STEERING_FORMAT_CONNECTX_5 = 0,
1228+
MLX5_STEERING_FORMAT_CONNECTX_6DX = 1,
1229+
};
1230+
12261231
struct mlx5_ifc_cmd_hca_cap_bits {
12271232
u8 reserved_at_0[0x30];
12281233
u8 vhca_id[0x10];
@@ -1521,7 +1526,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
15211526

15221527
u8 general_obj_types[0x40];
15231528

1524-
u8 reserved_at_440[0x20];
1529+
u8 reserved_at_440[0x4];
1530+
u8 steering_format_version[0x4];
1531+
u8 create_qp_start_hint[0x18];
15251532

15261533
u8 reserved_at_460[0x3];
15271534
u8 log_max_uctx[0x5];

0 commit comments

Comments
 (0)