diff options
| author | Alan Stern <stern@rowland.harvard.edu> | 2015-01-29 11:29:13 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <greg@kroah.com> | 2015-01-31 12:05:06 -0500 |
| commit | 3f2cee73b650921b2e214bf487b2061a1c266504 (patch) | |
| tree | d1dddbfd38a52fc0b66b7fca36dc8ad8efb671ca /include/uapi/linux | |
| parent | 17136d4984b37d2a9acb67e1da1a3e95e3fed918 (diff) | |
USB: usbfs: allow URBs to be reaped after disconnection
The usbfs API has a peculiar hole: Users are not allowed to reap their
URBs after the device has been disconnected. There doesn't seem to be
any good reason for this; it is an ad-hoc inconsistency.
The patch allows users to issue the USBDEVFS_REAPURB and
USBDEVFS_REAPURBNDELAY ioctls (together with their 32-bit counterparts
on 64-bit systems) even after the device is gone. If no URBs are
pending for a disconnected device then the ioctls will return -ENODEV
rather than -EAGAIN, because obviously no new URBs will ever be able
to complete.
The patch also adds a new capability flag for
USBDEVFS_GET_CAPABILITIES to indicate that the reap-after-disconnect
feature is supported.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Tested-by: Chris Dickens <christopher.a.dickens@gmail.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
Diffstat (limited to 'include/uapi/linux')
| -rw-r--r-- | include/uapi/linux/usbdevice_fs.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/uapi/linux/usbdevice_fs.h b/include/uapi/linux/usbdevice_fs.h index abe5f4bd4d82..019ba1e0799a 100644 --- a/include/uapi/linux/usbdevice_fs.h +++ b/include/uapi/linux/usbdevice_fs.h | |||
| @@ -128,11 +128,12 @@ struct usbdevfs_hub_portinfo { | |||
| 128 | char port [127]; /* e.g. port 3 connects to device 27 */ | 128 | char port [127]; /* e.g. port 3 connects to device 27 */ |
| 129 | }; | 129 | }; |
| 130 | 130 | ||
| 131 | /* Device capability flags */ | 131 | /* System and bus capability flags */ |
| 132 | #define USBDEVFS_CAP_ZERO_PACKET 0x01 | 132 | #define USBDEVFS_CAP_ZERO_PACKET 0x01 |
| 133 | #define USBDEVFS_CAP_BULK_CONTINUATION 0x02 | 133 | #define USBDEVFS_CAP_BULK_CONTINUATION 0x02 |
| 134 | #define USBDEVFS_CAP_NO_PACKET_SIZE_LIM 0x04 | 134 | #define USBDEVFS_CAP_NO_PACKET_SIZE_LIM 0x04 |
| 135 | #define USBDEVFS_CAP_BULK_SCATTER_GATHER 0x08 | 135 | #define USBDEVFS_CAP_BULK_SCATTER_GATHER 0x08 |
| 136 | #define USBDEVFS_CAP_REAP_AFTER_DISCONNECT 0x10 | ||
| 136 | 137 | ||
| 137 | /* USBDEVFS_DISCONNECT_CLAIM flags & struct */ | 138 | /* USBDEVFS_DISCONNECT_CLAIM flags & struct */ |
| 138 | 139 | ||
