Commit a108bfcb authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman

USB: tty: Prune uses of tty_request_room in the USB layer

We have lots of callers that do not need to do this in the first place.
Remove the calls as they both cost CPU and for big buffers can mess up the
multi-page allocation avoidance.
Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 2832fc11
...@@ -733,7 +733,6 @@ static void ark3116_read_bulk_callback(struct urb *urb) ...@@ -733,7 +733,6 @@ static void ark3116_read_bulk_callback(struct urb *urb)
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty) { if (tty) {
tty_buffer_request_room(tty, urb->actual_length + 1);
/* overrun is special, not associated with a char */ /* overrun is special, not associated with a char */
if (unlikely(lsr & UART_LSR_OE)) if (unlikely(lsr & UART_LSR_OE))
tty_insert_flip_char(tty, 0, TTY_OVERRUN); tty_insert_flip_char(tty, 0, TTY_OVERRUN);
......
...@@ -395,7 +395,6 @@ static void cyberjack_read_bulk_callback(struct urb *urb) ...@@ -395,7 +395,6 @@ static void cyberjack_read_bulk_callback(struct urb *urb)
return; return;
} }
if (urb->actual_length) { if (urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
......
...@@ -1307,13 +1307,9 @@ static void cypress_read_int_callback(struct urb *urb) ...@@ -1307,13 +1307,9 @@ static void cypress_read_int_callback(struct urb *urb)
spin_unlock_irqrestore(&priv->lock, flags); spin_unlock_irqrestore(&priv->lock, flags);
/* process read if there is data other than line status */ /* process read if there is data other than line status */
if (tty && (bytes > i)) { if (tty && bytes > i) {
bytes = tty_buffer_request_room(tty, bytes); tty_insert_flip_string_fixed_flag(tty, data + i,
for (; i < bytes ; ++i) { bytes - i, tty_flag);
dbg("pushing byte number %d - %d - %c", i, data[i],
data[i]);
tty_insert_flip_char(tty, data[i], tty_flag);
}
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
......
...@@ -1658,7 +1658,6 @@ static int digi_read_inb_callback(struct urb *urb) ...@@ -1658,7 +1658,6 @@ static int digi_read_inb_callback(struct urb *urb)
int port_status = ((unsigned char *)urb->transfer_buffer)[2]; int port_status = ((unsigned char *)urb->transfer_buffer)[2];
unsigned char *data = ((unsigned char *)urb->transfer_buffer) + 3; unsigned char *data = ((unsigned char *)urb->transfer_buffer) + 3;
int flag, throttled; int flag, throttled;
int i;
int status = urb->status; int status = urb->status;
/* do not process callbacks on closed ports */ /* do not process callbacks on closed ports */
...@@ -1705,17 +1704,9 @@ static int digi_read_inb_callback(struct urb *urb) ...@@ -1705,17 +1704,9 @@ static int digi_read_inb_callback(struct urb *urb)
/* data length is len-1 (one byte of len is port_status) */ /* data length is len-1 (one byte of len is port_status) */
--len; --len;
len = tty_buffer_request_room(tty, len);
if (len > 0) { if (len > 0) {
/* Hot path */ tty_insert_flip_string_fixed_flag(tty, data, len,
if (flag == TTY_NORMAL) flag);
tty_insert_flip_string(tty, data, len);
else {
for (i = 0; i < len; i++)
tty_insert_flip_char(tty,
data[i], flag);
}
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
} }
......
...@@ -346,7 +346,6 @@ static void empeg_read_bulk_callback(struct urb *urb) ...@@ -346,7 +346,6 @@ static void empeg_read_bulk_callback(struct urb *urb)
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (urb->actual_length) { if (urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
bytes_in += urb->actual_length; bytes_in += urb->actual_length;
......
...@@ -271,7 +271,6 @@ static void send_to_tty(struct usb_serial_port *port, ...@@ -271,7 +271,6 @@ static void send_to_tty(struct usb_serial_port *port,
usb_serial_debug_data(debug, &port->dev, usb_serial_debug_data(debug, &port->dev,
__func__, actual_length, data); __func__, actual_length, data);
tty_buffer_request_room(tty, actual_length);
tty_insert_flip_string(tty, data, actual_length); tty_insert_flip_string(tty, data, actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
......
...@@ -2055,18 +2055,13 @@ static void edge_tty_recv(struct device *dev, struct tty_struct *tty, ...@@ -2055,18 +2055,13 @@ static void edge_tty_recv(struct device *dev, struct tty_struct *tty,
{ {
int cnt; int cnt;
do { cnt = tty_insert_flip_string(tty, data, length);
cnt = tty_buffer_request_room(tty, length);
if (cnt < length) { if (cnt < length) {
dev_err(dev, "%s - dropping data, %d bytes lost\n", dev_err(dev, "%s - dropping data, %d bytes lost\n",
__func__, length - cnt); __func__, length - cnt);
if (cnt == 0)
break;
} }
tty_insert_flip_string(tty, data, cnt);
data += cnt; data += cnt;
length -= cnt; length -= cnt;
} while (length > 0);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
......
...@@ -1820,7 +1820,6 @@ static void edge_tty_recv(struct device *dev, struct tty_struct *tty, ...@@ -1820,7 +1820,6 @@ static void edge_tty_recv(struct device *dev, struct tty_struct *tty,
{ {
int queued; int queued;
tty_buffer_request_room(tty, length);
queued = tty_insert_flip_string(tty, data, length); queued = tty_insert_flip_string(tty, data, length);
if (queued < length) if (queued < length)
dev_err(dev, "%s - dropping data, %d bytes lost\n", dev_err(dev, "%s - dropping data, %d bytes lost\n",
......
...@@ -747,7 +747,6 @@ static void ipaq_read_bulk_callback(struct urb *urb) ...@@ -747,7 +747,6 @@ static void ipaq_read_bulk_callback(struct urb *urb)
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) { if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
bytes_in += urb->actual_length; bytes_in += urb->actual_length;
......
...@@ -172,7 +172,6 @@ static void ipw_read_bulk_callback(struct urb *urb) ...@@ -172,7 +172,6 @@ static void ipw_read_bulk_callback(struct urb *urb)
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) { if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
......
...@@ -462,10 +462,8 @@ static void ir_read_bulk_callback(struct urb *urb) ...@@ -462,10 +462,8 @@ static void ir_read_bulk_callback(struct urb *urb)
usb_serial_debug_data(debug, &port->dev, __func__, usb_serial_debug_data(debug, &port->dev, __func__,
urb->actual_length, data); urb->actual_length, data);
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty_buffer_request_room(tty, urb->actual_length - 1)) {
tty_insert_flip_string(tty, data+1, urb->actual_length - 1); tty_insert_flip_string(tty, data+1, urb->actual_length - 1);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
}
tty_kref_put(tty); tty_kref_put(tty);
/* /*
......
...@@ -699,7 +699,6 @@ static void klsi_105_read_bulk_callback(struct urb *urb) ...@@ -699,7 +699,6 @@ static void klsi_105_read_bulk_callback(struct urb *urb)
bytes_sent = urb->actual_length - 2; bytes_sent = urb->actual_length - 2;
} }
tty_buffer_request_room(tty, bytes_sent);
tty_insert_flip_string(tty, data + 2, bytes_sent); tty_insert_flip_string(tty, data + 2, bytes_sent);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
tty_kref_put(tty); tty_kref_put(tty);
......
...@@ -388,7 +388,6 @@ static void kobil_read_int_callback(struct urb *urb) ...@@ -388,7 +388,6 @@ static void kobil_read_int_callback(struct urb *urb)
*/ */
/* END DEBUG */ /* END DEBUG */
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
......
...@@ -290,7 +290,6 @@ static void mos7720_bulk_in_callback(struct urb *urb) ...@@ -290,7 +290,6 @@ static void mos7720_bulk_in_callback(struct urb *urb)
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) { if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
......
...@@ -764,7 +764,6 @@ static void mos7840_bulk_in_callback(struct urb *urb) ...@@ -764,7 +764,6 @@ static void mos7840_bulk_in_callback(struct urb *urb)
if (urb->actual_length) { if (urb->actual_length) {
tty = tty_port_tty_get(&mos7840_port->port->port); tty = tty_port_tty_get(&mos7840_port->port->port);
if (tty) { if (tty) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
dbg(" %s ", data); dbg(" %s ", data);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
......
...@@ -66,7 +66,6 @@ static void navman_read_int_callback(struct urb *urb) ...@@ -66,7 +66,6 @@ static void navman_read_int_callback(struct urb *urb)
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) { if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
......
...@@ -55,7 +55,6 @@ static void opticon_bulk_callback(struct urb *urb) ...@@ -55,7 +55,6 @@ static void opticon_bulk_callback(struct urb *urb)
int status = urb->status; int status = urb->status;
struct tty_struct *tty; struct tty_struct *tty;
int result; int result;
int available_room = 0;
int data_length; int data_length;
dbg("%s - port %d", __func__, port->number); dbg("%s - port %d", __func__, port->number);
...@@ -96,13 +95,9 @@ static void opticon_bulk_callback(struct urb *urb) ...@@ -96,13 +95,9 @@ static void opticon_bulk_callback(struct urb *urb)
/* real data, send it to the tty layer */ /* real data, send it to the tty layer */
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty) { if (tty) {
available_room = tty_buffer_request_room(tty,
data_length);
if (available_room) {
tty_insert_flip_string(tty, data, tty_insert_flip_string(tty, data,
available_room); data_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
}
tty_kref_put(tty); tty_kref_put(tty);
} }
} else { } else {
......
...@@ -964,7 +964,6 @@ static void option_indat_callback(struct urb *urb) ...@@ -964,7 +964,6 @@ static void option_indat_callback(struct urb *urb)
} else { } else {
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (urb->actual_length) { if (urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length); tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} else } else
......
...@@ -1042,7 +1042,6 @@ static void pl2303_push_data(struct tty_struct *tty, ...@@ -1042,7 +1042,6 @@ static void pl2303_push_data(struct tty_struct *tty,
tty_flag = TTY_FRAME; tty_flag = TTY_FRAME;
dbg("%s - tty_flag = %d", __func__, tty_flag); dbg("%s - tty_flag = %d", __func__, tty_flag);
tty_buffer_request_room(tty, urb->actual_length + 1);
/* overrun is special, not associated with a char */ /* overrun is special, not associated with a char */
if (line_status & UART_OVERRUN_ERROR) if (line_status & UART_OVERRUN_ERROR)
tty_insert_flip_char(tty, 0, TTY_OVERRUN); tty_insert_flip_char(tty, 0, TTY_OVERRUN);
......
...@@ -595,8 +595,6 @@ static void sierra_indat_callback(struct urb *urb) ...@@ -595,8 +595,6 @@ static void sierra_indat_callback(struct urb *urb)
if (urb->actual_length) { if (urb->actual_length) {
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty) { if (tty) {
tty_buffer_request_room(tty,
urb->actual_length);
tty_insert_flip_string(tty, data, tty_insert_flip_string(tty, data,
urb->actual_length); urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
......
...@@ -677,7 +677,6 @@ static void spcp8x5_read_bulk_callback(struct urb *urb) ...@@ -677,7 +677,6 @@ static void spcp8x5_read_bulk_callback(struct urb *urb)
struct tty_struct *tty; struct tty_struct *tty;
unsigned char *data = urb->transfer_buffer; unsigned char *data = urb->transfer_buffer;
unsigned long flags; unsigned long flags;
int i;
int result = urb->status; int result = urb->status;
u8 status; u8 status;
char tty_flag; char tty_flag;
...@@ -726,12 +725,11 @@ static void spcp8x5_read_bulk_callback(struct urb *urb) ...@@ -726,12 +725,11 @@ static void spcp8x5_read_bulk_callback(struct urb *urb)
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) { if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length + 1);
/* overrun is special, not associated with a char */ /* overrun is special, not associated with a char */
if (status & UART_OVERRUN_ERROR) if (status & UART_OVERRUN_ERROR)
tty_insert_flip_char(tty, 0, TTY_OVERRUN); tty_insert_flip_char(tty, 0, TTY_OVERRUN);
for (i = 0; i < urb->actual_length; ++i) tty_insert_flip_string_fixed_flag(tty, data,
tty_insert_flip_char(tty, data[i], tty_flag); urb->actual_length, tty_flag);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
} }
tty_kref_put(tty); tty_kref_put(tty);
......
...@@ -51,7 +51,6 @@ static void symbol_int_callback(struct urb *urb) ...@@ -51,7 +51,6 @@ static void symbol_int_callback(struct urb *urb)
int status = urb->status; int status = urb->status;
struct tty_struct *tty; struct tty_struct *tty;
int result; int result;
int available_room = 0;
int data_length; int data_length;
dbg("%s - port %d", __func__, port->number); dbg("%s - port %d", __func__, port->number);
...@@ -89,13 +88,8 @@ static void symbol_int_callback(struct urb *urb) ...@@ -89,13 +88,8 @@ static void symbol_int_callback(struct urb *urb)
*/ */
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty) { if (tty) {
available_room = tty_buffer_request_room(tty, tty_insert_flip_string(tty, &data[1], data_length);
data_length);
if (available_room) {
tty_insert_flip_string(tty, &data[1],
available_room);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
}
tty_kref_put(tty); tty_kref_put(tty);
} }
} else { } else {
......
...@@ -1271,14 +1271,13 @@ static void ti_recv(struct device *dev, struct tty_struct *tty, ...@@ -1271,14 +1271,13 @@ static void ti_recv(struct device *dev, struct tty_struct *tty,
int cnt; int cnt;
do { do {
cnt = tty_buffer_request_room(tty, length); cnt = tty_insert_flip_string(tty, data, length);
if (cnt < length) { if (cnt < length) {
dev_err(dev, "%s - dropping data, %d bytes lost\n", dev_err(dev, "%s - dropping data, %d bytes lost\n",
__func__, length - cnt); __func__, length - cnt);
if (cnt == 0) if (cnt == 0)
break; break;
} }
tty_insert_flip_string(tty, data, cnt);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
data += cnt; data += cnt;
length -= cnt; length -= cnt;
......
...@@ -503,13 +503,9 @@ static void visor_read_bulk_callback(struct urb *urb) ...@@ -503,13 +503,9 @@ static void visor_read_bulk_callback(struct urb *urb)
if (urb->actual_length) { if (urb->actual_length) {
tty = tty_port_tty_get(&port->port); tty = tty_port_tty_get(&port->port);
if (tty) { if (tty) {
available_room = tty_buffer_request_room(tty,
urb->actual_length);
if (available_room) {
tty_insert_flip_string(tty, data, tty_insert_flip_string(tty, data,
available_room); urb->actual_length);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
}
tty_kref_put(tty); tty_kref_put(tty);
} }
spin_lock(&priv->lock); spin_lock(&priv->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment