powerpc/powernv: Add support for POWER8 split core on powernv
authorMichael Ellerman <mpe@ellerman.id.au>
Fri, 23 May 2014 08:15:30 +0000 (18:15 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 28 May 2014 03:35:37 +0000 (13:35 +1000)
commite2186023f2d81ee7bb42d2a7dec3d889df7cdace
treefdc949d0563aeabdce47ab8b49ee25c760e0ca7b
parent3102f7843c75014fa15d3e6fda3b49f61bc467b4
powerpc/powernv: Add support for POWER8 split core on powernv

Upcoming POWER8 chips support a concept called split core. This is where the
core can be split into subcores that although not full cores, are able to
appear as full cores to a guest.

The splitting & unsplitting procedure is mildly complicated, and explained at
length in the comments within the patch.

One notable detail is that when splitting or unsplitting we need to pull
offline cpus out of their offline state to do work as part of the procedure.

The interface for changing the split mode is via a sysfs file, eg:

 $ echo 2 > /sys/devices/system/cpu/subcores_per_core

Currently supported values are '1', '2' and '4'. And indicate respectively that
the core should be unsplit, split in half, and split in quarters. These modes
correspond to threads_per_subcore of 8, 4 and 2.

We do not allow changing the split mode while KVM VMs are active. This is to
prevent the value changing while userspace is configuring the VM, and also to
prevent the mode being changed in such a way that existing guests are unable to
be run.

CPU hotplug fixes by Srivatsa.  max_cpus fixes by Mahesh.  cpuset fixes by
benh.  Fix for irq race by paulus.  The rest by mikey and mpe.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/include/asm/reg.h
arch/powerpc/platforms/powernv/Makefile
arch/powerpc/platforms/powernv/powernv.h
arch/powerpc/platforms/powernv/smp.c
arch/powerpc/platforms/powernv/subcore-asm.S [new file with mode: 0644]
arch/powerpc/platforms/powernv/subcore.c [new file with mode: 0644]
arch/powerpc/platforms/powernv/subcore.h [new file with mode: 0644]