Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [Softirq] a76eadba0d: WARNING:at_net/mac80211/rx.c:#ieee80211_rx_napi[mac80211] | Date | Thu, 23 Jul 2020 16:35:55 +0200 |
| |
jun qian <qianjun.kernel@gmail.com> writes: > On Thu, Jul 23, 2020 at 6:58 PM Thomas Gleixner <tglx@linutronix.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
| |