All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Kacur <jkacur@redhat.com>
To: linux-rt-users@vger.kernel.org, tglx@linutronix.de
Subject: [PATCH] show_stack_lvl smp_processor_id
Date: Tue, 21 Jul 2009 16:43:14 +0200	[thread overview]
Message-ID: <20090721144314.GA3858@tycho.redhat.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 2399 bytes --]

In trying to find the source of an hwlat_detect hang, I encountered the following.
I have a little patch that fixes the "BUG: using smp_processor_id() in preemptible"
Howver, I think Thomas is thinking about whether this code is actually preemptible.
Still, wanted to get the patch out there for your scrutiny.

INFO: task hwlatdetect:4057 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
hwlatdetect   D (004) [ffff88012c188340] ffff88002bbd0180  3384  4057   3875
BUG: using smp_processor_id() in preemptible [00000000] code: khungtaskd/340
caller is show_stack_log_lvl+0x3c/0x133
Pid: 340, comm: khungtaskd Tainted: G        W  2.6.29.6-rt23-dbg #1
Call Trace:
 [<ffffffff811f5b9a>] debug_smp_processor_id+0xda/0x108
 [<ffffffff8100f023>] show_stack_log_lvl+0x3c/0x133
 [<ffffffff813d6a70>] ? printk+0x50/0x68
 [<ffffffff81010289>] show_stack+0x2f/0x45
 [<ffffffff810498fc>] sched_show_task+0x104/0x11f
 [<ffffffff810b1334>] watchdog+0x1ac/0x220
 [<ffffffff81081ec1>] ? trace_hardirqs_on+0x20/0x36
 [<ffffffff810b1188>] ? watchdog+0x0/0x220
 [<ffffffff8106e643>] kthread+0x61/0xa4
 [<ffffffff8100d3da>] child_rip+0xa/0x20
 [<ffffffff8100cd80>] ? restore_args+0x0/0x30
 [<ffffffff8106e5e2>] ? kthread+0x0/0xa4
 [<ffffffff8100d3d0>] ? child_rip+0x0/0x20
 ffff88012d957d28 0000000000000092 00000000de864e34 00000000de864e34
 00000000de864e34 ffffffff818c8008 ffff88012c188340 ffff88012c4d17c0
 ffff88012c1886e8 00000000de864e34 ffffffff813d8bb7 ffffffff818c8020
Call Trace:
 [<ffffffff813d8bb7>] ? rt_spin_lock_slowunlock+0x27/0xa1
 [<ffffffff813d8bb7>] ? rt_spin_lock_slowunlock+0x27/0xa1
 [<ffffffff813d7cf8>] schedule+0x27/0x61
 [<ffffffff813d7e82>] schedule_timeout+0x36/0xf2
 [<ffffffff813daa51>] ? __spin_unlock_irqrestore+0x7e/0xa3
 [<ffffffff813d8bed>] ? rt_spin_lock_slowunlock+0x5d/0xa1
 [<ffffffff813d9a71>] ? rt_spin_unlock+0x5c/0x77
 [<ffffffff813d6dfe>] wait_for_common+0xcc/0x129
 [<ffffffff8104c819>] ? default_wake_function+0x0/0x3d
 [<ffffffff813d6fad>] wait_for_completion+0x30/0x46
 [<ffffffff8106e76b>] kthread_stop+0xe5/0x17e
 [<ffffffffa046ef72>] debug_enable_fwrite+0xdd/0x121 [hwlat_detector]
 [<ffffffff8111dfc8>] vfs_write+0xc3/0x135
 [<ffffffff8111e13a>] sys_write+0x5b/0x98
 [<ffffffff8100c29b>] system_call_fastpath+0x16/0x1b
INFO: lockdep is turned off.
Kernel panic - not syncing: hung_task: blocked tasks


[-- Attachment #2: 0001-fix-for-BUG-smp_processor_id-called-from-preempti.patch --]
[-- Type: text/plain, Size: 968 bytes --]

>From ef4c64b259fe992058d9cbc07ddb12a94ac53b36 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Tue, 21 Jul 2009 14:02:51 +0200
Subject: [PATCH] fix for BUG: smp_processor_id() called from preemptible code

---
 arch/x86/kernel/dumpstack_64.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
index 2d256b5..1c33bdc 100644
--- a/arch/x86/kernel/dumpstack_64.c
+++ b/arch/x86/kernel/dumpstack_64.c
@@ -203,11 +203,12 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
 {
 	unsigned long *stack;
 	int i;
-	const int cpu = smp_processor_id();
+	const int cpu = get_cpu();
 	unsigned long *irq_stack_end =
 		(unsigned long *)(per_cpu(irq_stack_ptr, cpu));
 	unsigned long *irq_stack =
 		(unsigned long *)(per_cpu(irq_stack_ptr, cpu) - IRQ_STACK_SIZE);
+	put_cpu();
 
 	/*
 	 * debugging aid: "show_stack(NULL, NULL);" prints the
-- 
1.6.0.6


                 reply	other threads:[~2009-07-21 14:43 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20090721144314.GA3858@tycho.redhat.com \
    --to=jkacur@redhat.com \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.