From: Greg Kroah-Hartman Date: Thu, 21 Sep 2017 11:37:54 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v3.18.72~30 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6d007f3fa81a3a54a86396ed1750ae154f20064d;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: tty-fix-__tty_insert_flip_char-regression.patch tty-improve-tty_insert_flip_char-slow-path.patch --- diff --git a/queue-4.9/series b/queue-4.9/series index 608293441cb..2fa533bb5a7 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -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 index 00000000000..87e0ac76a80 --- /dev/null +++ b/queue-4.9/tty-fix-__tty_insert_flip_char-regression.patch @@ -0,0 +1,45 @@ +From 8a5a90a2a477b86a3dc2eaa5a706db9bfdd647ca Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Wed, 2 Aug 2017 13:11:39 +0200 +Subject: tty: fix __tty_insert_flip_char regression + +From: Arnd Bergmann + +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 +Tested-by: Sergey Senozhatsky +Signed-off-by: Arnd Bergmann +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-4.9/tty-improve-tty_insert_flip_char-fast-path.patch b/queue-4.9/tty-improve-tty_insert_flip_char-fast-path.patch index edf6d338af5..6b8ef80a7e5 100644 --- a/queue-4.9/tty-improve-tty_insert_flip_char-fast-path.patch +++ b/queue-4.9/tty-improve-tty_insert_flip_char-fast-path.patch @@ -33,7 +33,6 @@ the stack sanitizer in the kernel. Fixes: c420f167db8c ("kasan: enable stack instrumentation") Signed-off-by: Arnd Bergmann Signed-off-by: Greg Kroah-Hartman -Signed-off-by: Greg Kroah-Hartman --- 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 index 00000000000..42688bdd07f --- /dev/null +++ b/queue-4.9/tty-improve-tty_insert_flip_char-slow-path.patch @@ -0,0 +1,45 @@ +From 065ea0a7afd64d6cf3464bdd1d8cd227527e2045 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 20 Jun 2017 23:10:42 +0200 +Subject: tty: improve tty_insert_flip_char() slow path + +From: Arnd Bergmann + +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 +Signed-off-by: Arnd Bergmann +Signed-off-by: Greg Kroah-Hartman + +--- + 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;