Skip to content

Commit 07d6bf6

Browse files
committed
Merge tag 'net-6.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni: "Current release - new code bugs: - eth: mlx5: HWS, don't destroy more bwc queue locks than allocated Previous releases - regressions: - ipv4: give an IPv4 dev to blackhole_netdev - udp: compute L4 checksum as usual when not segmenting the skb - tcp/dccp: don't use timer_pending() in reqsk_queue_unlink(). - eth: mlx5e: don't call cleanup on profile rollback failure - eth: microchip: vcap api: fix memory leaks in vcap_api_encode_rule_test() - eth: enetc: disable Tx BD rings after they are empty - eth: macb: avoid 20s boot delay by skipping MDIO bus registration for fixed-link PHY Previous releases - always broken: - posix-clock: fix missing timespec64 check in pc_clock_settime() - genetlink: hold RCU in genlmsg_mcast() - mptcp: prevent MPC handshake on port-based signal endpoints - eth: vmxnet3: fix packet corruption in vmxnet3_xdp_xmit_frame - eth: stmmac: dwmac-tegra: fix link bring-up sequence - eth: bcmasp: fix potential memory leak in bcmasp_xmit() Misc: - add Andrew Lunn as a co-maintainer of all networking drivers" * tag 'net-6.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (47 commits) net/mlx5e: Don't call cleanup on profile rollback failure net/mlx5: Unregister notifier on eswitch init failure net/mlx5: Fix command bitmask initialization net/mlx5: Check for invalid vector index on EQ creation net/mlx5: HWS, use lock classes for bwc locks net/mlx5: HWS, don't destroy more bwc queue locks than allocated net/mlx5: HWS, fixed double free in error flow of definer layout net/mlx5: HWS, removed wrong access to a number of rules variable mptcp: pm: fix UaF read in mptcp_pm_nl_rm_addr_or_subflow net: ethernet: mtk_eth_soc: fix memory corruption during fq dma init vmxnet3: Fix packet corruption in vmxnet3_xdp_xmit_frame net: dsa: vsc73xx: fix reception from VLAN-unaware bridges net: ravb: Only advertise Rx/Tx timestamps if hardware supports it net: microchip: vcap api: Fix memory leaks in vcap_api_encode_rule_test() net: phy: mdio-bcm-unimac: Add BCM6846 support dt-bindings: net: brcm,unimac-mdio: Add bcm6846-mdio udp: Compute L4 checksum as usual when not segmenting the skb genetlink: hold RCU in genlmsg_mcast() net: dsa: mv88e6xxx: Fix the max_vid definition for the MV88E6361 tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink(). ...
2 parents c964ced + cb56079 commit 07d6bf6

File tree

53 files changed

+351
-179
lines changed

Some content is hidden

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

53 files changed

+351
-179
lines changed

Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ properties:
2626
- brcm,asp-v2.1-mdio
2727
- brcm,asp-v2.2-mdio
2828
- brcm,unimac-mdio
29+
- brcm,bcm6846-mdio
2930

3031
reg:
3132
minItems: 1

MAINTAINERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16086,6 +16086,7 @@ F: include/uapi/linux/net_dropmon.h
1608616086
F: net/core/drop_monitor.c
1608716087

1608816088
NETWORKING DRIVERS
16089+
M: Andrew Lunn <[email protected]>
1608916090
M: "David S. Miller" <[email protected]>
1609016091
M: Eric Dumazet <[email protected]>
1609116092
M: Jakub Kicinski <[email protected]>

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6347,7 +6347,7 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = {
63476347
.invalid_port_mask = BIT(1) | BIT(2) | BIT(8),
63486348
.num_internal_phys = 5,
63496349
.internal_phys_offset = 3,
6350-
.max_vid = 4095,
6350+
.max_vid = 8191,
63516351
.max_sid = 63,
63526352
.port_base_addr = 0x0,
63536353
.phy_base_addr = 0x0,

drivers/net/dsa/vitesse-vsc73xx-core.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,6 @@ static int vsc73xx_setup(struct dsa_switch *ds)
851851

852852
dev_info(vsc->dev, "set up the switch\n");
853853

854-
ds->untag_bridge_pvid = true;
855854
ds->max_num_bridges = DSA_TAG_8021Q_MAX_NUM_BRIDGES;
856855
ds->fdb_isolation = true;
857856

drivers/net/ethernet/aeroflex/greth.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev)
484484

485485
if (unlikely(skb->len > MAX_FRAME_SIZE)) {
486486
dev->stats.tx_errors++;
487-
goto out;
487+
goto len_error;
488488
}
489489

490490
/* Save skb pointer. */
@@ -575,6 +575,7 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev)
575575
map_error:
576576
if (net_ratelimit())
577577
dev_warn(greth->dev, "Could not create TX DMA mapping\n");
578+
len_error:
578579
dev_kfree_skb(skb);
579580
out:
580581
return err;

drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ static netdev_tx_t bcmasp_xmit(struct sk_buff *skb, struct net_device *dev)
322322
}
323323
/* Rewind so we do not have a hole */
324324
spb_index = intf->tx_spb_index;
325+
dev_kfree_skb(skb);
325326
return NETDEV_TX_OK;
326327
}
327328

drivers/net/ethernet/broadcom/bcmsysport.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,6 +1359,7 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
13591359
netif_err(priv, tx_err, dev, "DMA map failed at %p (len=%d)\n",
13601360
skb->data, skb_len);
13611361
ret = NETDEV_TX_OK;
1362+
dev_kfree_skb_any(skb);
13621363
goto out;
13631364
}
13641365

drivers/net/ethernet/cadence/macb_main.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -930,9 +930,6 @@ static int macb_mdiobus_register(struct macb *bp)
930930
return ret;
931931
}
932932

933-
if (of_phy_is_fixed_link(np))
934-
return mdiobus_register(bp->mii_bus);
935-
936933
/* Only create the PHY from the device tree if at least one PHY is
937934
* described. Otherwise scan the entire MDIO bus. We do this to support
938935
* old device tree that did not follow the best practices and did not
@@ -953,8 +950,19 @@ static int macb_mdiobus_register(struct macb *bp)
953950

954951
static int macb_mii_init(struct macb *bp)
955952
{
953+
struct device_node *child, *np = bp->pdev->dev.of_node;
956954
int err = -ENXIO;
957955

956+
/* With fixed-link, we don't need to register the MDIO bus,
957+
* except if we have a child named "mdio" in the device tree.
958+
* In that case, some devices may be attached to the MACB's MDIO bus.
959+
*/
960+
child = of_get_child_by_name(np, "mdio");
961+
if (child)
962+
of_node_put(child);
963+
else if (of_phy_is_fixed_link(np))
964+
return macb_mii_probe(bp->dev);
965+
958966
/* Enable management port */
959967
macb_writel(bp, NCR, MACB_BIT(MPE));
960968

drivers/net/ethernet/freescale/enetc/enetc.c

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,7 @@ static bool enetc_clean_tx_ring(struct enetc_bdr *tx_ring, int napi_budget)
902902

903903
if (unlikely(tx_frm_cnt && netif_carrier_ok(ndev) &&
904904
__netif_subqueue_stopped(ndev, tx_ring->index) &&
905+
!test_bit(ENETC_TX_DOWN, &priv->flags) &&
905906
(enetc_bd_unused(tx_ring) >= ENETC_TXBDS_MAX_NEEDED))) {
906907
netif_wake_subqueue(ndev, tx_ring->index);
907908
}
@@ -1377,6 +1378,9 @@ int enetc_xdp_xmit(struct net_device *ndev, int num_frames,
13771378
int xdp_tx_bd_cnt, i, k;
13781379
int xdp_tx_frm_cnt = 0;
13791380

1381+
if (unlikely(test_bit(ENETC_TX_DOWN, &priv->flags)))
1382+
return -ENETDOWN;
1383+
13801384
enetc_lock_mdio();
13811385

13821386
tx_ring = priv->xdp_tx_ring[smp_processor_id()];
@@ -1521,7 +1525,6 @@ static void enetc_xdp_drop(struct enetc_bdr *rx_ring, int rx_ring_first,
15211525
&rx_ring->rx_swbd[rx_ring_first]);
15221526
enetc_bdr_idx_inc(rx_ring, &rx_ring_first);
15231527
}
1524-
rx_ring->stats.xdp_drops++;
15251528
}
15261529

15271530
static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
@@ -1586,6 +1589,7 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
15861589
fallthrough;
15871590
case XDP_DROP:
15881591
enetc_xdp_drop(rx_ring, orig_i, i);
1592+
rx_ring->stats.xdp_drops++;
15891593
break;
15901594
case XDP_PASS:
15911595
rxbd = orig_rxbd;
@@ -1602,6 +1606,12 @@ static int enetc_clean_rx_ring_xdp(struct enetc_bdr *rx_ring,
16021606
break;
16031607
case XDP_TX:
16041608
tx_ring = priv->xdp_tx_ring[rx_ring->index];
1609+
if (unlikely(test_bit(ENETC_TX_DOWN, &priv->flags))) {
1610+
enetc_xdp_drop(rx_ring, orig_i, i);
1611+
tx_ring->stats.xdp_tx_drops++;
1612+
break;
1613+
}
1614+
16051615
xdp_tx_bd_cnt = enetc_rx_swbd_to_xdp_tx_swbd(xdp_tx_arr,
16061616
rx_ring,
16071617
orig_i, i);
@@ -2223,18 +2233,24 @@ static void enetc_enable_rxbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)
22232233
enetc_rxbdr_wr(hw, idx, ENETC_RBMR, rbmr);
22242234
}
22252235

2226-
static void enetc_enable_bdrs(struct enetc_ndev_priv *priv)
2236+
static void enetc_enable_rx_bdrs(struct enetc_ndev_priv *priv)
22272237
{
22282238
struct enetc_hw *hw = &priv->si->hw;
22292239
int i;
22302240

2231-
for (i = 0; i < priv->num_tx_rings; i++)
2232-
enetc_enable_txbdr(hw, priv->tx_ring[i]);
2233-
22342241
for (i = 0; i < priv->num_rx_rings; i++)
22352242
enetc_enable_rxbdr(hw, priv->rx_ring[i]);
22362243
}
22372244

2245+
static void enetc_enable_tx_bdrs(struct enetc_ndev_priv *priv)
2246+
{
2247+
struct enetc_hw *hw = &priv->si->hw;
2248+
int i;
2249+
2250+
for (i = 0; i < priv->num_tx_rings; i++)
2251+
enetc_enable_txbdr(hw, priv->tx_ring[i]);
2252+
}
2253+
22382254
static void enetc_disable_rxbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)
22392255
{
22402256
int idx = rx_ring->index;
@@ -2251,18 +2267,24 @@ static void enetc_disable_txbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)
22512267
enetc_txbdr_wr(hw, idx, ENETC_TBMR, 0);
22522268
}
22532269

2254-
static void enetc_disable_bdrs(struct enetc_ndev_priv *priv)
2270+
static void enetc_disable_rx_bdrs(struct enetc_ndev_priv *priv)
22552271
{
22562272
struct enetc_hw *hw = &priv->si->hw;
22572273
int i;
22582274

2259-
for (i = 0; i < priv->num_tx_rings; i++)
2260-
enetc_disable_txbdr(hw, priv->tx_ring[i]);
2261-
22622275
for (i = 0; i < priv->num_rx_rings; i++)
22632276
enetc_disable_rxbdr(hw, priv->rx_ring[i]);
22642277
}
22652278

2279+
static void enetc_disable_tx_bdrs(struct enetc_ndev_priv *priv)
2280+
{
2281+
struct enetc_hw *hw = &priv->si->hw;
2282+
int i;
2283+
2284+
for (i = 0; i < priv->num_tx_rings; i++)
2285+
enetc_disable_txbdr(hw, priv->tx_ring[i]);
2286+
}
2287+
22662288
static void enetc_wait_txbdr(struct enetc_hw *hw, struct enetc_bdr *tx_ring)
22672289
{
22682290
int delay = 8, timeout = 100;
@@ -2460,9 +2482,13 @@ void enetc_start(struct net_device *ndev)
24602482
enable_irq(irq);
24612483
}
24622484

2463-
enetc_enable_bdrs(priv);
2485+
enetc_enable_tx_bdrs(priv);
2486+
2487+
enetc_enable_rx_bdrs(priv);
24642488

24652489
netif_tx_start_all_queues(ndev);
2490+
2491+
clear_bit(ENETC_TX_DOWN, &priv->flags);
24662492
}
24672493
EXPORT_SYMBOL_GPL(enetc_start);
24682494

@@ -2520,9 +2546,15 @@ void enetc_stop(struct net_device *ndev)
25202546
struct enetc_ndev_priv *priv = netdev_priv(ndev);
25212547
int i;
25222548

2549+
set_bit(ENETC_TX_DOWN, &priv->flags);
2550+
25232551
netif_tx_stop_all_queues(ndev);
25242552

2525-
enetc_disable_bdrs(priv);
2553+
enetc_disable_rx_bdrs(priv);
2554+
2555+
enetc_wait_bdrs(priv);
2556+
2557+
enetc_disable_tx_bdrs(priv);
25262558

25272559
for (i = 0; i < priv->bdr_int_num; i++) {
25282560
int irq = pci_irq_vector(priv->si->pdev,
@@ -2533,8 +2565,6 @@ void enetc_stop(struct net_device *ndev)
25332565
napi_disable(&priv->int_vector[i]->napi);
25342566
}
25352567

2536-
enetc_wait_bdrs(priv);
2537-
25382568
enetc_clear_interrupts(priv);
25392569
}
25402570
EXPORT_SYMBOL_GPL(enetc_stop);

drivers/net/ethernet/freescale/enetc/enetc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ enum enetc_active_offloads {
325325

326326
enum enetc_flags_bit {
327327
ENETC_TX_ONESTEP_TSTAMP_IN_PROGRESS = 0,
328+
ENETC_TX_DOWN,
328329
};
329330

330331
/* interrupt coalescing modes */

0 commit comments

Comments
 (0)