On Thu, Dec 09, 2004 at 03:59:45PM -0800, George Anzinger wrote:
I am working on VST code. This code is called from the idle loop to check for future timers. It then sets up a timer to interrupt in time to handle the nearest timer and turns off the time base interrupt source. As part of qualifying the entry to this state I want to make sure there is no pending work so, from the idle task I have this:
if (local_softirq_pending())
do_softirq();
BUG_ON(local_softirq_pending());
I did not really expect to find any pending softirqs, but, not only are there some, they don't go away and the system BUGs. The offender is the RCU task. The question is: is this normal or is there something wrong?
Why do you think there would not be any softirq pending after do_softirq() ?
What if the cpu gets a network interrupt which raises a softirq ?
And yes, RCU processing in softirq context can re-raise the softirq.
AFAICS, it is perfectly normal.