From: Linus Torvalds Date: Sun, 14 Dec 2014 23:23:32 +0000 (-0800) Subject: Merge tag 'tty-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=37da7bbbe84fe9e8862940d3f9194fd27dce59bb;p=openwrt%2Fstaging%2Fblogic.git Merge tag 'tty-3.19-rc1' of git://git./linux/kernel/git/gregkh/tty Pull tty/serial driver updates from Greg KH: "Here's the big tty/serial driver update for 3.19-rc1. There are a number of TTY core changes/fixes in here from Peter Hurley that have all been teted in linux-next for a long time now. There are also the normal serial driver updates as well, full details in the changelog below" * tag 'tty-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (219 commits) serial: pxa: hold port.lock when reporting modem line changes tty-hvsi_lib: Deletion of an unnecessary check before the function call "tty_kref_put" tty: Deletion of unnecessary checks before two function calls n_tty: Fix read_buf race condition, increment read_head after pushing data serial: of-serial: add PM suspend/resume support Revert "serial: of-serial: add PM suspend/resume support" Revert "serial: of-serial: fix up PM ops on no_console_suspend and port type" serial: 8250: don't attempt a trylock if in sysrq serial: core: Add big-endian iotype serial: samsung: use port->fifosize instead of hardcoded values serial: samsung: prefer to use fifosize from driver data serial: samsung: fix style problems serial: samsung: wait for transfer completion before clock disable serial: icom: fix error return code serial: tegra: clean up tty-flag assignments serial: Fix io address assign flow with Fintek PCI-to-UART Product serial: mxs-auart: fix tx_empty against shift register serial: mxs-auart: fix gpio change detection on interrupt serial: mxs-auart: Fix mxs_auart_set_ldisc() serial: 8250_dw: Use 64-bit access for OCTEON. ... --- 37da7bbbe84fe9e8862940d3f9194fd27dce59bb diff --cc Documentation/devicetree/bindings/serial/pl011.txt index 52464918cfe2,0e05340055e1..ba3ecb8cb5a1 --- a/Documentation/devicetree/bindings/serial/pl011.txt +++ b/Documentation/devicetree/bindings/serial/pl011.txt @@@ -6,34 -6,17 +6,46 @@@ Required properties - interrupts: exactly one interrupt specifier Optional properties: - - pinctrl: When present, must have one state named "default", -- pinctrl: When present, must have one state named "sleep" - and one state named "default" -- clocks: When present, must refer to exactly one clock named - "apb_pclk" -- dmas: When present, may have one or two dma channels. - The first one must be named "rx", the second one - must be named "tx". -- auto-poll: Enables polling when using RX DMA. -- poll-rate-ms: Rate at which poll occurs when auto-poll is set, - default 100ms. -- poll-timeout-ms: Poll timeout when auto-poll is set, default - 3000ms. ++- pinctrl: ++ When present, must have one state named "default", + and may contain a second name named "sleep". The former + state sets up pins for ordinary operation whereas + the latter state will put the associated pins to sleep + when the UART is unused - - clocks: When present, the first clock listed must correspond to ++- clocks: ++ When present, the first clock listed must correspond to + the clock named UARTCLK on the IP block, i.e. the clock + to the external serial line, whereas the second clock + must correspond to the PCLK clocking the internal logic + of the block. Just listing one clock (the first one) is + deprecated. - - clocks-names: When present, the first clock listed must be named ++- clocks-names: ++ When present, the first clock listed must be named + "uartclk" and the second clock listed must be named + "apb_pclk" - - dmas: When present, may have one or two dma channels. ++- dmas: ++ When present, may have one or two dma channels. + The first one must be named "rx", the second one + must be named "tx". ++- auto-poll: ++ Enables polling when using RX DMA. ++- poll-rate-ms: ++ Rate at which poll occurs when auto-poll is set, ++ default 100ms. ++- poll-timeout-ms: ++ Poll timeout when auto-poll is set, default ++ 3000ms. See also bindings/arm/primecell.txt + +Example: + +uart@80120000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x80120000 0x1000>; + interrupts = <0 11 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma 13 0 0x2>, <&dma 13 0 0x0>; + dma-names = "rx", "tx"; + clocks = <&foo_clk>, <&bar_clk>; + clock-names = "uartclk", "apb_pclk"; +}; diff --cc drivers/tty/n_tty.c index 26f097f60b10,9e3b21624c82..d2b496750d59 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c @@@ -2193,46 -2198,30 +2193,30 @@@ static ssize_t n_tty_read(struct tty_st if (!input_available_p(tty, 0)) { if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) { - up_read(&tty->termios_rwsem); - tty_flush_to_ldisc(tty); - down_read(&tty->termios_rwsem); - if (!input_available_p(tty, 0)) { - retval = -EIO; - break; - } - } else { - if (tty_hung_up_p(file)) - break; - if (!timeout) - break; - if (file->f_flags & O_NONBLOCK) { - retval = -EAGAIN; - break; - } - if (signal_pending(current)) { - retval = -ERESTARTSYS; - break; - } - n_tty_set_room(tty); - up_read(&tty->termios_rwsem); - - timeout = wait_woken(&wait, TASK_INTERRUPTIBLE, - timeout); - - down_read(&tty->termios_rwsem); - continue; + retval = -EIO; + break; } - } - - /* Deal with packet mode. */ - if (packet && b == buf) { - if (tty_put_user(tty, TIOCPKT_DATA, b++)) { - retval = -EFAULT; - b--; + if (tty_hung_up_p(file)) + break; + if (!timeout) + break; + if (file->f_flags & O_NONBLOCK) { + retval = -EAGAIN; break; } - nr--; + if (signal_pending(current)) { + retval = -ERESTARTSYS; + break; + } + n_tty_set_room(tty); + up_read(&tty->termios_rwsem); + - timeout = schedule_timeout(timeout); ++ timeout = wait_woken(&wait, TASK_INTERRUPTIBLE, ++ timeout); + + down_read(&tty->termios_rwsem); + continue; } - __set_current_state(TASK_RUNNING); if (ldata->icanon && !L_EXTPROC(tty)) { retval = canon_copy_from_read_buf(tty, &b, &nr);