On Fri, Feb 20, 2015 at 03:58:51PM +1100, Gavin Shan wrote: agraf, could you help taking a look on this when you have available time?
Thanks, Gavin >The series of patches adds support EEH for VFIO PCI devices on sPAPR platform. >It requires corresponding host kernel support, which was merged during 3.17 >merge window. This patchset has been rebased to Alex Graf's QEMU repository: > > git://github.com/agraf/qemu.git (branch: ppc-next) > >The implementations notes are below. Please consider for merging! > >* RTAS calls are received in spapr_pci.c, sanity check is done there. RTAS > handlers handle what they can. If there is something it cannot handle and > sPAPRPHBClass EEH callback is defined, it is called. >* sPAPRPHBClass EEH callbacks are 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. > >Changelog >========= >v18 -> v19: > * Check the validity of PCI device address in > sPAPRPHBClass::eeh_set_option() > when enabling EEH functionality. >v17 -> v18: > * Check options in sPAPRPHBClass callbacks for RTAS call > "ibm,set-eeh-option" > and "ibm,set-slot-reset". > * Return RTAS_OUT_PARAM_ERROR on errors and RTAS_OUT_NO_ERRORS_FOUND on > success > as we don't have error log yet. >v16 -> v17: > * Split sPAPRPHBClass::eeh_handler() to multiple callbacks according to > David > Gibson's suggestion > * Make comments for the form of PE address more precise and merge the > condition > checking on the option in rtas_ibm_get_config_addr_info2() to improve > code > readability > * Return RTAS_OUT_PARAM_ERROR for invalid number of arguments to function > rtas_ibm_slot_error_detail(), which is inconsistent with PAPR spec >v15 -> v16: > * Drop rtas_handle_eeh_request() and merge the logic to its callers so that > more accurate return values can be returned for RTAS calls in the callers > * Always return 1 ("No error log") for RTAS call "ibm,slot-error-detail" > and > correct wrong return values for other RTAS calls according to David > Gibson's > suggestions. > * Make fall-through more obvious for case of negative return value from > sPAPRPHBClass::eeh_handler() > * Clear the argument buffer passed to ioctl() > * Rename sPAPRPHBClass variable from "info" to "spc" >v14 -> v15: > * Dropped unrelated patch making find_phb()/find_dev() public. > * Checking RTAS parameter number before accessing RTAS parameter buffer for > more safety. > * Return hardware error from RTAS call "ibm,set-eeh-option" and > "ibm,set-slot-reset" > for some cases according to PAPR spec. >v13 -> v14: > * Check if sPAPRPHBState instance is valid before converting it to the > corresponding class as pointed by Alex Graf. >v12 -> v13: > * Rebase to Alex Graf's QEMU repository ("ppc-next" branch). > * Drop the patch for header file (vfio.h) changes, which was merged > to QEMU repository by commit a9fd1654 ("linux-headers: update to > 3.17-rc7"). > * Retested on Emulex adapter and EEH errors are recovered successfully. > >Gavin Shan (2): > sPAPR: Implement EEH RTAS calls > sPAPR: Implement sPAPRPHBClass EEH callbacks > > hw/ppc/spapr_pci.c | 271 ++++++++++++++++++++++++++++++++++++++++++++ > hw/ppc/spapr_pci_vfio.c | 115 +++++++++++++++++++ > hw/vfio/common.c | 1 + > include/hw/pci-host/spapr.h | 4 + > include/hw/ppc/spapr.h | 43 ++++++- > 5 files changed, 432 insertions(+), 2 deletions(-) > >-- >1.8.3.2 >