drm-sun4i-implement-drm_driver-lastclose-to-restore-fbdev-console.patch
ib-addr-fix-setting-source-address-in-addr6_resolve.patch
tty-improve-tty_insert_flip_char-fast-path.patch
+tty-improve-tty_insert_flip_char-slow-path.patch
+tty-fix-__tty_insert_flip_char-regression.patch
pinctrl-amd-save-pin-registers-over-suspend-resume.patch
--- /dev/null
+From 8a5a90a2a477b86a3dc2eaa5a706db9bfdd647ca Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Wed, 2 Aug 2017 13:11:39 +0200
+Subject: tty: fix __tty_insert_flip_char regression
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit 8a5a90a2a477b86a3dc2eaa5a706db9bfdd647ca upstream.
+
+Sergey noticed a small but fatal mistake in __tty_insert_flip_char,
+leading to an oops in an interrupt handler when using any serial
+port.
+
+The problem is that I accidentally took the tty_buffer pointer
+before calling __tty_buffer_request_room(), which replaces the
+buffer. This moves the pointer lookup to the right place after
+allocating the new buffer space.
+
+Fixes: 979990c62848 ("tty: improve tty_insert_flip_char() fast path")
+Reported-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
+Tested-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/tty_buffer.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/tty/tty_buffer.c
++++ b/drivers/tty/tty_buffer.c
+@@ -372,12 +372,13 @@ EXPORT_SYMBOL(tty_insert_flip_string_fla
+ */
+ int __tty_insert_flip_char(struct tty_port *port, unsigned char ch, char flag)
+ {
+- struct tty_buffer *tb = port->buf.tail;
++ struct tty_buffer *tb;
+ int flags = (flag == TTY_NORMAL) ? TTYB_NORMAL : 0;
+
+ if (!__tty_buffer_request_room(port, 1, flags))
+ return 0;
+
++ tb = port->buf.tail;
+ if (~tb->flags & TTYB_NORMAL)
+ *flag_buf_ptr(tb, tb->used) = flag;
+ *char_buf_ptr(tb, tb->used++) = ch;
Fixes: c420f167db8c ("kasan: enable stack instrumentation")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/tty/tty_buffer.c | 24 ++++++++++++++++++++++++
--- /dev/null
+From 065ea0a7afd64d6cf3464bdd1d8cd227527e2045 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Tue, 20 Jun 2017 23:10:42 +0200
+Subject: tty: improve tty_insert_flip_char() slow path
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit 065ea0a7afd64d6cf3464bdd1d8cd227527e2045 upstream.
+
+While working on improving the fast path of tty_insert_flip_char(),
+I noticed that by calling tty_buffer_request_room(), we needlessly
+move to the separate flag buffer mode for the tty, even when all
+characters use TTY_NORMAL as the flag.
+
+This changes the code to call __tty_buffer_request_room() with the
+correct flag, which will then allocate a regular buffer when it rounds
+out of space but no special flags have been used. I'm guessing that
+this is the behavior that Peter Hurley intended when he introduced
+the compacted flip buffers.
+
+Fixes: acc0f67f307f ("tty: Halve flip buffer GFP_ATOMIC memory consumption")
+Cc: Peter Hurley <peter@hurleysoftware.com>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/tty_buffer.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/tty/tty_buffer.c
++++ b/drivers/tty/tty_buffer.c
+@@ -375,10 +375,11 @@ int __tty_insert_flip_char(struct tty_po
+ struct tty_buffer *tb = port->buf.tail;
+ int flags = (flag == TTY_NORMAL) ? TTYB_NORMAL : 0;
+
+- if (!tty_buffer_request_room(port, 1))
++ if (!__tty_buffer_request_room(port, 1, flags))
+ return 0;
+
+- *flag_buf_ptr(tb, tb->used) = flag;
++ if (~tb->flags & TTYB_NORMAL)
++ *flag_buf_ptr(tb, tb->used) = flag;
+ *char_buf_ptr(tb, tb->used++) = ch;
+
+ return 1;