The commonly use of a bottom half are tasklet and workqueue. The big difference between tasklet and workqueue is that the tasklet runs in an interrupt context and the workqueue runs in a process context, which means it can sleep if need be. The comment for usb_control/interrupt/bulk_msg() functions note that do not use this function within an interrupt context, like a 'bottom half' handler. With this comment, it makes confuse about usage of these functions. To more clarify, remove 'bottom half' comment. Signed-off-by: Jaejoong Kim <climbbb.kim@xxxxxxxxx> --- I not sure this change is needed. Just with my background, the bottom half technics are softirq(rarely used), tasklet and workqueue over 2.5 kernel version. And softirq and tasklet runs in interrupt context and workqueue runs in process contex. This functions are quite old but commonly used in usb device driver. That's why I read these function comments. :) If there are something wrong with my patch and patch's comment, please tell me. I am really appreciate with sharing your time for review this patch. drivers/usb/core/message.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index dea5591..294a699 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -122,11 +122,10 @@ static int usb_internal_control_msg(struct usb_device *usb_dev, * This function sends a simple control message to a specified endpoint and * waits for the message to complete, or timeout. * - * Don't use this function from within an interrupt context, like a bottom half - * handler. If you need an asynchronous message, or need to send a message - * from within interrupt context, use usb_submit_urb(). - * If a thread in your driver uses this call, make sure your disconnect() - * method can wait for it to complete. Since you don't have a handle on the + * Don't use this function from within an interrupt context. If you need + * an asynchronous message, or need to send a message from within interrupt context, + * use usb_submit_urb(). If a thread in your driver uses this call, make sure your + * disconnect() method can wait for it to complete. Since you don't have a handle on the * URB used, you can't cancel the request. * * Return: If successful, the number of bytes transferred. Otherwise, a negative @@ -173,12 +172,11 @@ EXPORT_SYMBOL_GPL(usb_control_msg); * This function sends a simple interrupt message to a specified endpoint and * waits for the message to complete, or timeout. * - * Don't use this function from within an interrupt context, like a bottom half - * handler. If you need an asynchronous message, or need to send a message - * from within interrupt context, use usb_submit_urb() If a thread in your - * driver uses this call, make sure your disconnect() method can wait for it to - * complete. Since you don't have a handle on the URB used, you can't cancel - * the request. + * Don't use this function from within an interrupt context. If you need + * an asynchronous message, or need to send a message from within interrupt context, + * use usb_submit_urb() If a thread in your driver uses this call, make sure your + * disconnect() method can wait for it to complete. Since you don't have a handle on the + * URB used, you can't cancel the request. * * Return: * If successful, 0. Otherwise a negative error number. The number of actual @@ -207,12 +205,11 @@ EXPORT_SYMBOL_GPL(usb_interrupt_msg); * This function sends a simple bulk message to a specified endpoint * and waits for the message to complete, or timeout. * - * Don't use this function from within an interrupt context, like a bottom half - * handler. If you need an asynchronous message, or need to send a message - * from within interrupt context, use usb_submit_urb() If a thread in your - * driver uses this call, make sure your disconnect() method can wait for it to - * complete. Since you don't have a handle on the URB used, you can't cancel - * the request. + * Don't use this function from within an interrupt context. If you need + * an asynchronous message, or need to send a message from within interrupt context, + * use usb_submit_urb() If a thread in your driver uses this call, make sure your + * disconnect() method can wait for it to complete. Since you don't have a handle on the + * URB used, you can't cancel the request. * * Because there is no usb_interrupt_msg() and no USBDEVFS_INTERRUPT ioctl, * users are forced to abuse this routine by using it to submit URBs for -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html