To understand all the Linux-USB framework, you'll use these resources:

    * This source code.  This is necessarily an evolving work, and
      includes kerneldoc that should help you get a current overview.
      ("make pdfdocs", and then look at "usb.pdf" for host side and
      "gadget.pdf" for peripheral side.)  Also, Documentation/usb has
      more information.

    * The USB 2.0 specification (from www.usb.org), with supplements
      such as those for USB OTG and the various device classes.
      The USB specification has a good overview chapter, and USB
      peripherals conform to the widely known "Chapter 9".

    * Chip specifications for USB controllers.  Examples include
      host controllers (on PCs, servers, and more); peripheral
      controllers (in devices with Linux firmware, like printers or
      cell phones); and hard-wired peripherals like Ethernet adapters.

    * Specifications for other protocols implemented by USB peripheral
      functions.  Some are vendor-specific; others are vendor-neutral
      but just standardized outside of the www.usb.org team.

Here is a list of what each subdirectory here is, and what is contained in
them.

core/		- This is for the core USB host code, including the
		  usbfs files and the hub class driver ("hub_wq").

host/		- This is for USB host controller drivers.  This
		  includes UHCI, OHCI, EHCI, and others that might
		  be used with more specialized "embedded" systems.

gadget/		- This is for USB peripheral controller drivers and
		  the various gadget drivers which talk to them.


Individual USB driver directories.  A new driver should be added to the
first subdirectory in the list below that it fits into.

image/		- This is for still image drivers, like scanners or
		  digital cameras.
../input/	- This is for any driver that uses the input subsystem,
		  like keyboard, mice, touchscreens, tablets, etc.
../media/	- This is for multimedia drivers, like video cameras,
		  radios, and any other drivers that talk to the v4l
		  subsystem.
../net/		- This is for network drivers.
serial/		- This is for USB to serial drivers.
storage/	- This is for USB mass-storage drivers.
class/		- This is for all USB device drivers that do not fit
		  into any of the above categories, and work for a range
		  of USB Class specified devices. 
misc/		- This is for all USB device drivers that do not fit
		  into any of the above categories.
ue='search'/>
</form>
</td></tr></table>
<div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='id' value='a12f1ae61c489076a9aeb90bddca7722bf330df3'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'>
<tr><th>author</th><td>Shaohua Li &lt;shli@fb.com&gt;</td><td class='right'>2016-12-13 12:09:56 -0800</td></tr>
<tr><th>committer</th><td>Al Viro &lt;viro@zeniv.linux.org.uk&gt;</td><td class='right'>2017-01-14 19:31:40 -0500</td></tr>
<tr><th>commit</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/?id=a12f1ae61c489076a9aeb90bddca7722bf330df3'>a12f1ae61c489076a9aeb90bddca7722bf330df3</a> (<a href='/cgit.cgi/linux/net-next.git/patch/?id=a12f1ae61c489076a9aeb90bddca7722bf330df3'>patch</a>)</td></tr>
<tr><th>tree</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/tree/?id=a12f1ae61c489076a9aeb90bddca7722bf330df3'>f668d867106a93a488811f6e9902e5fbcca29abc</a></td></tr>
<tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/?id=497de07d89c1410d76a15bec2bb41f24a2a89f31'>497de07d89c1410d76a15bec2bb41f24a2a89f31</a> (<a href='/cgit.cgi/linux/net-next.git/diff/?id=a12f1ae61c489076a9aeb90bddca7722bf330df3&amp;id2=497de07d89c1410d76a15bec2bb41f24a2a89f31'>diff</a>)</td></tr></table>
<div class='commit-subject'>aio: fix lock dep warning</div><div class='commit-msg'>lockdep reports a warnning. file_start_write/file_end_write only
acquire/release the lock for regular files. So checking the files in aio
side too.

[  453.532141] ------------[ cut here ]------------
[  453.533011] WARNING: CPU: 1 PID: 1298 at ../kernel/locking/lockdep.c:3514 lock_release+0x434/0x670
[  453.533011] DEBUG_LOCKS_WARN_ON(depth &lt;= 0)
[  453.533011] Modules linked in:
[  453.533011] CPU: 1 PID: 1298 Comm: fio Not tainted 4.9.0+ #964
[  453.533011] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.0-1.fc24 04/01/2014
[  453.533011]  ffff8803a24b7a70 ffffffff8196cffb ffff8803a24b7ae8 0000000000000000
[  453.533011]  ffff8803a24b7ab8 ffffffff81091ee1 ffff8803a5dba700 00000dba00000008
[  453.533011]  ffffed0074496f59 ffff8803a5dbaf54 ffff8803ae0f8488 fffffffffffffdef
[  453.533011] Call Trace:
[  453.533011]  [&lt;ffffffff8196cffb&gt;] dump_stack+0x67/0x9c
[  453.533011]  [&lt;ffffffff81091ee1&gt;] __warn+0x111/0x130
[  453.533011]  [&lt;ffffffff81091f97&gt;] warn_slowpath_fmt+0x97/0xb0
[  453.533011]  [&lt;ffffffff81091f00&gt;] ? __warn+0x130/0x130
[  453.533011]  [&lt;ffffffff8191b789&gt;] ? blk_finish_plug+0x29/0x60
[  453.533011]  [&lt;ffffffff811205d4&gt;] lock_release+0x434/0x670
[  453.533011]  [&lt;ffffffff8198af94&gt;] ? import_single_range+0xd4/0x110
[  453.533011]  [&lt;ffffffff81322195&gt;] ? rw_verify_area+0x65/0x140
[  453.533011]  [&lt;ffffffff813aa696&gt;] ? aio_write+0x1f6/0x280
[  453.533011]  [&lt;ffffffff813aa6c9&gt;] aio_write+0x229/0x280
[  453.533011]  [&lt;ffffffff813aa4a0&gt;] ? aio_complete+0x640/0x640
[  453.533011]  [&lt;ffffffff8111df20&gt;] ? debug_check_no_locks_freed+0x1a0/0x1a0
[  453.533011]  [&lt;ffffffff8114793a&gt;] ? debug_lockdep_rcu_enabled.part.2+0x1a/0x30
[  453.533011]  [&lt;ffffffff81147985&gt;] ? debug_lockdep_rcu_enabled+0x35/0x40
[  453.533011]  [&lt;ffffffff812a92be&gt;] ? __might_fault+0x7e/0xf0
[  453.533011]  [&lt;ffffffff813ac9bc&gt;] do_io_submit+0x94c/0xb10
[  453.533011]  [&lt;ffffffff813ac2ae&gt;] ? do_io_submit+0x23e/0xb10
[  453.533011]  [&lt;ffffffff813ac070&gt;] ? SyS_io_destroy+0x270/0x270
[  453.533011]  [&lt;ffffffff8111d7b3&gt;] ? mark_held_locks+0x23/0xc0
[  453.533011]  [&lt;ffffffff8100201a&gt;] ? trace_hardirqs_on_thunk+0x1a/0x1c
[  453.533011]  [&lt;ffffffff813acb90&gt;] SyS_io_submit+0x10/0x20
[  453.533011]  [&lt;ffffffff824f96aa&gt;] entry_SYSCALL_64_fastpath+0x18/0xad
[  453.533011]  [&lt;ffffffff81119190&gt;] ? trace_hardirqs_off_caller+0xc0/0x110
[  453.533011] ---[ end trace b2fbe664d1cc0082 ]---

Cc: Dmitry Monakhov &lt;dmonakhov@openvz.org&gt;
Cc: Jan Kara &lt;jack@suse.cz&gt;
Cc: Christoph Hellwig &lt;hch@lst.de&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Shaohua Li &lt;shli@fb.com&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/?id=a12f1ae61c489076a9aeb90bddca7722bf330df3'>Diffstat</a></div><table summary='diffstat' class='diffstat'>