powerpc, KVM: Split HVMODE_206 cpu feature bit into separate HV and architecture...
authorPaul Mackerras <paulus@samba.org>
Wed, 29 Jun 2011 00:26:11 +0000 (00:26 +0000)
committerAvi Kivity <avi@redhat.com>
Tue, 12 Jul 2011 10:16:58 +0000 (13:16 +0300)
commit969391c58a4efb8411d6881179945f425ad9cbb5
tree77ec5f178feee26c453033b7456ad789d3393482
parentaa04b4cc5be64b4fb9ef4e0fdf2418e2f4737fb2
powerpc, KVM: Split HVMODE_206 cpu feature bit into separate HV and architecture bits

This replaces the single CPU_FTR_HVMODE_206 bit with two bits, one to
indicate that we have a usable hypervisor mode, and another to indicate
that the processor conforms to PowerISA version 2.06.  We also add
another bit to indicate that the processor conforms to ISA version 2.01
and set that for PPC970 and derivatives.

Some PPC970 chips (specifically those in Apple machines) have a
hypervisor mode in that MSR[HV] is always 1, but the hypervisor mode
is not useful in the sense that there is no way to run any code in
supervisor mode (HV=0 PR=0).  On these processors, the LPES0 and LPES1
bits in HID4 are always 0, and we use that as a way of detecting that
hypervisor mode is not useful.

Where we have a feature section in assembly code around code that
only applies on POWER7 in hypervisor mode, we use a construct like

END_FTR_SECTION_IFSET(CPU_FTR_HVMODE | CPU_FTR_ARCH_206)

The definition of END_FTR_SECTION_IFSET is such that the code will
be enabled (not overwritten with nops) only if all bits in the
provided mask are set.

Note that the CPU feature check in __tlbie() only needs to check the
ARCH_206 bit, not the HVMODE bit, because __tlbie() can only get called
if we are running bare-metal, i.e. in hypervisor mode.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
arch/powerpc/include/asm/cputable.h
arch/powerpc/include/asm/reg.h
arch/powerpc/kernel/cpu_setup_power7.S
arch/powerpc/kernel/cpu_setup_ppc970.S
arch/powerpc/kernel/exceptions-64s.S
arch/powerpc/kernel/paca.c
arch/powerpc/kvm/book3s_64_mmu_hv.c
arch/powerpc/kvm/book3s_hv.c
arch/powerpc/kvm/book3s_hv_builtin.c
arch/powerpc/kvm/book3s_segment.S
arch/powerpc/mm/hash_native_64.c