Messages in this thread | | | Date | Fri, 8 Jun 2012 22:27:01 +0200 | From | Francois Romieu <> | Subject | Re: NOHZ: local_softirq_pending 08 |
| |
Thomas Gleixner <tglx@linutronix.de> : [...] > I can't find the point where the warning is issued, but I think I > found the cause of the problem. > > static void rtl_slow_event_work(struct rtl8169_private *tp) > { > ..... > napi_schedule(&tp->napi); > --> __napi_schedule(); > --> list_add_tail(&napi->poll_list, &sd->poll_list); > __raise_softirq_irqoff(NET_RX_SOFTIRQ); > > This merily sets the softirq bit. > > > So this code is really wrong. It's called from full preemptible > context of the workqueue. And if the next thing is a context switch to > idle then the pending softirq check will trigger.
void __napi_schedule(struct napi_struct *n) { unsigned long flags;
local_irq_save(flags); ____napi_schedule(&__get_cpu_var(softnet_data), n); local_irq_restore(flags); }
Are you saying that this stuff should be considered "preemptible" ?
-- Ueimor
| |