Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorJakub Kicinski <kuba@kernel.org>
Thu, 27 Feb 2025 18:14:23 +0000 (10:14 -0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 27 Feb 2025 18:20:58 +0000 (10:20 -0800)
Cross-merge networking fixes after downstream PR (net-6.14-rc5).

Conflicts:

drivers/net/ethernet/cadence/macb_main.c
  fa52f15c745c ("net: cadence: macb: Synchronize stats calculations")
  75696dd0fd72 ("net: cadence: macb: Convert to get_stats64")
https://lore.kernel.org/20250224125848.68ee63e5@canb.auug.org.au

Adjacent changes:

drivers/net/ethernet/intel/ice/ice_sriov.c
  79990cf5e7ad ("ice: Fix deinitializing VF in error path")
  a203163274a4 ("ice: simplify VF MSI-X managing")

net/ipv4/tcp.c
  18912c520674 ("tcp: devmem: don't write truncated dmabuf CMSGs to userspace")
  297d389e9e5b ("net: prefix devmem specific helpers")

net/mptcp/subflow.c
  8668860b0ad3 ("mptcp: reset when MPTCP opts are dropped after join")
  c3349a22c200 ("mptcp: consolidate subflow cleanup")

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
24 files changed:
1  2 
MAINTAINERS
drivers/net/ethernet/cadence/macb.h
drivers/net/ethernet/cadence/macb_main.c
drivers/net/ethernet/intel/iavf/iavf_main.c
drivers/net/ethernet/intel/ice/ice_sriov.c
drivers/net/ethernet/intel/idpf/idpf_txrx.c
drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
include/net/sock.h
include/net/tcp.h
kernel/bpf/btf.c
net/core/dev.c
net/core/gro.c
net/core/skbuff.c
net/core/sock.c
net/ethtool/common.c
net/ethtool/ioctl.c
net/ipv4/tcp.c
net/ipv4/tcp_minisocks.c
net/mptcp/pm_netlink.c
net/mptcp/protocol.h
net/mptcp/subflow.c
net/netlink/af_netlink.c
net/unix/af_unix.c
tools/testing/selftests/drivers/net/queues.py

diff --cc MAINTAINERS
Simple merge
Simple merge
index 5345f3e1a7957f5dc1e15316503c42832bf97af7,c1f57d96e63fc410942b69a2ef513f9e2adaa771..6c462de81f200563cc077cd87f5632108a7b8144
@@@ -3108,12 -3096,16 +3110,13 @@@ static void gem_update_stats(struct mac
                        bp->ethtool_stats[idx++] = *stat;
  }
  
 -static struct net_device_stats *gem_get_stats(struct macb *bp)
 +static void gem_get_stats(struct macb *bp, struct rtnl_link_stats64 *nstat)
  {
        struct gem_stats *hwstat = &bp->hw_stats.gem;
 -      struct net_device_stats *nstat = &bp->dev->stats;
 -
 -      if (!netif_running(bp->dev))
 -              return nstat;
  
 -      gem_update_stats(bp);
+       spin_lock_irq(&bp->stats_lock);
 +      if (netif_running(bp->dev))
 +              gem_update_stats(bp);
  
        nstat->rx_errors = (hwstat->rx_frame_check_sequence_errors +
                            hwstat->rx_alignment_errors +
        nstat->tx_aborted_errors = hwstat->tx_excessive_collisions;
        nstat->tx_carrier_errors = hwstat->tx_carrier_sense_errors;
        nstat->tx_fifo_errors = hwstat->tx_underrun;
 -
 -      return nstat;
+       spin_unlock_irq(&bp->stats_lock);
  }
  
  static void gem_get_ethtool_stats(struct net_device *dev,
@@@ -3192,19 -3188,17 +3197,20 @@@ static void gem_get_ethtool_strings(str
        }
  }
  
 -static struct net_device_stats *macb_get_stats(struct net_device *dev)
 +static void macb_get_stats(struct net_device *dev,
 +                         struct rtnl_link_stats64 *nstat)
  {
        struct macb *bp = netdev_priv(dev);
 -      struct net_device_stats *nstat = &bp->dev->stats;
        struct macb_stats *hwstat = &bp->hw_stats.macb;
  
 -      if (macb_is_gem(bp))
 -              return gem_get_stats(bp);
 +      netdev_stats_to_stats64(nstat, &bp->dev->stats);
 +      if (macb_is_gem(bp)) {
 +              gem_get_stats(bp, nstat);
 +              return;
 +      }
  
        /* read stats from hardware */
+       spin_lock_irq(&bp->stats_lock);
        macb_update_stats(bp);
  
        /* Convert HW stats into netdevice stats */
        nstat->tx_carrier_errors = hwstat->tx_carrier_errors;
        nstat->tx_fifo_errors = hwstat->tx_underruns;
        /* Don't know about heartbeat or window errors... */
+       spin_unlock_irq(&bp->stats_lock);
 +}
 +
 +static void macb_get_pause_stats(struct net_device *dev,
 +                               struct ethtool_pause_stats *pause_stats)
 +{
 +      struct macb *bp = netdev_priv(dev);
 +      struct macb_stats *hwstat = &bp->hw_stats.macb;
  
 -      return nstat;
 +      macb_update_stats(bp);
 +      pause_stats->tx_pause_frames = hwstat->tx_pause_frames;
 +      pause_stats->rx_pause_frames = hwstat->rx_pause_frames;
 +}
 +
 +static void gem_get_pause_stats(struct net_device *dev,
 +                              struct ethtool_pause_stats *pause_stats)
 +{
 +      struct macb *bp = netdev_priv(dev);
 +      struct gem_stats *hwstat = &bp->hw_stats.gem;
 +
 +      gem_update_stats(bp);
 +      pause_stats->tx_pause_frames = hwstat->tx_pause_frames;
 +      pause_stats->rx_pause_frames = hwstat->rx_pause_frames;
 +}
 +
 +static void macb_get_eth_mac_stats(struct net_device *dev,
 +                                 struct ethtool_eth_mac_stats *mac_stats)
 +{
 +      struct macb *bp = netdev_priv(dev);
 +      struct macb_stats *hwstat = &bp->hw_stats.macb;
 +
 +      macb_update_stats(bp);
 +      mac_stats->FramesTransmittedOK = hwstat->tx_ok;
 +      mac_stats->SingleCollisionFrames = hwstat->tx_single_cols;
 +      mac_stats->MultipleCollisionFrames = hwstat->tx_multiple_cols;
 +      mac_stats->FramesReceivedOK = hwstat->rx_ok;
 +      mac_stats->FrameCheckSequenceErrors = hwstat->rx_fcs_errors;
 +      mac_stats->AlignmentErrors = hwstat->rx_align_errors;
 +      mac_stats->FramesWithDeferredXmissions = hwstat->tx_deferred;
 +      mac_stats->LateCollisions = hwstat->tx_late_cols;
 +      mac_stats->FramesAbortedDueToXSColls = hwstat->tx_excessive_cols;
 +      mac_stats->FramesLostDueToIntMACXmitError = hwstat->tx_underruns;
 +      mac_stats->CarrierSenseErrors = hwstat->tx_carrier_errors;
 +      mac_stats->FramesLostDueToIntMACRcvError = hwstat->rx_overruns;
 +      mac_stats->InRangeLengthErrors = hwstat->rx_length_mismatch;
 +      mac_stats->FrameTooLongErrors = hwstat->rx_oversize_pkts;
 +}
 +
 +static void gem_get_eth_mac_stats(struct net_device *dev,
 +                                struct ethtool_eth_mac_stats *mac_stats)
 +{
 +      struct macb *bp = netdev_priv(dev);
 +      struct gem_stats *hwstat = &bp->hw_stats.gem;
 +
 +      gem_update_stats(bp);
 +      mac_stats->FramesTransmittedOK = hwstat->tx_frames;
 +      mac_stats->SingleCollisionFrames = hwstat->tx_single_collision_frames;
 +      mac_stats->MultipleCollisionFrames =
 +              hwstat->tx_multiple_collision_frames;
 +      mac_stats->FramesReceivedOK = hwstat->rx_frames;
 +      mac_stats->FrameCheckSequenceErrors =
 +              hwstat->rx_frame_check_sequence_errors;
 +      mac_stats->AlignmentErrors = hwstat->rx_alignment_errors;
 +      mac_stats->OctetsTransmittedOK = hwstat->tx_octets;
 +      mac_stats->FramesWithDeferredXmissions = hwstat->tx_deferred_frames;
 +      mac_stats->LateCollisions = hwstat->tx_late_collisions;
 +      mac_stats->FramesAbortedDueToXSColls = hwstat->tx_excessive_collisions;
 +      mac_stats->FramesLostDueToIntMACXmitError = hwstat->tx_underrun;
 +      mac_stats->CarrierSenseErrors = hwstat->tx_carrier_sense_errors;
 +      mac_stats->OctetsReceivedOK = hwstat->rx_octets;
 +      mac_stats->MulticastFramesXmittedOK = hwstat->tx_multicast_frames;
 +      mac_stats->BroadcastFramesXmittedOK = hwstat->tx_broadcast_frames;
 +      mac_stats->MulticastFramesReceivedOK = hwstat->rx_multicast_frames;
 +      mac_stats->BroadcastFramesReceivedOK = hwstat->rx_broadcast_frames;
 +      mac_stats->InRangeLengthErrors = hwstat->rx_length_field_frame_errors;
 +      mac_stats->FrameTooLongErrors = hwstat->rx_oversize_frames;
 +}
 +
 +/* TODO: Report SQE test errors when added to phy_stats */
 +static void macb_get_eth_phy_stats(struct net_device *dev,
 +                                 struct ethtool_eth_phy_stats *phy_stats)
 +{
 +      struct macb *bp = netdev_priv(dev);
 +      struct macb_stats *hwstat = &bp->hw_stats.macb;
 +
 +      macb_update_stats(bp);
 +      phy_stats->SymbolErrorDuringCarrier = hwstat->rx_symbol_errors;
 +}
 +
 +static void gem_get_eth_phy_stats(struct net_device *dev,
 +                                struct ethtool_eth_phy_stats *phy_stats)
 +{
 +      struct macb *bp = netdev_priv(dev);
 +      struct gem_stats *hwstat = &bp->hw_stats.gem;
 +
 +      gem_update_stats(bp);
 +      phy_stats->SymbolErrorDuringCarrier = hwstat->rx_symbol_errors;
 +}
 +
 +static void macb_get_rmon_stats(struct net_device *dev,
 +                              struct ethtool_rmon_stats *rmon_stats,
 +                              const struct ethtool_rmon_hist_range **ranges)
 +{
 +      struct macb *bp = netdev_priv(dev);
 +      struct macb_stats *hwstat = &bp->hw_stats.macb;
 +
 +      macb_update_stats(bp);
 +      rmon_stats->undersize_pkts = hwstat->rx_undersize_pkts;
 +      rmon_stats->oversize_pkts = hwstat->rx_oversize_pkts;
 +      rmon_stats->jabbers = hwstat->rx_jabbers;
 +}
 +
 +static const struct ethtool_rmon_hist_range gem_rmon_ranges[] = {
 +      {   64,    64 },
 +      {   65,   127 },
 +      {  128,   255 },
 +      {  256,   511 },
 +      {  512,  1023 },
 +      { 1024,  1518 },
 +      { 1519, 16384 },
 +      { },
 +};
 +
 +static void gem_get_rmon_stats(struct net_device *dev,
 +                             struct ethtool_rmon_stats *rmon_stats,
 +                             const struct ethtool_rmon_hist_range **ranges)
 +{
 +      struct macb *bp = netdev_priv(dev);
 +      struct gem_stats *hwstat = &bp->hw_stats.gem;
 +
 +      gem_update_stats(bp);
 +      rmon_stats->undersize_pkts = hwstat->rx_undersized_frames;
 +      rmon_stats->oversize_pkts = hwstat->rx_oversize_frames;
 +      rmon_stats->jabbers = hwstat->rx_jabbers;
 +      rmon_stats->hist[0] = hwstat->rx_64_byte_frames;
 +      rmon_stats->hist[1] = hwstat->rx_65_127_byte_frames;
 +      rmon_stats->hist[2] = hwstat->rx_128_255_byte_frames;
 +      rmon_stats->hist[3] = hwstat->rx_256_511_byte_frames;
 +      rmon_stats->hist[4] = hwstat->rx_512_1023_byte_frames;
 +      rmon_stats->hist[5] = hwstat->rx_1024_1518_byte_frames;
 +      rmon_stats->hist[6] = hwstat->rx_greater_than_1518_byte_frames;
 +      rmon_stats->hist_tx[0] = hwstat->tx_64_byte_frames;
 +      rmon_stats->hist_tx[1] = hwstat->tx_65_127_byte_frames;
 +      rmon_stats->hist_tx[2] = hwstat->tx_128_255_byte_frames;
 +      rmon_stats->hist_tx[3] = hwstat->tx_256_511_byte_frames;
 +      rmon_stats->hist_tx[4] = hwstat->tx_512_1023_byte_frames;
 +      rmon_stats->hist_tx[5] = hwstat->tx_1024_1518_byte_frames;
 +      rmon_stats->hist_tx[6] = hwstat->tx_greater_than_1518_byte_frames;
 +      *ranges = gem_rmon_ranges;
  }
  
  static int macb_get_regs_len(struct net_device *netdev)
Simple merge
Simple merge
Simple merge
diff --cc net/core/dev.c
Simple merge
diff --cc net/core/gro.c
Simple merge
Simple merge
diff --cc net/core/sock.c
Simple merge
Simple merge
Simple merge
diff --cc net/ipv4/tcp.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge