diff options
Diffstat (limited to 'drivers/serial')
| -rw-r--r-- | drivers/serial/ioc4_serial.c | 6 | ||||
| -rw-r--r-- | drivers/serial/ip22zilog.c | 4 | ||||
| -rw-r--r-- | drivers/serial/serial_core.c | 32 | ||||
| -rw-r--r-- | drivers/serial/sn_console.c | 2 |
4 files changed, 33 insertions, 11 deletions
diff --git a/drivers/serial/ioc4_serial.c b/drivers/serial/ioc4_serial.c index f3763d2ccb86..a37579ce6d76 100644 --- a/drivers/serial/ioc4_serial.c +++ b/drivers/serial/ioc4_serial.c | |||
| @@ -2301,7 +2301,6 @@ static void receive_chars(struct uart_port *the_port) | |||
| 2301 | int read_count, request_count = IOC4_MAX_CHARS; | 2301 | int read_count, request_count = IOC4_MAX_CHARS; |
| 2302 | struct uart_icount *icount; | 2302 | struct uart_icount *icount; |
| 2303 | struct uart_info *info = the_port->info; | 2303 | struct uart_info *info = the_port->info; |
| 2304 | int flip = 0; | ||
| 2305 | unsigned long pflags; | 2304 | unsigned long pflags; |
| 2306 | 2305 | ||
| 2307 | /* Make sure all the pointers are "good" ones */ | 2306 | /* Make sure all the pointers are "good" ones */ |
| @@ -2313,7 +2312,7 @@ static void receive_chars(struct uart_port *the_port) | |||
| 2313 | spin_lock_irqsave(&the_port->lock, pflags); | 2312 | spin_lock_irqsave(&the_port->lock, pflags); |
| 2314 | tty = info->tty; | 2313 | tty = info->tty; |
| 2315 | 2314 | ||
| 2316 | request_count = tty_buffer_request_room(tty, IOC4_MAX_CHARS - 2); | 2315 | request_count = tty_buffer_request_room(tty, IOC4_MAX_CHARS); |
| 2317 | 2316 | ||
| 2318 | if (request_count > 0) { | 2317 | if (request_count > 0) { |
| 2319 | icount = &the_port->icount; | 2318 | icount = &the_port->icount; |
| @@ -2326,8 +2325,7 @@ static void receive_chars(struct uart_port *the_port) | |||
| 2326 | 2325 | ||
| 2327 | spin_unlock_irqrestore(&the_port->lock, pflags); | 2326 | spin_unlock_irqrestore(&the_port->lock, pflags); |
| 2328 | 2327 | ||
| 2329 | if (flip) | 2328 | tty_flip_buffer_push(tty); |
| 2330 | tty_flip_buffer_push(tty); | ||
| 2331 | } | 2329 | } |
| 2332 | 2330 | ||
| 2333 | /** | 2331 | /** |
diff --git a/drivers/serial/ip22zilog.c b/drivers/serial/ip22zilog.c index 419dd3cd7862..193722d680cf 100644 --- a/drivers/serial/ip22zilog.c +++ b/drivers/serial/ip22zilog.c | |||
| @@ -420,10 +420,8 @@ static void ip22zilog_transmit_chars(struct uart_ip22zilog_port *up, | |||
| 420 | if (up->port.info == NULL) | 420 | if (up->port.info == NULL) |
| 421 | goto ack_tx_int; | 421 | goto ack_tx_int; |
| 422 | xmit = &up->port.info->xmit; | 422 | xmit = &up->port.info->xmit; |
| 423 | if (uart_circ_empty(xmit)) { | 423 | if (uart_circ_empty(xmit)) |
| 424 | uart_write_wakeup(&up->port); | ||
| 425 | goto ack_tx_int; | 424 | goto ack_tx_int; |
| 426 | } | ||
| 427 | if (uart_tx_stopped(&up->port)) | 425 | if (uart_tx_stopped(&up->port)) |
| 428 | goto ack_tx_int; | 426 | goto ack_tx_int; |
| 429 | 427 | ||
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index 95fb4939c675..cc1faa31d124 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c | |||
| @@ -71,6 +71,11 @@ static void uart_change_pm(struct uart_state *state, int pm_state); | |||
| 71 | void uart_write_wakeup(struct uart_port *port) | 71 | void uart_write_wakeup(struct uart_port *port) |
| 72 | { | 72 | { |
| 73 | struct uart_info *info = port->info; | 73 | struct uart_info *info = port->info; |
| 74 | /* | ||
| 75 | * This means you called this function _after_ the port was | ||
| 76 | * closed. No cookie for you. | ||
| 77 | */ | ||
| 78 | BUG_ON(!info); | ||
| 74 | tasklet_schedule(&info->tlet); | 79 | tasklet_schedule(&info->tlet); |
| 75 | } | 80 | } |
| 76 | 81 | ||
| @@ -471,14 +476,26 @@ static void uart_flush_chars(struct tty_struct *tty) | |||
| 471 | } | 476 | } |
| 472 | 477 | ||
| 473 | static int | 478 | static int |
| 474 | uart_write(struct tty_struct *tty, const unsigned char * buf, int count) | 479 | uart_write(struct tty_struct *tty, const unsigned char *buf, int count) |
| 475 | { | 480 | { |
| 476 | struct uart_state *state = tty->driver_data; | 481 | struct uart_state *state = tty->driver_data; |
| 477 | struct uart_port *port = state->port; | 482 | struct uart_port *port; |
| 478 | struct circ_buf *circ = &state->info->xmit; | 483 | struct circ_buf *circ; |
| 479 | unsigned long flags; | 484 | unsigned long flags; |
| 480 | int c, ret = 0; | 485 | int c, ret = 0; |
| 481 | 486 | ||
| 487 | /* | ||
| 488 | * This means you called this function _after_ the port was | ||
| 489 | * closed. No cookie for you. | ||
| 490 | */ | ||
| 491 | if (!state || !state->info) { | ||
| 492 | WARN_ON(1); | ||
| 493 | return -EL3HLT; | ||
| 494 | } | ||
| 495 | |||
| 496 | port = state->port; | ||
| 497 | circ = &state->info->xmit; | ||
| 498 | |||
| 482 | if (!circ->buf) | 499 | if (!circ->buf) |
| 483 | return 0; | 500 | return 0; |
| 484 | 501 | ||
| @@ -521,6 +538,15 @@ static void uart_flush_buffer(struct tty_struct *tty) | |||
| 521 | struct uart_port *port = state->port; | 538 | struct uart_port *port = state->port; |
| 522 | unsigned long flags; | 539 | unsigned long flags; |
| 523 | 540 | ||
| 541 | /* | ||
| 542 | * This means you called this function _after_ the port was | ||
| 543 | * closed. No cookie for you. | ||
| 544 | */ | ||
| 545 | if (!state || !state->info) { | ||
| 546 | WARN_ON(1); | ||
| 547 | return; | ||
| 548 | } | ||
| 549 | |||
| 524 | DPRINTK("uart_flush_buffer(%d) called\n", tty->index); | 550 | DPRINTK("uart_flush_buffer(%d) called\n", tty->index); |
| 525 | 551 | ||
| 526 | spin_lock_irqsave(&port->lock, flags); | 552 | spin_lock_irqsave(&port->lock, flags); |
diff --git a/drivers/serial/sn_console.c b/drivers/serial/sn_console.c index 43e67d6c29d4..60ea4a3f0713 100644 --- a/drivers/serial/sn_console.c +++ b/drivers/serial/sn_console.c | |||
| @@ -820,7 +820,7 @@ static int __init sn_sal_module_init(void) | |||
| 820 | int retval; | 820 | int retval; |
| 821 | 821 | ||
| 822 | if (!ia64_platform_is("sn2")) | 822 | if (!ia64_platform_is("sn2")) |
| 823 | return -ENODEV; | 823 | return 0; |
| 824 | 824 | ||
| 825 | printk(KERN_INFO "sn_console: Console driver init\n"); | 825 | printk(KERN_INFO "sn_console: Console driver init\n"); |
| 826 | 826 | ||
