加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux 内核提交 urb

发布时间:2020-12-13 22:50:37 所属栏目:Linux 来源:网络整理
导读:一旦 urb 被正确地创建,并且被 USB 驱动初始化,它已准备好被提交给 USB 核心来发送 出到 USB 设备. 这通过调用函数 usb_submit_urb 实现: ? int usb_submit_urb(struct urb *urb,int mem_flags); ? urb 参数是一个指向 urb 的指针,它要被发送到设备. mem_fla

一旦 urb 被正确地创建,并且被 USB 驱动初始化,它已准备好被提交给 USB 核心来发送 出到 USB 设备. 这通过调用函数 usb_submit_urb 实现:

?

int usb_submit_urb(struct urb *urb,int mem_flags);

?

urb 参数是一个指向 urb 的指针,它要被发送到设备. mem_flags 参数等同于传递给 kmalloc 调用的同样的参数,并且用来告诉 USB 核心如何及时分配任何内存缓冲在这个 时间.

?

在 urb 被成功提交给 USB 核心之后,应当从不试图存取 urb 结构的任何成员直到完成 函数被调用.

?

因为函数 usb_submit_urb 可被在任何时候被调用(包括从一个中断上下文),mem_flags 变量的指定必须正确. 真正只有 3 个有效值可用,根据何时 usb_submit_urb 被调用:

?

GFP_ATOMIC

?

这个值应当被使用无论何时下面的是真:

?

  • · 调用者处于一个 urb 完成处理者,一个中断,一个后半部,一个 tasklet,或者一个时钟回调.
  • 调用者持有一个自旋锁或者读写锁. 注意如果正持有一个旗标,这个值不必要.
    • current->state 不是 TASK_RUNNING. 状态一直是 TASK_RUNNING 除非驱动已 自己改变 current 状态.

?

GFP_NOIO

?

这个值应当被使用,如果驱动在块 I/O 补丁中. 它还应当用在所有的存储类型的 错误处理补丁中.

?

GFP_KERNEL

?

这应当用在所有其他的情况中,不属于之前提到的类别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读