On Thu, Jun 05, 2014 at 02:09:14PM +0200, Alexander Graf wrote: > >On 05.06.14 08:53, Gavin Shan wrote: >>The emulation for EEH RTAS requests from guest isn't covered >>by QEMU yet and the patch implements them. >> >>The patch defines constants used by EEH RTAS calls and adds >>callback sPAPRPHBClass::eeh_handler, which is going to be used >>this way: >> >>1. RTAS calls are received in spapr_pci.c, sanity check is done >> there. >>2. RTAS handlers handle what they can. If there is something it >> cannot handle and sPAPRPHBClass::eeh_handler callback is defined, >> it is called. >>3. sPAPRPHBClass::eeh_handler is only implemented for VFIO now. It >> does ioctl() to the IOMMU container fd to complete the call. Error >> codes from that ioctl() are transferred back to the guest. >> >>This adds 6 RTAS handlers, all defined in SPAPR specification: >> >>1) ibm,set-eeh-option: disables/enables EEH on a device, removes PE from >>stopped state; >>2) ibm,get-config-addr-info2 - returns fabric configuration address (upper >>PCI bridge or PHB if there is no bridge); >>3) ibm,read-slot-reset-state2 - retrieve PE state; >>4) ibm,set-slot-reset - issue PE reset; >>5) ibm,configure-pe - configure PCI bridges in the affected PE; >>6) ibm,slot-error-detail - retrieve EEH error log; >> >>All calls use fabric configuration address (a.k.a. PE address) as a target >>address except ibm,get-config-addr-info2 and one case (enable EEH on the >>specified PCI function) for ibm,set-eeh-option. >> >>Signed-off-by: Gavin Shan <gws...@linux.vnet.ibm.com> >>--- >> hw/ppc/spapr_pci.c | 248 >> ++++++++++++++++++++++++++++++++++++++++++++ >> include/hw/pci-host/spapr.h | 7 ++ >> include/hw/ppc/spapr.h | 33 ++++++ >> 3 files changed, 288 insertions(+) >> >>diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c >>index a9f307a..423e4ff 100644 >>--- a/hw/ppc/spapr_pci.c >>+++ b/hw/ppc/spapr_pci.c >>@@ -422,6 +422,241 @@ static void >>rtas_ibm_query_interrupt_source_number(PowerPCCPU *cpu, >> rtas_st(rets, 2, 1);/* 0 == level; 1 == edge */ >> } >>+static int rtas_finish_eeh_request(sPAPRPHBState *sphb, >>+ uint32_t req, uint32_t opt, >>+ target_ulong rets) > >The only thing I dislike about this patch is the name of this >function. It doesn't finish the eeh request - it actually does it :). >
Ok. I'll change it to rtas_handle_eeh_request() :-) Thanks, Gavin > >Alex >