Subject: allocmem in interrupt context
To: None <tech-kern@netbsd.org>
From: Iain Hibbert <plunky@rya-online.net>
List: tech-kern
Date: 10/28/2005 09:51:51
Hi,
    I bought a Bluetooth USB dongle and have been rewriting the ubt driver 
to fit with my scheme of things, and get a message that I dont completely
comprehend.

[caveat: I'm still working with NetBSD 2.0 sources as I have been having 
trouble updating to -current, sup keeps timing out on me as my signal is 
not that great]

the message is:

Oct 28 08:38:59 galant /netbsd: usb_block_allocmem: in interrupt context, size=4096

and I can see where this message comes from (usb_mem.c) and I can see why 
I get that message, thus:

outgoing commands are queued, then the driver is activated if not already 
active and the process sleeps for completion.

for host->controller flow control, I have a number of command packets that 
may be sent. The driver decreases this and stops transmitting when it 
reaches zero.

incoming events get put on a queue and a soft interrupt (IPL_SOFTNET) is 
triggered to disassociate it from the hardware.

now, this incoming soft interrupt passes packets to sockets, and also 
interprets HCI events.

In this case, it finds that commands have completed on the controller so 
updates the command count and notices that there are commands queued and 
the driver is not active, so it restarts the driver - the above message 
is being triggered inside usbd_transfer someplace, which is now being 
called on interrupt context like it says..

Does this message then, imply that I am not doing the right thing? Should 
I be disassociating this event processing further than a soft interrupt?

iain