'sleeping function called from invalid context' bug when mounting an IDE device

From: Vitaly Wool (vwool_at_ru.mvista.com)
Date: 07/08/05

  • Next message: David Howells: "Re: [PATCH] Provide better printk() support for SMP machines"
    Date:	Fri, 8 Jul 2005 16:28:46 +0400
    To: mingo@elte.hu
    
    

    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
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/


  • Next message: David Howells: "Re: [PATCH] Provide better printk() support for SMP machines"

    Relevant Pages

    • Re: 2.6.11: iostat values broken ?
      ... Perhaps the IRQ changes. ... "use libata instead of the old IDE driver". ... something similar it's probably an acceptable solution. ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: cfq misbehaving on 2.6.11-1.14_FC3
      ... > mention this being an ide driver - I want to make sure if it's hda or ... Now, cfq doesn't behave worst than the others, like expected (now, why it ... Still> 30 seconds has to be improved for cfq. ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: IO-APIC on nforce2 [PATCH] + [PATCH] for nmi_debug=1 + [PATCH] for idle=C1halt, 2.6.5
      ... >> not occur on boot until sometime after the IDE driver is loaded. ... >> Also I've heard a high pitched noise at certain times coming right from the ... >> when I found the other sound in the head phones, I found that the sound varies ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: [PATCH Linux 2.6.12-rc5-mm2 08/09] blk: update IDE to use the new blk_ordered.
      ... > Does this string of tests really need to be added to the main fast path? ... > It would be better to simply guarantee that this check need never exist ... > in the IDE driver, by guaranteeing that the block layer will never send ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: [linux-usb-devel] Re: /dev/sr0 not ready, but working
      ... >>and the IDE driver ignores them instead of printing them in the system ... Or perhaps those messages are sent by the bus interface controller ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)