Skip to content

Commit e8e9608

Browse files
committed
Merge tag 'mlx5-fixes-2018-04-25' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux
Saeed Mahameed says: ==================== Mellanox, mlx5 fixes 2018-04-26 This pull request includes fixes for mlx5 core and netdev driver. Please pull and let me know if there's any problems. For -stable v4.12 net/mlx5e: TX, Use correct counter in dma_map error flow For -stable v4.13 net/mlx5: Avoid cleaning flow steering table twice during error flow For -stable v4.14 net/mlx5e: Allow offloading ipv4 header re-write for icmp For -stable v4.15 net/mlx5e: DCBNL fix min inline header size for dscp For -stable v4.16 net/mlx5: Fix mlx5_get_vector_affinity function ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 1da9a58 + 202854e commit e8e9608

File tree

7 files changed

+40
-36
lines changed

7 files changed

+40
-36
lines changed

drivers/infiniband/hw/mlx5/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4757,7 +4757,7 @@ mlx5_ib_get_vector_affinity(struct ib_device *ibdev, int comp_vector)
47574757
{
47584758
struct mlx5_ib_dev *dev = to_mdev(ibdev);
47594759

4760-
return mlx5_get_vector_affinity(dev->mdev, comp_vector);
4760+
return mlx5_get_vector_affinity_hint(dev->mdev, comp_vector);
47614761
}
47624762

47634763
/* The mlx5_ib_multiport_mutex should be held when calling this function */

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,12 +1007,14 @@ static void mlx5e_trust_update_sq_inline_mode(struct mlx5e_priv *priv)
10071007

10081008
mutex_lock(&priv->state_lock);
10091009

1010-
if (!test_bit(MLX5E_STATE_OPENED, &priv->state))
1011-
goto out;
1012-
10131010
new_channels.params = priv->channels.params;
10141011
mlx5e_trust_update_tx_min_inline_mode(priv, &new_channels.params);
10151012

1013+
if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
1014+
priv->channels.params = new_channels.params;
1015+
goto out;
1016+
}
1017+
10161018
/* Skip if tx_min_inline is the same */
10171019
if (new_channels.params.tx_min_inline_mode ==
10181020
priv->channels.params.tx_min_inline_mode)

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -877,13 +877,14 @@ static const struct net_device_ops mlx5e_netdev_ops_rep = {
877877
};
878878

879879
static void mlx5e_build_rep_params(struct mlx5_core_dev *mdev,
880-
struct mlx5e_params *params)
880+
struct mlx5e_params *params, u16 mtu)
881881
{
882882
u8 cq_period_mode = MLX5_CAP_GEN(mdev, cq_period_start_from_cqe) ?
883883
MLX5_CQ_PERIOD_MODE_START_FROM_CQE :
884884
MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
885885

886886
params->hard_mtu = MLX5E_ETH_HARD_MTU;
887+
params->sw_mtu = mtu;
887888
params->log_sq_size = MLX5E_REP_PARAMS_LOG_SQ_SIZE;
888889
params->rq_wq_type = MLX5_WQ_TYPE_LINKED_LIST;
889890
params->log_rq_mtu_frames = MLX5E_REP_PARAMS_LOG_RQ_SIZE;
@@ -931,7 +932,7 @@ static void mlx5e_init_rep(struct mlx5_core_dev *mdev,
931932

932933
priv->channels.params.num_channels = profile->max_nch(mdev);
933934

934-
mlx5e_build_rep_params(mdev, &priv->channels.params);
935+
mlx5e_build_rep_params(mdev, &priv->channels.params, netdev->mtu);
935936
mlx5e_build_rep_netdev(netdev);
936937

937938
mlx5e_timestamp_init(priv);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1864,7 +1864,8 @@ static bool modify_header_match_supported(struct mlx5_flow_spec *spec,
18641864
}
18651865

18661866
ip_proto = MLX5_GET(fte_match_set_lyr_2_4, headers_v, ip_protocol);
1867-
if (modify_ip_header && ip_proto != IPPROTO_TCP && ip_proto != IPPROTO_UDP) {
1867+
if (modify_ip_header && ip_proto != IPPROTO_TCP &&
1868+
ip_proto != IPPROTO_UDP && ip_proto != IPPROTO_ICMP) {
18681869
pr_info("can't offload re-write of ip proto %d\n", ip_proto);
18691870
return false;
18701871
}

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
255255
dma_addr = dma_map_single(sq->pdev, skb_data, headlen,
256256
DMA_TO_DEVICE);
257257
if (unlikely(dma_mapping_error(sq->pdev, dma_addr)))
258-
return -ENOMEM;
258+
goto dma_unmap_wqe_err;
259259

260260
dseg->addr = cpu_to_be64(dma_addr);
261261
dseg->lkey = sq->mkey_be;
@@ -273,7 +273,7 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
273273
dma_addr = skb_frag_dma_map(sq->pdev, frag, 0, fsz,
274274
DMA_TO_DEVICE);
275275
if (unlikely(dma_mapping_error(sq->pdev, dma_addr)))
276-
return -ENOMEM;
276+
goto dma_unmap_wqe_err;
277277

278278
dseg->addr = cpu_to_be64(dma_addr);
279279
dseg->lkey = sq->mkey_be;
@@ -285,6 +285,10 @@ mlx5e_txwqe_build_dsegs(struct mlx5e_txqsq *sq, struct sk_buff *skb,
285285
}
286286

287287
return num_dma;
288+
289+
dma_unmap_wqe_err:
290+
mlx5e_dma_unmap_wqe_err(sq, num_dma);
291+
return -ENOMEM;
288292
}
289293

290294
static inline void
@@ -380,17 +384,15 @@ static netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
380384
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen,
381385
(struct mlx5_wqe_data_seg *)cseg + ds_cnt);
382386
if (unlikely(num_dma < 0))
383-
goto dma_unmap_wqe_err;
387+
goto err_drop;
384388

385389
mlx5e_txwqe_complete(sq, skb, opcode, ds_cnt + num_dma,
386390
num_bytes, num_dma, wi, cseg);
387391

388392
return NETDEV_TX_OK;
389393

390-
dma_unmap_wqe_err:
394+
err_drop:
391395
sq->stats.dropped++;
392-
mlx5e_dma_unmap_wqe_err(sq, wi->num_dma);
393-
394396
dev_kfree_skb_any(skb);
395397

396398
return NETDEV_TX_OK;
@@ -645,17 +647,15 @@ netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
645647
num_dma = mlx5e_txwqe_build_dsegs(sq, skb, skb_data, headlen,
646648
(struct mlx5_wqe_data_seg *)cseg + ds_cnt);
647649
if (unlikely(num_dma < 0))
648-
goto dma_unmap_wqe_err;
650+
goto err_drop;
649651

650652
mlx5e_txwqe_complete(sq, skb, opcode, ds_cnt + num_dma,
651653
num_bytes, num_dma, wi, cseg);
652654

653655
return NETDEV_TX_OK;
654656

655-
dma_unmap_wqe_err:
657+
err_drop:
656658
sq->stats.dropped++;
657-
mlx5e_dma_unmap_wqe_err(sq, wi->num_dma);
658-
659659
dev_kfree_skb_any(skb);
660660

661661
return NETDEV_TX_OK;

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ static void del_sw_ns(struct fs_node *node);
187187
static void del_sw_hw_rule(struct fs_node *node);
188188
static bool mlx5_flow_dests_cmp(struct mlx5_flow_destination *d1,
189189
struct mlx5_flow_destination *d2);
190+
static void cleanup_root_ns(struct mlx5_flow_root_namespace *root_ns);
190191
static struct mlx5_flow_rule *
191192
find_flow_rule(struct fs_fte *fte,
192193
struct mlx5_flow_destination *dest);
@@ -481,7 +482,8 @@ static void del_sw_hw_rule(struct fs_node *node)
481482

482483
if (rule->dest_attr.type == MLX5_FLOW_DESTINATION_TYPE_COUNTER &&
483484
--fte->dests_size) {
484-
modify_mask = BIT(MLX5_SET_FTE_MODIFY_ENABLE_MASK_ACTION);
485+
modify_mask = BIT(MLX5_SET_FTE_MODIFY_ENABLE_MASK_ACTION) |
486+
BIT(MLX5_SET_FTE_MODIFY_ENABLE_MASK_FLOW_COUNTERS);
485487
fte->action.action &= ~MLX5_FLOW_CONTEXT_ACTION_COUNT;
486488
update_fte = true;
487489
goto out;
@@ -2351,23 +2353,27 @@ static int create_anchor_flow_table(struct mlx5_flow_steering *steering)
23512353

23522354
static int init_root_ns(struct mlx5_flow_steering *steering)
23532355
{
2356+
int err;
2357+
23542358
steering->root_ns = create_root_ns(steering, FS_FT_NIC_RX);
23552359
if (!steering->root_ns)
2356-
goto cleanup;
2360+
return -ENOMEM;
23572361

2358-
if (init_root_tree(steering, &root_fs, &steering->root_ns->ns.node))
2359-
goto cleanup;
2362+
err = init_root_tree(steering, &root_fs, &steering->root_ns->ns.node);
2363+
if (err)
2364+
goto out_err;
23602365

23612366
set_prio_attrs(steering->root_ns);
2362-
2363-
if (create_anchor_flow_table(steering))
2364-
goto cleanup;
2367+
err = create_anchor_flow_table(steering);
2368+
if (err)
2369+
goto out_err;
23652370

23662371
return 0;
23672372

2368-
cleanup:
2369-
mlx5_cleanup_fs(steering->dev);
2370-
return -ENOMEM;
2373+
out_err:
2374+
cleanup_root_ns(steering->root_ns);
2375+
steering->root_ns = NULL;
2376+
return err;
23712377
}
23722378

23732379
static void clean_tree(struct fs_node *node)

include/linux/mlx5/driver.h

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1284,25 +1284,19 @@ enum {
12841284
};
12851285

12861286
static inline const struct cpumask *
1287-
mlx5_get_vector_affinity(struct mlx5_core_dev *dev, int vector)
1287+
mlx5_get_vector_affinity_hint(struct mlx5_core_dev *dev, int vector)
12881288
{
1289-
const struct cpumask *mask;
12901289
struct irq_desc *desc;
12911290
unsigned int irq;
12921291
int eqn;
12931292
int err;
12941293

1295-
err = mlx5_vector2eqn(dev, MLX5_EQ_VEC_COMP_BASE + vector, &eqn, &irq);
1294+
err = mlx5_vector2eqn(dev, vector, &eqn, &irq);
12961295
if (err)
12971296
return NULL;
12981297

12991298
desc = irq_to_desc(irq);
1300-
#ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK
1301-
mask = irq_data_get_effective_affinity_mask(&desc->irq_data);
1302-
#else
1303-
mask = desc->irq_common_data.affinity;
1304-
#endif
1305-
return mask;
1299+
return desc->affinity_hint;
13061300
}
13071301

13081302
#endif /* MLX5_DRIVER_H */

0 commit comments

Comments
 (0)