Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / Atom feed
From: peterz@infradead.org (Peter Zijlstra)
To: linux-arm-kernel@lists.infradead.org
Subject: [BUG] "sched: Remove rq->lock from the first half of ttwu()" locks up on ARM
Date: Thu, 26 May 2011 18:09:08 +0200
Message-ID: <1306426148.2497.83.camel@laptop> (raw)
In-Reply-To: <1306425584.2497.81.camel@laptop>

On Thu, 2011-05-26 at 17:59 +0200, Peter Zijlstra wrote:
> On Thu, 2011-05-26 at 17:45 +0200, Oleg Nesterov wrote:
> > 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?
> 
> Easy enough to test.. brain gave out again,. hold on ;-)

The below seems to run all-right so far, I'll let it run for a while.

---
 arch/x86/include/asm/system.h |    2 ++
 kernel/sched.c                |    3 ++-
 kernel/sched_debug.c          |    7 +++++++
 3 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h
index c2ff2a1..2c597e8 100644
--- a/arch/x86/include/asm/system.h
+++ b/arch/x86/include/asm/system.h
@@ -10,6 +10,8 @@
 #include <linux/kernel.h>
 #include <linux/irqflags.h>
 
+#define __ARCH_WANT_INTERRUPTS_ON_CTXSW
+
 /* entries in ARCH_DLINFO: */
 #if defined(CONFIG_IA32_EMULATION) || !defined(CONFIG_X86_64)
 # define AT_VECTOR_SIZE_ARCH 2
diff --git a/kernel/sched.c b/kernel/sched.c
index 2d12893..f3627e5 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2636,7 +2636,8 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
 		 * to spin on ->on_cpu if p is current, since that would
 		 * deadlock.
 		 */
-		if (p == current) {
+		if (cpu == smp_processor_id()) {
+			p->sched_contributes_to_load = 0;
 			ttwu_queue(p, cpu);
 			goto stat;
 		}
diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c
index a6710a1..f0ff1de 100644
--- a/kernel/sched_debug.c
+++ b/kernel/sched_debug.c
@@ -332,6 +332,13 @@ static int sched_debug_show(struct seq_file *m, void *v)
 		(int)strcspn(init_utsname()->version, " "),
 		init_utsname()->version);
 
+#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
+	SEQ_printf(m, "__ARCH_WANT_INTERRUPTS_ON_CTXSW\n");
+#endif
+#ifdef __ARCH_WANT_UNLOCKED_CTXSW
+	SEQ_printf(m, "__ARCH_WANT_UNLOCKED_CTXSW\n");                                  
+#endif
+
 #define P(x) \
 	SEQ_printf(m, "%-40s: %Ld\n", #x, (long long)(x))
 #define PN(x) \

  reply index

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-24 18:13 Marc Zyngier
2011-05-24 21:32 ` Peter Zijlstra
2011-05-24 21:39   ` Ingo Molnar
2011-05-25 12:23     ` Marc Zyngier
2011-05-25 17:08   ` Peter Zijlstra
2011-05-25 21:15     ` Peter Zijlstra
2011-05-26  7:29       ` Yong Zhang
2011-05-26 10:32         ` Peter Zijlstra
2011-05-26 11:02           ` Marc Zyngier
2011-05-26 11:32             ` Peter Zijlstra
2011-05-26 12:21               ` Peter Zijlstra
2011-05-26 12:26                 ` Ingo Molnar
2011-05-26 12:31                   ` Russell King - ARM Linux
2011-05-26 12:37                     ` Peter Zijlstra
2011-05-26 12:50                     ` Ingo Molnar
2011-05-26 13:36                       ` Russell King - ARM Linux
2011-05-26 14:45                       ` Catalin Marinas
2011-05-27 12:06                         ` Ingo Molnar
2011-05-27 17:55                           ` Russell King - ARM Linux
2011-05-27 19:41                           ` Nicolas Pitre
2011-05-27 20:52                           ` Russell King - ARM Linux
2011-05-28 13:13                             ` Peter Zijlstra
2011-05-31 11:08                               ` Michal Simek
2011-05-31 13:22                                 ` Peter Zijlstra
2011-05-31 13:37                                   ` Michal Simek
2011-05-31 13:52                                     ` Peter Zijlstra
2011-05-31 14:08                                       ` Michal Simek
2011-05-31 14:29                                         ` Peter Zijlstra
2011-05-29 10:21                             ` Catalin Marinas
2011-05-29 10:26                               ` Russell King - ARM Linux
2011-05-29 12:01                                 ` Catalin Marinas
2011-05-29 13:19                                   ` Russell King - ARM Linux
2011-05-29 21:21                                     ` Catalin Marinas
2011-05-29  9:51                           ` Catalin Marinas
2011-06-06 10:29                           ` Pavel Machek
2011-05-26 14:56                 ` Marc Zyngier
2011-05-26 15:45                 ` Oleg Nesterov
2011-05-26 15:59                   ` Peter Zijlstra
2011-05-26 16:09                     ` Peter Zijlstra [this message]
2011-05-26 16:20                       ` Marc Zyngier
2011-05-26 16:32                         ` Peter Zijlstra
2011-05-27  8:01                           ` Marc Zyngier
2011-05-26 16:22                       ` Marc Zyngier
2011-05-26 17:04                       ` Oleg Nesterov
2011-05-26 17:17                         ` Peter Zijlstra
2011-05-26 17:23                           ` Peter Zijlstra
2011-05-26 17:49                             ` Oleg Nesterov
2011-05-27  7:01                             ` Yong Zhang
2011-05-27 15:23                             ` Santosh Shilimkar
2011-05-27 15:29                               ` Marc Zyngier
2011-05-27 15:30                                 ` Santosh Shilimkar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1306426148.2497.83.camel@laptop \
    --to=peterz@infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-ARM-Kernel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-arm-kernel/0 linux-arm-kernel/git/0.git
	git clone --mirror https://lore.kernel.org/linux-arm-kernel/1 linux-arm-kernel/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-arm-kernel linux-arm-kernel/ https://lore.kernel.org/linux-arm-kernel \
		linux-arm-kernel@lists.infradead.org
	public-inbox-index linux-arm-kernel

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.infradead.lists.linux-arm-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git