一旦 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

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

最新文章

  1. 【C++沉思录】句柄1
  2. HTML5[3]:中文换行
  3. ORACLE10G工作原理
  4. jQuery调用AJAX异步详解[转]
  5. PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different 2012-04-11 13:01
  6. Elasticsearch从0.90(0.90.x)到1.2(1.x)API的变化-二
  7. FastDFS、nginx配置手记
  8. 使用C语言编写windows服务一般框架
  9. Javascript操作阵列
  10. 那些年我们一起清除过的浮动float与clearfix
  11. 数据结构与算法JS实现
  12. LoRa网关/RAK831
  13. 安卓APP应用在各大应用市场上架方法整理
  14. iOS-项目开发1-Block
  15. Linux通过ssh登录其他服务器,不用输入密码
  16. 第11月第3天 直播 rtmp yuv
  17. storm的一些相关文章
  18. Vue自动化工具(Vue-CLI)
  19. JAVAWEB dbutils执行sql命令并遍历结果集时不能查到内容的原因
  20. NTP原理

热门文章

  1. poj2125 最小点权覆盖集
  2. 重温Observer模式--热水器·改
  3. python LEGB原理简要介绍
  4. 【C++】关于map的遍历 删除
  5. 【Leetcode链表】旋转链表(61)
  6. COGS-2638 区间与,异或,询问max
  7. LeetCode97 Interleaving String
  8. docker学习笔记(总纲)
  9. 冒泡排序 Day07
  10. 【vb.net机房收费系统】之没有包含要从继承的组件的已生成程序集 标签: vb.net继承 2015-05-02 15:19 1012人阅读