aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/usb
diff options
context:
space:
mode:
authorJohan Hovold <jhovold@gmail.com>2010-03-17 18:06:07 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-20 16:21:35 -0400
commit25d514ca227e1ac81d0906a4ccf2aa171f50a600 (patch)
tree599690248485fb28cd61cf0ce73004e4fbbf3559 /include/linux/usb
parent40f92f0dcd9b215c48c53a226328e8e36615e367 (diff)
USB: serial: re-implement multi-urb writes in generic driver
Use dynamic transfer buffer sizes since it is more efficient to let the host controller do the partitioning to fit endpoint size. This way we also do not use more than one urb per write request. Replace max_in_flight_urbs with multi_urb_write flag in struct usb_serial_driver to enable multi-urb writes. Use MAX_TX_URBS=40 and a max buffer size of PAGE_SIZE to prevent DoS attacks. Signed-off-by: Johan Hovold <jhovold@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux/usb')
-rw-r--r--include/linux/usb/serial.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
index ff8872eba3ac..2a3283761600 100644
--- a/include/linux/usb/serial.h
+++ b/include/linux/usb/serial.h
@@ -60,6 +60,8 @@ enum port_dev_state {
60 * @write_urb: pointer to the bulk out struct urb for this port. 60 * @write_urb: pointer to the bulk out struct urb for this port.
61 * @write_fifo: kfifo used to buffer outgoing data 61 * @write_fifo: kfifo used to buffer outgoing data
62 * @write_urb_busy: port`s writing status 62 * @write_urb_busy: port`s writing status
63 * @tx_bytes: number of bytes currently in host stack queues
64 * @tx_urbs: number of urbs currently in host stack queues
63 * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this 65 * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this
64 * port. 66 * port.
65 * @write_wait: a wait_queue_head_t used by the port. 67 * @write_wait: a wait_queue_head_t used by the port.
@@ -98,8 +100,8 @@ struct usb_serial_port {
98 int write_urb_busy; 100 int write_urb_busy;
99 __u8 bulk_out_endpointAddress; 101 __u8 bulk_out_endpointAddress;
100 102
101 int tx_bytes_flight; 103 int tx_bytes;
102 int urbs_in_flight; 104 int tx_urbs;
103 105
104 wait_queue_head_t write_wait; 106 wait_queue_head_t write_wait;
105 struct work_struct work; 107 struct work_struct work;
@@ -223,7 +225,8 @@ struct usb_serial_driver {
223 struct device_driver driver; 225 struct device_driver driver;
224 struct usb_driver *usb_driver; 226 struct usb_driver *usb_driver;
225 struct usb_dynids dynids; 227 struct usb_dynids dynids;
226 int max_in_flight_urbs; 228
229 unsigned char multi_urb_write:1;
227 230
228 size_t bulk_in_size; 231 size_t bulk_in_size;
229 size_t bulk_out_size; 232 size_t bulk_out_size;