2003-03-20 04:40:51

by Greg KH

[permalink] [raw]
Subject: Re: Sleeping in illegal context with 2.5.65-mm2

On Thu, Mar 20, 2003 at 03:58:41AM +0100, Alexander Hoogerhuis wrote:
> Caught this one while booting my laptop:
>
> drivers/usb/core/usb.c: registered new driver hci_usb
> Module bluetooth cannot be unloaded due to unsafe usage in include/linux/module.h:457
> Debug: sleeping function called from illegal context at mm/slab.c:1723
> Call Trace:
> [<c0119d92>] __might_sleep+0x5f/0x65
> [<c013a097>] kmalloc+0x88/0x8f
> [<c0238111>] usb_alloc_urb+0x21/0x51
> [<f09180bc>] hci_usb_enable_intr+0x20/0xf8 [hci_usb]

The call to usb_alloc_urb() here is being done with the GFP_ATOMIC flag,
which is correct. Do we need to fix up the warning message to prevent
false positives like this from happening?

thanks,

greg k-h

2003-03-20 04:52:54

by Kai Germaschewski

[permalink] [raw]
Subject: Re: Sleeping in illegal context with 2.5.65-mm2

On Wed, 19 Mar 2003, Greg KH wrote:

> > Debug: sleeping function called from illegal context at mm/slab.c:1723
> > Call Trace:
> > [<c0119d92>] __might_sleep+0x5f/0x65
> > [<c013a097>] kmalloc+0x88/0x8f
> > [<c0238111>] usb_alloc_urb+0x21/0x51
> > [<f09180bc>] hci_usb_enable_intr+0x20/0xf8 [hci_usb]
>
> The call to usb_alloc_urb() here is being done with the GFP_ATOMIC flag,
> which is correct. Do we need to fix up the warning message to prevent
> false positives like this from happening?

Not in my tree: (drivers/bluetooth/hci_sb.c)

if (!(urb = usb_alloc_urb(0, GFP_KERNEL)))
return -ENOMEM;

And the function is called in a write_lock_irqsave(), so the complaint is
justified. (Also, I think __might_sleep() deliberately doesn't get
triggered for GFP_ATOMIC already, as you suggested).

--Kai

2003-03-20 05:07:02

by Greg KH

[permalink] [raw]
Subject: Re: Sleeping in illegal context with 2.5.65-mm2

On Wed, Mar 19, 2003 at 11:03:51PM -0600, Kai Germaschewski wrote:
> On Wed, 19 Mar 2003, Greg KH wrote:
>
> > > Debug: sleeping function called from illegal context at mm/slab.c:1723
> > > Call Trace:
> > > [<c0119d92>] __might_sleep+0x5f/0x65
> > > [<c013a097>] kmalloc+0x88/0x8f
> > > [<c0238111>] usb_alloc_urb+0x21/0x51
> > > [<f09180bc>] hci_usb_enable_intr+0x20/0xf8 [hci_usb]
> >
> > The call to usb_alloc_urb() here is being done with the GFP_ATOMIC flag,
> > which is correct. Do we need to fix up the warning message to prevent
> > false positives like this from happening?
>
> Not in my tree: (drivers/bluetooth/hci_sb.c)
>
> if (!(urb = usb_alloc_urb(0, GFP_KERNEL)))
> return -ENOMEM;

Doh, nevermind, I was looking at the wrong function, sorry.

> And the function is called in a write_lock_irqsave(), so the complaint is
> justified.

Max, you should probably fix this up.

> (Also, I think __might_sleep() deliberately doesn't get triggered for
> GFP_ATOMIC already, as you suggested).

Yeah, in digging deeper, it's a smart check, sorry.

thanks,

greg k-h

2003-03-24 21:37:57

by Max Krasnyansky

[permalink] [raw]
Subject: Re: Sleeping in illegal context with 2.5.65-mm2

At 09:05 PM 3/19/2003, Greg KH wrote:
>On Wed, Mar 19, 2003 at 11:03:51PM -0600, Kai Germaschewski wrote:
>> On Wed, 19 Mar 2003, Greg KH wrote:
>>
>> > > Debug: sleeping function called from illegal context at mm/slab.c:1723
>> > > Call Trace:
>> > > [<c0119d92>] __might_sleep+0x5f/0x65
>> > > [<c013a097>] kmalloc+0x88/0x8f
>> > > [<c0238111>] usb_alloc_urb+0x21/0x51
>> > > [<f09180bc>] hci_usb_enable_intr+0x20/0xf8 [hci_usb]
>> >
>> > The call to usb_alloc_urb() here is being done with the GFP_ATOMIC flag,
>> > which is correct. Do we need to fix up the warning message to prevent
>> > false positives like this from happening?
>>
>> Not in my tree: (drivers/bluetooth/hci_sb.c)
>>
>> if (!(urb = usb_alloc_urb(0, GFP_KERNEL)))
>> return -ENOMEM;
>
>Doh, nevermind, I was looking at the wrong function, sorry.
>
>> And the function is called in a write_lock_irqsave(), so the complaint is
>> justified.
>
>Max, you should probably fix this up.
Will do.

Thanks
Max