2009-09-04 10:54:31

by Tony Olech

[permalink] [raw]
Subject: is WARN_ON(irqs_disabled) in dma_free_coherent() spurious ??

Hi
I am trying to develop a linux kernel driver for a USB
device and I am initially following the example driver
usb-skeleton.c and also the driver usblcd.c

The sequence:

in the file operation ..write():
usb_alloc_urb()
usb_buffer_alloc(a big buffer)
usb_fill_bulk_urb(for an OUT pipe)
usb_submit_urb()
usb_free_urb()
then in the completion ..callback():
usb_buffer_free()
the routine dma_free_coherent() is called which calls
WARN_ON(irqs_disabled)

and because I am running the kernel with all the debugs
and warnings switched on I get a stack dump in the system
log.

Because I do not want to see warnings unless I am doing
something wrong I have to investigate the (possible)
problem. As far as I can tell the WARN_ON() is completely
spurious. Is that correct?? If so what is the solution
and who will change the drivers that use the same algorithm??

Many thanks,

Tony Olech

Elan Digital Systems Ltd