On 2019/11/27 22:17, Beata Michalska wrote: > On Wed, 27 Nov 2019 at 13:03, Igor Mammedov <imammedo@xxxxxxxxxx> wrote: >> >> On Wed, 27 Nov 2019 20:47:15 +0800 >> Xiang Zheng <zhengxiang9@xxxxxxxxxx> wrote: >> >>> Hi Beata, >>> >>> Thanks for you review! >>> >>> On 2019/11/22 23:47, Beata Michalska wrote: >>>> Hi, >>>> >>>> On Mon, 11 Nov 2019 at 01:48, Xiang Zheng <zhengxiang9@xxxxxxxxxx> wrote: >>>>> >>>>> From: Dongjiu Geng <gengdongjiu@xxxxxxxxxx> >>>>> >>>>> Add a SIGBUS signal handler. In this handler, it checks the SIGBUS type, >>>>> translates the host VA delivered by host to guest PA, then fills this PA >>>>> to guest APEI GHES memory, then notifies guest according to the SIGBUS >>>>> type. >>>>> >>>>> When guest accesses the poisoned memory, it will generate a Synchronous >>>>> External Abort(SEA). Then host kernel gets an APEI notification and calls >>>>> memory_failure() to unmapped the affected page in stage 2, finally >>>>> returns to guest. >>>>> >>>>> Guest continues to access the PG_hwpoison page, it will trap to KVM as >>>>> stage2 fault, then a SIGBUS_MCEERR_AR synchronous signal is delivered to >>>>> Qemu, Qemu records this error address into guest APEI GHES memory and >>>>> notifes guest using Synchronous-External-Abort(SEA). >>>>> >>>>> In order to inject a vSEA, we introduce the kvm_inject_arm_sea() function >>>>> in which we can setup the type of exception and the syndrome information. >>>>> When switching to guest, the target vcpu will jump to the synchronous >>>>> external abort vector table entry. >>>>> >>>>> The ESR_ELx.DFSC is set to synchronous external abort(0x10), and the >>>>> ESR_ELx.FnV is set to not valid(0x1), which will tell guest that FAR is >>>>> not valid and hold an UNKNOWN value. These values will be set to KVM >>>>> register structures through KVM_SET_ONE_REG IOCTL. >>>>> >>>>> Signed-off-by: Dongjiu Geng <gengdongjiu@xxxxxxxxxx> >>>>> Signed-off-by: Xiang Zheng <zhengxiang9@xxxxxxxxxx> >>>>> Reviewed-by: Michael S. Tsirkin <mst@xxxxxxxxxx> >>>>> --- >> [...] >>>>> diff --git a/include/hw/acpi/acpi_ghes.h b/include/hw/acpi/acpi_ghes.h >>>>> index cb62ec9c7b..8e3c5b879e 100644 >>>>> --- a/include/hw/acpi/acpi_ghes.h >>>>> +++ b/include/hw/acpi/acpi_ghes.h >>>>> @@ -24,6 +24,9 @@ >>>>> >>>>> #include "hw/acpi/bios-linker-loader.h" >>>>> >>>>> +#define ACPI_GHES_CPER_OK 1 >>>>> +#define ACPI_GHES_CPER_FAIL 0 >>>>> + >>>> >>>> Is there really a need to introduce those ? >>>> >>> >>> Don't you think it's more clear than using "1" or "0"? :) >> >> or maybe just reuse default libc return convention: 0 - ok, -1 - fail >> and drop custom macros >> > > Totally agree. > OK, let's reuse default libc return convention. -- Thanks, Xiang