Re: [Softirq] a76eadba0d: WARNING:at_net/mac80211/rx.c:#ieee80211_rx_napi[mac80211]

From: jun qian
Date: Thu Jul 23 2020 - 09:57:29 EST


On Thu, Jul 23, 2020 at 6:58 PM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
>
> kernel test robot <lkp@xxxxxxxxx> writes:
> > [ 106.856151] WARNING: CPU: 5 PID: 4569 at net/mac80211/rx.c:4708 ieee80211_rx_napi+0x44d/0x560 [mac80211]
>
> Bah. I clearly should have noticed when looking at the patch.
>
> pending = softirq_pending();
>
> set_softirq_pending(0);
>
> while (pending) {
> ....
>
> if (timeout)
> break;
> }
>
> That drops everything which has not yet been processed and the above
> warning is due to this.
>
wow, I made a mistake, thank you for finding the cause of the problem
so quickly.

How about the following code. we need to clear the corresponding
pending bit at the
right time Instead of all the pending bits cleared in the start.

pending = softirq_pending();

while ((softirq_bit = ffs(pending))) {

pending >>= softirq_bit;

set_softirq_pending(pending); //Only clear the corresponding
bit which will be processed.

h->action(h);

if (timeout)
break;
}

> Thanks,
>
> tglx
>