From: Greg Kroah-Hartman Date: Mon, 8 May 2017 13:16:35 +0000 (+0200) Subject: 3.18-stable patches X-Git-Tag: v4.4.68~44 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7e0dd8acc4db6930ae3ec5c94642741a12fa6f7;p=thirdparty%2Fkernel%2Fstable-queue.git 3.18-stable patches added patches: mtd-cfi-reduce-stack-size.patch tty-remove-platform_sysrq_reset_seq.patch --- diff --git a/queue-3.18/mtd-cfi-reduce-stack-size.patch b/queue-3.18/mtd-cfi-reduce-stack-size.patch new file mode 100644 index 00000000000..a3bcdf260f6 --- /dev/null +++ b/queue-3.18/mtd-cfi-reduce-stack-size.patch @@ -0,0 +1,51 @@ +From d09957fbb4d0b059b3176b510540df69048ad170 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 10 Mar 2015 17:48:37 +0100 +Subject: mtd: cfi: reduce stack size + +From: Arnd Bergmann + +commit d09957fbb4d0b059b3176b510540df69048ad170 upstream. + +The cfi_staa_write_buffers function uses a large amount of kernel stack +whenever CONFIG_MTD_MAP_BANK_WIDTH_32 is set, and that results in a +warning on ARM allmodconfig builds: + +drivers/mtd/chips/cfi_cmdset_0020.c: In function 'cfi_staa_write_buffers': +drivers/mtd/chips/cfi_cmdset_0020.c:651:1: warning: the frame size of 1208 bytes is larger than 1024 bytes [-Wframe-larger-than=] + +It turns out that this is largely a result of a suboptimal implementation +of map_word_andequal(). Replacing this function with a straightforward +one reduces the stack size in this function by exactly 200 bytes, +shrinks the .text segment for this file from 27648 bytes to 26608 bytes, +and makes the warning go away. + +Signed-off-by: Arnd Bergmann +Signed-off-by: Brian Norris +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/mtd/map.h | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +--- a/include/linux/mtd/map.h ++++ b/include/linux/mtd/map.h +@@ -309,7 +309,17 @@ static inline map_word map_word_or(struc + return r; + } + +-#define map_word_andequal(m, a, b, z) map_word_equal(m, z, map_word_and(m, a, b)) ++static inline int map_word_andequal(struct map_info *map, map_word val1, map_word val2, map_word val3) ++{ ++ int i; ++ ++ for (i = 0; i < map_words(map); i++) { ++ if ((val1.x[i] & val2.x[i]) != val3.x[i]) ++ return 0; ++ } ++ ++ return 1; ++} + + static inline int map_word_bitsset(struct map_info *map, map_word val1, map_word val2) + { diff --git a/queue-3.18/series b/queue-3.18/series index 206ed5f901d..dcebcaf7dd5 100644 --- a/queue-3.18/series +++ b/queue-3.18/series @@ -1 +1,3 @@ 9p-fix-a-potential-acl-leak.patch +tty-remove-platform_sysrq_reset_seq.patch +mtd-cfi-reduce-stack-size.patch diff --git a/queue-3.18/tty-remove-platform_sysrq_reset_seq.patch b/queue-3.18/tty-remove-platform_sysrq_reset_seq.patch new file mode 100644 index 00000000000..cb5ae76234c --- /dev/null +++ b/queue-3.18/tty-remove-platform_sysrq_reset_seq.patch @@ -0,0 +1,81 @@ +From ffb6e0c9a0572f8e5f8e9337a1b40ac2ec1493a1 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 26 May 2015 14:45:29 -0700 +Subject: tty: remove platform_sysrq_reset_seq + +From: Arnd Bergmann + +commit ffb6e0c9a0572f8e5f8e9337a1b40ac2ec1493a1 upstream. + +The platform_sysrq_reset_seq code was intended as a way for an embedded +platform to provide its own sysrq sequence at compile time. After over two +years, nobody has started using it in an upstream kernel, and the platforms +that were interested in it have moved on to devicetree, which can be used +to configure the sequence without requiring kernel changes. The method is +also incompatible with the way that most architectures build support for +multiple platforms into a single kernel. + +Now the code is producing warnings when built with gcc-5.1: + +drivers/tty/sysrq.c: In function 'sysrq_init': +drivers/tty/sysrq.c:959:33: warning: array subscript is above array bounds [-Warray-bounds] + key = platform_sysrq_reset_seq[i]; + +We could fix this, but it seems unlikely that it will ever be used, so +let's just remove the code instead. We still have the option to pass the +sequence either in DT, using the kernel command line, or using the +/sys/module/sysrq/parameters/reset_seq file. + +Fixes: 154b7a489a ("Input: sysrq - allow specifying alternate reset sequence") +Signed-off-by: Arnd Bergmann +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/sysrq.c | 19 +------------------ + 1 file changed, 1 insertion(+), 18 deletions(-) + +--- a/drivers/tty/sysrq.c ++++ b/drivers/tty/sysrq.c +@@ -55,9 +55,6 @@ + static int __read_mostly sysrq_enabled = CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE; + static bool __read_mostly sysrq_always_enabled; + +-unsigned short platform_sysrq_reset_seq[] __weak = { KEY_RESERVED }; +-int sysrq_reset_downtime_ms __weak; +- + static bool sysrq_on(void) + { + return sysrq_enabled || sysrq_always_enabled; +@@ -567,6 +564,7 @@ void handle_sysrq(int key) + EXPORT_SYMBOL(handle_sysrq); + + #ifdef CONFIG_INPUT ++static int sysrq_reset_downtime_ms; + + /* Simple translation table for the SysRq keys */ + static const unsigned char sysrq_xlate[KEY_CNT] = +@@ -947,23 +945,8 @@ static bool sysrq_handler_registered; + + static inline void sysrq_register_handler(void) + { +- unsigned short key; + int error; +- int i; +- +- /* First check if a __weak interface was instantiated. */ +- for (i = 0; i < ARRAY_SIZE(sysrq_reset_seq); i++) { +- key = platform_sysrq_reset_seq[i]; +- if (key == KEY_RESERVED || key > KEY_MAX) +- break; +- +- sysrq_reset_seq[sysrq_reset_seq_len++] = key; +- } + +- /* +- * DT configuration takes precedence over anything that would +- * have been defined via the __weak interface. +- */ + sysrq_of_get_keyreset_config(); + + error = input_register_handler(&sysrq_handler);