Messages in this thread | | | From | jun qian <> | Date | Thu, 23 Jul 2020 21:57:16 +0800 | Subject | Re: [Softirq] a76eadba0d: WARNING:at_net/mac80211/rx.c:#ieee80211_rx_napi[mac80211] |
| |
On Thu, Jul 23, 2020 at 6:58 PM Thomas Gleixner <tglx@linutronix.de> wrote: > > kernel test robot <lkp@intel.com> 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 >
| |