[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cb91e5d3-7596-4564-9e0b-4819e437a692@datenfreihafen.org>
Date: Wed, 5 Jun 2024 22:02:24 +0200
From: Stefan Schmidt <stefan@...enfreihafen.org>
To: Alexander Aring <aahringo@...hat.com>, Jakub Kicinski <kuba@...nel.org>
Cc: Yunshui Jiang <jiangyunshui@...inos.cn>, linux-kernel@...r.kernel.org,
netdev@...r.kernel.org, linux-wpan@...r.kernel.org, alex.aring@...il.com,
miquel.raynal@...tlin.com, davem@...emloft.net
Subject: Re: [PATCH] net: mac802154: Fix racy device stats updates by
DEV_STATS_INC() and DEV_STATS_ADD()
Hello Jakub, Alex,
On 04.06.24 15:52, Alexander Aring wrote:
> Hi,
>
> On Mon, Jun 3, 2024 at 7:56 PM Jakub Kicinski <kuba@...nel.org> wrote:
>>
>> On Mon, 3 Jun 2024 11:33:28 +0200 Stefan Schmidt wrote:
>>> Hello.
>>>
>>> On 31.05.24 10:07, Yunshui Jiang wrote:
>>>> mac802154 devices update their dev->stats fields locklessly. Therefore
>>>> these counters should be updated atomically. Adopt SMP safe DEV_STATS_INC()
>>>> and DEV_STATS_ADD() to achieve this.
>>>>
>>>> Signed-off-by: Yunshui Jiang <jiangyunshui@...inos.cn>
>>>> ---
>>>> net/mac802154/tx.c | 8 ++++----
>>>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/net/mac802154/tx.c b/net/mac802154/tx.c
>>>> index 2a6f1ed763c9..6fbed5bb5c3e 100644
>>>> --- a/net/mac802154/tx.c
>>>> +++ b/net/mac802154/tx.c
>>>> @@ -34,8 +34,8 @@ void ieee802154_xmit_sync_worker(struct work_struct *work)
>>>> if (res)
>>>> goto err_tx;
>>>>
>>>> - dev->stats.tx_packets++;
>>>> - dev->stats.tx_bytes += skb->len;
>>>> + DEV_STATS_INC(dev, tx_packets);
>>>> + DEV_STATS_ADD(dev, tx_bytes, skb->len);
>>>>
>>>> ieee802154_xmit_complete(&local->hw, skb, false);
>>>>
>>>> @@ -90,8 +90,8 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb)
>>>> if (ret)
>>>> goto err_wake_netif_queue;
>>>>
>>>> - dev->stats.tx_packets++;
>>>> - dev->stats.tx_bytes += len;
>>>> + DEV_STATS_INC(dev, tx_packets);
>>>> + DEV_STATS_ADD(dev, tx_bytes, len);
>>>> } else {
>>>> local->tx_skb = skb;
>>>> queue_work(local->workqueue, &local->sync_tx_work);
>>>
>>> This patch has been applied to the wpan tree and will be
>>> part of the next pull request to net. Thanks!
>>
>> Hi! I haven't looked in detail, but FWIW
>>
>> $ git grep LLTX net/mac802154/
>> $
>>
>> and similar patch from this author has been rejected:
>>
>> https://lore.kernel.org/all/CANn89iLPYoOjMxNjBVHY7GwPFBGuxwRoM9gZZ-fWUUYFYjM1Uw@mail.gmail.com/
>
> In the case of ieee802154_tx() yes the tx lock is held so it's like
> what the mentioned link says. The workqueue is an ordered workqueue
> and you either have the driver async xmit option (the preferred
> option) or the driver sync xmit callback on a per driver (implies per
> interface) basis.
When I reviewed and applied this I did indeed not realize the ordered
workqueue making this unnecessary.
> I also don't see why there is currently a problem with the current
> non-atomic way.
For me this looks more like a wrapper that could avoid future problems
for no cost. I would not mind if the patch stays. But you are right, its
not strictly needed. Want me to back it out again?
regards
Stefan Schmidt
Powered by blists - more mailing lists