[PATCH v4 23/27] KVM: s390: arm64: Implement required functions
Janosch Frank
frankja at linux.ibm.com
Mon Jul 6 05:15:40 PDT 2026
On 7/6/26 10:52, Steffen Eiden wrote:
> Implement the mostly trivial functions that the shared arm64 (kvm)
> code & headers oblige s390 to implement.
>
> Implement a very basic smccc handler that (non-compliantly) is just able
> to stop a vcpu.
>
> Signed-off-by: Steffen Eiden <seiden at linux.ibm.com>
> ---
> arch/s390/include/arm64/kvm_emulate.h | 135 ++++++++++++++++++++++++++
> arch/s390/include/arm64/kvm_nested.h | 11 +++
> arch/s390/kvm/arm64/handle_exit.c | 110 +++++++++++++++++++++
> arch/s390/kvm/arm64/inject_fault.c | 21 ++++
> 4 files changed, 277 insertions(+)
> create mode 100644 arch/s390/include/arm64/kvm_emulate.h
> create mode 100644 arch/s390/include/arm64/kvm_nested.h
> create mode 100644 arch/s390/kvm/arm64/handle_exit.c
> create mode 100644 arch/s390/kvm/arm64/inject_fault.c
>
[...]
> +/* manually copied from arch/arm64/kernel/traps.c */
> +static const char * const esr_class_str[] = {
> + [0 ... ESR_ELx_EC_MAX] = "UNRECOGNIZED EC",
> + [ESR_ELx_EC_UNKNOWN] = "Unknown/Uncategorized",
> + [ESR_ELx_EC_WFx] = "WFI/WFE",
> + [ESR_ELx_EC_CP15_32] = "CP15 MCR/MRC",
> + [ESR_ELx_EC_CP15_64] = "CP15 MCRR/MRRC",
> + [ESR_ELx_EC_CP14_MR] = "CP14 MCR/MRC",
> + [ESR_ELx_EC_CP14_LS] = "CP14 LDC/STC",
> + [ESR_ELx_EC_FP_ASIMD] = "ASIMD",
> + [ESR_ELx_EC_CP10_ID] = "CP10 MRC/VMRS",
> + [ESR_ELx_EC_PAC] = "PAC",
> + [ESR_ELx_EC_CP14_64] = "CP14 MCRR/MRRC",
> + [ESR_ELx_EC_BTI] = "BTI",
> + [ESR_ELx_EC_ILL] = "PSTATE.IL",
> + [ESR_ELx_EC_SVC32] = "SVC (AArch32)",
> + [ESR_ELx_EC_HVC32] = "HVC (AArch32)",
> + [ESR_ELx_EC_SMC32] = "SMC (AArch32)",
> + [ESR_ELx_EC_SVC64] = "SVC (AArch64)",
> + [ESR_ELx_EC_HVC64] = "HVC (AArch64)",
> + [ESR_ELx_EC_SMC64] = "SMC (AArch64)",
> + [ESR_ELx_EC_SYS64] = "MSR/MRS (AArch64)",
> + [ESR_ELx_EC_SVE] = "SVE",
> + [ESR_ELx_EC_ERET] = "ERET/ERETAA/ERETAB",
> + [ESR_ELx_EC_FPAC] = "FPAC",
> + [ESR_ELx_EC_SME] = "SME",
> + [ESR_ELx_EC_IMP_DEF] = "EL3 IMP DEF",
> + [ESR_ELx_EC_IABT_LOW] = "IABT (lower EL)",
> + [ESR_ELx_EC_IABT_CUR] = "IABT (current EL)",
> + [ESR_ELx_EC_PC_ALIGN] = "PC Alignment",
> + [ESR_ELx_EC_DABT_LOW] = "DABT (lower EL)",
> + [ESR_ELx_EC_DABT_CUR] = "DABT (current EL)",
> + [ESR_ELx_EC_SP_ALIGN] = "SP Alignment",
> + [ESR_ELx_EC_MOPS] = "MOPS",
> + [ESR_ELx_EC_FP_EXC32] = "FP (AArch32)",
> + [ESR_ELx_EC_FP_EXC64] = "FP (AArch64)",
> + [ESR_ELx_EC_GCS] = "Guarded Control Stack",
> + [ESR_ELx_EC_SERROR] = "SError",
> + [ESR_ELx_EC_BREAKPT_LOW] = "Breakpoint (lower EL)",
> + [ESR_ELx_EC_BREAKPT_CUR] = "Breakpoint (current EL)",
> + [ESR_ELx_EC_SOFTSTP_LOW] = "Software Step (lower EL)",
> + [ESR_ELx_EC_SOFTSTP_CUR] = "Software Step (current EL)",
> + [ESR_ELx_EC_WATCHPT_LOW] = "Watchpoint (lower EL)",
> + [ESR_ELx_EC_WATCHPT_CUR] = "Watchpoint (current EL)",
> + [ESR_ELx_EC_BKPT32] = "BKPT (AArch32)",
> + [ESR_ELx_EC_VECTOR32] = "Vector catch (AArch32)",
> + [ESR_ELx_EC_BRK64] = "BRK (AArch64)",
> +};
> +
We could rip out the 32bit ones.
Not necessarily right now as it's easier to compare to the aarch64
implementation like this but at least at a later time.
I was also wondering if it would make sense to have all the feature
checks for unimplemented features in one file.
More information about the linux-arm-kernel
mailing list