diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-03-08 15:25:40 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-03-08 15:25:40 -0400 |
| commit | bbbce516bb497404315c1d0a1b13a04038347d3d (patch) | |
| tree | c65d2aa186c85b9aeb59a892833edeef67ae97cc | |
| parent | 47df986b684ec1de77e243bc5be17725afca18c4 (diff) | |
| parent | c37bc682e30b8027054356214eb8a3aafbda8e37 (diff) | |
Merge tag 'tty-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty/serial fixes from Greg KH:
"Here are some tty and serial driver fixes for 4.0-rc3.
Along with the atime fix that you know about, here are some other
serial driver bugfixes as well. Most notable is a wait_until_sent
bugfix that was traced back to being around since before 2.6.12 that
Johan has fixed up.
All have been in linux-next successfully"
* tag 'tty-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
TTY: fix tty_wait_until_sent maximum timeout
TTY: fix tty_wait_until_sent on 64-bit machines
USB: serial: fix infinite wait_until_sent timeout
TTY: bfin_jtag_comm: remove incorrect wait_until_sent operation
net: irda: fix wait_until_sent poll timeout
serial: uapi: Declare all userspace-visible io types
serial: core: Fix iotype userspace breakage
serial: sprd: Fix missing spin_unlock in sprd_handle_irq()
console: Fix console name size mismatch
tty: fix up atime/mtime mess, take four
serial: 8250_dw: Fix get_mctrl behaviour
serial:8250:8250_pci: delete unneeded quirk entries
serial:8250:8250_pci: fix redundant entry report for WCH_CH352_2S
Change email address for 8250_pci
serial: 8250: Revert "tty: serial: 8250_core: read only RX if there is something in the FIFO"
Revert "tty/serial: of_serial: add DT alias ID handling"
| -rw-r--r-- | Documentation/devicetree/bindings/serial/snps-dw-apb-uart.txt | 16 | ||||
| -rw-r--r-- | drivers/tty/bfin_jtag_comm.c | 13 | ||||
| -rw-r--r-- | drivers/tty/serial/8250/8250_core.c | 11 | ||||
| -rw-r--r-- | drivers/tty/serial/8250/8250_dw.c | 32 | ||||
| -rw-r--r-- | drivers/tty/serial/8250/8250_pci.c | 20 | ||||
| -rw-r--r-- | drivers/tty/serial/of_serial.c | 4 | ||||
| -rw-r--r-- | drivers/tty/serial/sprd_serial.c | 4 | ||||
| -rw-r--r-- | drivers/tty/tty_io.c | 4 | ||||
| -rw-r--r-- | drivers/tty/tty_ioctl.c | 16 | ||||
| -rw-r--r-- | drivers/usb/serial/generic.c | 5 | ||||
| -rw-r--r-- | include/linux/serial_core.h | 14 | ||||
| -rw-r--r-- | include/uapi/linux/serial.h | 4 | ||||
| -rw-r--r-- | kernel/printk/console_cmdline.h | 2 | ||||
| -rw-r--r-- | kernel/printk/printk.c | 1 | ||||
| -rw-r--r-- | net/irda/ircomm/ircomm_tty.c | 4 |
15 files changed, 89 insertions, 61 deletions
diff --git a/Documentation/devicetree/bindings/serial/snps-dw-apb-uart.txt b/Documentation/devicetree/bindings/serial/snps-dw-apb-uart.txt index 7f76214f728a..289c40ed7470 100644 --- a/Documentation/devicetree/bindings/serial/snps-dw-apb-uart.txt +++ b/Documentation/devicetree/bindings/serial/snps-dw-apb-uart.txt | |||
| @@ -21,6 +21,18 @@ Optional properties: | |||
| 21 | - reg-io-width : the size (in bytes) of the IO accesses that should be | 21 | - reg-io-width : the size (in bytes) of the IO accesses that should be |
| 22 | performed on the device. If this property is not present then single byte | 22 | performed on the device. If this property is not present then single byte |
| 23 | accesses are used. | 23 | accesses are used. |
| 24 | - dcd-override : Override the DCD modem status signal. This signal will always | ||
| 25 | be reported as active instead of being obtained from the modem status | ||
| 26 | register. Define this if your serial port does not use this pin. | ||
| 27 | - dsr-override : Override the DTS modem status signal. This signal will always | ||
| 28 | be reported as active instead of being obtained from the modem status | ||
| 29 | register. Define this if your serial port does not use this pin. | ||
| 30 | - cts-override : Override the CTS modem status signal. This signal will always | ||
| 31 | be reported as active instead of being obtained from the modem status | ||
| 32 | register. Define this if your serial port does not use this pin. | ||
| 33 | - ri-override : Override the RI modem status signal. This signal will always be | ||
| 34 | reported as inactive instead of being obtained from the modem status register. | ||
| 35 | Define this if your serial port does not use this pin. | ||
| 24 | 36 | ||
| 25 | Example: | 37 | Example: |
| 26 | 38 | ||
| @@ -31,6 +43,10 @@ Example: | |||
| 31 | interrupts = <10>; | 43 | interrupts = <10>; |
| 32 | reg-shift = <2>; | 44 | reg-shift = <2>; |
| 33 | reg-io-width = <4>; | 45 | reg-io-width = <4>; |
| 46 | dcd-override; | ||
| 47 | dsr-override; | ||
| 48 | cts-override; | ||
| 49 | ri-override; | ||
| 34 | }; | 50 | }; |
| 35 | 51 | ||
| 36 | Example with one clock: | 52 | Example with one clock: |
diff --git a/drivers/tty/bfin_jtag_comm.c b/drivers/tty/bfin_jtag_comm.c index d7b198c400c7..ce24182f8514 100644 --- a/drivers/tty/bfin_jtag_comm.c +++ b/drivers/tty/bfin_jtag_comm.c | |||
| @@ -210,18 +210,6 @@ bfin_jc_chars_in_buffer(struct tty_struct *tty) | |||
| 210 | return circ_cnt(&bfin_jc_write_buf); | 210 | return circ_cnt(&bfin_jc_write_buf); |
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | static void | ||
| 214 | bfin_jc_wait_until_sent(struct tty_struct *tty, int timeout) | ||
| 215 | { | ||
| 216 | unsigned long expire = jiffies + timeout; | ||
| 217 | while (!circ_empty(&bfin_jc_write_buf)) { | ||
| 218 | if (signal_pending(current)) | ||
| 219 | break; | ||
| 220 | if (time_after(jiffies, expire)) | ||
| 221 | break; | ||
| 222 | } | ||
| 223 | } | ||
| 224 | |||
| 225 | static const struct tty_operations bfin_jc_ops = { | 213 | static const struct tty_operations bfin_jc_ops = { |
| 226 | .open = bfin_jc_open, | 214 | .open = bfin_jc_open, |
| 227 | .close = bfin_jc_close, | 215 | .close = bfin_jc_close, |
| @@ -230,7 +218,6 @@ static const struct tty_operations bfin_jc_ops = { | |||
| 230 | .flush_chars = bfin_jc_flush_chars, | 218 | .flush_chars = bfin_jc_flush_chars, |
| 231 | .write_room = bfin_jc_write_room, | 219 | .write_room = bfin_jc_write_room, |
| 232 | .chars_in_buffer = bfin_jc_chars_in_buffer, | 220 | .chars_in_buffer = bfin_jc_chars_in_buffer, |
| 233 | .wait_until_sent = bfin_jc_wait_until_sent, | ||
| 234 | }; | 221 | }; |
| 235 | 222 | ||
| 236 | static int __init bfin_jc_init(void) | 223 | static int __init bfin_jc_init(void) |
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c index e3b9570a1eff..deae122c9c4b 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c | |||
| @@ -2138,8 +2138,8 @@ int serial8250_do_startup(struct uart_port *port) | |||
| 2138 | /* | 2138 | /* |
| 2139 | * Clear the interrupt registers. | 2139 | * Clear the interrupt registers. |
| 2140 | */ | 2140 | */ |
| 2141 | if (serial_port_in(port, UART_LSR) & UART_LSR_DR) | 2141 | serial_port_in(port, UART_LSR); |
| 2142 | serial_port_in(port, UART_RX); | 2142 | serial_port_in(port, UART_RX); |
| 2143 | serial_port_in(port, UART_IIR); | 2143 | serial_port_in(port, UART_IIR); |
| 2144 | serial_port_in(port, UART_MSR); | 2144 | serial_port_in(port, UART_MSR); |
| 2145 | 2145 | ||
| @@ -2300,8 +2300,8 @@ dont_test_tx_en: | |||
| 2300 | * saved flags to avoid getting false values from polling | 2300 | * saved flags to avoid getting false values from polling |
| 2301 | * routines or the previous session. | 2301 | * routines or the previous session. |
| 2302 | */ | 2302 | */ |
| 2303 | if (serial_port_in(port, UART_LSR) & UART_LSR_DR) | 2303 | serial_port_in(port, UART_LSR); |
| 2304 | serial_port_in(port, UART_RX); | 2304 | serial_port_in(port, UART_RX); |
| 2305 | serial_port_in(port, UART_IIR); | 2305 | serial_port_in(port, UART_IIR); |
| 2306 | serial_port_in(port, UART_MSR); | 2306 | serial_port_in(port, UART_MSR); |
| 2307 | up->lsr_saved_flags = 0; | 2307 | up->lsr_saved_flags = 0; |
| @@ -2394,8 +2394,7 @@ void serial8250_do_shutdown(struct uart_port *port) | |||
| 2394 | * Read data port to reset things, and then unlink from | 2394 | * Read data port to reset things, and then unlink from |
| 2395 | * the IRQ chain. | 2395 | * the IRQ chain. |
| 2396 | */ | 2396 | */ |
| 2397 | if (serial_port_in(port, UART_LSR) & UART_LSR_DR) | 2397 | serial_port_in(port, UART_RX); |
| 2398 | serial_port_in(port, UART_RX); | ||
| 2399 | serial8250_rpm_put(up); | 2398 | serial8250_rpm_put(up); |
| 2400 | 2399 | ||
| 2401 | del_timer_sync(&up->timer); | 2400 | del_timer_sync(&up->timer); |
diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index e60116235836..2ab229ddee38 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c | |||
| @@ -59,6 +59,8 @@ struct dw8250_data { | |||
| 59 | u8 usr_reg; | 59 | u8 usr_reg; |
| 60 | int last_mcr; | 60 | int last_mcr; |
| 61 | int line; | 61 | int line; |
| 62 | int msr_mask_on; | ||
| 63 | int msr_mask_off; | ||
| 62 | struct clk *clk; | 64 | struct clk *clk; |
| 63 | struct clk *pclk; | 65 | struct clk *pclk; |
| 64 | struct reset_control *rst; | 66 | struct reset_control *rst; |
| @@ -81,6 +83,12 @@ static inline int dw8250_modify_msr(struct uart_port *p, int offset, int value) | |||
| 81 | value &= ~UART_MSR_DCTS; | 83 | value &= ~UART_MSR_DCTS; |
| 82 | } | 84 | } |
| 83 | 85 | ||
| 86 | /* Override any modem control signals if needed */ | ||
| 87 | if (offset == UART_MSR) { | ||
| 88 | value |= d->msr_mask_on; | ||
| 89 | value &= ~d->msr_mask_off; | ||
| 90 | } | ||
| 91 | |||
| 84 | return value; | 92 | return value; |
| 85 | } | 93 | } |
| 86 | 94 | ||
| @@ -334,6 +342,30 @@ static int dw8250_probe_of(struct uart_port *p, | |||
| 334 | if (id >= 0) | 342 | if (id >= 0) |
| 335 | p->line = id; | 343 | p->line = id; |
| 336 | 344 | ||
| 345 | if (of_property_read_bool(np, "dcd-override")) { | ||
| 346 | /* Always report DCD as active */ | ||
| 347 | data->msr_mask_on |= UART_MSR_DCD; | ||
| 348 | data->msr_mask_off |= UART_MSR_DDCD; | ||
| 349 | } | ||
| 350 | |||
| 351 | if (of_property_read_bool(np, "dsr-override")) { | ||
| 352 | /* Always report DSR as active */ | ||
| 353 | data->msr_mask_on |= UART_MSR_DSR; | ||
| 354 | data->msr_mask_off |= UART_MSR_DDSR; | ||
| 355 | } | ||
| 356 | |||
| 357 | if (of_property_read_bool(np, "cts-override")) { | ||
| 358 | /* Always report DSR as active */ | ||
| 359 | data->msr_mask_on |= UART_MSR_DSR; | ||
| 360 | data->msr_mask_off |= UART_MSR_DDSR; | ||
| 361 | } | ||
| 362 | |||
| 363 | if (of_property_read_bool(np, "ri-override")) { | ||
| 364 | /* Always report Ring indicator as inactive */ | ||
| 365 | data->msr_mask_off |= UART_MSR_RI; | ||
| 366 | data->msr_mask_off |= UART_MSR_TERI; | ||
| 367 | } | ||
| 368 | |||
| 337 | /* clock got configured through clk api, all done */ | 369 | /* clock got configured through clk api, all done */ |
| 338 | if (p->uartclk) | 370 | if (p->uartclk) |
| 339 | return 0; | 371 | return 0; |
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c index daf2c82984e9..892eb32cdef4 100644 --- a/drivers/tty/serial/8250/8250_pci.c +++ b/drivers/tty/serial/8250/8250_pci.c | |||
| @@ -69,7 +69,7 @@ static void moan_device(const char *str, struct pci_dev *dev) | |||
| 69 | "Please send the output of lspci -vv, this\n" | 69 | "Please send the output of lspci -vv, this\n" |
| 70 | "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n" | 70 | "message (0x%04x,0x%04x,0x%04x,0x%04x), the\n" |
| 71 | "manufacturer and name of serial board or\n" | 71 | "manufacturer and name of serial board or\n" |
| 72 | "modem board to rmk+serial@arm.linux.org.uk.\n", | 72 | "modem board to <linux-serial@vger.kernel.org>.\n", |
| 73 | pci_name(dev), str, dev->vendor, dev->device, | 73 | pci_name(dev), str, dev->vendor, dev->device, |
| 74 | dev->subsystem_vendor, dev->subsystem_device); | 74 | dev->subsystem_vendor, dev->subsystem_device); |
| 75 | } | 75 | } |
| @@ -1989,13 +1989,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | |||
| 1989 | }, | 1989 | }, |
| 1990 | { | 1990 | { |
| 1991 | .vendor = PCI_VENDOR_ID_INTEL, | 1991 | .vendor = PCI_VENDOR_ID_INTEL, |
| 1992 | .device = PCI_DEVICE_ID_INTEL_QRK_UART, | ||
| 1993 | .subvendor = PCI_ANY_ID, | ||
| 1994 | .subdevice = PCI_ANY_ID, | ||
| 1995 | .setup = pci_default_setup, | ||
| 1996 | }, | ||
| 1997 | { | ||
| 1998 | .vendor = PCI_VENDOR_ID_INTEL, | ||
| 1999 | .device = PCI_DEVICE_ID_INTEL_BSW_UART1, | 1992 | .device = PCI_DEVICE_ID_INTEL_BSW_UART1, |
| 2000 | .subvendor = PCI_ANY_ID, | 1993 | .subvendor = PCI_ANY_ID, |
| 2001 | .subdevice = PCI_ANY_ID, | 1994 | .subdevice = PCI_ANY_ID, |
| @@ -2201,13 +2194,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | |||
| 2201 | */ | 2194 | */ |
| 2202 | { | 2195 | { |
| 2203 | .vendor = PCI_VENDOR_ID_PLX, | 2196 | .vendor = PCI_VENDOR_ID_PLX, |
| 2204 | .device = PCI_DEVICE_ID_PLX_9030, | ||
| 2205 | .subvendor = PCI_SUBVENDOR_ID_PERLE, | ||
| 2206 | .subdevice = PCI_ANY_ID, | ||
| 2207 | .setup = pci_default_setup, | ||
| 2208 | }, | ||
| 2209 | { | ||
| 2210 | .vendor = PCI_VENDOR_ID_PLX, | ||
| 2211 | .device = PCI_DEVICE_ID_PLX_9050, | 2197 | .device = PCI_DEVICE_ID_PLX_9050, |
| 2212 | .subvendor = PCI_SUBVENDOR_ID_EXSYS, | 2198 | .subvendor = PCI_SUBVENDOR_ID_EXSYS, |
| 2213 | .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055, | 2199 | .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055, |
| @@ -5415,10 +5401,6 @@ static struct pci_device_id serial_pci_tbl[] = { | |||
| 5415 | PCI_ANY_ID, PCI_ANY_ID, | 5401 | PCI_ANY_ID, PCI_ANY_ID, |
| 5416 | 0, 0, pbn_b0_bt_2_115200 }, | 5402 | 0, 0, pbn_b0_bt_2_115200 }, |
| 5417 | 5403 | ||
| 5418 | { PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH352_2S, | ||
| 5419 | PCI_ANY_ID, PCI_ANY_ID, | ||
| 5420 | 0, 0, pbn_b0_bt_2_115200 }, | ||
| 5421 | |||
| 5422 | { PCIE_VENDOR_ID_WCH, PCIE_DEVICE_ID_WCH_CH384_4S, | 5404 | { PCIE_VENDOR_ID_WCH, PCIE_DEVICE_ID_WCH_CH384_4S, |
| 5423 | PCI_ANY_ID, PCI_ANY_ID, | 5405 | PCI_ANY_ID, PCI_ANY_ID, |
| 5424 | 0, 0, pbn_wch384_4 }, | 5406 | 0, 0, pbn_wch384_4 }, |
diff --git a/drivers/tty/serial/of_serial.c b/drivers/tty/serial/of_serial.c index 7ff61e24a195..33fb94f78967 100644 --- a/drivers/tty/serial/of_serial.c +++ b/drivers/tty/serial/of_serial.c | |||
| @@ -133,10 +133,6 @@ static int of_platform_serial_setup(struct platform_device *ofdev, | |||
| 133 | if (of_find_property(np, "no-loopback-test", NULL)) | 133 | if (of_find_property(np, "no-loopback-test", NULL)) |
| 134 | port->flags |= UPF_SKIP_TEST; | 134 | port->flags |= UPF_SKIP_TEST; |
| 135 | 135 | ||
| 136 | ret = of_alias_get_id(np, "serial"); | ||
| 137 | if (ret >= 0) | ||
| 138 | port->line = ret; | ||
| 139 | |||
| 140 | port->dev = &ofdev->dev; | 136 | port->dev = &ofdev->dev; |
| 141 | 137 | ||
| 142 | switch (type) { | 138 | switch (type) { |
diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c index 594b63331ef4..bca975f5093b 100644 --- a/drivers/tty/serial/sprd_serial.c +++ b/drivers/tty/serial/sprd_serial.c | |||
| @@ -293,8 +293,10 @@ static irqreturn_t sprd_handle_irq(int irq, void *dev_id) | |||
| 293 | 293 | ||
| 294 | ims = serial_in(port, SPRD_IMSR); | 294 | ims = serial_in(port, SPRD_IMSR); |
| 295 | 295 | ||
| 296 | if (!ims) | 296 | if (!ims) { |
| 297 | spin_unlock(&port->lock); | ||
| 297 | return IRQ_NONE; | 298 | return IRQ_NONE; |
| 299 | } | ||
| 298 | 300 | ||
| 299 | serial_out(port, SPRD_ICLR, ~0); | 301 | serial_out(port, SPRD_ICLR, ~0); |
| 300 | 302 | ||
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index 51f066aa375e..2bb4dfc02873 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c | |||
| @@ -1028,8 +1028,8 @@ EXPORT_SYMBOL(start_tty); | |||
| 1028 | /* We limit tty time update visibility to every 8 seconds or so. */ | 1028 | /* We limit tty time update visibility to every 8 seconds or so. */ |
| 1029 | static void tty_update_time(struct timespec *time) | 1029 | static void tty_update_time(struct timespec *time) |
| 1030 | { | 1030 | { |
| 1031 | unsigned long sec = get_seconds() & ~7; | 1031 | unsigned long sec = get_seconds(); |
| 1032 | if ((long)(sec - time->tv_sec) > 0) | 1032 | if (abs(sec - time->tv_sec) & ~7) |
| 1033 | time->tv_sec = sec; | 1033 | time->tv_sec = sec; |
| 1034 | } | 1034 | } |
| 1035 | 1035 | ||
diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c index a5cf253b2544..632fc8152061 100644 --- a/drivers/tty/tty_ioctl.c +++ b/drivers/tty/tty_ioctl.c | |||
| @@ -217,11 +217,17 @@ void tty_wait_until_sent(struct tty_struct *tty, long timeout) | |||
| 217 | #endif | 217 | #endif |
| 218 | if (!timeout) | 218 | if (!timeout) |
| 219 | timeout = MAX_SCHEDULE_TIMEOUT; | 219 | timeout = MAX_SCHEDULE_TIMEOUT; |
| 220 | if (wait_event_interruptible_timeout(tty->write_wait, | 220 | |
| 221 | !tty_chars_in_buffer(tty), timeout) >= 0) { | 221 | timeout = wait_event_interruptible_timeout(tty->write_wait, |
| 222 | if (tty->ops->wait_until_sent) | 222 | !tty_chars_in_buffer(tty), timeout); |
| 223 | tty->ops->wait_until_sent(tty, timeout); | 223 | if (timeout <= 0) |
| 224 | } | 224 | return; |
| 225 | |||
| 226 | if (timeout == MAX_SCHEDULE_TIMEOUT) | ||
| 227 | timeout = 0; | ||
| 228 | |||
| 229 | if (tty->ops->wait_until_sent) | ||
| 230 | tty->ops->wait_until_sent(tty, timeout); | ||
| 225 | } | 231 | } |
| 226 | EXPORT_SYMBOL(tty_wait_until_sent); | 232 | EXPORT_SYMBOL(tty_wait_until_sent); |
| 227 | 233 | ||
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c index ccf1df7c4b80..54e170dd3dad 100644 --- a/drivers/usb/serial/generic.c +++ b/drivers/usb/serial/generic.c | |||
| @@ -258,7 +258,8 @@ void usb_serial_generic_wait_until_sent(struct tty_struct *tty, long timeout) | |||
| 258 | * character or at least one jiffy. | 258 | * character or at least one jiffy. |
| 259 | */ | 259 | */ |
| 260 | period = max_t(unsigned long, (10 * HZ / bps), 1); | 260 | period = max_t(unsigned long, (10 * HZ / bps), 1); |
| 261 | period = min_t(unsigned long, period, timeout); | 261 | if (timeout) |
| 262 | period = min_t(unsigned long, period, timeout); | ||
| 262 | 263 | ||
| 263 | dev_dbg(&port->dev, "%s - timeout = %u ms, period = %u ms\n", | 264 | dev_dbg(&port->dev, "%s - timeout = %u ms, period = %u ms\n", |
| 264 | __func__, jiffies_to_msecs(timeout), | 265 | __func__, jiffies_to_msecs(timeout), |
| @@ -268,7 +269,7 @@ void usb_serial_generic_wait_until_sent(struct tty_struct *tty, long timeout) | |||
| 268 | schedule_timeout_interruptible(period); | 269 | schedule_timeout_interruptible(period); |
| 269 | if (signal_pending(current)) | 270 | if (signal_pending(current)) |
| 270 | break; | 271 | break; |
| 271 | if (time_after(jiffies, expire)) | 272 | if (timeout && time_after(jiffies, expire)) |
| 272 | break; | 273 | break; |
| 273 | } | 274 | } |
| 274 | } | 275 | } |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index baf3e1d08416..d10965f0d8a4 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -143,13 +143,13 @@ struct uart_port { | |||
| 143 | unsigned char iotype; /* io access style */ | 143 | unsigned char iotype; /* io access style */ |
| 144 | unsigned char unused1; | 144 | unsigned char unused1; |
| 145 | 145 | ||
| 146 | #define UPIO_PORT (0) /* 8b I/O port access */ | 146 | #define UPIO_PORT (SERIAL_IO_PORT) /* 8b I/O port access */ |
| 147 | #define UPIO_HUB6 (1) /* Hub6 ISA card */ | 147 | #define UPIO_HUB6 (SERIAL_IO_HUB6) /* Hub6 ISA card */ |
| 148 | #define UPIO_MEM (2) /* 8b MMIO access */ | 148 | #define UPIO_MEM (SERIAL_IO_MEM) /* 8b MMIO access */ |
| 149 | #define UPIO_MEM32 (3) /* 32b little endian */ | 149 | #define UPIO_MEM32 (SERIAL_IO_MEM32) /* 32b little endian */ |
| 150 | #define UPIO_MEM32BE (4) /* 32b big endian */ | 150 | #define UPIO_AU (SERIAL_IO_AU) /* Au1x00 and RT288x type IO */ |
| 151 | #define UPIO_AU (5) /* Au1x00 and RT288x type IO */ | 151 | #define UPIO_TSI (SERIAL_IO_TSI) /* Tsi108/109 type IO */ |
| 152 | #define UPIO_TSI (6) /* Tsi108/109 type IO */ | 152 | #define UPIO_MEM32BE (SERIAL_IO_MEM32BE) /* 32b big endian */ |
| 153 | 153 | ||
| 154 | unsigned int read_status_mask; /* driver specific */ | 154 | unsigned int read_status_mask; /* driver specific */ |
| 155 | unsigned int ignore_status_mask; /* driver specific */ | 155 | unsigned int ignore_status_mask; /* driver specific */ |
diff --git a/include/uapi/linux/serial.h b/include/uapi/linux/serial.h index 5e0d0ed61cf3..25331f9faa76 100644 --- a/include/uapi/linux/serial.h +++ b/include/uapi/linux/serial.h | |||
| @@ -65,6 +65,10 @@ struct serial_struct { | |||
| 65 | #define SERIAL_IO_PORT 0 | 65 | #define SERIAL_IO_PORT 0 |
| 66 | #define SERIAL_IO_HUB6 1 | 66 | #define SERIAL_IO_HUB6 1 |
| 67 | #define SERIAL_IO_MEM 2 | 67 | #define SERIAL_IO_MEM 2 |
| 68 | #define SERIAL_IO_MEM32 3 | ||
| 69 | #define SERIAL_IO_AU 4 | ||
| 70 | #define SERIAL_IO_TSI 5 | ||
| 71 | #define SERIAL_IO_MEM32BE 6 | ||
| 68 | 72 | ||
| 69 | #define UART_CLEAR_FIFO 0x01 | 73 | #define UART_CLEAR_FIFO 0x01 |
| 70 | #define UART_USE_FIFO 0x02 | 74 | #define UART_USE_FIFO 0x02 |
diff --git a/kernel/printk/console_cmdline.h b/kernel/printk/console_cmdline.h index cbd69d842341..2ca4a8b5fe57 100644 --- a/kernel/printk/console_cmdline.h +++ b/kernel/printk/console_cmdline.h | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | struct console_cmdline | 4 | struct console_cmdline |
| 5 | { | 5 | { |
| 6 | char name[8]; /* Name of the driver */ | 6 | char name[16]; /* Name of the driver */ |
| 7 | int index; /* Minor dev. to use */ | 7 | int index; /* Minor dev. to use */ |
| 8 | char *options; /* Options for the driver */ | 8 | char *options; /* Options for the driver */ |
| 9 | #ifdef CONFIG_A11Y_BRAILLE_CONSOLE | 9 | #ifdef CONFIG_A11Y_BRAILLE_CONSOLE |
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 01cfd69c54c6..bb0635bd74f2 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c | |||
| @@ -2464,6 +2464,7 @@ void register_console(struct console *newcon) | |||
| 2464 | for (i = 0, c = console_cmdline; | 2464 | for (i = 0, c = console_cmdline; |
| 2465 | i < MAX_CMDLINECONSOLES && c->name[0]; | 2465 | i < MAX_CMDLINECONSOLES && c->name[0]; |
| 2466 | i++, c++) { | 2466 | i++, c++) { |
| 2467 | BUILD_BUG_ON(sizeof(c->name) != sizeof(newcon->name)); | ||
| 2467 | if (strcmp(c->name, newcon->name) != 0) | 2468 | if (strcmp(c->name, newcon->name) != 0) |
| 2468 | continue; | 2469 | continue; |
| 2469 | if (newcon->index >= 0 && | 2470 | if (newcon->index >= 0 && |
diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c index 9940a41efca1..683346d2d633 100644 --- a/net/irda/ircomm/ircomm_tty.c +++ b/net/irda/ircomm/ircomm_tty.c | |||
| @@ -798,7 +798,9 @@ static void ircomm_tty_wait_until_sent(struct tty_struct *tty, int timeout) | |||
| 798 | orig_jiffies = jiffies; | 798 | orig_jiffies = jiffies; |
| 799 | 799 | ||
| 800 | /* Set poll time to 200 ms */ | 800 | /* Set poll time to 200 ms */ |
| 801 | poll_time = IRDA_MIN(timeout, msecs_to_jiffies(200)); | 801 | poll_time = msecs_to_jiffies(200); |
| 802 | if (timeout) | ||
| 803 | poll_time = min_t(unsigned long, timeout, poll_time); | ||
| 802 | 804 | ||
| 803 | spin_lock_irqsave(&self->spinlock, flags); | 805 | spin_lock_irqsave(&self->spinlock, flags); |
| 804 | while (self->tx_skb && self->tx_skb->len) { | 806 | while (self->tx_skb && self->tx_skb->len) { |
