Re: 2.6.26.6-rt11: BUGs (sleeping function called from invalid context)

Steven Rostedt
2009-01-16T20:42:17Z

On Fri, 16 Jan 2009, Fernando Lopez-Lezcano wrote:

> On Fri, 2008-11-07 at 14:01 -0500, Steven Rostedt wrote:
> > Peter, I think we've seen this before. It is the highmem code sleeping.
> >
> > On Fri, 7 Nov 2008, Fernando Lopez-Lezcano wrote:
> >
> > > Three BUGs while booting 2.6.26.7 + rt11 (same hardware: no problems
> > > with 2.6.24.7-rt21):
> > >
> > > Nov 7 10:31:19 host kernel: BUG: sleeping function called from invalid
> > > context IRQ-22(540) at arch/x86/mm/highmem_32.c:8
> > > Nov 7 10:31:19 host kernel: in_atomic():0 [00000000], irqs_disabled():1
> > > Nov 7 10:31:19 host kernel: Pid: 540, comm: IRQ-22 Not tainted
> > > 2.6.26.7-1.rt11.1fc9.ccrma.i686.rt #1
> > > Nov 7 10:31:19 host kernel: [<c041ff88>] __might_sleep+0xe8/0xed
> > > Nov 7 10:31:19 host kernel: [<c041cd55>] kmap+0x42/0x55
> >
> > As here.
>
> Still happening in 2.6.26.8-rt13...

Fernando,

Thanks for reporting this. Looks like we need to fix the ata driver:

2.6.26.8-rt13:

drivers/ata/libata-sff.c:

ata_sff_hsm_move()
calls ata_pio_sectors(), calls

ata_pio_sector()

/* FIXME: use a bounce buffer */
local_irq_save(flags);
buf = kmap_atomic(page, KM_IRQ0);

This code is in 2.6.24-rt but in libata-core.c
It is slightly different, prehaps you were just lucky?

-- Steve