NAK: [PATCH 1/2][Bionic] Revert "arm64: capabilities: Change scope of VHE to Boot CPU feature"
Ike Panhc
ike.pan at canonical.com
Tue Nov 26 09:21:50 UTC 2019
This SAUCE patch is better then reverting.
https://lists.ubuntu.com/archives/kernel-team/2019-November/105749.html
On 11/21/19 10:35 AM, Ike Panhc wrote:
> Yes, I forget to edit subject before sending it out.
>
> On 11/21/19 10:05 AM, Po-Hsu Lin wrote:
>> Hello Ike,
>> as this is just reverting one commit, I think [PATCH 1/2] should be
>> just [PATCH], right?
>> Thanks
>>
>> On Tue, Nov 19, 2019 at 5:53 PM Ike Panhc <ike.pan at canonical.com> wrote:
>>>
>>> BugLink: http://bugs.launchpad.net/bugs/1852723
>>>
>>> The 4.15.0-71.80 generic kernel can not boot on several arm64 machines.
>>> Bisect patches and find out we can solve this problem by reverting
>>> a single patch which comes from stable kernel update.
>>>
>>> This reverts commit 628859e8621cbb105cfbfa2138a68ddbd72958a7.
>>>
>>> Signed-off-by: Ike Panhc <ike.pan at canonical.com>
>>> ---
>>> arch/arm64/include/asm/cpufeature.h | 6 -----
>>> arch/arm64/include/asm/virt.h | 6 +++++
>>> arch/arm64/kernel/cpufeature.c | 5 ++--
>>> arch/arm64/kernel/smp.c | 38 +++++++++++++++++++++++++++++
>>> 4 files changed, 46 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
>>> index f3aa281b97cb..513570cd3e6f 100644
>>> --- a/arch/arm64/include/asm/cpufeature.h
>>> +++ b/arch/arm64/include/asm/cpufeature.h
>>> @@ -289,12 +289,6 @@ extern struct arm64_ftr_reg arm64_ftr_reg_ctrel0;
>>> (ARM64_CPUCAP_SCOPE_LOCAL_CPU | \
>>> ARM64_CPUCAP_OPTIONAL_FOR_LATE_CPU)
>>>
>>> -/*
>>> - * CPU feature used early in the boot based on the boot CPU. All secondary
>>> - * CPUs must match the state of the capability as detected by the boot CPU.
>>> - */
>>> -#define ARM64_CPUCAP_STRICT_BOOT_CPU_FEATURE ARM64_CPUCAP_SCOPE_BOOT_CPU
>>> -
>>> struct arm64_cpu_capabilities {
>>> const char *desc;
>>> u16 capability;
>>> diff --git a/arch/arm64/include/asm/virt.h b/arch/arm64/include/asm/virt.h
>>> index 9d1e24e030b3..c5f89442785c 100644
>>> --- a/arch/arm64/include/asm/virt.h
>>> +++ b/arch/arm64/include/asm/virt.h
>>> @@ -102,6 +102,12 @@ static inline bool has_vhe(void)
>>> return false;
>>> }
>>>
>>> +#ifdef CONFIG_ARM64_VHE
>>> +extern void verify_cpu_run_el(void);
>>> +#else
>>> +static inline void verify_cpu_run_el(void) {}
>>> +#endif
>>> +
>>> #endif /* __ASSEMBLY__ */
>>>
>>> #endif /* ! __ASM__VIRT_H */
>>> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
>>> index d19a7b8bb6fb..672443860341 100644
>>> --- a/arch/arm64/kernel/cpufeature.c
>>> +++ b/arch/arm64/kernel/cpufeature.c
>>> @@ -1113,15 +1113,13 @@ static const struct arm64_cpu_capabilities arm64_features[] = {
>>> .matches = cpufeature_pan_not_uao,
>>> },
>>> #endif /* CONFIG_ARM64_PAN */
>>> -#ifdef CONFIG_ARM64_VHE
>>> {
>>> .desc = "Virtualization Host Extensions",
>>> .capability = ARM64_HAS_VIRT_HOST_EXTN,
>>> - .type = ARM64_CPUCAP_STRICT_BOOT_CPU_FEATURE,
>>> + .type = ARM64_CPUCAP_SYSTEM_FEATURE,
>>> .matches = runs_at_el2,
>>> .cpu_enable = cpu_copy_el2regs,
>>> },
>>> -#endif /* CONFIG_ARM64_VHE */
>>> {
>>> .desc = "32-bit EL0 Support",
>>> .capability = ARM64_HAS_32BIT_EL0,
>>> @@ -1491,6 +1489,7 @@ static bool verify_local_cpu_caps(u16 scope_mask)
>>> */
>>> static void check_early_cpu_features(void)
>>> {
>>> + verify_cpu_run_el();
>>> verify_cpu_asid_bits();
>>> /*
>>> * Early features are used by the kernel already. If there
>>> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
>>> index 2faa9863d2e5..a077c3d2fd73 100644
>>> --- a/arch/arm64/kernel/smp.c
>>> +++ b/arch/arm64/kernel/smp.c
>>> @@ -85,6 +85,43 @@ enum ipi_msg_type {
>>> IPI_WAKEUP
>>> };
>>>
>>> +#ifdef CONFIG_ARM64_VHE
>>> +
>>> +/* Whether the boot CPU is running in HYP mode or not*/
>>> +static bool boot_cpu_hyp_mode;
>>> +
>>> +static inline void save_boot_cpu_run_el(void)
>>> +{
>>> + boot_cpu_hyp_mode = is_kernel_in_hyp_mode();
>>> +}
>>> +
>>> +static inline bool is_boot_cpu_in_hyp_mode(void)
>>> +{
>>> + return boot_cpu_hyp_mode;
>>> +}
>>> +
>>> +/*
>>> + * Verify that a secondary CPU is running the kernel at the same
>>> + * EL as that of the boot CPU.
>>> + */
>>> +void verify_cpu_run_el(void)
>>> +{
>>> + bool in_el2 = is_kernel_in_hyp_mode();
>>> + bool boot_cpu_el2 = is_boot_cpu_in_hyp_mode();
>>> +
>>> + if (in_el2 ^ boot_cpu_el2) {
>>> + pr_crit("CPU%d: mismatched Exception Level(EL%d) with boot CPU(EL%d)\n",
>>> + smp_processor_id(),
>>> + in_el2 ? 2 : 1,
>>> + boot_cpu_el2 ? 2 : 1);
>>> + cpu_panic_kernel();
>>> + }
>>> +}
>>> +
>>> +#else
>>> +static inline void save_boot_cpu_run_el(void) {}
>>> +#endif
>>> +
>>> #ifdef CONFIG_HOTPLUG_CPU
>>> static int op_cpu_kill(unsigned int cpu);
>>> #else
>>> @@ -410,6 +447,7 @@ void __init smp_prepare_boot_cpu(void)
>>> */
>>> jump_label_init();
>>> cpuinfo_store_boot_cpu();
>>> + save_boot_cpu_run_el();
>>> }
>>>
>>> static u64 __init of_get_cpu_mpidr(struct device_node *dn)
>>> --
>>> 2.17.1
>>>
>>>
>>> --
>>> kernel-team mailing list
>>> kernel-team at lists.ubuntu.com
>>> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>>
>
>
More information about the kernel-team
mailing list