Messages in this thread | | | Date | Wed, 5 Feb 2014 11:57:00 -0500 | From | Steven Rostedt <> | Subject | Re: [PATCH RT] rt: Make cpu_chill() use hrtimer instead of msleep() |
| |
On Wed, 5 Feb 2014 11:51:25 -0500 Steven Rostedt <rostedt@goodmis.org> wrote:
> > Ulrich Obergfell pointed out that cpu_chill() calls msleep() which is woken > up by the ksoftirqd running the TIMER softirq. But as the cpu_chill() is > called from softirq context, it may block the ksoftirqd() from running, in > which case, it may never wake up the msleep() causing the deadlock. > > I checked the vmcore, and irq/74-qla2xxx is stuck in the msleep() call, > running on CPU 8. The one ksoftirqd that is stuck, happens to be the one that > runs on CPU 8, and it is blocked on a lock held by irq/74-qla2xxx. As that > ksoftirqd is the one that will wake up irq/74-qla2xxx, and it happens to be > blocked on a lock that irq/74-qla2xxx holds, we have our deadlock. > > The solution is not to convert the cpu_chill() back to a cpu_relax() as that > will re-create a possible live lock that the cpu_chill() fixed earlier, and may > also leave this bug open on other softirqs. The fix is to remove the > dependency on ksoftirqd from cpu_chill(). That is, instead of calling > msleep() that requires ksoftirqd to wake it up, use the > hrtimer_nanosleep() code that does the wakeup from hard irq context. > > Found-by: Ulrich Obergfell <uobergfe@redhat.com> > Signed-off-by: Steven Rostedt <rostedt@goodmis.org> >
I should have added:
Cc: stable-rt@vger.kernel.org
-- Steve
| |