From: Vitaly Wool <vwool@ru.mvista.com>
To: mingo@elte.hu
Cc: linux-kernel@vger.kernel.org
Subject: 'sleeping function called from invalid context' bug when mounting an IDE device
Date: Fri, 8 Jul 2005 16:28:46 +0400 [thread overview]
Message-ID: <20050708162846.54de783d.vwool@ru.mvista.com> (raw)
Hi Ingo,
I've come across the following problem during the debugging of IDE driver for
Philips PNX0105 ARM9 platform in RT mode (CONFIG_PREEMPT_RT).
When I mount/unmount a device, the following error is printed out to a terminal:
> # mount /dev/discs/disc0/part1 /mnt/
> BUG: sleeping function called from invalid context IRQ 27(655) at
> kernel/rt.c:1449in_atomic():0 [00000000], irqs_disabled():128
And gdb shows the following:
> (gdb) b kernel/sched.c:5430
> Breakpoint 1 at 0xc0034880: file kernel/sched.c, line 5430.
> (gdb) c
> Continuing.
>
> Breakpoint 1, __might_sleep (file=0x56 <Address 0x56 out of bounds>,
> line=1449)
> at kernel/sched.c:5434
> 5434 in_atomic(), preempt_count(),
> irqs_disabled());
> (gdb) bt
> #0 __might_sleep (file=0x56 <Address 0x56 out of bounds>, line=1449)
> at kernel/sched.c:5434
> #1 0xc004f700 in __spin_lock (lock=0xc01ee10c, eip=3222413300) at
> kernel/rt.c:1449
> #2 0xc004f778 in _spin_lock_irqsave (spin=0x56) at kernel/rt.c:1474
> #3 0xc0121ff4 in ide_intr (irq=27, dev_id=0x0, regs=0x0) at
> drivers/ide/ide-io.c:1416
> #4 0xc00201c0 in __do_irq (irq=27, action=0xc03f8df4, regs=0x0)
> at arch/arm/kernel/irq.c:530
> #5 0xc001fec0 in do_hardirq (desc=0xc021f2bc) at
> arch/arm/kernel/irq.c:394
> #6 0xc0020008 in do_irqd (__desc=0xc021f2bc) at
> arch/arm/kernel/irq.c:447
> #7 0xc004c310 in kthread (_create=0xc02abe20) at kernel/kthread.c:95
> #8 0xc0039af4 in exit_notify (tsk=0x0) at kernel/exit.c:785
> Previous frame inner to this frame (corrupt stack?)
>
So, the problem is in the generic IDE code, namely, in ide_intr() taking ide_lock.
The suggested patch is the following:
Index: linux/drivers/ide/ide-probe.c
===================================================================
--- linux.orig/drivers/ide/ide-probe.c 2005-05-11 19:08:12.000000000 +0000
+++ linux/drivers/ide/ide-probe.c 2005-05-12 16:19:29.000000000 +0000
@@ -1050,16 +1050,13 @@
* Allocate the irq, if not already obtained for another hwif
*/
if (!match || match->irq != hwif->irq) {
- int sa = SA_INTERRUPT;
+ int sa = 0;
#if defined(__mc68000__) || defined(CONFIG_APUS)
sa = SA_SHIRQ;
#endif /* __mc68000__ || CONFIG_APUS */
if (IDE_CHIPSET_IS_PCI(hwif->chipset)) {
sa = SA_SHIRQ;
-#ifndef CONFIG_IDEPCI_SHARE_IRQ
- sa |= SA_INTERRUPT;
-#endif /* CONFIG_IDEPCI_SHARE_IRQ */
}
if (hwif->io_ports[IDE_CONTROL_OFFSET])
Can you please comment on it?
Thanks,
Vitaly
next reply other threads:[~2005-07-08 12:28 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-08 12:28 Vitaly Wool [this message]
2005-07-08 13:43 ` Ingo Molnar
2005-07-08 14:00 ` Daniel Walker
2005-07-08 14:02 ` Ingo Molnar
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=20050708162846.54de783d.vwool@ru.mvista.com \
--to=vwool@ru.mvista.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®