Linux 内核取消 urb

为停止一个已经提交给 USB 核心的 urb, 函数 usb_kill_urb 或者 usb_unlink_urb 应 当被调用:

 

int usb_kill_urb(struct urb *urb); int usb_unlink_urb(struct urb *urb);

The urb parameter for both of these functions is a pointer to the urb that is to be canceled.

 

当函数是 usb_kill_urb, 这个 urb 的生命循环就停止了. 这个函数常常在设备从系统去 除时被使用, 在去连接回调中.

 

对一些驱动, 应当用 usb_unlink_urb 函数来告知 USB 核心去停止 urb. 这个函数在返 回到调用者之前不等待这个 urb 完全停止. 这对于在中断处理或者持有一个自旋锁时停 止 urb 时是有用的, 因为等待一个 urb 完全停止需要 USB 核心有能力使调用进程睡眠. 为了正确工作这个函数要求 URB_ASYNC_UNLINK 标志值被设置在正被要求停止的 urb 中.

posted @ 2019-07-07 19:35  樊伟胜  阅读(441)  评论(0编辑  收藏  举报