| From 6e36719fbe90213fbba9f50093fa2d4d69b0e93c Mon Sep 17 00:00:00 2001 |
| From: Arnd Bergmann <arnd@arndb.de> |
| Date: Mon, 15 Jan 2018 17:07:22 +0100 |
| Subject: crypto: aes-generic - fix aes-generic regression on powerpc |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| commit 6e36719fbe90213fbba9f50093fa2d4d69b0e93c upstream. |
| |
| My last bugfix added -Os on the command line, which unfortunately caused |
| a build regression on powerpc in some configurations. |
| |
| I've done some more analysis of the original problem and found slightly |
| different workaround that avoids this regression and also results in |
| better performance on gcc-7.0: -fcode-hoisting is an optimization step |
| that got added in gcc-7 and that for all gcc-7 versions causes worse |
| performance. |
| |
| This disables -fcode-hoisting on all compilers that understand the option. |
| For gcc-7.1 and 7.2 I found the same performance as my previous patch |
| (using -Os), in gcc-7.0 it was even better. On gcc-8 I could see no |
| change in performance from this patch. In theory, code hoisting should |
| not be able make things better for the AES cipher, so leaving it |
| disabled for gcc-8 only serves to simplify the Makefile change. |
| |
| Reported-by: kbuild test robot <fengguang.wu@intel.com> |
| Link: https://www.mail-archive.com/linux-crypto@vger.kernel.org/msg30418.html |
| Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83356 |
| Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83651 |
| Fixes: 148b974deea9 ("crypto: aes-generic - build with -Os on gcc-7+") |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Cc: Horia Geanta <horia.geanta@nxp.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| crypto/Makefile | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/crypto/Makefile |
| +++ b/crypto/Makefile |
| @@ -98,7 +98,7 @@ obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += t |
| obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o |
| CFLAGS_serpent_generic.o := $(call cc-option,-fsched-pressure) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149 |
| obj-$(CONFIG_CRYPTO_AES) += aes_generic.o |
| -CFLAGS_aes_generic.o := $(call cc-ifversion, -ge, 0701, -Os) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83356 |
| +CFLAGS_aes_generic.o := $(call cc-option,-fno-code-hoisting) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83356 |
| obj-$(CONFIG_CRYPTO_AES_TI) += aes_ti.o |
| obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o |
| obj-$(CONFIG_CRYPTO_CAST_COMMON) += cast_common.o |