[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Qemu-ppc] [PATCH v7 3/6] target/ppc: Handle NMI guest
From: |
Greg Kurz |
Subject: |
Re: [Qemu-devel] [Qemu-ppc] [PATCH v7 3/6] target/ppc: Handle NMI guest exit |
Date: |
Thu, 4 Apr 2019 11:35:44 +0200 |
On Thu, 4 Apr 2019 14:40:45 +0530
Aravinda Prasad <address@hidden> wrote:
> On Monday 25 March 2019 11:52 AM, David Gibson wrote:
> > On Fri, Mar 22, 2019 at 12:03:58PM +0530, Aravinda Prasad wrote:
> >> Memory error such as bit flips that cannot be corrected
> >> by hardware are passed on to the kernel for handling.
> >> If the memory address in error belongs to guest then
> >> the guest kernel is responsible for taking suitable action.
> >> Patch [1] enhances KVM to exit guest with exit reason
> >> set to KVM_EXIT_NMI in such cases. This patch handles
> >> KVM_EXIT_NMI exit.
> >>
> >> [1] https://www.spinics.net/lists/kvm-ppc/msg12637.html
> >> (e20bbd3d and related commits)
> >>
> >> Signed-off-by: Aravinda Prasad <address@hidden>
> >> ---
> >> hw/ppc/spapr_events.c | 22 ++++++++++++++++++++++
> >> include/hw/ppc/spapr.h | 1 +
> >> target/ppc/kvm.c | 16 ++++++++++++++++
> >> target/ppc/kvm_ppc.h | 2 ++
> >> 4 files changed, 41 insertions(+)
> >>
>
> [...]
>
> >> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> >> index 2427c8e..a593448 100644
> >> --- a/target/ppc/kvm.c
> >> +++ b/target/ppc/kvm.c
> >> @@ -1738,6 +1738,11 @@ int kvm_arch_handle_exit(CPUState *cs, struct
> >> kvm_run *run)
> >> ret = 0;
> >> break;
> >>
> >> + case KVM_EXIT_NMI:
> >> + DPRINTF("handle NMI exception\n");
> >
> > tracepoints are generally preferred to new DPRINTFs.
>
> I see DPRINTFs used in all other exit reasons in this function. Do you
> want me to change this particular exit case to tracepoints? I think it
> is better to keep this DPRINTF as of now and change all the DPRINTFs to
> tracepoints in a separate patch set.
>
git grep shows that all DPRINTFs (25 of them) are in target/ppc/kvm.c. I guess
this can be addressed with a single, mechanical and easy to review preparatory
patch.
> Regards,
> Aravinda
>
> >
> >> + ret = kvm_handle_nmi(cpu, run);
> >> + break;
> >> +
> >> default:
> >> fprintf(stderr, "KVM: unknown exit reason %d\n",
> >> run->exit_reason);
> >> ret = -1;
> >> @@ -2803,6 +2808,17 @@ int kvm_arch_msi_data_to_gsi(uint32_t data)
> >> return data & 0xffff;
> >> }
> >>
> >> +int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run)
> >> +{
> >> + bool recovered = run->flags & KVM_RUN_PPC_NMI_DISP_FULLY_RECOV;
> >> +
> >> + cpu_synchronize_state(CPU(cpu));
> >> +
> >> + spapr_mce_req_event(cpu, recovered);
> >> +
> >> + return 0;
> >> +}
> >> +
> >> int kvmppc_enable_hwrng(void)
> >> {
> >> if (!kvm_enabled() || !kvm_check_extension(kvm_state,
> >> KVM_CAP_PPC_HWRNG)) {
> >> diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
> >> index 2c2ea30..df5e85f 100644
> >> --- a/target/ppc/kvm_ppc.h
> >> +++ b/target/ppc/kvm_ppc.h
> >> @@ -80,6 +80,8 @@ bool kvmppc_hpt_needs_host_contiguous_pages(void);
> >> void kvm_check_mmu(PowerPCCPU *cpu, Error **errp);
> >> void kvmppc_set_reg_ppc_online(PowerPCCPU *cpu, unsigned int online);
> >>
> >> +int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run);
> >> +
> >> #else
> >>
> >> static inline uint32_t kvmppc_get_tbfreq(void)
> >>
> >
>