]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorJakub Kicinski <kuba@kernel.org>
Tue, 14 Apr 2026 18:54:21 +0000 (11:54 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 14 Apr 2026 19:04:00 +0000 (12:04 -0700)
Merge in late fixes in preparation for the net-next PR.

Conflicts:

include/net/sch_generic.h
  a6bd339dbb351 ("net_sched: fix skb memory leak in deferred qdisc drops")
  ff2998f29f390 ("net: sched: introduce qdisc-specific drop reason tracing")
https://lore.kernel.org/adz0iX85FHMz0HdO@sirena.org.uk

drivers/net/ethernet/airoha/airoha_eth.c
  1acdfbdb516b ("net: airoha: Fix VIP configuration for AN7583 SoC")
  bf3471e6e6c0 ("net: airoha: Make flow control source port mapping dependent on nbq parameter")

Adjacent changes:

drivers/net/ethernet/airoha/airoha_ppe.c
  f44218cd5e6a ("net: airoha: Reset PPE cpu port configuration in airoha_ppe_hw_init()")
  7da62262ec96 ("inet: add ip_local_port_step_width sysctl to improve port usage distribution")

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
23 files changed:
1  2 
MAINTAINERS
drivers/net/can/usb/ucan.c
drivers/net/ethernet/airoha/airoha_eth.c
drivers/net/ethernet/airoha/airoha_eth.h
drivers/net/ethernet/airoha/airoha_ppe.c
drivers/net/ethernet/mediatek/mtk_eth_soc.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/meta/fbnic/fbnic_pci.c
drivers/net/ethernet/microsoft/mana/gdma_main.c
drivers/net/ethernet/microsoft/mana/mana_en.c
drivers/net/ipa/ipa_main.c
drivers/net/netdevsim/netdev.c
drivers/net/netdevsim/netdevsim.h
drivers/net/phy/phy_device.c
drivers/net/ppp/ppp_generic.c
include/net/sch_generic.h
net/can/raw.c
net/core/filter.c
net/ipv4/syncookies.c
net/rose/rose_in.c
net/vmw_vsock/af_vsock.c
tools/testing/selftests/drivers/net/Makefile
tools/testing/selftests/drivers/net/lib/py/env.py

diff --cc MAINTAINERS
Simple merge
Simple merge
index 2bd79da70934332d70555f3d0fb375fddc5436ea,f484835af703cb2b78543661ec1a68802ac78922..e1ab15f1ee7dd28f76b9eb77db03779c2f92d755
@@@ -1724,10 -1695,10 +1723,10 @@@ static int airoha_dev_set_macaddr(struc
        return 0;
  }
  
 -static int airhoha_set_gdm2_loopback(struct airoha_gdm_port *port)
 +static int airoha_set_gdm2_loopback(struct airoha_gdm_port *port)
  {
        struct airoha_eth *eth = port->qdma->eth;
-       u32 val, pse_port, chan, nbq;
+       u32 val, pse_port, chan;
        int src_port;
  
        /* Forward the traffic to the proper GDM port */
        airoha_fe_rmw(eth,
                      REG_SP_DFT_CPORT(src_port >> fls(SP_CPORT_DFT_MASK)),
                      SP_CPORT_MASK(val),
 -                    FE_PSE_PORT_CDM2 << __ffs(SP_CPORT_MASK(val)));
 +                    __field_prep(SP_CPORT_MASK(val), FE_PSE_PORT_CDM2));
  
 -      if (port->id != AIROHA_GDM3_IDX && airoha_is_7581(eth))
 -              airoha_fe_rmw(eth, REG_SRC_PORT_FC_MAP6,
 -                            FC_ID_OF_SRC_PORT24_MASK,
 -                            FIELD_PREP(FC_ID_OF_SRC_PORT24_MASK, 2));
 +      if (port->id == AIROHA_GDM4_IDX && airoha_is_7581(eth)) {
-               u32 mask = FC_ID_OF_SRC_PORT_MASK(nbq);
++              u32 mask = FC_ID_OF_SRC_PORT_MASK(port->nbq);
 +
 +              airoha_fe_rmw(eth, REG_SRC_PORT_FC_MAP6, mask,
 +                            __field_prep(mask, AIROHA_GDM2_IDX));
 +      }
  
        return 0;
  }
@@@ -2949,9 -2934,11 +2946,11 @@@ static int airoha_alloc_gdm_port(struc
        port = netdev_priv(dev);
        u64_stats_init(&port->stats.syncp);
        spin_lock_init(&port->stats.lock);
 -      port->qdma = qdma;
 +      port->eth = eth;
        port->dev = dev;
        port->id = id;
+       /* XXX: Read nbq from DTS */
+       port->nbq = id == AIROHA_GDM3_IDX && airoha_is_7581(eth) ? 4 : 0;
        eth->ports[p] = port;
  
        return airoha_metadata_dst_alloc(port);
index af29fc74165b8fffb59f45b4725dbd963f1b876d,8bcd809e6f53e275770f1fc25d00b9baed8bf132..95e557638617fbdee6c8d28876915ddbc4bffce2
@@@ -534,9 -534,9 +534,10 @@@ struct airoha_qdma 
  
  struct airoha_gdm_port {
        struct airoha_qdma *qdma;
 +      struct airoha_eth *eth;
        struct net_device *dev;
        int id;
+       int nbq;
  
        struct airoha_hw_stats stats;
  
index c057bb2d105d92947bb8c421d89ee94fc0c10f2f,62cfffb4f0e55251f2ddef0d07cc0ed2d66144bb..03115c1c106301d633b380cbdfc6934eb96631d6
@@@ -159,11 -145,17 +159,19 @@@ static void airoha_ppe_hw_init(struct a
                              FIELD_PREP(PPE_DRAM_TB_NUM_ENTRY_MASK,
                                         dram_num_entries));
  
+               airoha_fe_rmw(eth, REG_PPE_BIND_RATE(i),
+                             PPE_BIND_RATE_L2B_BIND_MASK |
+                             PPE_BIND_RATE_BIND_MASK,
+                             FIELD_PREP(PPE_BIND_RATE_L2B_BIND_MASK, 0x1e) |
+                             FIELD_PREP(PPE_BIND_RATE_BIND_MASK, 0x1e));
                airoha_fe_wr(eth, REG_PPE_HASH_SEED(i), PPE_HASH_SEED);
+               airoha_fe_clear(eth, REG_PPE_PPE_FLOW_CFG(i),
+                               PPE_FLOW_CFG_IP6_6RD_MASK);
  
 -              for (p = 0; p < ARRAY_SIZE(eth->ports); p++)
 +              for (p = 0; p < ARRAY_SIZE(eth->ports); p++) {
 +                      struct airoha_gdm_port *port = eth->ports[p];
 +
                        airoha_fe_rmw(eth, REG_PPE_MTU(i, p),
                                      FP0_EGRESS_MTU_MASK |
                                      FP1_EGRESS_MTU_MASK,
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 5af262ec4bbd2d5021904df127a849e52c26178a,5fc0b1ebaf25c0175d8fd225db45d4af52e26b96..11159a50d6a14535d7c173c81c0de80dff108807
@@@ -1185,14 -1168,24 +1185,24 @@@ static inline void tcf_kfree_skb_list(s
  }
  
  static inline void qdisc_dequeue_drop(struct Qdisc *q, struct sk_buff *skb,
 -                                    enum skb_drop_reason reason)
 +                                    enum qdisc_drop_reason reason)
  {
+       struct Qdisc *root;
        DEBUG_NET_WARN_ON_ONCE(!(q->flags & TCQ_F_DEQUEUE_DROPS));
        DEBUG_NET_WARN_ON_ONCE(q->flags & TCQ_F_NOLOCK);
  
-       tcf_set_qdisc_drop_reason(skb, reason);
-       skb->next = q->to_free;
-       q->to_free = skb;
+       rcu_read_lock();
+       root = qdisc_root_sleeping(q);
+       if (root->flags & TCQ_F_DEQUEUE_DROPS) {
 -              tcf_set_drop_reason(skb, reason);
++              tcf_set_qdisc_drop_reason(skb, reason);
+               skb->next = root->to_free;
+               root->to_free = skb;
+       } else {
 -              kfree_skb_reason(skb, reason);
++              kfree_skb_reason(skb, (enum skb_drop_reason)reason);
+       }
+       rcu_read_unlock();
  }
  
  /* Instead of calling kfree_skb() while root qdisc lock is held,
diff --cc net/can/raw.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge