Skip to content

Commit

Permalink
USB: tty: Prune uses of tty_request_room in the USB layer
Browse files Browse the repository at this point in the history
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: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Alan Cox authored and Greg Kroah-Hartman committed Mar 2, 2010
1 parent 2832fc1 commit a108bfc
Show file tree
Hide file tree
Showing 24 changed files with 25 additions and 79 deletions.
1 change: 0 additions & 1 deletion drivers/usb/serial/ark3116.c
Original file line number Diff line number Diff line change
Expand Up @@ -733,7 +733,6 @@ static void ark3116_read_bulk_callback(struct urb *urb)

tty = tty_port_tty_get(&port->port);
if (tty) {
tty_buffer_request_room(tty, urb->actual_length + 1);
/* overrun is special, not associated with a char */
if (unlikely(lsr & UART_LSR_OE))
tty_insert_flip_char(tty, 0, TTY_OVERRUN);
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/cyberjack.c
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,6 @@ static void cyberjack_read_bulk_callback(struct urb *urb)
return;
}
if (urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
}
Expand Down
10 changes: 3 additions & 7 deletions drivers/usb/serial/cypress_m8.c
Original file line number Diff line number Diff line change
Expand Up @@ -1307,13 +1307,9 @@ static void cypress_read_int_callback(struct urb *urb)
spin_unlock_irqrestore(&priv->lock, flags);

/* process read if there is data other than line status */
if (tty && (bytes > i)) {
bytes = tty_buffer_request_room(tty, bytes);
for (; i < bytes ; ++i) {
dbg("pushing byte number %d - %d - %c", i, data[i],
data[i]);
tty_insert_flip_char(tty, data[i], tty_flag);
}
if (tty && bytes > i) {
tty_insert_flip_string_fixed_flag(tty, data + i,
bytes - i, tty_flag);
tty_flip_buffer_push(tty);
}

Expand Down
13 changes: 2 additions & 11 deletions drivers/usb/serial/digi_acceleport.c
Original file line number Diff line number Diff line change
Expand Up @@ -1658,7 +1658,6 @@ static int digi_read_inb_callback(struct urb *urb)
int port_status = ((unsigned char *)urb->transfer_buffer)[2];
unsigned char *data = ((unsigned char *)urb->transfer_buffer) + 3;
int flag, throttled;
int i;
int status = urb->status;

/* do not process callbacks on closed ports */
Expand Down Expand Up @@ -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) */
--len;

len = tty_buffer_request_room(tty, len);
if (len > 0) {
/* Hot path */
if (flag == TTY_NORMAL)
tty_insert_flip_string(tty, data, len);
else {
for (i = 0; i < len; i++)
tty_insert_flip_char(tty,
data[i], flag);
}
tty_insert_flip_string_fixed_flag(tty, data, len,
flag);
tty_flip_buffer_push(tty);
}
}
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/empeg.c
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,6 @@ static void empeg_read_bulk_callback(struct urb *urb)
tty = tty_port_tty_get(&port->port);

if (urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
bytes_in += urb->actual_length;
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/garmin_gps.c
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,6 @@ static void send_to_tty(struct usb_serial_port *port,
usb_serial_debug_data(debug, &port->dev,
__func__, actual_length, data);

tty_buffer_request_room(tty, actual_length);
tty_insert_flip_string(tty, data, actual_length);
tty_flip_buffer_push(tty);
}
Expand Down
19 changes: 7 additions & 12 deletions drivers/usb/serial/io_edgeport.c
Original file line number Diff line number Diff line change
Expand Up @@ -2055,18 +2055,13 @@ static void edge_tty_recv(struct device *dev, struct tty_struct *tty,
{
int cnt;

do {
cnt = tty_buffer_request_room(tty, length);
if (cnt < length) {
dev_err(dev, "%s - dropping data, %d bytes lost\n",
__func__, length - cnt);
if (cnt == 0)
break;
}
tty_insert_flip_string(tty, data, cnt);
data += cnt;
length -= cnt;
} while (length > 0);
cnt = tty_insert_flip_string(tty, data, length);
if (cnt < length) {
dev_err(dev, "%s - dropping data, %d bytes lost\n",
__func__, length - cnt);
}
data += cnt;
length -= cnt;

tty_flip_buffer_push(tty);
}
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/io_ti.c
Original file line number Diff line number Diff line change
Expand Up @@ -1820,7 +1820,6 @@ static void edge_tty_recv(struct device *dev, struct tty_struct *tty,
{
int queued;

tty_buffer_request_room(tty, length);
queued = tty_insert_flip_string(tty, data, length);
if (queued < length)
dev_err(dev, "%s - dropping data, %d bytes lost\n",
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/ipaq.c
Original file line number Diff line number Diff line change
Expand Up @@ -747,7 +747,6 @@ static void ipaq_read_bulk_callback(struct urb *urb)

tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
bytes_in += urb->actual_length;
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/ipw.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,6 @@ static void ipw_read_bulk_callback(struct urb *urb)

tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
}
Expand Down
6 changes: 2 additions & 4 deletions drivers/usb/serial/ir-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -462,10 +462,8 @@ static void ir_read_bulk_callback(struct urb *urb)
usb_serial_debug_data(debug, &port->dev, __func__,
urb->actual_length, data);
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_flip_buffer_push(tty);
}
tty_insert_flip_string(tty, data+1, urb->actual_length - 1);
tty_flip_buffer_push(tty);
tty_kref_put(tty);

/*
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/kl5kusb105.c
Original file line number Diff line number Diff line change
Expand Up @@ -699,7 +699,6 @@ static void klsi_105_read_bulk_callback(struct urb *urb)
bytes_sent = urb->actual_length - 2;
}

tty_buffer_request_room(tty, bytes_sent);
tty_insert_flip_string(tty, data + 2, bytes_sent);
tty_flip_buffer_push(tty);
tty_kref_put(tty);
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/kobil_sct.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,6 @@ static void kobil_read_int_callback(struct urb *urb)
*/
/* END DEBUG */

tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
}
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/mos7720.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,6 @@ static void mos7720_bulk_in_callback(struct urb *urb)

tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
}
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/mos7840.c
Original file line number Diff line number Diff line change
Expand Up @@ -764,7 +764,6 @@ static void mos7840_bulk_in_callback(struct urb *urb)
if (urb->actual_length) {
tty = tty_port_tty_get(&mos7840_port->port->port);
if (tty) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
dbg(" %s ", data);
tty_flip_buffer_push(tty);
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/navman.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ static void navman_read_int_callback(struct urb *urb)

tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
}
Expand Down
11 changes: 3 additions & 8 deletions drivers/usb/serial/opticon.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ static void opticon_bulk_callback(struct urb *urb)
int status = urb->status;
struct tty_struct *tty;
int result;
int available_room = 0;
int data_length;

dbg("%s - port %d", __func__, port->number);
Expand Down Expand Up @@ -96,13 +95,9 @@ static void opticon_bulk_callback(struct urb *urb)
/* real data, send it to the tty layer */
tty = tty_port_tty_get(&port->port);
if (tty) {
available_room = tty_buffer_request_room(tty,
data_length);
if (available_room) {
tty_insert_flip_string(tty, data,
available_room);
tty_flip_buffer_push(tty);
}
tty_insert_flip_string(tty, data,
data_length);
tty_flip_buffer_push(tty);
tty_kref_put(tty);
}
} else {
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/option.c
Original file line number Diff line number Diff line change
Expand Up @@ -964,7 +964,6 @@ static void option_indat_callback(struct urb *urb)
} else {
tty = tty_port_tty_get(&port->port);
if (urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
} else
Expand Down
1 change: 0 additions & 1 deletion drivers/usb/serial/pl2303.c
Original file line number Diff line number Diff line change
Expand Up @@ -1042,7 +1042,6 @@ static void pl2303_push_data(struct tty_struct *tty,
tty_flag = TTY_FRAME;
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 */
if (line_status & UART_OVERRUN_ERROR)
tty_insert_flip_char(tty, 0, TTY_OVERRUN);
Expand Down
2 changes: 0 additions & 2 deletions drivers/usb/serial/sierra.c
Original file line number Diff line number Diff line change
Expand Up @@ -595,8 +595,6 @@ static void sierra_indat_callback(struct urb *urb)
if (urb->actual_length) {
tty = tty_port_tty_get(&port->port);
if (tty) {
tty_buffer_request_room(tty,
urb->actual_length);
tty_insert_flip_string(tty, data,
urb->actual_length);
tty_flip_buffer_push(tty);
Expand Down
6 changes: 2 additions & 4 deletions drivers/usb/serial/spcp8x5.c
Original file line number Diff line number Diff line change
Expand Up @@ -677,7 +677,6 @@ static void spcp8x5_read_bulk_callback(struct urb *urb)
struct tty_struct *tty;
unsigned char *data = urb->transfer_buffer;
unsigned long flags;
int i;
int result = urb->status;
u8 status;
char tty_flag;
Expand Down Expand Up @@ -726,12 +725,11 @@ static void spcp8x5_read_bulk_callback(struct urb *urb)

tty = tty_port_tty_get(&port->port);
if (tty && urb->actual_length) {
tty_buffer_request_room(tty, urb->actual_length + 1);
/* overrun is special, not associated with a char */
if (status & UART_OVERRUN_ERROR)
tty_insert_flip_char(tty, 0, TTY_OVERRUN);
for (i = 0; i < urb->actual_length; ++i)
tty_insert_flip_char(tty, data[i], tty_flag);
tty_insert_flip_string_fixed_flag(tty, data,
urb->actual_length, tty_flag);
tty_flip_buffer_push(tty);
}
tty_kref_put(tty);
Expand Down
10 changes: 2 additions & 8 deletions drivers/usb/serial/symbolserial.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ static void symbol_int_callback(struct urb *urb)
int status = urb->status;
struct tty_struct *tty;
int result;
int available_room = 0;
int data_length;

dbg("%s - port %d", __func__, port->number);
Expand Down Expand Up @@ -89,13 +88,8 @@ static void symbol_int_callback(struct urb *urb)
*/
tty = tty_port_tty_get(&port->port);
if (tty) {
available_room = tty_buffer_request_room(tty,
data_length);
if (available_room) {
tty_insert_flip_string(tty, &data[1],
available_room);
tty_flip_buffer_push(tty);
}
tty_insert_flip_string(tty, &data[1], data_length);
tty_flip_buffer_push(tty);
tty_kref_put(tty);
}
} else {
Expand Down
3 changes: 1 addition & 2 deletions drivers/usb/serial/ti_usb_3410_5052.c
Original file line number Diff line number Diff line change
Expand Up @@ -1271,14 +1271,13 @@ static void ti_recv(struct device *dev, struct tty_struct *tty,
int cnt;

do {
cnt = tty_buffer_request_room(tty, length);
cnt = tty_insert_flip_string(tty, data, length);
if (cnt < length) {
dev_err(dev, "%s - dropping data, %d bytes lost\n",
__func__, length - cnt);
if (cnt == 0)
break;
}
tty_insert_flip_string(tty, data, cnt);
tty_flip_buffer_push(tty);
data += cnt;
length -= cnt;
Expand Down
10 changes: 3 additions & 7 deletions drivers/usb/serial/visor.c
Original file line number Diff line number Diff line change
Expand Up @@ -503,13 +503,9 @@ static void visor_read_bulk_callback(struct urb *urb)
if (urb->actual_length) {
tty = tty_port_tty_get(&port->port);
if (tty) {
available_room = tty_buffer_request_room(tty,
urb->actual_length);
if (available_room) {
tty_insert_flip_string(tty, data,
available_room);
tty_flip_buffer_push(tty);
}
tty_insert_flip_string(tty, data,
urb->actual_length);
tty_flip_buffer_push(tty);
tty_kref_put(tty);
}
spin_lock(&priv->lock);
Expand Down

0 comments on commit a108bfc

Please sign in to comment.