[PATCH v21 0/7]target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests

Ganesh Goudar posted 7 patches 4 years, 3 months ago
Test docker-quick@centos7 passed
Test FreeBSD passed
Test docker-mingw@fedora passed
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200130184423.20519-1-ganeshgr@linux.ibm.com
Maintainers: David Gibson <david@gibson.dropbear.id.au>, Richard Henderson <rth@twiddle.net>, Paolo Bonzini <pbonzini@redhat.com>
cpus.c                   |   5 +
hw/ppc/spapr.c           |  60 +++++++++
hw/ppc/spapr_caps.c      |  28 ++++
hw/ppc/spapr_events.c    | 269 +++++++++++++++++++++++++++++++++++++++
hw/ppc/spapr_rtas.c      |  87 +++++++++++++
include/hw/ppc/spapr.h   |  25 +++-
include/qemu/main-loop.h |   8 ++
target/ppc/kvm.c         |  24 ++++
target/ppc/kvm_ppc.h     |   8 ++
target/ppc/trace-events  |   1 +
10 files changed, 513 insertions(+), 2 deletions(-)
[PATCH v21 0/7]target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests
Posted by Ganesh Goudar 4 years, 3 months ago
This patch set adds support for FWNMI in PowerKVM guests.

System errors such as SLB multihit and memory errors
that cannot be corrected by hardware is passed on to
the kernel for handling by raising machine check
exception (an NMI). Upon such machine check exceptions,
if the address in error belongs to guest then KVM
invokes guests' 0x200 interrupt vector if the guest
is not FWNMI capable. For FWNMI capable guest
KVM passes the control to QEMU by exiting the guest.

This patch series adds functionality to QEMU to pass
on such machine check exceptions to the FWNMI capable
guest kernel by building an error log and invoking
the guest registered machine check handling routine.

The KVM changes are now part of the upstream kernel
(commit e20bbd3d). This series contain QEMU changes.

Change Log v21:
  - Use error_setg() for failure handling in apply hook.
  - Report warning if FWNMI enabled for TCG.
  - Enable FWNMI by default for machine type 5.0.

Change Log v20:
  - Remove code left over from previous version.

Change Log v19:
  - Create error object for migration blocker in machine_init().
  - Remove the check to see fwnmi calls are already registered,
    which is no longer needed.
  - Register fwnmi RTAS calls in core_rtas_register_types() where
    other RTAS calls are registered.
  - Bail out from interlock call if the cap is not set.
  - Reorder and add missing S-O-Bs.

Change Log v18:
  - Dynamically create the Error object before adding it as blocker
  - In apply hook check if the fwnmi calls are already registered and
    if kvm supports fwnmi before registering the fwnmi calls.
  - In rtas_ibm_nmi_register() test the feature flag before attempting
    to get the RTAS address
  - Introduce a bool member "fwnmi_calls_registered" to check if the
    fwnmi calls are registered and use the same in needed hook to save
    the state during migration. 

Change Log v17:
  - Add fwnmi cap to migration state
  - Reprhase the commit message in patch 2/7

Change Log v16:
  - Fixed coding style problems

Change Log v15:
  - Removed cap_ppc_fwnmi
  - Moved fwnmi registeration to .apply hook
  - Assume SLOF has allocated enough room for rtas error log
  - Using ARRAY_SIZE to end the loop
  - Do not set FWNMI cap in post_load, now its done in .apply hook

Change Log v14:
  - Feature activation moved to a separate patch
  - Fixed issues with migration blocker

Change Log v13:
  - Minor fixes (mostly nits)
  - Moved FWNMI guest registration check from patch 4 to 3.

Change Log v12:
  - Rebased to latest ppc-for-4.2 (SHA b1e8156743)

Change Log v11:
  - Moved FWNMI SPAPR cap defaults to 4.2 class option
  - Fixed issues with handling fwnmi KVM capability

---

Aravinda Prasad (7):
  Wrapper function to wait on condition for the main loop mutex
  ppc: spapr: Introduce FWNMI capability
  target/ppc: Handle NMI guest exit
  target/ppc: Build rtas error log upon an MCE
  ppc: spapr: Handle "ibm,nmi-register" and "ibm,nmi-interlock" RTAS
    calls
  migration: Include migration support for machine check handling
  ppc: spapr: Activate the FWNMI functionality

 cpus.c                   |   5 +
 hw/ppc/spapr.c           |  60 +++++++++
 hw/ppc/spapr_caps.c      |  28 ++++
 hw/ppc/spapr_events.c    | 269 +++++++++++++++++++++++++++++++++++++++
 hw/ppc/spapr_rtas.c      |  87 +++++++++++++
 include/hw/ppc/spapr.h   |  25 +++-
 include/qemu/main-loop.h |   8 ++
 target/ppc/kvm.c         |  24 ++++
 target/ppc/kvm_ppc.h     |   8 ++
 target/ppc/trace-events  |   1 +
 10 files changed, 513 insertions(+), 2 deletions(-)

-- 
2.17.2


Re: [PATCH v21 0/7]target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests
Posted by David Gibson 4 years, 3 months ago
On Fri, Jan 31, 2020 at 12:14:16AM +0530, Ganesh Goudar wrote:
> This patch set adds support for FWNMI in PowerKVM guests.
> 
> System errors such as SLB multihit and memory errors
> that cannot be corrected by hardware is passed on to
> the kernel for handling by raising machine check
> exception (an NMI). Upon such machine check exceptions,
> if the address in error belongs to guest then KVM
> invokes guests' 0x200 interrupt vector if the guest
> is not FWNMI capable. For FWNMI capable guest
> KVM passes the control to QEMU by exiting the guest.
> 
> This patch series adds functionality to QEMU to pass
> on such machine check exceptions to the FWNMI capable
> guest kernel by building an error log and invoking
> the guest registered machine check handling routine.
> 
> The KVM changes are now part of the upstream kernel
> (commit e20bbd3d). This series contain QEMU changes.

Applied to ppc-for-5.0.

> 
> Change Log v21:
>   - Use error_setg() for failure handling in apply hook.
>   - Report warning if FWNMI enabled for TCG.
>   - Enable FWNMI by default for machine type 5.0.
> 
> Change Log v20:
>   - Remove code left over from previous version.
> 
> Change Log v19:
>   - Create error object for migration blocker in machine_init().
>   - Remove the check to see fwnmi calls are already registered,
>     which is no longer needed.
>   - Register fwnmi RTAS calls in core_rtas_register_types() where
>     other RTAS calls are registered.
>   - Bail out from interlock call if the cap is not set.
>   - Reorder and add missing S-O-Bs.
> 
> Change Log v18:
>   - Dynamically create the Error object before adding it as blocker
>   - In apply hook check if the fwnmi calls are already registered and
>     if kvm supports fwnmi before registering the fwnmi calls.
>   - In rtas_ibm_nmi_register() test the feature flag before attempting
>     to get the RTAS address
>   - Introduce a bool member "fwnmi_calls_registered" to check if the
>     fwnmi calls are registered and use the same in needed hook to save
>     the state during migration. 
> 
> Change Log v17:
>   - Add fwnmi cap to migration state
>   - Reprhase the commit message in patch 2/7
> 
> Change Log v16:
>   - Fixed coding style problems
> 
> Change Log v15:
>   - Removed cap_ppc_fwnmi
>   - Moved fwnmi registeration to .apply hook
>   - Assume SLOF has allocated enough room for rtas error log
>   - Using ARRAY_SIZE to end the loop
>   - Do not set FWNMI cap in post_load, now its done in .apply hook
> 
> Change Log v14:
>   - Feature activation moved to a separate patch
>   - Fixed issues with migration blocker
> 
> Change Log v13:
>   - Minor fixes (mostly nits)
>   - Moved FWNMI guest registration check from patch 4 to 3.
> 
> Change Log v12:
>   - Rebased to latest ppc-for-4.2 (SHA b1e8156743)
> 
> Change Log v11:
>   - Moved FWNMI SPAPR cap defaults to 4.2 class option
>   - Fixed issues with handling fwnmi KVM capability
> 
> ---
> 
> Aravinda Prasad (7):
>   Wrapper function to wait on condition for the main loop mutex
>   ppc: spapr: Introduce FWNMI capability
>   target/ppc: Handle NMI guest exit
>   target/ppc: Build rtas error log upon an MCE
>   ppc: spapr: Handle "ibm,nmi-register" and "ibm,nmi-interlock" RTAS
>     calls
>   migration: Include migration support for machine check handling
>   ppc: spapr: Activate the FWNMI functionality
> 
>  cpus.c                   |   5 +
>  hw/ppc/spapr.c           |  60 +++++++++
>  hw/ppc/spapr_caps.c      |  28 ++++
>  hw/ppc/spapr_events.c    | 269 +++++++++++++++++++++++++++++++++++++++
>  hw/ppc/spapr_rtas.c      |  87 +++++++++++++
>  include/hw/ppc/spapr.h   |  25 +++-
>  include/qemu/main-loop.h |   8 ++
>  target/ppc/kvm.c         |  24 ++++
>  target/ppc/kvm_ppc.h     |   8 ++
>  target/ppc/trace-events  |   1 +
>  10 files changed, 513 insertions(+), 2 deletions(-)
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson