Messages in this thread |  | | Subject | Re: [PATCH v5 02/27] arm64: cpufeature: Use alternatives for VHE cpu_enable | From | James Morse <> | Date | Wed, 12 Sep 2018 11:28:20 +0100 |
| |
Hi Julien,
On 28/08/18 16:51, Julien Thierry wrote: > The cpu_enable callback for VHE feature requires all alternatives to have > been applied. This prevents applying VHE alternative separately from the > rest. > > Use an alternative depending on VHE feature to know whether VHE > alternatives have already been applied.
> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c > index 1e433ac..3bc1c8b 100644 > --- a/arch/arm64/kernel/cpufeature.c > +++ b/arch/arm64/kernel/cpufeature.c > @@ -1022,8 +1024,15 @@ static void cpu_copy_el2regs(const struct arm64_cpu_capabilities *__unused) > * that, freshly-onlined CPUs will set tpidr_el2, so we don't need to > * do anything here. > */ > - if (!alternatives_applied) > - write_sysreg(read_sysreg(tpidr_el1), tpidr_el2); > + asm volatile(ALTERNATIVE( > + "mrs %0, tpidr_el1\n" > + "msr tpidr_el2, %0", > + "nop\n" > + "nop", > + ARM64_HAS_VIRT_HOST_EXTN) > + : "+r" (tmp) > + : > + : "memory"); > } > #endif
Catalin's preference was to keep this all in C: https://patchwork.kernel.org/patch/10007977/ , for which we need to know if 'the' alternative has been applied.
I suspect there may be more registers in this list if we have to switch to another EL2 register using alternatives. (but I don't have an example).
Could we make 'alternatives_applied' a macro that takes the cap as an argument?
Thanks,
James
|  |