2020-11-12 11:11:50

by Lev Stipakov

[permalink] [raw]
Subject: [PATCH 1/3] net: mac80211: use core API for updating TX stats

Commit d3fd65484c781 ("net: core: add dev_sw_netstats_tx_add")
has added function "dev_sw_netstats_tx_add()" to update
net device per-cpu TX stats.

Use this function instead of ieee80211_tx_stats().

Signed-off-by: Lev Stipakov <[email protected]>
---
net/mac80211/tx.c | 16 +++-------------
1 file changed, 3 insertions(+), 13 deletions(-)

diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 5f05f4651dd7..7807f8178527 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -38,16 +38,6 @@

/* misc utils */

-static inline void ieee80211_tx_stats(struct net_device *dev, u32 len)
-{
- struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
-
- u64_stats_update_begin(&tstats->syncp);
- tstats->tx_packets++;
- tstats->tx_bytes += len;
- u64_stats_update_end(&tstats->syncp);
-}
-
static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
struct sk_buff *skb, int group_addr,
int next_frag_len)
@@ -3403,7 +3393,7 @@ static void ieee80211_xmit_fast_finish(struct ieee80211_sub_if_data *sdata,
if (key)
info->control.hw_key = &key->conf;

- ieee80211_tx_stats(skb->dev, skb->len);
+ dev_sw_netstats_tx_add(skb->dev, 1, skb->len);

if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) {
tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
@@ -4021,7 +4011,7 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb,
goto out;
}

- ieee80211_tx_stats(dev, skb->len);
+ dev_sw_netstats_tx_add(dev, 1, skb->len);

ieee80211_xmit(sdata, sta, skb);
}
@@ -4248,7 +4238,7 @@ static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,

info->hw_queue = sdata->vif.hw_queue[skb_get_queue_mapping(skb)];

- ieee80211_tx_stats(dev, skb->len);
+ dev_sw_netstats_tx_add(dev, 1, skb->len);

sta->tx_stats.bytes[skb_get_queue_mapping(skb)] += skb->len;
sta->tx_stats.packets[skb_get_queue_mapping(skb)]++;
--
2.25.1


2020-11-12 23:32:40

by Jakub Kicinski

[permalink] [raw]
Subject: Re: [PATCH 1/3] net: mac80211: use core API for updating TX stats

On Thu, 12 Nov 2020 13:09:53 +0200 Lev Stipakov wrote:
> Commit d3fd65484c781 ("net: core: add dev_sw_netstats_tx_add")
> has added function "dev_sw_netstats_tx_add()" to update
> net device per-cpu TX stats.
>
> Use this function instead of ieee80211_tx_stats().
>
> Signed-off-by: Lev Stipakov <[email protected]>

Heiner is actively working on this.

Heiner, would you mind looking at these three patches? If you have
these changes queued in your tree I'm happy to wait for them.

2020-11-13 07:47:29

by Heiner Kallweit

[permalink] [raw]
Subject: Re: [PATCH 1/3] net: mac80211: use core API for updating TX stats

Am 12.11.2020 um 12:09 schrieb Lev Stipakov:
> Commit d3fd65484c781 ("net: core: add dev_sw_netstats_tx_add")
> has added function "dev_sw_netstats_tx_add()" to update
> net device per-cpu TX stats.
>
> Use this function instead of ieee80211_tx_stats().
>
I think you can do the same with ieee80211_rx_stats().

> Signed-off-by: Lev Stipakov <[email protected]>
> ---
> net/mac80211/tx.c | 16 +++-------------
> 1 file changed, 3 insertions(+), 13 deletions(-)
>
> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
> index 5f05f4651dd7..7807f8178527 100644
> --- a/net/mac80211/tx.c
> +++ b/net/mac80211/tx.c
> @@ -38,16 +38,6 @@
>
> /* misc utils */
>
> -static inline void ieee80211_tx_stats(struct net_device *dev, u32 len)
> -{
> - struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
> -
> - u64_stats_update_begin(&tstats->syncp);
> - tstats->tx_packets++;
> - tstats->tx_bytes += len;
> - u64_stats_update_end(&tstats->syncp);
> -}
> -
> static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
> struct sk_buff *skb, int group_addr,
> int next_frag_len)
> @@ -3403,7 +3393,7 @@ static void ieee80211_xmit_fast_finish(struct ieee80211_sub_if_data *sdata,
> if (key)
> info->control.hw_key = &key->conf;
>
> - ieee80211_tx_stats(skb->dev, skb->len);
> + dev_sw_netstats_tx_add(skb->dev, 1, skb->len);
>
> if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) {
> tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
> @@ -4021,7 +4011,7 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb,
> goto out;
> }
>
> - ieee80211_tx_stats(dev, skb->len);
> + dev_sw_netstats_tx_add(dev, 1, skb->len);
>
> ieee80211_xmit(sdata, sta, skb);
> }
> @@ -4248,7 +4238,7 @@ static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,
>
> info->hw_queue = sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
>
> - ieee80211_tx_stats(dev, skb->len);
> + dev_sw_netstats_tx_add(dev, 1, skb->len);
>
> sta->tx_stats.bytes[skb_get_queue_mapping(skb)] += skb->len;
> sta->tx_stats.packets[skb_get_queue_mapping(skb)]++;
>

2020-11-13 07:50:20

by Heiner Kallweit

[permalink] [raw]
Subject: Re: [PATCH 1/3] net: mac80211: use core API for updating TX stats

Am 13.11.2020 um 00:30 schrieb Jakub Kicinski:
> On Thu, 12 Nov 2020 13:09:53 +0200 Lev Stipakov wrote:
>> Commit d3fd65484c781 ("net: core: add dev_sw_netstats_tx_add")
>> has added function "dev_sw_netstats_tx_add()" to update
>> net device per-cpu TX stats.
>>
>> Use this function instead of ieee80211_tx_stats().
>>
>> Signed-off-by: Lev Stipakov <[email protected]>
>
> Heiner is actively working on this.
>
> Heiner, would you mind looking at these three patches? If you have
> these changes queued in your tree I'm happy to wait for them.
>
This series is a good follow-up to what I did already.
I'll have a look at it.

2020-11-13 08:59:06

by Lev Stipakov

[permalink] [raw]
Subject: [PATCH v2 1/3] net: mac80211: use core API for updating TX/RX stats

Commits

d3fd65484c781 ("net: core: add dev_sw_netstats_tx_add")
451b05f413d3f ("net: netdevice.h: sw_netstats_rx_add helper)

have added API to update net device per-cpu TX/RX stats.

Use core API instead of ieee80211_tx/rx_stats().

Signed-off-by: Lev Stipakov <[email protected]>
---
v2: also replace ieee80211_rx_stats() with dev_sw_netstats_rx_add()

net/mac80211/rx.c | 18 ++++--------------
net/mac80211/tx.c | 16 +++-------------
2 files changed, 7 insertions(+), 27 deletions(-)

diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 09d1c9fb8872..0c1a19a93c79 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -32,16 +32,6 @@
#include "wme.h"
#include "rate.h"

-static inline void ieee80211_rx_stats(struct net_device *dev, u32 len)
-{
- struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
-
- u64_stats_update_begin(&tstats->syncp);
- tstats->rx_packets++;
- tstats->rx_bytes += len;
- u64_stats_update_end(&tstats->syncp);
-}
-
/*
* monitor mode reception
*
@@ -842,7 +832,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,

if (skb) {
skb->dev = sdata->dev;
- ieee80211_rx_stats(skb->dev, skb->len);
+ dev_sw_netstats_rx_add(skb->dev, skb->len);
netif_receive_skb(skb);
}
}
@@ -2560,7 +2550,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
skb = rx->skb;
xmit_skb = NULL;

- ieee80211_rx_stats(dev, skb->len);
+ dev_sw_netstats_rx_add(dev, skb->len);

if (rx->sta) {
/* The seqno index has the same property as needed
@@ -3699,7 +3689,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
}

prev_dev = sdata->dev;
- ieee80211_rx_stats(sdata->dev, skb->len);
+ dev_sw_netstats_rx_add(sdata->dev, skb->len);
}

if (prev_dev) {
@@ -4416,7 +4406,7 @@ static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx,

skb->dev = fast_rx->dev;

- ieee80211_rx_stats(fast_rx->dev, skb->len);
+ dev_sw_netstats_rx_add(fast_rx->dev, skb->len);

/* The seqno index has the same property as needed
* for the rx_msdu field, i.e. it is IEEE80211_NUM_TIDS
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 5f05f4651dd7..7807f8178527 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -38,16 +38,6 @@

/* misc utils */

-static inline void ieee80211_tx_stats(struct net_device *dev, u32 len)
-{
- struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
-
- u64_stats_update_begin(&tstats->syncp);
- tstats->tx_packets++;
- tstats->tx_bytes += len;
- u64_stats_update_end(&tstats->syncp);
-}
-
static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
struct sk_buff *skb, int group_addr,
int next_frag_len)
@@ -3403,7 +3393,7 @@ static void ieee80211_xmit_fast_finish(struct ieee80211_sub_if_data *sdata,
if (key)
info->control.hw_key = &key->conf;

- ieee80211_tx_stats(skb->dev, skb->len);
+ dev_sw_netstats_tx_add(skb->dev, 1, skb->len);

if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) {
tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
@@ -4021,7 +4011,7 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb,
goto out;
}

- ieee80211_tx_stats(dev, skb->len);
+ dev_sw_netstats_tx_add(dev, 1, skb->len);

ieee80211_xmit(sdata, sta, skb);
}
@@ -4248,7 +4238,7 @@ static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,

info->hw_queue = sdata->vif.hw_queue[skb_get_queue_mapping(skb)];

- ieee80211_tx_stats(dev, skb->len);
+ dev_sw_netstats_tx_add(dev, 1, skb->len);

sta->tx_stats.bytes[skb_get_queue_mapping(skb)] += skb->len;
sta->tx_stats.packets[skb_get_queue_mapping(skb)]++;
--
2.25.1

2020-11-13 10:48:00

by Heiner Kallweit

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] net: mac80211: use core API for updating TX/RX stats

Am 13.11.2020 um 09:58 schrieb Lev Stipakov:
> Commits
>
> d3fd65484c781 ("net: core: add dev_sw_netstats_tx_add")
> 451b05f413d3f ("net: netdevice.h: sw_netstats_rx_add helper)
>
> have added API to update net device per-cpu TX/RX stats.
>
> Use core API instead of ieee80211_tx/rx_stats().
>
> Signed-off-by: Lev Stipakov <[email protected]>
> ---
> v2: also replace ieee80211_rx_stats() with dev_sw_netstats_rx_add()
>
Reviewed-by: Heiner Kallweit <[email protected]>

2020-11-13 10:56:16

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] net: mac80211: use core API for updating TX/RX stats

On Fri, 2020-11-13 at 10:58 +0200, Lev Stipakov wrote:
> Commits
>
> d3fd65484c781 ("net: core: add dev_sw_netstats_tx_add")
> 451b05f413d3f ("net: netdevice.h: sw_netstats_rx_add helper)
>
> have added API to update net device per-cpu TX/RX stats.
>
> Use core API instead of ieee80211_tx/rx_stats().
>

This looks like a 1/3 but I only ever saw this, not the others.

Seems I should take this through my tree, any objections?


johannes

2020-11-13 12:29:14

by Lev Stipakov

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] net: mac80211: use core API for updating TX/RX stats

Hi,

> This looks like a 1/3 but I only ever saw this, not the others.

The rest are similar changes for openvswitch and xfrm subsystems, so
I've sent those to the list of maintainers I got from
scripts/get_maintainer.pl.

--
-Lev

2020-11-13 19:52:01

by Jakub Kicinski

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] net: mac80211: use core API for updating TX/RX stats

On Fri, 13 Nov 2020 14:25:25 +0200 Lev Stipakov wrote:
> > Seems I should take this through my tree, any objections?

Go for it, you may need to pull net-next first but that should happen
soonish anyway, when I get to your pr.

> The rest are similar changes for openvswitch and xfrm subsystems, so
> I've sent those to the list of maintainers I got from
> scripts/get_maintainer.pl.

Lev, please either post the patches separately (non-series) or make
them a proper series which has a cover letter etc. and CC folks on all
the patches.

Since there are no dependencies between the patches here you could have
gone for separate patches here.

2020-11-13 19:55:24

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] net: mac80211: use core API for updating TX/RX stats

On Fri, 2020-11-13 at 11:51 -0800, Jakub Kicinski wrote:
> On Fri, 13 Nov 2020 14:25:25 +0200 Lev Stipakov wrote:
> > > Seems I should take this through my tree, any objections?
>
> Go for it, you may need to pull net-next first but that should happen
> soonish anyway, when I get to your pr.

Yeah, I'll fast forward once you have pulled that, and generally I don't
apply anything while I have open pull requests (in case I have to
rejigger or whatnot), so all should be well. :)

Thanks!

johannes

2020-11-13 21:32:07

by Jakub Kicinski

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] net: mac80211: use core API for updating TX/RX stats

On Fri, 13 Nov 2020 23:25:31 +0200 Lev Stipakov wrote:
> > Since there are no dependencies between the patches here you could have
> > gone for separate patches here.
>
> Shall I re-send those 3 patches separately or can we proceed with those
> in the (sub-optimal) form they've been already sent?

Resend would be great, please keep Heiner's review tags.

2020-11-13 21:33:22

by Lev Stipakov

[permalink] [raw]
Subject: Re: [PATCH v2 1/3] net: mac80211: use core API for updating TX/RX stats

> Lev, please either post the patches separately (non-series) or make
> them a proper series which has a cover letter etc. and CC folks on all
> the patches.

Understood, thanks.

> Since there are no dependencies between the patches here you could have
> gone for separate patches here.

Shall I re-send those 3 patches separately or can we proceed with those
in the (sub-optimal) form they've been already sent?

--
-Lev

2020-11-13 21:47:45

by Lev Stipakov

[permalink] [raw]
Subject: [PATCH v3] net: mac80211: use core API for updating TX/RX stats

Commits

d3fd65484c781 ("net: core: add dev_sw_netstats_tx_add")
451b05f413d3f ("net: netdevice.h: sw_netstats_rx_add helper)

have added API to update net device per-cpu TX/RX stats.

Use core API instead of ieee80211_tx/rx_stats().

Signed-off-by: Lev Stipakov <[email protected]>
Reviewed-by: Heiner Kallweit <[email protected]>
---
v3: no code changes, just send separate patch instead of series as
requested
v2: also replace ieee80211_rx_stats() with dev_sw_netstats_rx_add()

net/mac80211/rx.c | 18 ++++--------------
net/mac80211/tx.c | 16 +++-------------
2 files changed, 7 insertions(+), 27 deletions(-)

diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 09d1c9fb8872..0c1a19a93c79 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -32,16 +32,6 @@
#include "wme.h"
#include "rate.h"

-static inline void ieee80211_rx_stats(struct net_device *dev, u32 len)
-{
- struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
-
- u64_stats_update_begin(&tstats->syncp);
- tstats->rx_packets++;
- tstats->rx_bytes += len;
- u64_stats_update_end(&tstats->syncp);
-}
-
/*
* monitor mode reception
*
@@ -842,7 +832,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,

if (skb) {
skb->dev = sdata->dev;
- ieee80211_rx_stats(skb->dev, skb->len);
+ dev_sw_netstats_rx_add(skb->dev, skb->len);
netif_receive_skb(skb);
}
}
@@ -2560,7 +2550,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
skb = rx->skb;
xmit_skb = NULL;

- ieee80211_rx_stats(dev, skb->len);
+ dev_sw_netstats_rx_add(dev, skb->len);

if (rx->sta) {
/* The seqno index has the same property as needed
@@ -3699,7 +3689,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
}

prev_dev = sdata->dev;
- ieee80211_rx_stats(sdata->dev, skb->len);
+ dev_sw_netstats_rx_add(sdata->dev, skb->len);
}

if (prev_dev) {
@@ -4416,7 +4406,7 @@ static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx,

skb->dev = fast_rx->dev;

- ieee80211_rx_stats(fast_rx->dev, skb->len);
+ dev_sw_netstats_rx_add(fast_rx->dev, skb->len);

/* The seqno index has the same property as needed
* for the rx_msdu field, i.e. it is IEEE80211_NUM_TIDS
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 5f05f4651dd7..7807f8178527 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -38,16 +38,6 @@

/* misc utils */

-static inline void ieee80211_tx_stats(struct net_device *dev, u32 len)
-{
- struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
-
- u64_stats_update_begin(&tstats->syncp);
- tstats->tx_packets++;
- tstats->tx_bytes += len;
- u64_stats_update_end(&tstats->syncp);
-}
-
static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
struct sk_buff *skb, int group_addr,
int next_frag_len)
@@ -3403,7 +3393,7 @@ static void ieee80211_xmit_fast_finish(struct ieee80211_sub_if_data *sdata,
if (key)
info->control.hw_key = &key->conf;

- ieee80211_tx_stats(skb->dev, skb->len);
+ dev_sw_netstats_tx_add(skb->dev, 1, skb->len);

if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) {
tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
@@ -4021,7 +4011,7 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb,
goto out;
}

- ieee80211_tx_stats(dev, skb->len);
+ dev_sw_netstats_tx_add(dev, 1, skb->len);

ieee80211_xmit(sdata, sta, skb);
}
@@ -4248,7 +4238,7 @@ static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,

info->hw_queue = sdata->vif.hw_queue[skb_get_queue_mapping(skb)];

- ieee80211_tx_stats(dev, skb->len);
+ dev_sw_netstats_tx_add(dev, 1, skb->len);

sta->tx_stats.bytes[skb_get_queue_mapping(skb)] += skb->len;
sta->tx_stats.packets[skb_get_queue_mapping(skb)]++;
--
2.25.1