From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752642AbdFNVT4 (ORCPT ); Wed, 14 Jun 2017 17:19:56 -0400 Received: from mout.kundenserver.de ([212.227.126.131]:64150 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752424AbdFNVTy (ORCPT ); Wed, 14 Jun 2017 17:19:54 -0400 From: Arnd Bergmann To: Andrew Morton Cc: kasan-dev@googlegroups.com, Dmitry Vyukov , Alexander Potapenko , Andrey Ryabinin , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Arend van Spriel , Arnd Bergmann , David Woodhouse , Brian Norris , Boris Brezillon , Marek Vasut , Richard Weinberger , Cyrille Pitchen , linux-mtd@lists.infradead.org Subject: [PATCH v2 05/11] mtd: cfi: reduce stack size with KASAN Date: Wed, 14 Jun 2017 23:15:40 +0200 Message-Id: <20170614211556.2062728-6-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20170614211556.2062728-1-arnd@arndb.de> References: <20170614211556.2062728-1-arnd@arndb.de> X-Provags-ID: V03:K0:jQtFtujOI91qHhjEQPhH7H4zwUM43AuU25lzsFzC5NvM61fke2d fPM9tJCtpFA7Bh/iNb+ZSdJILB5TsRmwo1kKna86flb+6473UgXJeJ/oQwpTgH3UWAToPIw T3tRuRY9Kfh38avCVBnN299oN7dJB/Y/XISLrR8HozKARgq4+QC9we+khnWNRwV3ECJ7xS6 0LUPt2NXQcHa/KScVOrFw== X-UI-Out-Filterresults: notjunk:1;V01:K0:NB66CqhOCl4=:fUCO0YsQ2DWGJIRmPe67M2 qHm9cFD0cUyhsuDVCird0XQpxv9nLw9jm6RMjYThXk1a596s/dtipqute8R0uI+zlbknTjzmN fZipwuJmbd5i9yx2XxQGXYoNGf4FwbyyKR4eAukLVmdz/O2az5qrovasMixOpPSgfiAThgqkt nU1trOZulUh+YLx5CJWBxrIyH5NAcU9hFQB30E8IrjNPLBLfrLECVa9m8Mf1MxjAaqb1qAsKS k3cqQgZ9axvpu7qWOBedjMCrrCdZ0hONX1GaR4LG/+yZ1Z9Tu8v7znjlCyZxuTKDLG85fXpyo VaQrN2TIhRfePrKXUdtIQjh0hCtFDgPvCOe4JsYK+swisLd77te8wzFPov+sgurtHIJOUYqrH F5Z5YBpUE+ISVAgVIsbNTnNXZwnAsurP0c+m8Qhy26aTaOlQAKGgG6oUewhIy0jcuS7gLeUJB wVDZrfIvajTh0tGEuc44VC1y2PdBO1xhDYEpK7yWz2U7N49rsCF2fSTvarxKQkx9wPZZ0LhGh e8rhX0LVZ5xJ9v6Wy0bwb8w/2jYhQIc9TJkEt7LwqJhD4W706mE+D0PNjGujoBL/ZoAX5Ze01 qDH1FziiGZILJYmD6cQy6C3ia6U65Mut0QcNHKHhSk3L8t/cMHmfmDaKrcZzPJ0AxvfcML3x3 954tZFPV3pHarO4VzcZ1Kt1vO0K9eXiJ7Lf3F86BE8LRvNNW8hawL167ZM0OHw0i6VLs= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When CONFIG_KASAN is used, we consume a lot of extra stack space: drivers/mtd/chips/cfi_cmdset_0020.c: In function 'do_write_buffer': drivers/mtd/chips/cfi_cmdset_0020.c:603:1: error: the frame size of 2184 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] drivers/mtd/chips/cfi_cmdset_0020.c: In function 'cfi_staa_erase_varsize': drivers/mtd/chips/cfi_cmdset_0020.c:972:1: error: the frame size of 1936 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] drivers/mtd/chips/cfi_cmdset_0001.c: In function 'do_write_buffer': drivers/mtd/chips/cfi_cmdset_0001.c:1841:1: error: the frame size of 1776 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] This marks some functions as noinline_if_stackbloat to keep reduce the overall stack size. Signed-off-by: Arnd Bergmann --- drivers/mtd/chips/cfi_cmdset_0020.c | 8 ++++---- include/linux/mtd/map.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c index 7d342965f392..5eee5e883f55 100644 --- a/drivers/mtd/chips/cfi_cmdset_0020.c +++ b/drivers/mtd/chips/cfi_cmdset_0020.c @@ -244,7 +244,7 @@ static struct mtd_info *cfi_staa_setup(struct map_info *map) } -static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf) +static noinline_if_stackbloat int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf) { map_word status, status_OK; unsigned long timeo; @@ -728,7 +728,7 @@ cfi_staa_writev(struct mtd_info *mtd, const struct kvec *vecs, } -static inline int do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) +static noinline_if_stackbloat int do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) { struct cfi_private *cfi = map->fldrv_priv; map_word status, status_OK; @@ -1029,7 +1029,7 @@ static void cfi_staa_sync (struct mtd_info *mtd) } } -static inline int do_lock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) +static noinline_if_stackbloat int do_lock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) { struct cfi_private *cfi = map->fldrv_priv; map_word status, status_OK; @@ -1175,7 +1175,7 @@ static int cfi_staa_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) } return 0; } -static inline int do_unlock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) +static noinline_if_stackbloat int do_unlock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) { struct cfi_private *cfi = map->fldrv_priv; map_word status, status_OK; diff --git a/include/linux/mtd/map.h b/include/linux/mtd/map.h index 3aa56e3104bb..29db74314db8 100644 --- a/include/linux/mtd/map.h +++ b/include/linux/mtd/map.h @@ -316,7 +316,7 @@ static inline map_word map_word_or(struct map_info *map, map_word val1, map_word return r; } -static inline int map_word_andequal(struct map_info *map, map_word val1, map_word val2, map_word val3) +static noinline_if_stackbloat int map_word_andequal(struct map_info *map, map_word val1, map_word val2, map_word val3) { int i; @@ -328,7 +328,7 @@ static inline int map_word_andequal(struct map_info *map, map_word val1, map_wor return 1; } -static inline int map_word_bitsset(struct map_info *map, map_word val1, map_word val2) +static noinline_if_stackbloat int map_word_bitsset(struct map_info *map, map_word val1, map_word val2) { int i; @@ -362,7 +362,7 @@ static inline map_word map_word_load(struct map_info *map, const void *ptr) return r; } -static inline map_word map_word_load_partial(struct map_info *map, map_word orig, const unsigned char *buf, int start, int len) +static noinline_if_stackbloat map_word map_word_load_partial(struct map_info *map, map_word orig, const unsigned char *buf, int start, int len) { int i; @@ -392,7 +392,7 @@ static inline map_word map_word_load_partial(struct map_info *map, map_word orig #define MAP_FF_LIMIT 8 #endif -static inline map_word map_word_ff(struct map_info *map) +static noinline_if_stackbloat map_word map_word_ff(struct map_info *map) { map_word r; int i; -- 2.9.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arnd Bergmann Subject: [PATCH v2 05/11] mtd: cfi: reduce stack size with KASAN Date: Wed, 14 Jun 2017 23:15:40 +0200 Message-ID: <20170614211556.2062728-6-arnd@arndb.de> References: <20170614211556.2062728-1-arnd@arndb.de> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: Boris Brezillon , Arend van Spriel , Arnd Bergmann , netdev@vger.kernel.org, Cyrille Pitchen , linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, Marek Vasut , Alexander Potapenko , linux-mtd@lists.infradead.org, Richard Weinberger , Andrey Ryabinin , Brian Norris , David Woodhouse , Dmitry Vyukov To: Andrew Morton Return-path: In-Reply-To: <20170614211556.2062728-1-arnd@arndb.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org List-Id: netdev.vger.kernel.org When CONFIG_KASAN is used, we consume a lot of extra stack space: drivers/mtd/chips/cfi_cmdset_0020.c: In function 'do_write_buffer': drivers/mtd/chips/cfi_cmdset_0020.c:603:1: error: the frame size of 2184 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] drivers/mtd/chips/cfi_cmdset_0020.c: In function 'cfi_staa_erase_varsize': drivers/mtd/chips/cfi_cmdset_0020.c:972:1: error: the frame size of 1936 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] drivers/mtd/chips/cfi_cmdset_0001.c: In function 'do_write_buffer': drivers/mtd/chips/cfi_cmdset_0001.c:1841:1: error: the frame size of 1776 bytes is larger than 1536 bytes [-Werror=frame-larger-than=] This marks some functions as noinline_if_stackbloat to keep reduce the overall stack size. Signed-off-by: Arnd Bergmann --- drivers/mtd/chips/cfi_cmdset_0020.c | 8 ++++---- include/linux/mtd/map.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c index 7d342965f392..5eee5e883f55 100644 --- a/drivers/mtd/chips/cfi_cmdset_0020.c +++ b/drivers/mtd/chips/cfi_cmdset_0020.c @@ -244,7 +244,7 @@ static struct mtd_info *cfi_staa_setup(struct map_info *map) } -static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf) +static noinline_if_stackbloat int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf) { map_word status, status_OK; unsigned long timeo; @@ -728,7 +728,7 @@ cfi_staa_writev(struct mtd_info *mtd, const struct kvec *vecs, } -static inline int do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) +static noinline_if_stackbloat int do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) { struct cfi_private *cfi = map->fldrv_priv; map_word status, status_OK; @@ -1029,7 +1029,7 @@ static void cfi_staa_sync (struct mtd_info *mtd) } } -static inline int do_lock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) +static noinline_if_stackbloat int do_lock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) { struct cfi_private *cfi = map->fldrv_priv; map_word status, status_OK; @@ -1175,7 +1175,7 @@ static int cfi_staa_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) } return 0; } -static inline int do_unlock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) +static noinline_if_stackbloat int do_unlock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr) { struct cfi_private *cfi = map->fldrv_priv; map_word status, status_OK; diff --git a/include/linux/mtd/map.h b/include/linux/mtd/map.h index 3aa56e3104bb..29db74314db8 100644 --- a/include/linux/mtd/map.h +++ b/include/linux/mtd/map.h @@ -316,7 +316,7 @@ static inline map_word map_word_or(struct map_info *map, map_word val1, map_word return r; } -static inline int map_word_andequal(struct map_info *map, map_word val1, map_word val2, map_word val3) +static noinline_if_stackbloat int map_word_andequal(struct map_info *map, map_word val1, map_word val2, map_word val3) { int i; @@ -328,7 +328,7 @@ static inline int map_word_andequal(struct map_info *map, map_word val1, map_wor return 1; } -static inline int map_word_bitsset(struct map_info *map, map_word val1, map_word val2) +static noinline_if_stackbloat int map_word_bitsset(struct map_info *map, map_word val1, map_word val2) { int i; @@ -362,7 +362,7 @@ static inline map_word map_word_load(struct map_info *map, const void *ptr) return r; } -static inline map_word map_word_load_partial(struct map_info *map, map_word orig, const unsigned char *buf, int start, int len) +static noinline_if_stackbloat map_word map_word_load_partial(struct map_info *map, map_word orig, const unsigned char *buf, int start, int len) { int i; @@ -392,7 +392,7 @@ static inline map_word map_word_load_partial(struct map_info *map, map_word orig #define MAP_FF_LIMIT 8 #endif -static inline map_word map_word_ff(struct map_info *map) +static noinline_if_stackbloat map_word map_word_ff(struct map_info *map) { map_word r; int i; -- 2.9.0 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/