Skip to content

Commit 7586c85

Browse files
committed
Merge tag 'net-6.9-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski: "A little calmer than usual, probably just the timing of sub-tree PRs. Including fixes from netfilter. Current release - regressions: - inet: bring NLM_DONE out to a separate recv() again, fix user space which assumes multiple recv()s will happen and gets blocked forever - drv: mlx5: - restore mistakenly dropped parts in register devlink flow - use channel mdev reference instead of global mdev instance for coalescing - acquire RTNL lock before RQs/SQs activation/deactivation Previous releases - regressions: - net: change maximum number of UDP segments to 128, fix virtio compatibility with Windows peers - usb: ax88179_178a: avoid writing the mac address before first reading Previous releases - always broken: - sched: fix mirred deadlock on device recursion - netfilter: - br_netfilter: skip conntrack input hook for promisc packets - fixes removal of duplicate elements in the pipapo set backend - various fixes for abort paths and error handling - af_unix: don't peek OOB data without MSG_OOB - drv: flower: fix fragment flags handling in multiple drivers - drv: ravb: fix jumbo frames and packet stats accounting Misc: - kselftest_harness: fix Clang warning about zero-length format - tun: limit printing rate when illegal packet received by tun dev" * tag 'net-6.9-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (46 commits) net: ethernet: ti: am65-cpsw-nuss: cleanup DMA Channels before using them net: usb: ax88179_178a: avoid writing the mac address before first reading net: ravb: Fix RX byte accounting for jumbo packets net: ravb: Fix GbEth jumbo packet RX checksum handling net: ravb: Allow RX loop to move past DMA mapping errors net: ravb: Count packets instead of descriptors in R-Car RX path net: ethernet: mtk_eth_soc: fix WED + wifi reset net:usb:qmi_wwan: support Rolling modules selftests: kselftest_harness: fix Clang warning about zero-length format net/sched: Fix mirred deadlock on device recursion netfilter: nf_tables: fix memleak in map from abort path netfilter: nf_tables: restore set elements when delete set fails netfilter: nf_tables: missing iterator type in lookup walk s390/ism: Properly fix receive message buffer allocation net: dsa: mt7530: fix port mirroring for MT7988 SoC switch net: dsa: mt7530: fix mirroring frames received on local port tun: limit printing rate when illegal packet received by tun dev ice: Fix checking for unsupported keys on non-tunnel device ice: tc: allow zero flags in parsing tc flower ice: tc: check src_vsi in case of traffic from VF ...
2 parents 360a348 + c24cd67 commit 7586c85

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+438
-219
lines changed

drivers/net/dsa/mt7530.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,14 +1883,16 @@ mt7530_port_vlan_del(struct dsa_switch *ds, int port,
18831883

18841884
static int mt753x_mirror_port_get(unsigned int id, u32 val)
18851885
{
1886-
return (id == ID_MT7531) ? MT7531_MIRROR_PORT_GET(val) :
1887-
MIRROR_PORT(val);
1886+
return (id == ID_MT7531 || id == ID_MT7988) ?
1887+
MT7531_MIRROR_PORT_GET(val) :
1888+
MIRROR_PORT(val);
18881889
}
18891890

18901891
static int mt753x_mirror_port_set(unsigned int id, u32 val)
18911892
{
1892-
return (id == ID_MT7531) ? MT7531_MIRROR_PORT_SET(val) :
1893-
MIRROR_PORT(val);
1893+
return (id == ID_MT7531 || id == ID_MT7988) ?
1894+
MT7531_MIRROR_PORT_SET(val) :
1895+
MIRROR_PORT(val);
18941896
}
18951897

18961898
static int mt753x_port_mirror_add(struct dsa_switch *ds, int port,
@@ -2480,6 +2482,9 @@ mt7530_setup(struct dsa_switch *ds)
24802482
PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
24812483
}
24822484

2485+
/* Allow mirroring frames received on the local port (monitor port). */
2486+
mt7530_set(priv, MT753X_AGC, LOCAL_EN);
2487+
24832488
/* Setup VLAN ID 0 for VLAN-unaware bridges */
24842489
ret = mt7530_setup_vlan0(priv);
24852490
if (ret)
@@ -2591,6 +2596,9 @@ mt7531_setup_common(struct dsa_switch *ds)
25912596
PVC_EG_TAG(MT7530_VLAN_EG_CONSISTENT));
25922597
}
25932598

2599+
/* Allow mirroring frames received on the local port (monitor port). */
2600+
mt7530_set(priv, MT753X_AGC, LOCAL_EN);
2601+
25942602
/* Flush the FDB table */
25952603
ret = mt7530_fdb_cmd(priv, MT7530_FDB_FLUSH, NULL);
25962604
if (ret < 0)

drivers/net/dsa/mt7530.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ enum mt753x_id {
3232
#define SYSC_REG_RSTCTRL 0x34
3333
#define RESET_MCM BIT(2)
3434

35+
/* Register for ARL global control */
36+
#define MT753X_AGC 0xc
37+
#define LOCAL_EN BIT(7)
38+
3539
/* Registers to mac forward control for unknown frames */
3640
#define MT7530_MFC 0x10
3741
#define BC_FFP(x) (((x) & 0xff) << 24)

drivers/net/ethernet/intel/ice/ice_tc_lib.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ ice_tc_count_lkups(u32 flags, struct ice_tc_flower_lyr_2_4_hdrs *headers,
2828
* - ICE_TC_FLWR_FIELD_VLAN_TPID (present if specified)
2929
* - Tunnel flag (present if tunnel)
3030
*/
31+
if (fltr->direction == ICE_ESWITCH_FLTR_EGRESS)
32+
lkups_cnt++;
3133

3234
if (flags & ICE_TC_FLWR_FIELD_TENANT_ID)
3335
lkups_cnt++;
@@ -363,6 +365,11 @@ ice_tc_fill_rules(struct ice_hw *hw, u32 flags,
363365
/* Always add direction metadata */
364366
ice_rule_add_direction_metadata(&list[ICE_TC_METADATA_LKUP_IDX]);
365367

368+
if (tc_fltr->direction == ICE_ESWITCH_FLTR_EGRESS) {
369+
ice_rule_add_src_vsi_metadata(&list[i]);
370+
i++;
371+
}
372+
366373
rule_info->tun_type = ice_sw_type_from_tunnel(tc_fltr->tunnel_type);
367374
if (tc_fltr->tunnel_type != TNL_LAST) {
368375
i = ice_tc_fill_tunnel_outer(flags, tc_fltr, list, i);
@@ -772,7 +779,7 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)
772779
int ret;
773780
int i;
774781

775-
if (!flags || (flags & ICE_TC_FLWR_FIELD_ENC_SRC_L4_PORT)) {
782+
if (flags & ICE_TC_FLWR_FIELD_ENC_SRC_L4_PORT) {
776783
NL_SET_ERR_MSG_MOD(fltr->extack, "Unsupported encap field(s)");
777784
return -EOPNOTSUPP;
778785
}
@@ -820,6 +827,7 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)
820827

821828
/* specify the cookie as filter_rule_id */
822829
rule_info.fltr_rule_id = fltr->cookie;
830+
rule_info.src_vsi = vsi->idx;
823831

824832
ret = ice_add_adv_rule(hw, list, lkups_cnt, &rule_info, &rule_added);
825833
if (ret == -EEXIST) {
@@ -1481,7 +1489,10 @@ ice_parse_cls_flower(struct net_device *filter_dev, struct ice_vsi *vsi,
14811489
(BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS) |
14821490
BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS) |
14831491
BIT_ULL(FLOW_DISSECTOR_KEY_ENC_KEYID) |
1484-
BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS))) {
1492+
BIT_ULL(FLOW_DISSECTOR_KEY_ENC_PORTS) |
1493+
BIT_ULL(FLOW_DISSECTOR_KEY_ENC_IP) |
1494+
BIT_ULL(FLOW_DISSECTOR_KEY_ENC_OPTS) |
1495+
BIT_ULL(FLOW_DISSECTOR_KEY_ENC_CONTROL))) {
14851496
NL_SET_ERR_MSG_MOD(fltr->extack, "Tunnel key used, but device isn't a tunnel");
14861497
return -EOPNOTSUPP;
14871498
} else {

drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,7 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
689689

690690
if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_CONTROL)) {
691691
struct flow_match_control match;
692+
u32 val;
692693

693694
flow_rule_match_control(rule, &match);
694695
if (match.mask->flags & FLOW_DIS_FIRST_FRAG) {
@@ -697,12 +698,14 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
697698
}
698699

699700
if (match.mask->flags & FLOW_DIS_IS_FRAGMENT) {
701+
val = match.key->flags & FLOW_DIS_IS_FRAGMENT;
700702
if (ntohs(flow_spec->etype) == ETH_P_IP) {
701-
flow_spec->ip_flag = IPV4_FLAG_MORE;
703+
flow_spec->ip_flag = val ? IPV4_FLAG_MORE : 0;
702704
flow_mask->ip_flag = IPV4_FLAG_MORE;
703705
req->features |= BIT_ULL(NPC_IPFRAG_IPV4);
704706
} else if (ntohs(flow_spec->etype) == ETH_P_IPV6) {
705-
flow_spec->next_header = IPPROTO_FRAGMENT;
707+
flow_spec->next_header = val ?
708+
IPPROTO_FRAGMENT : 0;
706709
flow_mask->next_header = 0xff;
707710
req->features |= BIT_ULL(NPC_IPFRAG_IPV6);
708711
} else {

drivers/net/ethernet/mediatek/mtk_wed.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,13 +1074,13 @@ mtk_wed_dma_disable(struct mtk_wed_device *dev)
10741074
static void
10751075
mtk_wed_stop(struct mtk_wed_device *dev)
10761076
{
1077+
mtk_wed_dma_disable(dev);
10771078
mtk_wed_set_ext_int(dev, false);
10781079

10791080
wed_w32(dev, MTK_WED_WPDMA_INT_TRIGGER, 0);
10801081
wed_w32(dev, MTK_WED_WDMA_INT_TRIGGER, 0);
10811082
wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
10821083
wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
1083-
wed_w32(dev, MTK_WED_WPDMA_INT_MASK, 0);
10841084

10851085
if (!mtk_wed_get_rx_capa(dev))
10861086
return;
@@ -1093,7 +1093,6 @@ static void
10931093
mtk_wed_deinit(struct mtk_wed_device *dev)
10941094
{
10951095
mtk_wed_stop(dev);
1096-
mtk_wed_dma_disable(dev);
10971096

10981097
wed_clr(dev, MTK_WED_CTRL,
10991098
MTK_WED_CTRL_WDMA_INT_AGENT_EN |
@@ -2605,9 +2604,6 @@ mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
26052604
static void
26062605
mtk_wed_irq_set_mask(struct mtk_wed_device *dev, u32 mask)
26072606
{
2608-
if (!dev->running)
2609-
return;
2610-
26112607
mtk_wed_set_ext_int(dev, !!mask);
26122608
wed_w32(dev, MTK_WED_INT_MASK, mask);
26132609
}

drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,10 @@ static int mlx5e_tx_reporter_err_cqe_recover(void *ctx)
108108
mlx5e_reset_txqsq_cc_pc(sq);
109109
sq->stats->recover++;
110110
clear_bit(MLX5E_SQ_STATE_RECOVERING, &sq->state);
111+
rtnl_lock();
111112
mlx5e_activate_txqsq(sq);
113+
rtnl_unlock();
114+
112115
if (sq->channel)
113116
mlx5e_trigger_napi_icosq(sq->channel);
114117
else
@@ -179,12 +182,16 @@ static int mlx5e_tx_reporter_ptpsq_unhealthy_recover(void *ctx)
179182
carrier_ok = netif_carrier_ok(netdev);
180183
netif_carrier_off(netdev);
181184

185+
rtnl_lock();
182186
mlx5e_deactivate_priv_channels(priv);
187+
rtnl_unlock();
183188

184189
mlx5e_ptp_close(chs->ptp);
185190
err = mlx5e_ptp_open(priv, &chs->params, chs->c[0]->lag_port, &chs->ptp);
186191

192+
rtnl_lock();
187193
mlx5e_activate_priv_channels(priv);
194+
rtnl_unlock();
188195

189196
/* return carrier back if needed */
190197
if (carrier_ok)

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ struct arfs_table {
4646
struct hlist_head rules_hash[ARFS_HASH_SIZE];
4747
};
4848

49+
enum {
50+
MLX5E_ARFS_STATE_ENABLED,
51+
};
52+
4953
enum arfs_type {
5054
ARFS_IPV4_TCP,
5155
ARFS_IPV6_TCP,
@@ -60,6 +64,7 @@ struct mlx5e_arfs_tables {
6064
spinlock_t arfs_lock;
6165
int last_filter_id;
6266
struct workqueue_struct *wq;
67+
unsigned long state;
6368
};
6469

6570
struct arfs_tuple {
@@ -170,6 +175,8 @@ int mlx5e_arfs_enable(struct mlx5e_flow_steering *fs)
170175
return err;
171176
}
172177
}
178+
set_bit(MLX5E_ARFS_STATE_ENABLED, &arfs->state);
179+
173180
return 0;
174181
}
175182

@@ -455,6 +462,8 @@ static void arfs_del_rules(struct mlx5e_flow_steering *fs)
455462
int i;
456463
int j;
457464

465+
clear_bit(MLX5E_ARFS_STATE_ENABLED, &arfs->state);
466+
458467
spin_lock_bh(&arfs->arfs_lock);
459468
mlx5e_for_each_arfs_rule(rule, htmp, arfs->arfs_tables, i, j) {
460469
hlist_del_init(&rule->hlist);
@@ -627,17 +636,8 @@ static void arfs_handle_work(struct work_struct *work)
627636
struct mlx5_flow_handle *rule;
628637

629638
arfs = mlx5e_fs_get_arfs(priv->fs);
630-
mutex_lock(&priv->state_lock);
631-
if (!test_bit(MLX5E_STATE_OPENED, &priv->state)) {
632-
spin_lock_bh(&arfs->arfs_lock);
633-
hlist_del(&arfs_rule->hlist);
634-
spin_unlock_bh(&arfs->arfs_lock);
635-
636-
mutex_unlock(&priv->state_lock);
637-
kfree(arfs_rule);
638-
goto out;
639-
}
640-
mutex_unlock(&priv->state_lock);
639+
if (!test_bit(MLX5E_ARFS_STATE_ENABLED, &arfs->state))
640+
return;
641641

642642
if (!arfs_rule->rule) {
643643
rule = arfs_add_rule(priv, arfs_rule);
@@ -753,6 +753,11 @@ int mlx5e_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
753753
return -EPROTONOSUPPORT;
754754

755755
spin_lock_bh(&arfs->arfs_lock);
756+
if (!test_bit(MLX5E_ARFS_STATE_ENABLED, &arfs->state)) {
757+
spin_unlock_bh(&arfs->arfs_lock);
758+
return -EPERM;
759+
}
760+
756761
arfs_rule = arfs_find_rule(arfs_t, &fk);
757762
if (arfs_rule) {
758763
if (arfs_rule->rxq == rxq_index || work_busy(&arfs_rule->arfs_work)) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,12 +589,12 @@ static int mlx5e_get_coalesce(struct net_device *netdev,
589589
static void
590590
mlx5e_set_priv_channels_tx_coalesce(struct mlx5e_priv *priv, struct ethtool_coalesce *coal)
591591
{
592-
struct mlx5_core_dev *mdev = priv->mdev;
593592
int tc;
594593
int i;
595594

596595
for (i = 0; i < priv->channels.num; ++i) {
597596
struct mlx5e_channel *c = priv->channels.c[i];
597+
struct mlx5_core_dev *mdev = c->mdev;
598598

599599
for (tc = 0; tc < c->num_tc; tc++) {
600600
mlx5_core_modify_cq_moderation(mdev,
@@ -608,11 +608,11 @@ mlx5e_set_priv_channels_tx_coalesce(struct mlx5e_priv *priv, struct ethtool_coal
608608
static void
609609
mlx5e_set_priv_channels_rx_coalesce(struct mlx5e_priv *priv, struct ethtool_coalesce *coal)
610610
{
611-
struct mlx5_core_dev *mdev = priv->mdev;
612611
int i;
613612

614613
for (i = 0; i < priv->channels.num; ++i) {
615614
struct mlx5e_channel *c = priv->channels.c[i];
615+
struct mlx5_core_dev *mdev = c->mdev;
616616

617617
mlx5_core_modify_cq_moderation(mdev, &c->rq.cq.mcq,
618618
coal->rx_coalesce_usecs,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ static int mlx5e_devcom_init_mpv(struct mlx5e_priv *priv, u64 *data)
209209
*data,
210210
mlx5e_devcom_event_mpv,
211211
priv);
212-
if (IS_ERR_OR_NULL(priv->devcom))
213-
return -EOPNOTSUPP;
212+
if (IS_ERR(priv->devcom))
213+
return PTR_ERR(priv->devcom);
214214

215215
if (mlx5_core_is_mp_master(priv->mdev)) {
216216
mlx5_devcom_send_event(priv->devcom, MPV_DEVCOM_MASTER_UP,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3060,7 +3060,7 @@ void mlx5_esw_offloads_devcom_init(struct mlx5_eswitch *esw, u64 key)
30603060
key,
30613061
mlx5_esw_offloads_devcom_event,
30623062
esw);
3063-
if (IS_ERR_OR_NULL(esw->devcom))
3063+
if (IS_ERR(esw->devcom))
30643064
return;
30653065

30663066
mlx5_devcom_send_event(esw->devcom,

0 commit comments

Comments
 (0)