summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2019-09-30 08:59:25 +0300
committerLiu Yang <Yang.Liu.sn@gmail.com>2021-02-16 20:14:17 +0300
commit6a57271f48af673da2144632e14d912c532d96a9 (patch)
treecee271608bca4d9a8f15457575b97a30a6162429 /Documentation
parent0ec96da952e3b4e7cef69b812d4448eef9de299e (diff)
downloadlinux-6a57271f48af673da2144632e14d912c532d96a9.tar.xz
ARM: fix __get_user_check() in case uaccess_* calls are not inlined
KernelCI reports that bcm2835_defconfig is no longer booting since commit ac7c3e4ff401 ("compiler: enable CONFIG_OPTIMIZE_INLINING forcibly"): https://lkml.org/lkml/2019/9/26/825 I also received a regression report from Nicolas Saenz Julienne: https://lkml.org/lkml/2019/9/27/263 This problem has cropped up on arch/arm/config/bcm2835_defconfig because it enables CONFIG_CC_OPTIMIZE_FOR_SIZE. The compiler tends to prefer not inlining functions with -Os. I was able to reproduce it with other boards and defconfig files by manually enabling CONFIG_CC_OPTIMIZE_FOR_SIZE. The __get_user_check() specifically uses r0, r1, r2 registers. So, uaccess_save_and_enable() and uaccess_restore() must be inlined in order to avoid those registers being overwritten in the callees. Prior to commit 9012d011660e ("compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING"), the 'inline' marker was always enough for inlining functions, except on x86. Since that commit, all architectures can enable CONFIG_OPTIMIZE_INLINING. So, __always_inline is now the only guaranteed way of forcible inlining. I want to keep as much compiler's freedom as possible about the inlining decision. So, I changed the function call order instead of adding __always_inline around. Call uaccess_save_and_enable() before assigning the __p ("r0"), and uaccess_restore() after evacuating the __e ("r0"). Fixes: 9012d011660e ("compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING") Reported-by: "kernelci.org bot" <bot@kernelci.org> Reported-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Tested-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> Tested-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Diffstat (limited to 'Documentation')
0 files changed, 0 insertions, 0 deletions