Message ID | 5e046ef45554b053d22e76809a8faf546c3c0720.1465996447.git.pabeni@redhat.com |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
On Wed, Jun 15, 2016 at 03:42:04PM +0200, Paolo Abeni wrote: > Currently cond_resched_softirq() fails to reschedule if there > are pending softirq but no other running process. This happens > i.e. when receiving an interrupt with local bh disabled. > > Reported-by: Eric Dumazet <eric.dumazet@gmail.com> > Signed-off-by: Paolo Abeni <pabeni@redhat.com> > Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> All your patches appear to have this broken SoB chain. As presented it suggests you wrote the patches, which matches with From, however it then suggests Hannes collected and send them onwards, not so much. Please correct.
On Wed, 2016-06-15 at 15:48 +0200, Peter Zijlstra wrote: > On Wed, Jun 15, 2016 at 03:42:04PM +0200, Paolo Abeni wrote: > > Currently cond_resched_softirq() fails to reschedule if there > > are pending softirq but no other running process. This happens > > i.e. when receiving an interrupt with local bh disabled. > > > > Reported-by: Eric Dumazet <eric.dumazet@gmail.com> > > Signed-off-by: Paolo Abeni <pabeni@redhat.com> > > Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> > > All your patches appear to have this broken SoB chain. > > As presented it suggests you wrote the patches, which matches with From, > however it then suggests Hannes collected and send them onwards, not so > much. > > Please correct. My bad. I'll re-submit. The intention was to specify this is joint work done together with Hannes. Paolo
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 7f2cae4..788625f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4837,7 +4837,8 @@ int __sched __cond_resched_softirq(void) { BUG_ON(!in_softirq()); - if (should_resched(SOFTIRQ_DISABLE_OFFSET)) { + if (should_resched(SOFTIRQ_DISABLE_OFFSET) || + local_softirq_pending()) { local_bh_enable(); preempt_schedule_common(); local_bh_disable();