Skip to content

Commit

Permalink
ath11k_nss: Fix iface stats showing up as 0
Browse files Browse the repository at this point in the history
Generic ndo_get_stats64 was removed in kernel > 6.9. This ends up
breaking interface stats on NSS builds.

```
phy0-ap0  Link encap:Ethernet  HWaddr
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:841 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

phy1-ap0  Link encap:Ethernet  HWaddr
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
```

Until a better workaround is implemented revert the following patch.
```
commit c018411d355518a0b2a304d7543564cdd1b808b6
Author:     Breno Leitao <[email protected]>
AuthorDate: Fri Jun 7 03:20:44 2024 -0700
Commit:     Johannes Berg <[email protected]>
CommitDate: Wed Jun 12 13:04:24 2024 +0200

    wifi: mac80211: Remove generic .ndo_get_stats64

    Commit 3e2f544dd8a33 ("net: get stats64 if device if driver is
    configured") moved the callback to dev_get_tstats64() to net core, so,
    unless the driver is doing some custom stats collection, it does not
    need to set .ndo_get_stats64.

    Since this driver is now relying in NETDEV_PCPU_STAT_TSTATS, then, it
    doesn't need to set the dev_get_tstats64() generic .ndo_get_stats64
    function pointer.

    In this driver specifically, .ndo_get_stats64 basically points to
    dev_fetch_sw_netstats(). Now it will point to dev_get_tstats64(), which
    calls netdev_stats_to_stats64() and dev_fetch_sw_netstats().
    netdev_stats_to_stats64() seems irrelevant for this driver.
```

Signed-off-by: Sean Khan <[email protected]>
  • Loading branch information
qosmio committed Sep 30, 2024
1 parent 25daccc commit fd98913
Showing 1 changed file with 39 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -832,6 +832,12 @@ static void ieee80211_uninit(struct net_
ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev));
}

+static void
+ieee80211_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
+{
+ dev_fetch_sw_netstats(stats, dev->tstats);
+}
+
static int ieee80211_netdev_setup_tc(struct net_device *dev,
enum tc_setup_type type, void *type_data)
{
@@ -848,6 +854,7 @@ static const struct net_device_ops ieee8
.ndo_start_xmit = ieee80211_subif_start_xmit,
.ndo_set_rx_mode = ieee80211_set_multicast_list,
.ndo_set_mac_address = ieee80211_change_mac,
+ .ndo_get_stats64 = ieee80211_get_stats64,
.ndo_setup_tc = ieee80211_netdev_setup_tc,
};

@@ -887,6 +894,7 @@ static const struct net_device_ops ieee8
.ndo_set_rx_mode = ieee80211_set_multicast_list,
.ndo_set_mac_address = ieee80211_change_mac,
.ndo_select_queue = ieee80211_monitor_select_queue,
+ .ndo_get_stats64 = ieee80211_get_stats64,
};

static int ieee80211_netdev_fill_forward_path(struct net_device_path_ctx *ctx,
@@ -954,6 +962,7 @@ static const struct net_device_ops ieee8
.ndo_start_xmit = ieee80211_subif_start_xmit_8023,
.ndo_set_rx_mode = ieee80211_set_multicast_list,
.ndo_set_mac_address = ieee80211_change_mac,
+ .ndo_get_stats64 = ieee80211_get_stats64,
.ndo_fill_forward_path = ieee80211_netdev_fill_forward_path,
.ndo_setup_tc = ieee80211_netdev_setup_tc,
};

0 comments on commit fd98913

Please sign in to comment.