The patchset depends on below Linux upstream commits: commit ed3e81f ("powerpc/eeh: Move PE state constants around") commit ec33d36 ("powerpc/eeh: Introduce eeh_pe_inject_err()")
According to PAPR specification 2.7, there're 3 RTAS calls relevent to error injection: "ibm,open-errinjct", "ibm,close-errinjct", "ibm,errinjct". The userland utility "errinjct" running on guest utilizes those 3 RTAS calls like this way: Call "ibm,open-errinjct" that returns open-token, which is passed to "ibm,errinjct" together with error specific arguments to do error injection. Finally, to return the open-token by calling "ibm,close-errinject". "ibm,errinjct" can be used to inject various errors, not limited to EEH errors. However, this patchset is going to support injecting EEH errors only for VFIO PCI devices. ========= Changelog ========= v2 -> v3: * Replace random token number with incremental counter. Another boolean variable to track if it's opened. Both of them are added to migration stream. * The return value from sPAPRPHBClass::eeh_inject_error() can be passed to user directly. No need to do conversion. * Corrected error code to RTAS_OUT_CLOSE_ERROR in rtas_ibm_errinjct(). * Don't expose error injection tokens for unsupported types. v1 -> v2: * Rebased to git://github.com/dgibson/qemu.git (branch: spapr-next) * Remove specific PCI error types in hw/ppc/spapr.h. Use those macros asm-powerpc/eeh.h instead. Gavin Shan (3): linux-headers: Add eeh.h sPAPR: Support RTAS call ibm, {open, close}-errinjct sPAPR: Support RTAS call ibm,errinjct hw/ppc/spapr.c | 5 ++ hw/ppc/spapr_pci.c | 36 ++++++++++ hw/ppc/spapr_pci_vfio.c | 56 ++++++++++++++++ hw/ppc/spapr_rtas.c | 143 ++++++++++++++++++++++++++++++++++++++++ include/hw/pci-host/spapr.h | 2 + include/hw/ppc/spapr.h | 17 ++++- linux-headers/asm-powerpc/eeh.h | 56 ++++++++++++++++ 7 files changed, 314 insertions(+), 1 deletion(-) create mode 100644 linux-headers/asm-powerpc/eeh.h -- 2.1.0