linux/arch/powerpc
Aneesh Kumar K.V 79270e0a3f powerpc/mm/hash: Properly mask the ESID bits when building proto VSID
The proto VSID is built using both the MMU context id and effective
segment ID (ESID). We should not have overlapping bits between those.
That could result in us having a VSID collision. With the current code
we missed masking the top bits of the ESID. This implies for kernel
address we ended up using the top 4 bits of the ESID as part of the
proto VSID, which is wrong.

The current code use the top 4 context values (0x7fffc - 0x7ffff) for
the kernel. With those context IDs used for the kernel, we don't run
into VSID collisions because we get the same proto VSID irrespective of
whether we mask the ESID bits or not. eg:

  ea         = 0xf000000000000000
  context    = 0x7ffff

  w/out masking:
  proto_vsid = (0x7ffff << 6 | 0xf000000000000000 >> 40)
	     = (0x1ffffc0 | 0xf00000)
	     =  0x1ffffc0

  with masking:
  proto_vsid = (0x7ffff << 6 | ((0xf000000000000000 >> 40) & 0x3f))
	     = (0x1ffffc0 | (0xf00000 & 0x3f))
	     =  0x1ffffc0 | 0)
	     =  0x1ffffc0

So although there is no bug, the code is still overly subtle, so fix it
to save ourselves pain in future.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2017-01-30 16:34:50 +11:00
..
boot powerpc updates for 4.10 2016-12-16 09:26:42 -08:00
configs powerpc updates for 4.10 2016-12-16 09:26:42 -08:00
crypto crypto: crc32c-vpmsum - Rename CRYPT_CRC32C_VPMSUM option 2016-11-28 21:23:17 +08:00
include powerpc/mm/hash: Properly mask the ESID bits when building proto VSID 2017-01-30 16:34:50 +11:00
kernel powerpc/kernel: Fix unbalanced refcount on RTAS device node 2017-01-25 13:34:21 +11:00
kvm ktime: Cleanup ktime_set() usage 2016-12-25 17:21:22 +01:00
lib powerpc/sstep: Return directly after a failed address_ok() in emulate_step() 2017-01-25 13:34:21 +11:00
math-emu Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
mm powerpc/mm: Return directly after a failed __copy_from_user() in sys_subpage_prot() 2017-01-25 13:34:22 +11:00
net powerpc/bpf: Flush the entire JIT buffer 2017-01-25 13:34:25 +11:00
oprofile ktime: Cleanup ktime_set() usage 2016-12-25 17:21:22 +01:00
perf powerpc/perf: Use MSR to report privilege level on P9 DD1 2017-01-18 16:15:58 +11:00
platforms powerpc/powernv/pci: Use kmalloc_array() in two functions 2017-01-25 13:34:19 +11:00
purgatory powerpc: Add purgatory for kexec_file_load() implementation. 2016-11-30 23:15:26 +11:00
scripts powerpc/ftrace: Add Kconfig & Make glue for mprofile-kernel 2016-03-07 14:53:56 +11:00
sysdev powerpc/icp-opal: Fix missing KVM case and harden replay 2017-01-17 11:50:03 +11:00
xmon powerpc/xmon: Add 'dt' command to dump trace buffers 2016-11-25 14:30:27 +11:00
Kconfig powerpc/64: Use optimized checksum routines on little-endian 2017-01-25 13:34:18 +11:00
Kconfig.debug powerpc/mm: Fix page table dump build on non-Book3S 2016-12-01 16:20:18 +11:00
Makefile powerpc: Add purgatory for kexec_file_load() implementation. 2016-11-30 23:15:26 +11:00
relocs_check.sh powerpc/64: whitelist unresolved modversions CRCs 2016-09-22 14:46:31 +02:00