linux_dsm_epyc7002/arch/powerpc
Michael Ellerman d6bd8194e2 powerpc/32: Avoid miscompilation w/GCC 4.6.3 - don't inline copy_to/from_user()
Larry Finger reported that his Powerbook G4 was no longer booting with v4.12-rc,
userspace was up but giving weird errors such as:

  udevd[64]: starting version 175
  udevd[64]: Unable to receive ctrl message: Bad address.
  modprobe: chdir(4.12-rc1): No such file or directory

He bisected the problem to commit 3448890c32 ("powerpc: get rid of zeroing,
switch to RAW_COPY_USER").

Al identified that the problem is actually a miscompilation by GCC 4.6.3, which
is exposed by the above commit.

Al also pointed out that inlining copy_to/from_user() is probably of little or
no benefit, which is correct. Using Anton's copy_to_user benchmark, with a
pathological single byte copy, we see a small increase in performance
by *removing* inlining:

  Before (inlined):
  # time ./copy_to_user -w -l 1 -i 10000000	( x 3 )
  real	0m22.063s
  real	0m22.059s
  real	0m22.076s

  After:
  # time ./copy_to_user -w -l 1 -i 10000000	( x 3 )
  real	0m21.325s
  real	0m21.299s
  real	0m21.364s

So as a small performance improvement and to avoid the miscompilation, drop
inlining copy_to/from_user() on 32-bit.

Fixes: 3448890c32 ("powerpc: get rid of zeroing, switch to RAW_COPY_USER")
Reported-by: Larry Finger <Larry.Finger@lwfinger.net>
Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2017-06-26 23:25:08 +10:00
..
boot powerpc/boot: Fix zImage TOC alignment 2017-03-08 10:39:32 +11:00
configs powerpc updates for 4.12 part 1. 2017-05-05 11:36:44 -07:00
crypto Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2017-05-02 15:53:46 -07:00
include powerpc/32: Avoid miscompilation w/GCC 4.6.3 - don't inline copy_to/from_user() 2017-06-26 23:25:08 +10:00
kernel powerpc/64: Initialise thread_info for emergency stacks 2017-06-23 13:25:38 +10:00
kvm powerpc/xive: Fix offset for store EOI MMIOs 2017-06-15 23:29:39 +10:00
lib powerpc updates for 4.12 part 1. 2017-05-05 11:36:44 -07:00
math-emu Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
mm powerpc/mm/4k: Limit 4k page size config to 64TB virtual address space 2017-06-08 20:42:56 +10:00
net powerpc updates for 4.11 part 1. 2017-02-22 10:30:38 -08:00
oprofile ktime: Cleanup ktime_set() usage 2016-12-25 17:21:22 +01:00
perf powerpc/perf: Fix oops when kthread execs user process 2017-06-16 21:02:46 +10:00
platforms powerpc/powernv/npu-dma: Add explicit flush when sending an ATSD 2017-06-22 21:21:08 +10:00
purgatory kexec, x86/purgatory: Unbreak it and clean it up 2017-03-10 20:55:09 +01:00
sysdev powerpc/xive: Fix offset for store EOI MMIOs 2017-06-15 23:29:39 +10:00
tools powerpc: Add arch/powerpc/tools directory 2017-04-28 21:26:53 +10:00
xmon powerpc/xmon: Teach xmon oops about radix vectors 2017-05-01 18:52:58 +10:00
Kconfig powerpc/book3s64: Move PPC_DT_CPU_FTRs and enable it by default 2017-06-08 20:42:57 +10:00
Kconfig.debug powerpc/xmon: Enable disassembly files (compilation changes) 2017-02-15 20:02:42 +11:00
Makefile powerpc: Add arch/powerpc/tools directory 2017-04-28 21:26:53 +10:00
Makefile.postlink powerpc: Fix distclean with Makefile.postlink 2017-05-09 19:24:23 +10:00