[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110526154508.GA13788@redhat.com>
Date: Thu, 26 May 2011 17:45:08 +0200
From: Oleg Nesterov <oleg@...hat.com>
To: Peter Zijlstra <peterz@...radead.org>
Cc: Marc Zyngier <Marc.Zyngier@....com>,
Yong Zhang <yong.zhang0@...il.com>,
Ingo Molnar <mingo@...e.hu>,
Frank Rowand <frank.rowand@...sony.com>,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org
Subject: Re: [BUG] "sched: Remove rq->lock from the first half of ttwu()"
locks up on ARM
On 05/26, Peter Zijlstra wrote:
>
> static void ttwu_queue(struct task_struct *p, int cpu)
> {
> @@ -2631,17 +2650,17 @@ try_to_wake_up(struct task_struct *p, un
> while (p->on_cpu) {
> #ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
> /*
> - * If called from interrupt context we could have landed in the
> - * middle of schedule(), in this case we should take care not
> - * to spin on ->on_cpu if p is current, since that would
> - * deadlock.
> + * In case the architecture enables interrupts in
> + * context_switch(), we cannot busy wait, since that
> + * would lead to live-locks when an interrupt hits and
> + * tries to wake up @prev. So bail and do a complete
> + * remote wakeup.
> */
> - if (p == current) {
> - ttwu_queue(p, cpu);
> + if (ttwu_activate_remote(p, wake_flags))
Stupid question. Can't we fix this problem if we do
- if (p == current)
+ if (cpu == raw_smp_processor_id())
?
I forgot the rules... but iirc task_cpu(p) can't be changed under us?
Oleg.
--
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