]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 21 Sep 2017 11:37:54 +0000 (13:37 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 21 Sep 2017 11:37:54 +0000 (13:37 +0200)
added patches:
tty-fix-__tty_insert_flip_char-regression.patch
tty-improve-tty_insert_flip_char-slow-path.patch

queue-4.9/series
queue-4.9/tty-fix-__tty_insert_flip_char-regression.patch [new file with mode: 0644]
queue-4.9/tty-improve-tty_insert_flip_char-fast-path.patch
queue-4.9/tty-improve-tty_insert_flip_char-slow-path.patch [new file with mode: 0644]

index 608293441cb17fa9f4690388291fcf86965574fa..2fa533bb5a7e4b39ec1f2efc4749b5b3316f8e53 100644 (file)
@@ -6,4 +6,6 @@ ib-qib-hfi1-avoid-flow-control-testing-for-rdma-write-operation.patch
 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
diff --git a/queue-4.9/tty-fix-__tty_insert_flip_char-regression.patch b/queue-4.9/tty-fix-__tty_insert_flip_char-regression.patch
new file mode 100644 (file)
index 0000000..87e0ac7
--- /dev/null
@@ -0,0 +1,45 @@
+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;
index edf6d338af5d1a28129c778bd6660298aa8ce59d..6b8ef80a7e55682cbcebe871b0369cac75b508ac 100644 (file)
@@ -33,7 +33,6 @@ the stack sanitizer in the kernel.
 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 ++++++++++++++++++++++++
diff --git a/queue-4.9/tty-improve-tty_insert_flip_char-slow-path.patch b/queue-4.9/tty-improve-tty_insert_flip_char-slow-path.patch
new file mode 100644 (file)
index 0000000..42688bd
--- /dev/null
@@ -0,0 +1,45 @@
+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;