1. 27 12月, 2019 7 次提交
    • A
      serial: set suppress_bind_attrs flag only if builtin · a4398baf
      Anders Roxell 提交于
      [ Upstream commit 646097940ad35aa2c1f2012af932d55976a9f255 ]
      
      When the test 'CONFIG_DEBUG_TEST_DRIVER_REMOVE=y' is enabled,
      arch_initcall(pl011_init) came before subsys_initcall(default_bdi_init).
      devtmpfs gets killed because we try to remove a file and decrement the
      wb reference count before the noop_backing_device_info gets initialized.
      
      [    0.332075] Serial: AMBA PL011 UART driver
      [    0.485276] 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 39, base_baud = 0) is a PL011 rev1
      [    0.502382] console [ttyAMA0] enabled
      [    0.515710] Unable to handle kernel paging request at virtual address 0000800074c12000
      [    0.516053] Mem abort info:
      [    0.516222]   ESR = 0x96000004
      [    0.516417]   Exception class = DABT (current EL), IL = 32 bits
      [    0.516641]   SET = 0, FnV = 0
      [    0.516826]   EA = 0, S1PTW = 0
      [    0.516984] Data abort info:
      [    0.517149]   ISV = 0, ISS = 0x00000004
      [    0.517339]   CM = 0, WnR = 0
      [    0.517553] [0000800074c12000] user address but active_mm is swapper
      [    0.517928] Internal error: Oops: 96000004 [#1] PREEMPT SMP
      [    0.518305] Modules linked in:
      [    0.518839] CPU: 0 PID: 13 Comm: kdevtmpfs Not tainted 4.19.0-rc5-next-20180928-00002-g2ba39ab0cd01-dirty #82
      [    0.519307] Hardware name: linux,dummy-virt (DT)
      [    0.519681] pstate: 80000005 (Nzcv daif -PAN -UAO)
      [    0.519959] pc : __destroy_inode+0x94/0x2a8
      [    0.520212] lr : __destroy_inode+0x78/0x2a8
      [    0.520401] sp : ffff0000098c3b20
      [    0.520590] x29: ffff0000098c3b20 x28: 00000000087a3714
      [    0.520904] x27: 0000000000002000 x26: 0000000000002000
      [    0.521179] x25: ffff000009583000 x24: 0000000000000000
      [    0.521467] x23: ffff80007bb52000 x22: ffff80007bbaa7c0
      [    0.521737] x21: ffff0000093f9338 x20: 0000000000000000
      [    0.522033] x19: ffff80007bbb05d8 x18: 0000000000000400
      [    0.522376] x17: 0000000000000000 x16: 0000000000000000
      [    0.522727] x15: 0000000000000400 x14: 0000000000000400
      [    0.523068] x13: 0000000000000001 x12: 0000000000000001
      [    0.523421] x11: 0000000000000000 x10: 0000000000000970
      [    0.523749] x9 : ffff0000098c3a60 x8 : ffff80007bbab190
      [    0.524017] x7 : ffff80007bbaa880 x6 : 0000000000000c88
      [    0.524305] x5 : ffff0000093d96c8 x4 : 61c8864680b583eb
      [    0.524567] x3 : ffff0000093d6180 x2 : ffffffffffffffff
      [    0.524872] x1 : 0000800074c12000 x0 : 0000800074c12000
      [    0.525207] Process kdevtmpfs (pid: 13, stack limit = 0x(____ptrval____))
      [    0.525529] Call trace:
      [    0.525806]  __destroy_inode+0x94/0x2a8
      [    0.526108]  destroy_inode+0x34/0x88
      [    0.526370]  evict+0x144/0x1c8
      [    0.526636]  iput+0x184/0x230
      [    0.526871]  dentry_unlink_inode+0x118/0x130
      [    0.527152]  d_delete+0xd8/0xe0
      [    0.527420]  vfs_unlink+0x240/0x270
      [    0.527665]  handle_remove+0x1d8/0x330
      [    0.527875]  devtmpfsd+0x138/0x1c8
      [    0.528085]  kthread+0x14c/0x158
      [    0.528291]  ret_from_fork+0x10/0x18
      [    0.528720] Code: 92800002 aa1403e0 d538d081 8b010000 (c85f7c04)
      [    0.529367] ---[ end trace 5a3dee47727f877c ]---
      
      Rework to set suppress_bind_attrs flag to avoid removing the device when
      CONFIG_DEBUG_TEST_DRIVER_REMOVE=y. This applies for pic32_uart and
      xilinx_uartps as well.
      Co-developed-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NAnders Roxell <anders.roxell@linaro.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      a4398baf
    • D
      tty: Don't hold ldisc lock in tty_reopen() if ldisc present · f0fd9fe8
      Dmitry Safonov 提交于
      commit d3736d82e8169768218ee0ef68718875918091a0 upstream.
      
      Try to get reference for ldisc during tty_reopen().
      If ldisc present, we don't need to do tty_ldisc_reinit() and lock the
      write side for line discipline semaphore.
      Effectively, it optimizes fast-path for tty_reopen(), but more
      importantly it won't interrupt ongoing IO on the tty as no ldisc change
      is needed.
      Fixes user-visible issue when tty_reopen() interrupted login process for
      user with a long password, observed and reported by Lukas.
      
      Fixes: c96cf923a98d ("tty: Don't block on IO when ldisc change is pending")
      Fixes: 83d817f41070 ("tty: Hold tty_ldisc_lock() during tty_reopen()")
      Cc: Jiri Slaby <jslaby@suse.com>
      Reported-by: NLukas F. Hartmann <lukas@mntmn.com>
      Tested-by: NLukas F. Hartmann <lukas@mntmn.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NDmitry Safonov <dima@arista.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      f0fd9fe8
    • D
      tty: Simplify tty->count math in tty_reopen() · efa48901
      Dmitry Safonov 提交于
      commit cf62a1a13749db0d32b5cdd800ea91a4087319de upstream.
      
      As notted by Jiri, tty_ldisc_reinit() shouldn't rely on tty counter.
      Simplify math by increasing the counter after reinit success.
      
      Cc: Jiri Slaby <jslaby@suse.com>
      Link: lkml.kernel.org/r/<20180829022353.23568-2-dima@arista.com>
      Suggested-by: NJiri Slaby <jslaby@suse.com>
      Reviewed-by: NJiri Slaby <jslaby@suse.cz>
      Tested-by: NMark Rutland <mark.rutland@arm.com>
      Signed-off-by: NDmitry Safonov <dima@arista.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      efa48901
    • D
      tty: Hold tty_ldisc_lock() during tty_reopen() · 5ad30827
      Dmitry Safonov 提交于
      commit 83d817f41070c48bc3eb7ec18e43000a548fca5c upstream.
      
      tty_ldisc_reinit() doesn't race with neither tty_ldisc_hangup()
      nor set_ldisc() nor tty_ldisc_release() as they use tty lock.
      But it races with anyone who expects line discipline to be the same
      after hoding read semaphore in tty_ldisc_ref().
      
      We've seen the following crash on v4.9.108 stable:
      
      BUG: unable to handle kernel paging request at 0000000000002260
      IP: [..] n_tty_receive_buf_common+0x5f/0x86d
      Workqueue: events_unbound flush_to_ldisc
      Call Trace:
       [..] n_tty_receive_buf2
       [..] tty_ldisc_receive_buf
       [..] flush_to_ldisc
       [..] process_one_work
       [..] worker_thread
       [..] kthread
       [..] ret_from_fork
      
      tty_ldisc_reinit() should be called with ldisc_sem hold for writing,
      which will protect any reader against line discipline changes.
      
      Cc: Jiri Slaby <jslaby@suse.com>
      Cc: stable@vger.kernel.org # b027e229 ("tty: fix data race between tty_init_dev and flush of buf")
      Reviewed-by: NJiri Slaby <jslaby@suse.cz>
      Reported-by: syzbot+3aa9784721dfb90e984d@syzkaller.appspotmail.com
      Tested-by: NMark Rutland <mark.rutland@arm.com>
      Tested-by: NTetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
      Signed-off-by: NDmitry Safonov <dima@arista.com>
      Tested-by: NTycho Andersen <tycho@tycho.ws>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      5ad30827
    • D
      tty/ldsem: Wake up readers after timed out down_write() · 93746dc7
      Dmitry Safonov 提交于
      commit 231f8fd0cca078bd4396dd7e380db813ac5736e2 upstream.
      
      ldsem_down_read() will sleep if there is pending writer in the queue.
      If the writer times out, readers in the queue should be woken up,
      otherwise they may miss a chance to acquire the semaphore until the last
      active reader will do ldsem_up_read().
      
      There was a couple of reports where there was one active reader and
      other readers soft locked up:
        Showing all locks held in the system:
        2 locks held by khungtaskd/17:
         #0:  (rcu_read_lock){......}, at: watchdog+0x124/0x6d1
         #1:  (tasklist_lock){.+.+..}, at: debug_show_all_locks+0x72/0x2d3
        2 locks held by askfirst/123:
         #0:  (&tty->ldisc_sem){.+.+.+}, at: ldsem_down_read+0x46/0x58
         #1:  (&ldata->atomic_read_lock){+.+...}, at: n_tty_read+0x115/0xbe4
      
      Prevent readers wait for active readers to release ldisc semaphore.
      
      Link: lkml.kernel.org/r/20171121132855.ajdv4k6swzhvktl6@wfg-t540p.sh.intel.com
      Link: lkml.kernel.org/r/20180907045041.GF1110@shao2-debian
      Cc: Jiri Slaby <jslaby@suse.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: stable@vger.kernel.org
      Reported-by: Nkernel test robot <rong.a.chen@intel.com>
      Signed-off-by: NDmitry Safonov <dima@arista.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      93746dc7
    • Y
      serial/sunsu: fix refcount leak · 51c1e474
      Yangtao Li 提交于
      [ Upstream commit d430aff8cd0c57502d873909c184e3b5753f8b88 ]
      
      The function of_find_node_by_path() acquires a reference to the node
      returned by it and that reference needs to be dropped by its caller.
      
      su_get_type() doesn't do that. The match node are used as an identifier
      to compare against the current node, so we can directly drop the refcount
      after getting the node from the path as it is not used as pointer.
      
      Fix this by use a single variable and drop the refcount right after
      of_find_node_by_path().
      Signed-off-by: NYangtao Li <tiny.windzz@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      51c1e474
    • N
      serial: uartps: Fix interrupt mask issue to handle the RX interrupts properly · 3a45d561
      Nava kishore Manne 提交于
      commit 260683137ab5276113fc322fdbbc578024185fee upstream.
      
      This patch Correct the RX interrupt mask value to handle the
      RX interrupts properly.
      
      Fixes: c8dbdc84 ("serial: xuartps: Rewrite the interrupt handling logic")
      Signed-off-by: NNava kishore Manne <nava.manne@xilinx.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NMichal Simek <michal.simek@xilinx.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      3a45d561
  2. 21 12月, 2018 1 次提交
  3. 13 12月, 2018 4 次提交
    • M
      kgdboc: fix KASAN global-out-of-bounds bug in param_set_kgdboc_var() · beb68a72
      Macpaul Lin 提交于
      commit dada6a43b0402eba438a17ac86fdc64ac56a4607 upstream.
      
      This patch is trying to fix KE issue due to
      "BUG: KASAN: global-out-of-bounds in param_set_kgdboc_var+0x194/0x198"
      reported by Syzkaller scan."
      
      [26364:syz-executor0][name:report8t]BUG: KASAN: global-out-of-bounds in param_set_kgdboc_var+0x194/0x198
      [26364:syz-executor0][name:report&]Read of size 1 at addr ffffff900e44f95f by task syz-executor0/26364
      [26364:syz-executor0][name:report&]
      [26364:syz-executor0]CPU: 7 PID: 26364 Comm: syz-executor0 Tainted: G W 0
      [26364:syz-executor0]Call trace:
      [26364:syz-executor0][<ffffff9008095cf8>] dump_bacIctrace+Ox0/0x470
      [26364:syz-executor0][<ffffff9008096de0>] show_stack+0x20/0x30
      [26364:syz-executor0][<ffffff90089cc9c8>] dump_stack+Oxd8/0x128
      [26364:syz-executor0][<ffffff90084edb38>] print_address_description +0x80/0x4a8
      [26364:syz-executor0][<ffffff90084ee270>] kasan_report+Ox178/0x390
      [26364:syz-executor0][<ffffff90084ee4a0>] _asan_report_loadi_noabort+Ox18/0x20
      [26364:syz-executor0][<ffffff9008b092ac>] param_set_kgdboc_var+Ox194/0x198
      [26364:syz-executor0][<ffffff900813af64>] param_attr_store+Ox14c/0x270
      [26364:syz-executor0][<ffffff90081394c8>] module_attr_store+0x60/0x90
      [26364:syz-executor0][<ffffff90086690c0>] sysfs_kl_write+Ox100/0x158
      [26364:syz-executor0][<ffffff9008666d84>] kernfs_fop_write+0x27c/0x3a8
      [26364:syz-executor0][<ffffff9008508264>] do_loop_readv_writev+0x114/0x1b0
      [26364:syz-executor0][<ffffff9008509ac8>] do_readv_writev+0x4f8/0x5e0
      [26364:syz-executor0][<ffffff9008509ce4>] vfs_writev+0x7c/Oxb8
      [26364:syz-executor0][<ffffff900850ba64>] SyS_writev+Oxcc/0x208
      [26364:syz-executor0][<ffffff90080883f0>] elO_svc_naked +0x24/0x28
      [26364:syz-executor0][name:report&]
      [26364:syz-executor0][name:report&]The buggy address belongs to the variable:
      [26364:syz-executor0][name:report&] kgdb_tty_line+Ox3f/0x40
      [26364:syz-executor0][name:report&]
      [26364:syz-executor0][name:report&]Memory state around the buggy address:
      [26364:syz-executor0] ffffff900e44f800: 00 00 00 00 00 04 fa fa fa fa fa fa 00 fa fa fa
      [26364:syz-executor0] ffffff900e44f880: fa fa fa fa 00 fa fa fa fa fa fa fa 00 fa fa fa
      [26364:syz-executor0]> ffffff900e44f900: fa fa fa fa 04 fa fa fa fa fa fa fa 00 00 00 00
      [26364:syz-executor0][name:report&]                                       ^
      [26364:syz-executor0] ffffff900e44f980: 00 fa fa fa fa fa fa fa 04 fa fa fa fa fa fa fa
      [26364:syz-executor0] ffffff900e44fa00: 04 fa fa fa fa fa fa fa 00 fa fa fa fa fa fa fa
      [26364:syz-executor0][name:report&]
      [26364:syz-executor0][name:panic&]Disabling lock debugging due to kernel taint
      [26364:syz-executor0]------------[cut here]------------
      
      After checking the source code, we've found there might be an out-of-bounds
      access to "config[len - 1]" array when the variable "len" is zero.
      Signed-off-by: NMacpaul Lin <macpaul@gmail.com>
      Acked-by: NDaniel Thompson <daniel.thompson@linaro.org>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      beb68a72
    • C
      tty: do not set TTY_IO_ERROR flag if console port · 41867ab9
      Chanho Park 提交于
      commit 2a48602615e0a2f563549c7d5c8d507f904cf96e upstream.
      
      Since Commit 761ed4a9 ('tty: serial_core: convert uart_close to use
      tty_port_close') and Commit 4dda864d ('tty: serial_core: Fix serial
      console crash on port shutdown), a serial port which is used as
      console can be stuck when logging out if there is a remained process.
      After logged out, agetty will try to grab the serial port but it will
      be failed because the previous process did not release the port
      correctly. To fix this, TTY_IO_ERROR bit should not be enabled of
      tty_port_close if the port is console port.
      
      Reproduce step:
      - Run background processes from serial console
      $ while true; do sleep 10; done &
      
      - Log out
      $ logout
      -> Stuck
      
      - Read journal log by journalctl | tail
      Jan 28 16:07:01 ubuntu systemd[1]: Stopped Serial Getty on ttyAMA0.
      Jan 28 16:07:01 ubuntu systemd[1]: Started Serial Getty on ttyAMA0.
      Jan 28 16:07:02 ubuntu agetty[1643]: /dev/ttyAMA0: not a tty
      
      Fixes: 761ed4a9 ("tty: serial_core: convert uart_close to use tty_port_close")
      Cc: Geert Uytterhoeven <geert+renesas@glider.be>
      Cc: Rob Herring <robh@kernel.org>
      Cc: Jiri Slaby <jslaby@suse.com>
      Signed-off-by: NChanho Park <parkch98@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      41867ab9
    • P
      tty: serial: 8250_mtk: always resume the device in probe. · ecbfb178
      Peter Shih 提交于
      commit 100bc3e2bebf95506da57cbdf5f26b25f6da4c81 upstream.
      
      serial8250_register_8250_port calls uart_config_port, which calls
      config_port on the port before it tries to power on the port. So we need
      the port to be on before calling serial8250_register_8250_port. Change
      the code to always do a runtime resume in probe before registering port,
      and always do a runtime suspend in remove.
      
      This basically reverts the change in commit 68e5fc4a ("tty: serial:
      8250_mtk: use pm_runtime callbacks for enabling"), but still use
      pm_runtime callbacks.
      
      Fixes: 68e5fc4a ("tty: serial: 8250_mtk: use pm_runtime callbacks for enabling")
      Signed-off-by: NPeter Shih <pihsun@chromium.org>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ecbfb178
    • J
      USB: serial: console: fix reported terminal settings · 9d9026af
      Johan Hovold 提交于
      commit f51ccf46217c28758b1f3b5bc0ccfc00eca658b2 upstream.
      
      The USB-serial console implementation has never reported the actual
      terminal settings used. Despite storing the corresponding cflags in its
      struct console, these were never honoured on later tty open() where the
      tty termios would be left initialised to the driver defaults.
      
      Unlike the serial console implementation, the USB-serial code calls
      subdriver open() already at console setup. While calling set_termios()
      and write() before open() looks like it could work for some USB-serial
      drivers, others definitely do not expect this, so modelling this after
      serial core is going to be intrusive, if at all possible.
      
      Instead, use a (renamed) tty helper to save the termios data used at
      console setup so that the tty termios reflects the actual terminal
      settings after a subsequent tty open().
      
      Note that the calls to tty_init_termios() (tty_driver_install()) and
      tty_save_termios() are serialised using the disconnect mutex.
      
      This specifically fixes a regression that was triggered by a recent
      change adding software flow control to the pl2303 driver: a getty trying
      to disable flow control while leaving the baud rate unchanged would now
      also set the baud rate to the driver default (prior to the flow-control
      change this had been a noop).
      
      Fixes: 7041d9c3 ("USB: serial: pl2303: add support for tx xon/xoff flow control")
      Cc: stable <stable@vger.kernel.org>	# 4.18
      Cc: Florian Zumbiehl <florz@florz.de>
      Reported-by: NJarkko Nikula <jarkko.nikula@linux.intel.com>
      Tested-by: NJarkko Nikula <jarkko.nikula@linux.intel.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NJohan Hovold <johan@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9d9026af
  4. 08 12月, 2018 2 次提交
  5. 01 12月, 2018 2 次提交
  6. 27 11月, 2018 1 次提交
  7. 21 11月, 2018 5 次提交
    • H
      termios, tty/tty_baudrate.c: fix buffer overrun · 8851e11f
      H. Peter Anvin 提交于
      commit 991a25194097006ec1e0d2e0814ff920e59e3465 upstream.
      
      On architectures with CBAUDEX == 0 (Alpha and PowerPC), the code in tty_baudrate.c does
      not do any limit checking on the tty_baudrate[] array, and in fact a
      buffer overrun is possible on both architectures. Add a limit check to
      prevent that situation.
      
      This will be followed by a much bigger cleanup/simplification patch.
      Signed-off-by: NH. Peter Anvin (Intel) <hpa@zytor.com>
      Requested-by: NCc: Johan Hovold <johan@kernel.org>
      Cc: Jiri Slaby <jslaby@suse.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Richard Henderson <rth@twiddle.net>
      Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
      Cc: Matt Turner <mattst88@gmail.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Kate Stewart <kstewart@linuxfoundation.org>
      Cc: Philippe Ombredanne <pombredanne@nexb.com>
      Cc: Eugene Syromiatnikov <esyr@redhat.com>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8851e11f
    • Y
      serial: sh-sci: Fix could not remove dev_attr_rx_fifo_timeout · d168af20
      Yoshihiro Shimoda 提交于
      commit 641a41dbba217ee5bd26abe6be77f8cead9cd00e upstream.
      
      This patch fixes an issue that the sci_remove() could not remove
      dev_attr_rx_fifo_timeout because uart_remove_one_port() set
      the port->port.type to PORT_UNKNOWN.
      Reported-by: NHiromitsu Yamasaki <hiromitsu.yamasaki.ym@renesas.com>
      Fixes: 5d23188a ("serial: sh-sci: make RX FIFO parameters tunable via sysfs")
      Cc: <stable@vger.kernel.org> # v4.11+
      Signed-off-by: NYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Reviewed-by: NUlrich Hecht <uli+renesas@fpond.eu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d168af20
    • P
      sc16is7xx: Fix for multi-channel stall · c50363de
      Phil Elwell 提交于
      [ Upstream commit 8344498721059754e09d30fe255a12dab8fb03ef ]
      
      The SC16IS752 is a dual-channel device. The two channels are largely
      independent, but the IRQ signals are wired together as an open-drain,
      active low signal which will be driven low while either of the
      channels requires attention, which can be for significant periods of
      time until operations complete and the interrupt can be acknowledged.
      In that respect it is should be treated as a true level-sensitive IRQ.
      
      The kernel, however, needs to be able to exit interrupt context in
      order to use I2C or SPI to access the device registers (which may
      involve sleeping).  Therefore the interrupt needs to be masked out or
      paused in some way.
      
      The usual way to manage sleeping from within an interrupt handler
      is to use a threaded interrupt handler - a regular interrupt routine
      does the minimum amount of work needed to triage the interrupt before
      waking the interrupt service thread. If the threaded IRQ is marked as
      IRQF_ONESHOT the kernel will automatically mask out the interrupt
      until the thread runs to completion. The sc16is7xx driver used to
      use a threaded IRQ, but a patch switched to using a kthread_worker
      in order to set realtime priorities on the handler thread and for
      other optimisations. The end result is non-threaded IRQ that
      schedules some work then returns IRQ_HANDLED, making the kernel
      think that all IRQ processing has completed.
      
      The work-around to prevent a constant stream of interrupts is to
      mark the interrupt as edge-sensitive rather than level-sensitive,
      but interpreting an active-low source as a falling-edge source
      requires care to prevent a total cessation of interrupts. Whereas
      an edge-triggering source will generate a new edge for every interrupt
      condition a level-triggering source will keep the signal at the
      interrupting level until it no longer requires attention; in other
      words, the host won't see another edge until all interrupt conditions
      are cleared. It is therefore vital that the interrupt handler does not
      exit with an outstanding interrupt condition, otherwise the kernel
      will not receive another interrupt unless some other operation causes
      the interrupt state on the device to be cleared.
      
      The existing sc16is7xx driver has a very simple interrupt "thread"
      (kthread_work job) that processes interrupts on each channel in turn
      until there are no more. If both channels are active and the first
      channel starts interrupting while the handler for the second channel
      is running then it will not be detected and an IRQ stall ensues. This
      could be handled easily if there was a shared IRQ status register, or
      a convenient way to determine if the IRQ had been deasserted for any
      length of time, but both appear to be lacking.
      
      Avoid this problem (or at least make it much less likely to happen)
      by reducing the granularity of per-channel interrupt processing
      to one condition per iteration, only exiting the overall loop when
      both channels are no longer interrupting.
      Signed-off-by: NPhil Elwell <phil@raspberrypi.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c50363de
    • J
      serial: 8250_of: Fix for lack of interrupt support · ff8bf852
      John Garry 提交于
      [ Upstream commit a27d938251ef40c43db81af16fc26b2cec181d4d ]
      
      In commit c58caaab ("serial: 8250: of: Defer probe on missing IRQ"), a
      check was added for the UART driver being probed prior to the parent IRQ
      controller.
      
      Unfortunately this breaks certain boards which have no interrupt support,
      like Huawei D03.
      
      Indeed, the 8250 DT bindings state that interrupts should be supported -
      not must.
      
      To fix, switch from irq_of_parse_and_map() to of_irq_get(), which
      does relay whether the IRQ host controller domain is not ready, i.e.
      defer probe, instead of assuming it.
      
      Fixes: c58caaab ("serial: 8250: of: Defer probe on missing IRQ")
      Signed-off-by: NJohn Garry <john.garry@huawei.com>
      Reviewed-by: NRob Herring <robh@kernel.org>
      Reviewed-by: NAlexander Sverdlin <alexander.sverdlin@nokia.com>
      Tested-by: NAlexander Sverdlin <alexander.sverdlin@nokia.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ff8bf852
    • M
      tty: check name length in tty_find_polling_driver() · 7ecd146b
      Miles Chen 提交于
      [ Upstream commit 33a1a7be198657c8ca26ad406c4d2a89b7162bcc ]
      
      The issue is found by a fuzzing test.
      If tty_find_polling_driver() recevies an incorrect input such as
      ',,' or '0b', the len becomes 0 and strncmp() always return 0.
      In this case, a null p->ops->poll_init() is called and it causes a kernel
      panic.
      
      Fix this by checking name length against zero in tty_find_polling_driver().
      
      $echo ,, > /sys/module/kgdboc/parameters/kgdboc
      [   20.804451] WARNING: CPU: 1 PID: 104 at drivers/tty/serial/serial_core.c:457
      uart_get_baud_rate+0xe8/0x190
      [   20.804917] Modules linked in:
      [   20.805317] CPU: 1 PID: 104 Comm: sh Not tainted 4.19.0-rc7ajb #8
      [   20.805469] Hardware name: linux,dummy-virt (DT)
      [   20.805732] pstate: 20000005 (nzCv daif -PAN -UAO)
      [   20.805895] pc : uart_get_baud_rate+0xe8/0x190
      [   20.806042] lr : uart_get_baud_rate+0xc0/0x190
      [   20.806476] sp : ffffffc06acff940
      [   20.806676] x29: ffffffc06acff940 x28: 0000000000002580
      [   20.806977] x27: 0000000000009600 x26: 0000000000009600
      [   20.807231] x25: ffffffc06acffad0 x24: 00000000ffffeff0
      [   20.807576] x23: 0000000000000001 x22: 0000000000000000
      [   20.807807] x21: 0000000000000001 x20: 0000000000000000
      [   20.808049] x19: ffffffc06acffac8 x18: 0000000000000000
      [   20.808277] x17: 0000000000000000 x16: 0000000000000000
      [   20.808520] x15: ffffffffffffffff x14: ffffffff00000000
      [   20.808757] x13: ffffffffffffffff x12: 0000000000000001
      [   20.809011] x11: 0101010101010101 x10: ffffff880d59ff5f
      [   20.809292] x9 : ffffff880d59ff5e x8 : ffffffc06acffaf3
      [   20.809549] x7 : 0000000000000000 x6 : ffffff880d59ff5f
      [   20.809803] x5 : 0000000080008001 x4 : 0000000000000003
      [   20.810056] x3 : ffffff900853e6b4 x2 : dfffff9000000000
      [   20.810693] x1 : ffffffc06acffad0 x0 : 0000000000000cb0
      [   20.811005] Call trace:
      [   20.811214]  uart_get_baud_rate+0xe8/0x190
      [   20.811479]  serial8250_do_set_termios+0xe0/0x6f4
      [   20.811719]  serial8250_set_termios+0x48/0x54
      [   20.811928]  uart_set_options+0x138/0x1bc
      [   20.812129]  uart_poll_init+0x114/0x16c
      [   20.812330]  tty_find_polling_driver+0x158/0x200
      [   20.812545]  configure_kgdboc+0xbc/0x1bc
      [   20.812745]  param_set_kgdboc_var+0xb8/0x150
      [   20.812960]  param_attr_store+0xbc/0x150
      [   20.813160]  module_attr_store+0x40/0x58
      [   20.813364]  sysfs_kf_write+0x8c/0xa8
      [   20.813563]  kernfs_fop_write+0x154/0x290
      [   20.813764]  vfs_write+0xf0/0x278
      [   20.813951]  __arm64_sys_write+0x84/0xf4
      [   20.814400]  el0_svc_common+0xf4/0x1dc
      [   20.814616]  el0_svc_handler+0x98/0xbc
      [   20.814804]  el0_svc+0x8/0xc
      [   20.822005] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
      [   20.826913] Mem abort info:
      [   20.827103]   ESR = 0x84000006
      [   20.827352]   Exception class = IABT (current EL), IL = 16 bits
      [   20.827655]   SET = 0, FnV = 0
      [   20.827855]   EA = 0, S1PTW = 0
      [   20.828135] user pgtable: 4k pages, 39-bit VAs, pgdp = (____ptrval____)
      [   20.828484] [0000000000000000] pgd=00000000aadee003, pud=00000000aadee003, pmd=0000000000000000
      [   20.829195] Internal error: Oops: 84000006 [#1] SMP
      [   20.829564] Modules linked in:
      [   20.829890] CPU: 1 PID: 104 Comm: sh Tainted: G        W         4.19.0-rc7ajb #8
      [   20.830545] Hardware name: linux,dummy-virt (DT)
      [   20.830829] pstate: 60000085 (nZCv daIf -PAN -UAO)
      [   20.831174] pc :           (null)
      [   20.831457] lr : serial8250_do_set_termios+0x358/0x6f4
      [   20.831727] sp : ffffffc06acff9b0
      [   20.831936] x29: ffffffc06acff9b0 x28: ffffff9008d7c000
      [   20.832267] x27: ffffff900969e16f x26: 0000000000000000
      [   20.832589] x25: ffffff900969dfb0 x24: 0000000000000000
      [   20.832906] x23: ffffffc06acffad0 x22: ffffff900969e160
      [   20.833232] x21: 0000000000000000 x20: ffffffc06acffac8
      [   20.833559] x19: ffffff900969df90 x18: 0000000000000000
      [   20.833878] x17: 0000000000000000 x16: 0000000000000000
      [   20.834491] x15: ffffffffffffffff x14: ffffffff00000000
      [   20.834821] x13: ffffffffffffffff x12: 0000000000000001
      [   20.835143] x11: 0101010101010101 x10: ffffff880d59ff5f
      [   20.835467] x9 : ffffff880d59ff5e x8 : ffffffc06acffaf3
      [   20.835790] x7 : 0000000000000000 x6 : ffffff880d59ff5f
      [   20.836111] x5 : c06419717c314100 x4 : 0000000000000007
      [   20.836419] x3 : 0000000000000000 x2 : 0000000000000000
      [   20.836732] x1 : 0000000000000001 x0 : ffffff900969df90
      [   20.837100] Process sh (pid: 104, stack limit = 0x(____ptrval____))
      [   20.837396] Call trace:
      [   20.837566]            (null)
      [   20.837816]  serial8250_set_termios+0x48/0x54
      [   20.838089]  uart_set_options+0x138/0x1bc
      [   20.838570]  uart_poll_init+0x114/0x16c
      [   20.838834]  tty_find_polling_driver+0x158/0x200
      [   20.839119]  configure_kgdboc+0xbc/0x1bc
      [   20.839380]  param_set_kgdboc_var+0xb8/0x150
      [   20.839658]  param_attr_store+0xbc/0x150
      [   20.839920]  module_attr_store+0x40/0x58
      [   20.840183]  sysfs_kf_write+0x8c/0xa8
      [   20.840183]  sysfs_kf_write+0x8c/0xa8
      [   20.840440]  kernfs_fop_write+0x154/0x290
      [   20.840702]  vfs_write+0xf0/0x278
      [   20.840942]  __arm64_sys_write+0x84/0xf4
      [   20.841209]  el0_svc_common+0xf4/0x1dc
      [   20.841471]  el0_svc_handler+0x98/0xbc
      [   20.841713]  el0_svc+0x8/0xc
      [   20.842057] Code: bad PC value
      [   20.842764] ---[ end trace a8835d7de79aaadf ]---
      [   20.843134] Kernel panic - not syncing: Fatal exception
      [   20.843515] SMP: stopping secondary CPUs
      [   20.844289] Kernel Offset: disabled
      [   20.844634] CPU features: 0x0,21806002
      [   20.844857] Memory Limit: none
      [   20.845172] ---[ end Kernel panic - not syncing: Fatal exception ]---
      Signed-off-by: NMiles Chen <miles.chen@mediatek.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7ecd146b
  8. 14 11月, 2018 2 次提交
    • M
      vt: fix broken display when running aptitude · 13794b24
      Mikulas Patocka 提交于
      commit 943210ba807ec50aafa2fa7b13bd6d36a478969b upstream.
      
      If you run aptitude on framebuffer console, the display is corrupted. The
      corruption is caused by the commit d8ae7242. The patch adds "offset" to
      "start" when calling scr_memsetw, but it forgets to do the same addition
      on a subsequent call to do_update_region.
      Signed-off-by: NMikulas Patocka <mpatocka@redhat.com>
      Fixes: d8ae7242 ("vt: preserve unicode values corresponding to screen characters")
      Reviewed-by: NNicolas Pitre <nico@linaro.org>
      Cc: stable@vger.kernel.org	# 4.19
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      13794b24
    • H
      kgdboc: Passing ekgdboc to command line causes panic · df7ada33
      He Zhe 提交于
      commit 1bd54d851f50dea6af30c3e6ff4f3e9aab5558f9 upstream.
      
      kgdboc_option_setup does not check input argument before passing it
      to strlen. The argument would be a NULL pointer if "ekgdboc", without
      its value, is set in command line and thus cause the following panic.
      
      PANIC: early exception 0xe3 IP 10:ffffffff8fbbb620 error 0 cr2 0x0
      [    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.18-rc8+ #1
      [    0.000000] RIP: 0010:strlen+0x0/0x20
      ...
      [    0.000000] Call Trace
      [    0.000000]  ? kgdboc_option_setup+0x9/0xa0
      [    0.000000]  ? kgdboc_early_init+0x6/0x1b
      [    0.000000]  ? do_early_param+0x4d/0x82
      [    0.000000]  ? parse_args+0x212/0x330
      [    0.000000]  ? rdinit_setup+0x26/0x26
      [    0.000000]  ? parse_early_options+0x20/0x23
      [    0.000000]  ? rdinit_setup+0x26/0x26
      [    0.000000]  ? parse_early_param+0x2d/0x39
      [    0.000000]  ? setup_arch+0x2f7/0xbf4
      [    0.000000]  ? start_kernel+0x5e/0x4c2
      [    0.000000]  ? load_ucode_bsp+0x113/0x12f
      [    0.000000]  ? secondary_startup_64+0xa5/0xb0
      
      This patch adds a check to prevent the panic.
      
      Cc: stable@vger.kernel.org
      Cc: jason.wessel@windriver.com
      Cc: gregkh@linuxfoundation.org
      Cc: jslaby@suse.com
      Signed-off-by: NHe Zhe <zhe.he@windriver.com>
      Reviewed-by: NDaniel Thompson <daniel.thompson@linaro.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      df7ada33
  9. 06 10月, 2018 1 次提交
    • K
      treewide: Replace more open-coded allocation size multiplications · 329e0989
      Kees Cook 提交于
      As done treewide earlier, this catches several more open-coded
      allocation size calculations that were added to the kernel during the
      merge window. This performs the following mechanical transformations
      using Coccinelle:
      
      	kvmalloc(a * b, ...) -> kvmalloc_array(a, b, ...)
      	kvzalloc(a * b, ...) -> kvcalloc(a, b, ...)
      	devm_kzalloc(..., a * b, ...) -> devm_kcalloc(..., a, b, ...)
      Signed-off-by: NKees Cook <keescook@chromium.org>
      329e0989
  10. 03 10月, 2018 3 次提交
    • G
      Revert "serial: sh-sci: Allow for compressed SCIF address" · 5b162cc4
      Geert Uytterhoeven 提交于
      This reverts commit 2d4dd0da.
      
      This broke earlycon on all Renesas ARM platforms using a SCIF port for the
      serial console (R-Car, RZ/A1, RZ/G1, RZ/G2 SoCs), due to an incorrect value
      of port->regshift.
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Acked-by: NChris Brandt <chris.brandt@renesas.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5b162cc4
    • G
    • G
      Revert "serial: 8250_dw: Fix runtime PM handling" · beeeac43
      Guenter Roeck 提交于
      This reverts commit d76c7438.
      
      While commit d76c7438 ("serial: 8250_dw: Fix runtime PM handling")
      fixes runtime PM handling when using kgdb, it introduces a traceback for
      everyone else.
      
      BUG: sleeping function called from invalid context at
      	/mnt/host/source/src/third_party/kernel/next/drivers/base/power/runtime.c:1034
      in_atomic(): 1, irqs_disabled(): 1, pid: 1, name: swapper/0
      7 locks held by swapper/0/1:
       #0: 000000005ec5bc72 (&dev->mutex){....}, at: __driver_attach+0xb5/0x12b
       #1: 000000005d5fa9e5 (&dev->mutex){....}, at: __device_attach+0x3e/0x15b
       #2: 0000000047e93286 (serial_mutex){+.+.}, at: serial8250_register_8250_port+0x51/0x8bb
       #3: 000000003b328f07 (port_mutex){+.+.}, at: uart_add_one_port+0xab/0x8b0
       #4: 00000000fa313d4d (&port->mutex){+.+.}, at: uart_add_one_port+0xcc/0x8b0
       #5: 00000000090983ca (console_lock){+.+.}, at: vprintk_emit+0xdb/0x217
       #6: 00000000c743e583 (console_owner){-...}, at: console_unlock+0x211/0x60f
      irq event stamp: 735222
      __down_trylock_console_sem+0x4a/0x84
      console_unlock+0x338/0x60f
      __do_softirq+0x4a4/0x50d
      irq_exit+0x64/0xe2
      CPU: 2 PID: 1 Comm: swapper/0 Not tainted 4.19.0-rc5 #6
      Hardware name: Google Caroline/Caroline, BIOS Google_Caroline.7820.286.0 03/15/2017
      Call Trace:
       dump_stack+0x7d/0xbd
       ___might_sleep+0x238/0x259
       __pm_runtime_resume+0x4e/0xa4
       ? serial8250_rpm_get+0x2e/0x44
       serial8250_console_write+0x44/0x301
       ? lock_acquire+0x1b8/0x1fa
       console_unlock+0x577/0x60f
       vprintk_emit+0x1f0/0x217
       printk+0x52/0x6e
       register_console+0x43b/0x524
       uart_add_one_port+0x672/0x8b0
       ? set_io_from_upio+0x150/0x162
       serial8250_register_8250_port+0x825/0x8bb
       dw8250_probe+0x80c/0x8b0
       ? dw8250_serial_inq+0x8e/0x8e
       ? dw8250_check_lcr+0x108/0x108
       ? dw8250_runtime_resume+0x5b/0x5b
       ? dw8250_serial_outq+0xa1/0xa1
       ? dw8250_remove+0x115/0x115
       platform_drv_probe+0x76/0xc5
       really_probe+0x1f1/0x3ee
       ? driver_allows_async_probing+0x5d/0x5d
       driver_probe_device+0xd6/0x112
       ? driver_allows_async_probing+0x5d/0x5d
       bus_for_each_drv+0xbe/0xe5
       __device_attach+0xdd/0x15b
       bus_probe_device+0x5a/0x10b
       device_add+0x501/0x894
       ? _raw_write_unlock+0x27/0x3a
       platform_device_add+0x224/0x2b7
       mfd_add_device+0x718/0x75b
       ? __kmalloc+0x144/0x16a
       ? mfd_add_devices+0x38/0xdb
       mfd_add_devices+0x9b/0xdb
       intel_lpss_probe+0x7d4/0x8ee
       intel_lpss_pci_probe+0xac/0xd4
       pci_device_probe+0x101/0x18e
      ...
      
      Revert the offending patch until a more comprehensive solution
      is available.
      
      Cc: Tony Lindgren <tony@atomide.com>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Phil Edworthy <phil.edworthy@renesas.com>
      Fixes: d76c7438 ("serial: 8250_dw: Fix runtime PM handling")
      Signed-off-by: NGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      beeeac43
  11. 20 9月, 2018 1 次提交
  12. 18 9月, 2018 5 次提交
  13. 11 9月, 2018 3 次提交
    • N
      tty: hvc: hvc_write() fix break condition · 7f2bf784
      Nicholas Piggin 提交于
      Commit 550ddadc ("tty: hvc: hvc_write() may sleep") broke the
      termination condition in case the driver stops accepting characters.
      This can result in unnecessary polling of the busy driver.
      
      Restore it by testing the hvc_push return code.
      Tested-by: NMatteo Croce <mcroce@redhat.com>
      Tested-by: NJason Gunthorpe <jgg@mellanox.com>
      Tested-by: NLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: NNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7f2bf784
    • N
      tty: hvc: hvc_poll() fix read loop batching · 68b2fc71
      Nicholas Piggin 提交于
      Commit ec97eaad ("tty: hvc: hvc_poll() break hv read loop")
      removes get_chars batching entirely, which slows down large console
      operations like paste -- virtio console "feels worse than a 9600 baud
      serial line," reports Matteo.
      
      This adds back batching in a more latency friendly way. If the caller
      can sleep then we try to fill the entire flip buffer, releasing the
      lock and scheduling between each iteration. If it can not sleep, then
      batches are limited to 128 bytes. Matteo confirms this fixes the
      performance problem.
      
      Latency testing the powerpc OPAL console with OpenBMC UART with a
      large paste shows about 0.25ms latency, which seems reasonable. 10ms
      latencies were typical for this case before the latency breaking work,
      so we still see most of the benefit.
      
        kopald-1204    0d.h.    5us : hvc_poll <-hvc_handle_interrupt
        kopald-1204    0d.h.    5us : __hvc_poll <-hvc_handle_interrupt
        kopald-1204    0d.h.    5us : _raw_spin_lock_irqsave <-__hvc_poll
        kopald-1204    0d.h.    5us : tty_port_tty_get <-__hvc_poll
        kopald-1204    0d.h.    6us : _raw_spin_lock_irqsave <-tty_port_tty_get
        kopald-1204    0d.h.    6us : _raw_spin_unlock_irqrestore <-tty_port_tty_get
        kopald-1204    0d.h.    6us : tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.    7us : __tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.    7us+: opal_get_chars <-__hvc_poll
        kopald-1204    0d.h.   36us : tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.   36us : __tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.   36us+: opal_get_chars <-__hvc_poll
        kopald-1204    0d.h.   65us : tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.   65us : __tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.   66us+: opal_get_chars <-__hvc_poll
        kopald-1204    0d.h.   94us : tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.   95us : __tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.   95us+: opal_get_chars <-__hvc_poll
        kopald-1204    0d.h.  124us : tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.  124us : __tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.  125us+: opal_get_chars <-__hvc_poll
        kopald-1204    0d.h.  154us : tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.  154us : __tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.  154us+: opal_get_chars <-__hvc_poll
        kopald-1204    0d.h.  183us : tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.  184us : __tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.  184us+: opal_get_chars <-__hvc_poll
        kopald-1204    0d.h.  213us : tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.  213us : __tty_buffer_request_room <-__hvc_poll
        kopald-1204    0d.h.  213us+: opal_get_chars <-__hvc_poll
        kopald-1204    0d.h.  242us : _raw_spin_unlock_irqrestore <-__hvc_poll
        kopald-1204    0d.h.  242us : tty_flip_buffer_push <-__hvc_poll
        kopald-1204    0d.h.  243us : queue_work_on <-tty_flip_buffer_push
        kopald-1204    0d.h.  243us : tty_kref_put <-__hvc_poll
        kopald-1204    0d.h.  243us : hvc_kick <-hvc_handle_interrupt
        kopald-1204    0d.h.  243us : wake_up_process <-hvc_kick
        kopald-1204    0d.h.  244us : try_to_wake_up <-hvc_kick
        kopald-1204    0d.h.  244us : _raw_spin_lock_irqsave <-try_to_wake_up
        kopald-1204    0d.h.  244us : _raw_spin_unlock_irqrestore <-try_to_wake_up
      Reported-by: NMatteo Croce <mcroce@redhat.com>
      Tested-by: NMatteo Croce <mcroce@redhat.com>
      Tested-by: NJason Gunthorpe <jgg@mellanox.com>
      Tested-by: NLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: NNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      68b2fc71
    • N
      tty: hvc: hvc_poll() fix read loop hang · 6e7f6b82
      Nicholas Piggin 提交于
      Commit ec97eaad ("tty: hvc: hvc_poll() break hv read loop") causes
      the virtio console to hang at times (e.g., if you paste a bunch of
      characters to it.
      
      The reason is that get_chars must return 0 before we can be sure the
      driver will kick or poll input again, but this change only scheduled a
      poll if get_chars had returned a full count. Change this to poll on
      any > 0 count.
      Reported-by: NMatteo Croce <mcroce@redhat.com>
      Reported-by: NJason Gunthorpe <jgg@mellanox.com>
      Tested-by: NMatteo Croce <mcroce@redhat.com>
      Tested-by: NJason Gunthorpe <jgg@mellanox.com>
      Tested-by: NLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: NNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6e7f6b82
  14. 20 8月, 2018 1 次提交
  15. 13 8月, 2018 1 次提交
    • M
      tty: serial: 8250: Revert NXP SC16C2552 workaround · 47ac7666
      Mark 提交于
      Revert commit ecb988a3: tty: serial:
      8250: 8250_core: NXP SC16C2552 workaround
      
      The above commit causes userland application to no longer write
      correctly its first write to a dumb terminal connected to /dev/ttyS0.
      This commit seems to be the culprit. It's as though the TX FIFO is being
      reset during that write. What should be displayed is:
      
      PSW 80000000 INST 00000000                           HALT
      //
      
      What is displayed is some variation of:
      
      T 00000000           HAL//
      
      Reverting this commit via this patch fixes my problem.
      Signed-off-by: NMark Hounschell <dmarkh@cfl.rr.com>
      Fixes: ecb988a3 ("tty: serial: 8250: 8250_core: NXP SC16C2552 workaround")
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      47ac7666
  16. 02 8月, 2018 1 次提交