Introduce helper push_ghes_memory_errors(), which sends ACPI GHES memory errors and injects SEA exception. With this, we can add more logics to the function to support multiple ACPI GHES memory errors in the next path.
No functional changes intended. Signed-off-by: Gavin Shan <[email protected]> --- target/arm/kvm.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index a889315606..5b151eda3c 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2429,12 +2429,23 @@ int kvm_arch_get_registers(CPUState *cs, Error **errp) return ret; } +static void push_ghes_memory_errors(CPUState *c, AcpiGhesState *ags, + uint64_t paddr, Error **errp) +{ + uint64_t addresses[16]; + + addresses[0] = paddr; + + kvm_cpu_synchronize_state(c); + acpi_ghes_memory_errors(ags, ACPI_HEST_SRC_ID_SYNC, addresses, 1, errp); + kvm_inject_arm_sea(c); +} + void kvm_arch_on_sigbus_vcpu(CPUState *c, int code, void *addr) { ram_addr_t ram_addr; hwaddr paddr; AcpiGhesState *ags; - uint64_t addresses[16]; assert(code == BUS_MCEERR_AR || code == BUS_MCEERR_AO); @@ -2455,12 +2466,8 @@ void kvm_arch_on_sigbus_vcpu(CPUState *c, int code, void *addr) * later from the main thread, so doing the injection of * the error would be more complicated. */ - addresses[0] = paddr; if (code == BUS_MCEERR_AR) { - kvm_cpu_synchronize_state(c); - acpi_ghes_memory_errors(ags, ACPI_HEST_SRC_ID_SYNC, - addresses, 1, &error_abort); - kvm_inject_arm_sea(c); + push_ghes_memory_errors(c, ags, paddr, &error_abort); } return; } -- 2.51.0
