linux/arch/powerpc/include/uapi/asm
Anton Blanchard 6997e57d69 powerpc: scan_features() updates incorrect bits for REAL_LE
The REAL_LE feature entry in the ibm_pa_feature struct is missing an MMU
feature value, meaning all the remaining elements initialise the wrong
values.

This means instead of checking for byte 5, bit 0, we check for byte 0,
bit 0, and then we incorrectly set the CPU feature bit as well as MMU
feature bit 1 and CPU user feature bits 0 and 2 (5).

Checking byte 0 bit 0 (IBM numbering), means we're looking at the
"Memory Management Unit (MMU)" feature - ie. does the CPU have an MMU.
In practice that bit is set on all platforms which have the property.

This means we set CPU_FTR_REAL_LE always. In practice that seems not to
matter because all the modern cpus which have this property also
implement REAL_LE, and we've never needed to disable it.

We're also incorrectly setting MMU feature bit 1, which is:

  #define MMU_FTR_TYPE_8xx		0x00000002

Luckily the only place that looks for MMU_FTR_TYPE_8xx is in Book3E
code, which can't run on the same cpus as scan_features(). So this also
doesn't matter in practice.

Finally in the CPU user feature mask, we're setting bits 0 and 2. Bit 2
is not currently used, and bit 0 is:

  #define PPC_FEATURE_PPC_LE		0x00000001

Which says the CPU supports the old style "PPC Little Endian" mode.
Again this should be harmless in practice as no 64-bit CPUs implement
that mode.

Fix the code by adding the missing initialisation of the MMU feature.

Also add a comment marking CPU user feature bit 2 (0x4) as reserved. It
would be unsafe to start using it as old kernels incorrectly set it.

Fixes: 44ae3ab335 ("powerpc: Free up some CPU feature bits by moving out MMU-related features")
Signed-off-by: Anton Blanchard <anton@samba.org>
Cc: stable@vger.kernel.org
[mpe: Flesh out changelog, add comment reserving 0x4]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2016-04-18 20:08:38 +10:00
..
auxvec.h
bitsperlong.h
bootx.h
byteorder.h powerpc: Include the appropriate endianness header 2013-10-11 16:48:33 +11:00
cputable.h powerpc: scan_features() updates incorrect bits for REAL_LE 2016-04-18 20:08:38 +10:00
eeh.h powerpc/eeh: Introduce eeh_pe_inject_err() 2015-05-12 20:33:35 +10:00
elf.h powerpc/module: Handle R_PPC64_ENTRY relocations 2016-01-13 12:37:05 +11:00
epapr_hcalls.h powerpc: Fix misspellings in comments. 2016-03-01 19:27:20 +11:00
errno.h powerpc/kernel: Switch to using MAX_ERRNO 2015-07-29 11:56:11 +10:00
fcntl.h
ioctl.h
ioctls.h tty, ioctls -- Add new ioctl definitions for tty flags fetching 2012-10-25 12:07:18 -07:00
ipcbuf.h
Kbuild powerpc: Export include/uapi/asm/eeh.h 2015-08-18 19:34:41 +10:00
kvm_para.h KVM: PPC: Disable NX for old magic page using guests 2014-05-30 14:26:24 +02:00
kvm.h KVM: PPC: Add support for 64bit TCE windows 2016-03-02 09:56:50 +11:00
mman.h mm: mlock: add mlock flags to enable VM_LOCKONFAULT usage 2015-11-05 19:34:48 -08:00
msgbuf.h
nvram.h
opal-prd.h powerpc/powernv: Add opal-prd channel 2015-06-05 08:32:21 +10:00
param.h
perf_event.h powerpc/perf: Export PERF_EVENT_CONFIG_EBB_SHIFT to userspace 2013-08-01 13:11:46 +10:00
poll.h
posix_types.h
ps3fb.h
ptrace.h powerpc: Change vrX register defines to vX to match gcc and glibc 2015-03-16 18:32:11 +11:00
resource.h
sembuf.h
setup.h powerpc: Bump COMMAND_LINE_SIZE to 2048 2014-04-28 16:31:58 +10:00
shmbuf.h
sigcontext.h powerpc/signal: Fix confusing header documentation in sigcontext.h 2015-07-16 16:14:40 +10:00
siginfo.h
signal.h powerpc: switch to generic old sigaction() 2013-02-03 18:16:10 -05:00
socket.h net: Facility to report route quality of connected sockets 2016-02-25 22:01:22 -05:00
sockios.h
spu_info.h
stat.h
statfs.h
swab.h
termbits.h
termios.h
tm.h powerpc/tm: Abort syscalls in active transactions 2015-06-19 17:10:28 +10:00
types.h
ucontext.h
unistd.h powerpc: Wire up copy_file_range() syscall 2016-01-21 14:10:55 +11:00