[PATCH 2/2] powerpc/kvm: Update kvmppc_set_arch_compat() for ISA v3.00
Michael Ellerman
mpe at ellerman.id.au
Thu Oct 27 22:28:02 AEDT 2016
Suraj Jitindar Singh <sjitindarsingh at gmail.com> writes:
> diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
> index 3686471..f9ae3fb 100644
> --- a/arch/powerpc/kvm/book3s_hv.c
> +++ b/arch/powerpc/kvm/book3s_hv.c
> @@ -311,24 +311,38 @@ static int kvmppc_set_arch_compat(struct kvm_vcpu *vcpu, u32 arch_compat)
> * If an arch bit is set in PCR, all the defined
> * higher-order arch bits also have to be set.
> */
> - pcr = PCR_ARCH_206 | PCR_ARCH_205;
> + pcr = PCR_ARCH_207 | PCR_ARCH_206 | PCR_ARCH_205;
> break;
> case PVR_ARCH_206:
> case PVR_ARCH_206p:
> - pcr = PCR_ARCH_206;
> + /* Must be at least v2.06 to emulate it */
> + if (!cpu_has_feature(CPU_FTR_ARCH_206))
> + return -EINVAL;
> + pcr = PCR_ARCH_207 | PCR_ARCH_206;
> break;
> case PVR_ARCH_207:
> + /* Must be at least v2.07 to emulate it */
> + if (!cpu_has_feature(CPU_FTR_ARCH_207S))
> + return -EINVAL;
> + pcr = PCR_ARCH_207;
> break;
> + case PVR_ARCH_300:
> + /* Must be at least v3.00 to emulate it */
> + if (!cpu_has_feature(CPU_FTR_ARCH_300))
> + return -EINVAL;
> default:
> return -EINVAL;
> }
>
> - if (!cpu_has_feature(CPU_FTR_ARCH_207S)) {
> - /* POWER7 can't emulate POWER8 */
> - if (!(pcr & PCR_ARCH_206))
> - return -EINVAL;
> - pcr &= ~PCR_ARCH_206;
> - }
> + /*
> + * Mask the pcr bits which the current processor knows about
> + * v2.06 and above knows about the v2.05 compat bit
> + * v2,07 and above knows about the v2.06 compat bit
> + * v3.00 and above knows about the v2.07 compat bit
> + */
> + pcr &= (cpu_has_feature(CPU_FTR_ARCH_300) << 3) |
> + (cpu_has_feature(CPU_FTR_ARCH_207S) << 2) |
> + (cpu_has_feature(CPU_FTR_ARCH_206) << 1);
cpu_has_feature() returns a bool, so shifting the result of it is
dubious. It also uses jump labels these days, so I have no idea what
code that is going to generate.
Better to just do it the simple way IMHO.
cheers
More information about the Linuxppc-dev
mailing list