[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <874kpyxpro.fsf@nanos.tec.linutronix.de>
Date: Thu, 23 Jul 2020 16:35:55 +0200
From: Thomas Gleixner <tglx@...utronix.de>
To: jun qian <qianjun.kernel@...il.com>
Cc: kernel test robot <lkp@...el.com>, peterz@...radead.org,
will@...nel.org, luto@...nel.org, linux-kernel@...r.kernel.org,
Uladzislau Rezki <urezki@...il.com>,
Yafang Shao <laoar.shao@...il.com>, lkp@...ts.01.org
Subject: Re: [Softirq] a76eadba0d: WARNING:at_net/mac80211/rx.c:#ieee80211_rx_napi[mac80211]
jun qian <qianjun.kernel@...il.com> writes:
> On Thu, Jul 23, 2020 at 6:58 PM Thomas Gleixner <tglx@...utronix.de> wrote:
>> 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.
How is that supposed to be correct. pending has been shifted
right. Something like this should work:
h++;
pending >>= softirq_bit;
if (timeout()) {
/*
* Ensure that the remaining pending bits
* are handled.
*/
or_softirq_pending(pending << (vec_nr + 1));
break;
}
}
Thanks,
tglx
Powered by blists - more mailing lists