qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v8 1/4] sPAPR: Implement EEH RTAS calls


From: Alexander Graf
Subject: Re: [Qemu-devel] [PATCH v8 1/4] sPAPR: Implement EEH RTAS calls
Date: Thu, 05 Jun 2014 14:09:14 +0200
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.5.0


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 <address@hidden>
---
  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 :).


Alex




reply via email to

[Prev in Thread] Current Thread [Next in Thread]