This RFC series enables AArch32 EL0 support on systems where only a subset of CPUs implement it. AArch32 feature asymmetry comes with downsides, but it is likely that some vendors are willing to accept those to maintain AArch32 EL0 support on systems where some cores are AArch64 only. Enabling AArch32 when it isn't supported on all CPUs inevitably requires careful affinity management of AArch32 tasks. The bare minimum kernel support is offered by the second patch which put the burden of managing task affinity entirely on user-space. AAarch32 tasks receive SIGKILL if they try to run on a non-AArch32 CPU. The third patch is optional and overrides task affinity in some cases to prevent AArch32 tasks getting SIGKILL. We don't expose the asymmetry to userspace. If we want to delegate affinity management to user space we need to introduce a way to do that. /sys/devices/system/cpu/cpu*/regs/identification/midr_el1 contains the specific CPU ID. This could be extended to expose the other ID_* registers where the AArch32 feature can be detected. If the user hotplugs all 32bit capable CPUs, then all running 32bit tasks will be SIGKILLed if scheduled. Patch 1 ensures KVM handles such systems properly. Especially if the guest is misbehaving and tries to force run aarch32 regardless of what ID registers advertise. Patch 2 introduces basic asymetric aarch32 support. It will SIGKILL any task as soon as it scheduled on the wrong CPU even if its affinity allows it to migrate to a capable CPU. Patch 3 suggests how handling the affinity problem could be done in the kernel. It's not a generic solution, rather a demonstration of what could potentially be done. Qais Yousef (3): arm64: kvm: Handle Asymmetric AArch32 systems arm64: Add support for asymmetric AArch32 EL0 configurations arm64: Handle AArch32 tasks running on non AArch32 cpu arch/arm64/Kconfig | 14 +++++ arch/arm64/include/asm/cpu.h | 2 + arch/arm64/include/asm/cpucaps.h | 3 +- arch/arm64/include/asm/cpufeature.h | 22 +++++++- arch/arm64/include/asm/thread_info.h | 5 +- arch/arm64/kernel/cpufeature.c | 77 ++++++++++++++++++---------- arch/arm64/kernel/cpuinfo.c | 71 +++++++++++++++---------- arch/arm64/kernel/process.c | 17 ++++++ arch/arm64/kernel/signal.c | 33 ++++++++++++ arch/arm64/kvm/arm.c | 17 ++++++ arch/arm64/kvm/guest.c | 2 +- arch/arm64/kvm/sys_regs.c | 14 ++++- 12 files changed, 218 insertions(+), 59 deletions(-) -- 2.17.1