Re: Debug: sleeping function called in atomic context

Arnd Bergmann
2005-12-03T12:51:36Z

Am Freitag 02 Dezember 2005 21:32 schrieb Carlos Martín:
>  I've been having this problem since -rc2, but today the output stopped
> long enough for me to copy it.

It seems you copied enough of it.

>  This happens on shutdown, I think the USB driver is deregistering itself
> or something or other.
>
>  This is part of the output with -rc4
>
> in_atomic():1 irqs_disabled():0
> Debug: sleeping function called in atomic context at linux/rwsem.h:66
> change_page_attr_addr+46
> ioremap_change_attr+75
> iounmap+14
>
> :usbcore:usb_hcd_pci_remove+62

This is what happens:
ioumap calls ioremap_change_attr with vmlist_lock held. change_page_attr_addr
then tries to acquire init_mm.mmap_sem, which must not be taken with
spinlock held.

It looks like the incorrect code has been in there for quite some time, but
that path was not taken for some reason.