* [BUG] events process running on wrong cpu
@ 2009-09-21 8:51 Heiko Carstens
2009-09-21 9:02 ` Peter Zijlstra
2009-09-21 9:06 ` [PATCH] Always show Cpus_allowed field in /proc/<pid>/status Heiko Carstens
0 siblings, 2 replies; 8+ messages in thread
From: Heiko Carstens @ 2009-09-21 8:51 UTC (permalink / raw)
To: Ingo Molnar, Andrew Morton, Oleg Nesterov, Peter Zijlstra; +Cc: linux-kernel
Hi,
with todays git from time to time I get this (s390 defconfig):
BUG: using smp_processor_id() in preemptible [00000000] code: events/1/16
caller is vmstat_update+0x28/0x74
CPU: 0 Not tainted 2.6.31-06618-gebc79c4-dirty #3
Process events/1 (pid: 16, task: 000000003fcbea00, ksp: 000000003fcd7cd8)
000000003fcd7da8 000000003fcd7d28 0000000000000002 0000000000000000
000000003fcd7dc8 000000003fcd7d40 000000003fcd7d40 00000000003fe46a
000000000001ffff 000000003fcd7e70 000000000192b128 ffffffffffffc000
000000000000000d 000000000000000c 000000003fcd7d90 0000000000000000
0000000000000000 0000000000016bda 000000003fcd7d28 000000003fcd7d68
Call Trace:
([<0000000000016aea>] show_trace+0xe6/0x134)
[<0000000000202a5e>] debug_smp_processor_id+0x112/0x12c
[<00000000000b302c>] vmstat_update+0x28/0x74
[<000000000005fb9a>] worker_thread+0x19a/0x27c
[<0000000000065f80>] kthread+0xa0/0xa8
[<000000000001b786>] kernel_thread_starter+0x6/0xc
[<000000000001b780>] kernel_thread_starter+0x0/0xc
Please note that events/1 is running in cpu 0 (!).
But (with a patched procfs output):
[root@h4245004 ~]# cat /proc/16/status
Name: events/1
State: S (sleeping)
Tgid: 16
Pid: 16
PPid: 2
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
Threads: 1
SigQ: 0/4096
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: fffffffffffffeff
CapBnd: fffffffffffffeff
Cpus_allowed: 00000002 <----------
Cpus_allowed_list: 1 <----------
task: 000000003fcbea00, ksp: 000000003fcd7cd8
User PSW : 0704000180000000 000000000001b780
User GPRS: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000065ee0 000000003fe73cf8 000000000004d414
0000000000000000 0000000000000000 0000000000000000 000000003fcd7eb8
User ACRS: 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
voluntary_ctxt_switches: 55
nonvoluntary_ctxt_switches: 1
So the cpus_allowed mask is correct (later on at least). Looks like the
created kthread ran before its cpus_allowed mask was set.
Looking at the code this shouldn't happen. But still...
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [BUG] events process running on wrong cpu
2009-09-21 8:51 [BUG] events process running on wrong cpu Heiko Carstens
@ 2009-09-21 9:02 ` Peter Zijlstra
2009-09-21 9:03 ` Ingo Molnar
2009-09-21 9:06 ` [PATCH] Always show Cpus_allowed field in /proc/<pid>/status Heiko Carstens
1 sibling, 1 reply; 8+ messages in thread
From: Peter Zijlstra @ 2009-09-21 9:02 UTC (permalink / raw)
To: Heiko Carstens; +Cc: Ingo Molnar, Andrew Morton, Oleg Nesterov, linux-kernel
On Mon, 2009-09-21 at 10:51 +0200, Heiko Carstens wrote:
> Hi,
>
> with todays git from time to time I get this (s390 defconfig):
Yep, I messed up..
Does your kernel contain the below?
---
commit 3f04e8cd5b24727a2500f8ab8f3de730ba47b02c
Author: Mike Galbraith <efault@gmx.de>
Date: Sat Sep 19 16:52:35 2009 +0200
sched: Re-add lost cpu_allowed check to sched_fair.c::select_task_rq_fair()
While doing some testing, I pinned mplayer, only to find it
following X around like a puppy. Looking at commit c88d591, I found
a cpu_allowed check that went AWOL. I plugged it back in where it
looks like it needs to go, and now when I say "sit, stay!", mplayer
obeys again.
'c88d591 sched: Merge select_task_rq_fair() and
sched_balance_self()' accidentally dropped the check, causing
wake_affine() to pull pinned tasks - put it back.
[ v2: use a cheaper version from Peter ]
Signed-off-by: Mike Galbraith <efault@gmx.de>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index 29b35a7..566e3bb 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -1339,7 +1339,8 @@ static int select_task_rq_fair(struct task_struct *p, int sd_flag, int wake_flag
int sync = wake_flags & WF_SYNC;
if (sd_flag & SD_BALANCE_WAKE) {
- if (sched_feat(AFFINE_WAKEUPS))
+ if (sched_feat(AFFINE_WAKEUPS) &&
+ cpumask_test_cpu(cpu, &p->cpus_allowed))
want_affine = 1;
new_cpu = prev_cpu;
}
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [BUG] events process running on wrong cpu
2009-09-21 9:02 ` Peter Zijlstra
@ 2009-09-21 9:03 ` Ingo Molnar
2009-09-21 9:08 ` Heiko Carstens
0 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2009-09-21 9:03 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: Heiko Carstens, Andrew Morton, Oleg Nesterov, linux-kernel
* Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> On Mon, 2009-09-21 at 10:51 +0200, Heiko Carstens wrote:
> > Hi,
> >
> > with todays git from time to time I get this (s390 defconfig):
>
> Yep, I messed up..
>
> Does your kernel contain the below?
FYI, that fix will go Linuswards later today.
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] Always show Cpus_allowed field in /proc/<pid>/status.
2009-09-21 8:51 [BUG] events process running on wrong cpu Heiko Carstens
2009-09-21 9:02 ` Peter Zijlstra
@ 2009-09-21 9:06 ` Heiko Carstens
2009-09-21 9:17 ` Heiko Carstens
2009-09-21 12:52 ` [tip:sched/core] sched: " tip-bot for Heiko Carstens
1 sibling, 2 replies; 8+ messages in thread
From: Heiko Carstens @ 2009-09-21 9:06 UTC (permalink / raw)
To: Ingo Molnar, Andrew Morton, Oleg Nesterov, Peter Zijlstra; +Cc: linux-kernel
Subject: [PATCH] Always show Cpus_allowed fields in /proc/<pid>/status.
From: Heiko Carstens <heiko.carstens@de.ibm.com>
The Cpus_allowed fields in /proc/<pid>/status is currently only shown in
case of CONFIG_CPUSETS. However their contents are also useful for the
!CONFIG_CPUSETS case.
So change the current behaviour and always show these fields.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
fs/proc/array.c | 11 +++++++++++
kernel/cpuset.c | 8 +-------
2 files changed, 12 insertions(+), 7 deletions(-)
Index: linux-2.6/fs/proc/array.c
===================================================================
--- linux-2.6.orig/fs/proc/array.c
+++ linux-2.6/fs/proc/array.c
@@ -321,6 +321,16 @@ static inline void task_context_switch_c
p->nivcsw);
}
+void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
+{
+ seq_printf(m, "Cpus_allowed:\t");
+ seq_cpumask(m, &task->cpus_allowed);
+ seq_printf(m, "\n");
+ seq_printf(m, "Cpus_allowed_list:\t");
+ seq_cpumask_list(m, &task->cpus_allowed);
+ seq_printf(m, "\n");
+}
+
int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
@@ -335,6 +345,7 @@ int proc_pid_status(struct seq_file *m,
}
task_sig(m, task);
task_cap(m, task);
+ task_cpus_allowed(m, task);
cpuset_task_status_allowed(m, task);
#if defined(CONFIG_S390)
task_show_regs(m, task);
Index: linux-2.6/kernel/cpuset.c
===================================================================
--- linux-2.6.orig/kernel/cpuset.c
+++ linux-2.6/kernel/cpuset.c
@@ -2499,15 +2499,9 @@ const struct file_operations proc_cpuset
};
#endif /* CONFIG_PROC_PID_CPUSET */
-/* Display task cpus_allowed, mems_allowed in /proc/<pid>/status file. */
+/* Display task mems_allowed in /proc/<pid>/status file. */
void cpuset_task_status_allowed(struct seq_file *m, struct task_struct *task)
{
- seq_printf(m, "Cpus_allowed:\t");
- seq_cpumask(m, &task->cpus_allowed);
- seq_printf(m, "\n");
- seq_printf(m, "Cpus_allowed_list:\t");
- seq_cpumask_list(m, &task->cpus_allowed);
- seq_printf(m, "\n");
seq_printf(m, "Mems_allowed:\t");
seq_nodemask(m, &task->mems_allowed);
seq_printf(m, "\n");
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [BUG] events process running on wrong cpu
2009-09-21 9:03 ` Ingo Molnar
@ 2009-09-21 9:08 ` Heiko Carstens
0 siblings, 0 replies; 8+ messages in thread
From: Heiko Carstens @ 2009-09-21 9:08 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Peter Zijlstra, Andrew Morton, Oleg Nesterov, linux-kernel
On Mon, Sep 21, 2009 at 11:03:24AM +0200, Ingo Molnar wrote:
>
> * Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
>
> > On Mon, 2009-09-21 at 10:51 +0200, Heiko Carstens wrote:
> > > Hi,
> > >
> > > with todays git from time to time I get this (s390 defconfig):
> >
> > Yep, I messed up..
> >
> > Does your kernel contain the below?
>
> FYI, that fix will go Linuswards later today.
Ok, so it's already fixed. Thanks! ;)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Always show Cpus_allowed field in /proc/<pid>/status.
2009-09-21 9:06 ` [PATCH] Always show Cpus_allowed field in /proc/<pid>/status Heiko Carstens
@ 2009-09-21 9:17 ` Heiko Carstens
2009-09-21 22:33 ` Paul Menage
2009-09-21 12:52 ` [tip:sched/core] sched: " tip-bot for Heiko Carstens
1 sibling, 1 reply; 8+ messages in thread
From: Heiko Carstens @ 2009-09-21 9:17 UTC (permalink / raw)
To: Ingo Molnar, Andrew Morton, Oleg Nesterov, Peter Zijlstra; +Cc: linux-kernel
On Mon, Sep 21, 2009 at 11:06:27AM +0200, Heiko Carstens wrote:
> +void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
sigh. This should have been static.. updated patch below.
Subject: [PATCH] Always show Cpus_allowed fields in /proc/<pid>/status.
From: Heiko Carstens <heiko.carstens@de.ibm.com>
The Cpus_allowed fields in /proc/<pid>/status is currently only shown in
case of CONFIG_CPUSETS. However their contents are also useful for the
!CONFIG_CPUSETS case.
So change the current behaviour and always show these fields.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
fs/proc/array.c | 11 +++++++++++
kernel/cpuset.c | 8 +-------
2 files changed, 12 insertions(+), 7 deletions(-)
Index: linux-2.6/fs/proc/array.c
===================================================================
--- linux-2.6.orig/fs/proc/array.c
+++ linux-2.6/fs/proc/array.c
@@ -321,6 +321,16 @@ static inline void task_context_switch_c
p->nivcsw);
}
+static void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
+{
+ seq_printf(m, "Cpus_allowed:\t");
+ seq_cpumask(m, &task->cpus_allowed);
+ seq_printf(m, "\n");
+ seq_printf(m, "Cpus_allowed_list:\t");
+ seq_cpumask_list(m, &task->cpus_allowed);
+ seq_printf(m, "\n");
+}
+
int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
@@ -335,6 +345,7 @@ int proc_pid_status(struct seq_file *m,
}
task_sig(m, task);
task_cap(m, task);
+ task_cpus_allowed(m, task);
cpuset_task_status_allowed(m, task);
#if defined(CONFIG_S390)
task_show_regs(m, task);
Index: linux-2.6/kernel/cpuset.c
===================================================================
--- linux-2.6.orig/kernel/cpuset.c
+++ linux-2.6/kernel/cpuset.c
@@ -2499,15 +2499,9 @@ const struct file_operations proc_cpuset
};
#endif /* CONFIG_PROC_PID_CPUSET */
-/* Display task cpus_allowed, mems_allowed in /proc/<pid>/status file. */
+/* Display task mems_allowed in /proc/<pid>/status file. */
void cpuset_task_status_allowed(struct seq_file *m, struct task_struct *task)
{
- seq_printf(m, "Cpus_allowed:\t");
- seq_cpumask(m, &task->cpus_allowed);
- seq_printf(m, "\n");
- seq_printf(m, "Cpus_allowed_list:\t");
- seq_cpumask_list(m, &task->cpus_allowed);
- seq_printf(m, "\n");
seq_printf(m, "Mems_allowed:\t");
seq_nodemask(m, &task->mems_allowed);
seq_printf(m, "\n");
^ permalink raw reply [flat|nested] 8+ messages in thread
* [tip:sched/core] sched: Always show Cpus_allowed field in /proc/<pid>/status
2009-09-21 9:06 ` [PATCH] Always show Cpus_allowed field in /proc/<pid>/status Heiko Carstens
2009-09-21 9:17 ` Heiko Carstens
@ 2009-09-21 12:52 ` tip-bot for Heiko Carstens
1 sibling, 0 replies; 8+ messages in thread
From: tip-bot for Heiko Carstens @ 2009-09-21 12:52 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, a.p.zijlstra, akpm, heiko.carstens,
tglx, oleg, mingo
Commit-ID: d01d4827858cdc2e1c437c87ab65ec0a00fd40f8
Gitweb: http://git.kernel.org/tip/d01d4827858cdc2e1c437c87ab65ec0a00fd40f8
Author: Heiko Carstens <heiko.carstens@de.ibm.com>
AuthorDate: Mon, 21 Sep 2009 11:06:27 +0200
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Mon, 21 Sep 2009 11:37:27 +0200
sched: Always show Cpus_allowed field in /proc/<pid>/status
The Cpus_allowed fields in /proc/<pid>/status is currently only
shown in case of CONFIG_CPUSETS. However their contents are also
useful for the !CONFIG_CPUSETS case.
So change the current behaviour and always show these fields.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20090921090627.GD4649@osiris.boeblingen.de.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
fs/proc/array.c | 11 +++++++++++
kernel/cpuset.c | 8 +-------
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 725a650..762aea9 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -321,6 +321,16 @@ static inline void task_context_switch_counts(struct seq_file *m,
p->nivcsw);
}
+static void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
+{
+ seq_printf(m, "Cpus_allowed:\t");
+ seq_cpumask(m, &task->cpus_allowed);
+ seq_printf(m, "\n");
+ seq_printf(m, "Cpus_allowed_list:\t");
+ seq_cpumask_list(m, &task->cpus_allowed);
+ seq_printf(m, "\n");
+}
+
int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
@@ -335,6 +345,7 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
}
task_sig(m, task);
task_cap(m, task);
+ task_cpus_allowed(m, task);
cpuset_task_status_allowed(m, task);
#if defined(CONFIG_S390)
task_show_regs(m, task);
diff --git a/kernel/cpuset.c b/kernel/cpuset.c
index 7e75a41..b81f7f0 100644
--- a/kernel/cpuset.c
+++ b/kernel/cpuset.c
@@ -2499,15 +2499,9 @@ const struct file_operations proc_cpuset_operations = {
};
#endif /* CONFIG_PROC_PID_CPUSET */
-/* Display task cpus_allowed, mems_allowed in /proc/<pid>/status file. */
+/* Display task mems_allowed in /proc/<pid>/status file. */
void cpuset_task_status_allowed(struct seq_file *m, struct task_struct *task)
{
- seq_printf(m, "Cpus_allowed:\t");
- seq_cpumask(m, &task->cpus_allowed);
- seq_printf(m, "\n");
- seq_printf(m, "Cpus_allowed_list:\t");
- seq_cpumask_list(m, &task->cpus_allowed);
- seq_printf(m, "\n");
seq_printf(m, "Mems_allowed:\t");
seq_nodemask(m, &task->mems_allowed);
seq_printf(m, "\n");
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] Always show Cpus_allowed field in /proc/<pid>/status.
2009-09-21 9:17 ` Heiko Carstens
@ 2009-09-21 22:33 ` Paul Menage
0 siblings, 0 replies; 8+ messages in thread
From: Paul Menage @ 2009-09-21 22:33 UTC (permalink / raw)
To: Heiko Carstens
Cc: Ingo Molnar, Andrew Morton, Oleg Nesterov, Peter Zijlstra,
linux-kernel
On Mon, Sep 21, 2009 at 2:17 AM, Heiko Carstens
<heiko.carstens@de.ibm.com> wrote:
> On Mon, Sep 21, 2009 at 11:06:27AM +0200, Heiko Carstens wrote:
>
>> +void task_cpus_allowed(struct seq_file *m, struct task_struct *task)
>
> sigh. This should have been static.. updated patch below.
>
>
> Subject: [PATCH] Always show Cpus_allowed fields in /proc/<pid>/status.
>
> From: Heiko Carstens <heiko.carstens@de.ibm.com>
>
> The Cpus_allowed fields in /proc/<pid>/status is currently only shown in
> case of CONFIG_CPUSETS. However their contents are also useful for the
> !CONFIG_CPUSETS case.
> So change the current behaviour and always show these fields.
>
> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Acked-by: Paul Menage <menage@google.com>
Sounds reasonable.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-09-21 22:33 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-21 8:51 [BUG] events process running on wrong cpu Heiko Carstens
2009-09-21 9:02 ` Peter Zijlstra
2009-09-21 9:03 ` Ingo Molnar
2009-09-21 9:08 ` Heiko Carstens
2009-09-21 9:06 ` [PATCH] Always show Cpus_allowed field in /proc/<pid>/status Heiko Carstens
2009-09-21 9:17 ` Heiko Carstens
2009-09-21 22:33 ` Paul Menage
2009-09-21 12:52 ` [tip:sched/core] sched: " tip-bot for Heiko Carstens
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.