[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1295276401.30950.125.camel@laptop>
Date: Mon, 17 Jan 2011 16:00:01 +0100
From: Peter Zijlstra <peterz@...radead.org>
To: samu.p.onkalo@...ia.com
Cc: mingo@...e.hu,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
tglx <tglx@...utronix.de>
Subject: Re: Bug in scheduler when using rt_mutex
On Mon, 2011-01-17 at 16:42 +0200, Onkalo Samu wrote:
> Hi
>
> I believe that there are some problems in the scheduling when
> the following happens:
> - Normal priority process locks rt_mutex and sleeps while keeping it
> locked.
There's your fail, don't do that!
> - RT priority process blocks on the rt_mutex while normal priority
> process is sleeping
>
> This sequence can occur with I2C access when both normal priority
> thread and irq-thread access the same I2C bus. I2C core
> contains rt_mutex and I2C drivers can sleep with wait_for_completion.
Why does I2C core use rt_mutex, that's utterly broken.
> Based on my debugging following sequence occurs (single CPU
> system):
>
> 1) There is some user process running at the background (like
> cat /dev/zero..)
> 2) User process reads sysfs entry which causes I2C acccess
> 3) User process locks rt_mutex in the I2C-core
> 4) User process sleeps while it keeps rt_mutex locked
> (wait_for_completion in I2C transfer function)
That's where things go wrong, there's absolutely nothing you can do to
fix the system once you block while holding a mutex.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists