All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests
@ 2017-09-28 10:37 Aravinda Prasad
  2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region Aravinda Prasad
                   ` (6 more replies)
  0 siblings, 7 replies; 27+ messages in thread
From: Aravinda Prasad @ 2017-09-28 10:37 UTC (permalink / raw)
  To: qemu-ppc, qemu-devel, david; +Cc: aik, mahesh, benh, paulus, sam.bobroff

This series of patches adds support for FWNMI in PowerKVM guests.

Memory error such as bit flips 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 exception, if the address in error belongs
to guest then KVM causes a guest exit with KVM_EXIT_NMI
exit reason.

This patch series adds functionality to pass on such
machine check exception to the guest kernel by suitably
handling KVM_EXIT_NMI exit and building the error log.

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

Change Log v5:
    - Handled VM migrations by including rtas_addr in VMSTATE.
    - Migration is blocked while a machine check is in progress.

Change Log v4:
    - Included the RTAS_DISP_FULLY_RECOVERED scenario in
      patch 4/5.

Change Log v3:
    - Rebased to v2.10.0-rc0 (git://github.com/dgibson/qemu)

Change Log v2:
    - Added KVM capability
    - Serialized multiple NMIs with a conditional wait

---

Aravinda Prasad (6):
      ppc: spapr: Register and handle HCALL to receive updated RTAS region
      ppc: spapr: Handle "ibm,nmi-register" and "ibm,nmi-interlock" RTAS calls
      Wrapper function to wait on condition for the main loop mutex
      target/ppc: Handle NMI guest exit
      ppc: spapr: Enable FWNMI capability
      migration: Block migration while handling machine check


 cpus.c                   |    5 +++
 hw/ppc/spapr.c           |   23 ++++++++++++
 hw/ppc/spapr_events.c    |   62 +++++++++++++++++++++++++++++++
 hw/ppc/spapr_hcall.c     |    8 ++++
 hw/ppc/spapr_rtas.c      |   53 +++++++++++++++++++++++++++
 include/hw/ppc/spapr.h   |   23 +++++++++++-
 include/qemu/main-loop.h |    8 ++++
 target/ppc/kvm.c         |   92 ++++++++++++++++++++++++++++++++++++++++++++++
 target/ppc/kvm_ppc.h     |   20 ++++++++++
 9 files changed, 292 insertions(+), 2 deletions(-)

--
Aravinda Prasad

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-09-28 10:37 [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
@ 2017-09-28 10:37 ` Aravinda Prasad
  2017-09-29  6:17   ` David Gibson
  2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 2/6] ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls Aravinda Prasad
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 27+ messages in thread
From: Aravinda Prasad @ 2017-09-28 10:37 UTC (permalink / raw)
  To: qemu-ppc, qemu-devel, david; +Cc: aik, mahesh, benh, paulus, sam.bobroff

Receive updates from SLOF about the updated rtas-base.
A separate patch for SLOF [1] (commit f9a60de3) adds
functionality to invoke a private HCALL whenever OS
issues instantiate-rtas with a new rtas-base.

This is required as QEMU needs to know the updated rtas-base
as it allocates error reporting structure in RTAS space upon
a machine check exception.

[1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html

Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/spapr.c         |   11 +++++++++++
 hw/ppc/spapr_hcall.c   |    8 ++++++++
 include/hw/ppc/spapr.h |    4 +++-
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index ff87f15..5deae30 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1675,6 +1675,16 @@ static const VMStateDescription vmstate_spapr_patb_entry = {
     },
 };
 
+static const VMStateDescription vmstate_spapr_rtas_addr = {
+    .name = "spapr_rtas_addr",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT64(rtas_addr, sPAPRMachineState),
+        VMSTATE_END_OF_LIST()
+    },
+};
+
 static const VMStateDescription vmstate_spapr = {
     .name = "spapr",
     .version_id = 3,
@@ -1694,6 +1704,7 @@ static const VMStateDescription vmstate_spapr = {
         &vmstate_spapr_ov5_cas,
         &vmstate_spapr_patb_entry,
         &vmstate_spapr_pending_events,
+        &vmstate_spapr_rtas_addr,
         NULL
     }
 };
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index 8d72bb7..c15a93c 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -1088,6 +1088,13 @@ static target_ulong h_rtas(PowerPCCPU *cpu, sPAPRMachineState *spapr,
                            nret, rtas_r3 + 12 + 4*nargs);
 }
 
+static target_ulong h_rtas_update(PowerPCCPU *cpu, sPAPRMachineState *spapr,
+                                  target_ulong opcode, target_ulong *args)
+{
+    spapr->rtas_addr = args[0];
+    return 0;
+}
+
 static target_ulong h_logical_load(PowerPCCPU *cpu, sPAPRMachineState *spapr,
                                    target_ulong opcode, target_ulong *args)
 {
@@ -1750,6 +1757,7 @@ static void hypercall_register_types(void)
 
     /* qemu/KVM-PPC specific hcalls */
     spapr_register_hypercall(KVMPPC_H_RTAS, h_rtas);
+    spapr_register_hypercall(KVMPPC_H_RTAS_UPDATE, h_rtas_update);
 
     /* ibm,client-architecture-support support */
     spapr_register_hypercall(KVMPPC_H_CAS, h_client_architecture_support);
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index c1b365f..b395aa7 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -90,6 +90,7 @@ struct sPAPRMachineState {
 
     hwaddr rma_size;
     int vrma_adjust;
+    hwaddr rtas_addr;
     ssize_t rtas_size;
     void *rtas_blob;
     long kernel_size;
@@ -400,7 +401,8 @@ struct sPAPRMachineState {
 #define KVMPPC_H_LOGICAL_MEMOP  (KVMPPC_HCALL_BASE + 0x1)
 /* Client Architecture support */
 #define KVMPPC_H_CAS            (KVMPPC_HCALL_BASE + 0x2)
-#define KVMPPC_HCALL_MAX        KVMPPC_H_CAS
+#define KVMPPC_H_RTAS_UPDATE    (KVMPPC_HCALL_BASE + 0x3)
+#define KVMPPC_HCALL_MAX        KVMPPC_H_RTAS_UPDATE
 
 typedef struct sPAPRDeviceTreeUpdateHeader {
     uint32_t version_id;

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH v5 2/6] ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls
  2017-09-28 10:37 [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
  2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region Aravinda Prasad
@ 2017-09-28 10:37 ` Aravinda Prasad
  2017-09-29  6:49   ` David Gibson
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 3/6] Wrapper function to wait on condition for the main loop mutex Aravinda Prasad
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 27+ messages in thread
From: Aravinda Prasad @ 2017-09-28 10:37 UTC (permalink / raw)
  To: qemu-ppc, qemu-devel, david; +Cc: aik, mahesh, benh, paulus, sam.bobroff

This patch adds support in QEMU to handle "ibm,nmi-register"
and "ibm,nmi-interlock" RTAS calls.

The machine check notification address is saved when the
OS issues "ibm,nmi-register" RTAS call.

This patch also handles the case when multiple processors
experience machine check at or about the same time by
handling "ibm,nmi-interlock" call. In such cases, as per
PAPR, subsequent processors serialize waiting for the first
processor to issue the "ibm,nmi-interlock" call. The second
processor waits till the first processor, which also
received a machine check error, is done reading the error
log. The first processor issues "ibm,nmi-interlock" call
when the error log is consumed. This patch implements the
releasing part of the error-log while subsequent patch
(which builds error log) handles the locking part.

Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
---
 hw/ppc/spapr.c         |    8 ++++++++
 hw/ppc/spapr_rtas.c    |   35 +++++++++++++++++++++++++++++++++++
 include/hw/ppc/spapr.h |   11 ++++++++++-
 3 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 5deae30..d568ea6 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1477,6 +1477,11 @@ static void ppc_spapr_reset(void)
     first_ppc_cpu->env.nip = SPAPR_ENTRY_POINT;
 
     spapr->cas_reboot = false;
+
+    spapr->mc_status = -1;
+    spapr->guest_machine_check_addr = 0;
+    qemu_cond_destroy(&spapr->mc_delivery_cond);
+    qemu_cond_init(&spapr->mc_delivery_cond);
 }
 
 static void spapr_create_nvram(sPAPRMachineState *spapr)
@@ -2598,6 +2603,9 @@ static void ppc_spapr_init(MachineState *machine)
 
         kvmppc_spapr_enable_inkernel_multitce();
     }
+
+    spapr->mc_status = -1;
+    qemu_cond_init(&spapr->mc_delivery_cond);
 }
 
 static int spapr_kvm_type(const char *vm_type)
diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index cdf0b60..08e9a5e 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -348,6 +348,37 @@ static void rtas_get_power_level(PowerPCCPU *cpu, sPAPRMachineState *spapr,
     rtas_st(rets, 1, 100);
 }
 
+static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
+                                  sPAPRMachineState *spapr,
+                                  uint32_t token, uint32_t nargs,
+                                  target_ulong args,
+                                  uint32_t nret, target_ulong rets)
+{
+    spapr->guest_machine_check_addr = rtas_ld(args, 1);
+    rtas_st(rets, 0, RTAS_OUT_SUCCESS);
+}
+
+static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu,
+                                   sPAPRMachineState *spapr,
+                                   uint32_t token, uint32_t nargs,
+                                   target_ulong args,
+                                   uint32_t nret, target_ulong rets)
+{
+    if (!spapr->guest_machine_check_addr) {
+        /* NMI register not called */
+        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
+    } else {
+        /*
+         * VCPU issuing "ibm,nmi-interlock" is done with NMI handling,
+         * hence unset mc_status.
+         */
+        spapr->mc_status = -1;
+        qemu_cond_signal(&spapr->mc_delivery_cond);
+        rtas_st(rets, 0, RTAS_OUT_SUCCESS);
+    }
+}
+
+
 static struct rtas_call {
     const char *name;
     spapr_rtas_fn fn;
@@ -489,6 +520,10 @@ static void core_rtas_register_types(void)
                         rtas_set_power_level);
     spapr_rtas_register(RTAS_GET_POWER_LEVEL, "get-power-level",
                         rtas_get_power_level);
+    spapr_rtas_register(RTAS_IBM_NMI_REGISTER, "ibm,nmi-register",
+                        rtas_ibm_nmi_register);
+    spapr_rtas_register(RTAS_IBM_NMI_INTERLOCK, "ibm,nmi-interlock",
+                        rtas_ibm_nmi_interlock);
 }
 
 type_init(core_rtas_register_types)
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index b395aa7..28b6e2e 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -124,6 +124,13 @@ struct sPAPRMachineState {
      * occurs during the unplug process. */
     QTAILQ_HEAD(, sPAPRDIMMState) pending_dimm_unplugs;
 
+    /* State related to "ibm,nmi-register" and "ibm,nmi-interlock" calls */
+    target_ulong guest_machine_check_addr;
+    /* mc_status is set to -1 if mc is not in progress, else is set to the CPU
+     * handling the mc. */
+    int mc_status;
+    QemuCond mc_delivery_cond;
+
     /*< public >*/
     char *kvm_type;
     MemoryHotplugState hotplug_memory;
@@ -520,8 +527,10 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
 #define RTAS_IBM_CREATE_PE_DMA_WINDOW           (RTAS_TOKEN_BASE + 0x27)
 #define RTAS_IBM_REMOVE_PE_DMA_WINDOW           (RTAS_TOKEN_BASE + 0x28)
 #define RTAS_IBM_RESET_PE_DMA_WINDOW            (RTAS_TOKEN_BASE + 0x29)
+#define RTAS_IBM_NMI_REGISTER                   (RTAS_TOKEN_BASE + 0x2A)
+#define RTAS_IBM_NMI_INTERLOCK                  (RTAS_TOKEN_BASE + 0x2B)
 
-#define RTAS_TOKEN_MAX                          (RTAS_TOKEN_BASE + 0x2A)
+#define RTAS_TOKEN_MAX                          (RTAS_TOKEN_BASE + 0x2C)
 
 /* RTAS ibm,get-system-parameter token values */
 #define RTAS_SYSPARM_SPLPAR_CHARACTERISTICS      20

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH v5 3/6] Wrapper function to wait on condition for the main loop mutex
  2017-09-28 10:37 [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
  2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region Aravinda Prasad
  2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 2/6] ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls Aravinda Prasad
@ 2017-09-28 10:38 ` Aravinda Prasad
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 4/6] target/ppc: Handle NMI guest exit Aravinda Prasad
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 27+ messages in thread
From: Aravinda Prasad @ 2017-09-28 10:38 UTC (permalink / raw)
  To: qemu-ppc, qemu-devel, david; +Cc: aik, mahesh, benh, paulus, sam.bobroff

Introduce a wrapper function to wait on condition for
the main loop mutex. This function atomically releases
the main loop mutex and causes the calling thread to
block on the condition.

Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
---
 cpus.c                   |    5 +++++
 include/qemu/main-loop.h |    8 ++++++++
 2 files changed, 13 insertions(+)

diff --git a/cpus.c b/cpus.c
index c9a6240..60be7f2 100644
--- a/cpus.c
+++ b/cpus.c
@@ -1589,6 +1589,11 @@ void qemu_mutex_unlock_iothread(void)
     qemu_mutex_unlock(&qemu_global_mutex);
 }
 
+void qemu_cond_wait_iothread(QemuCond *cond)
+{
+    qemu_cond_wait(cond, &qemu_global_mutex);
+}
+
 static bool all_vcpus_paused(void)
 {
     CPUState *cpu;
diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
index 6b4b60b..618cb2f 100644
--- a/include/qemu/main-loop.h
+++ b/include/qemu/main-loop.h
@@ -279,6 +279,14 @@ void qemu_mutex_lock_iothread(void);
  */
 void qemu_mutex_unlock_iothread(void);
 
+/**
+ * qemu_cond_wait_iothread: Wait on condition for the main loop mutex
+ *
+ * This function atomically releases the main loop mutex and causes
+ * the calling thread to block on the condition.
+ */
+void qemu_cond_wait_iothread(QemuCond *cond);
+
 /* internal interfaces */
 
 void qemu_fd_register(int fd);

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH v5 4/6] target/ppc: Handle NMI guest exit
  2017-09-28 10:37 [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
                   ` (2 preceding siblings ...)
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 3/6] Wrapper function to wait on condition for the main loop mutex Aravinda Prasad
@ 2017-09-28 10:38 ` Aravinda Prasad
  2017-10-04  1:29   ` David Gibson
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 5/6] ppc: spapr: Enable FWNMI capability Aravinda Prasad
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 27+ messages in thread
From: Aravinda Prasad @ 2017-09-28 10:38 UTC (permalink / raw)
  To: qemu-ppc, qemu-devel, david; +Cc: aik, mahesh, benh, paulus, sam.bobroff

Memory error such as bit flips that cannot be corrected
by hardware are passed on to the kernel for handling.
If the memory address in error belongs to guest then
the guest kernel is responsible for taking suitable action.
Patch [1] enhances KVM to exit guest with exit reason
set to KVM_EXIT_NMI in such cases.

This patch handles KVM_EXIT_NMI exit. If the guest OS
has registered the machine check handling routine by
calling "ibm,nmi-register", then the handler builds
the error log and invokes the registered handler else
invokes the handler at 0x200.

Note that FWNMI handles synchronous machine check exceptions
triggered by the hardware and hence we do not extend
such support to the "nmi" command available in the QEMU
monitor. Hence, "nmi" command from the monitor will
always go through 0x200 vector.

[1] https://www.spinics.net/lists/kvm-ppc/msg12637.html
	(e20bbd3d and related commits)

Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
---
 hw/ppc/spapr.c         |    4 +++
 hw/ppc/spapr_events.c  |   62 ++++++++++++++++++++++++++++++++++++++++++++++++
 include/hw/ppc/spapr.h |    6 +++++
 target/ppc/kvm.c       |   62 ++++++++++++++++++++++++++++++++++++++++++++++++
 target/ppc/kvm_ppc.h   |   14 +++++++++++
 5 files changed, 148 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index d568ea6..7780434 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -2453,6 +2453,10 @@ static void ppc_spapr_init(MachineState *machine)
         error_report("Could not get size of LPAR rtas '%s'", filename);
         exit(1);
     }
+
+    /* Resize blob to accommodate error log. */
+    spapr->rtas_size = spapr_get_rtas_size();
+
     spapr->rtas_blob = g_malloc(spapr->rtas_size);
     if (load_image_size(filename, spapr->rtas_blob, spapr->rtas_size) < 0) {
         error_report("Could not load LPAR rtas '%s'", filename);
diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
index e377fc7..ac93a7b 100644
--- a/hw/ppc/spapr_events.c
+++ b/hw/ppc/spapr_events.c
@@ -41,6 +41,7 @@
 #include "qemu/bcd.h"
 #include "hw/ppc/spapr_ovec.h"
 #include <libfdt.h>
+#include <linux/kvm.h>
 
 #define RTAS_LOG_VERSION_MASK                   0xff000000
 #define   RTAS_LOG_VERSION_6                    0x06000000
@@ -174,6 +175,22 @@ struct epow_extended_log {
     struct rtas_event_log_v6_epow epow;
 } QEMU_PACKED;
 
+/*
+ * Data format in RTAS Blob
+ *
+ * This structure contains error information related to Machine
+ * Check exception. This is filled up and copied to rtas blob
+ * upon machine check exception. The address of rtas blob is
+ * passed on to OS registered machine check notification
+ * routines upon machine check exception.
+ */
+struct rtas_event_log_mce {
+    target_ulong r3;
+    struct rtas_error_log rtas_error_log;
+    unsigned char   buffer[1];      /* Start of extended log */
+} QEMU_PACKED;
+
+
 union drc_identifier {
     uint32_t index;
     uint32_t count;
@@ -623,6 +640,51 @@ void spapr_hotplug_req_remove_by_count_indexed(sPAPRDRConnectorType drc_type,
                             RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, &drc_id);
 }
 
+ssize_t spapr_get_rtas_size(void)
+{
+    return RTAS_ERRLOG_OFFSET + sizeof(struct rtas_event_log_mce);
+}
+
+target_ulong spapr_mce_req_event(target_ulong r3, hwaddr rtas_addr,
+                                 uint16_t flags, bool err_type, bool le)
+{
+    struct rtas_event_log_mce mc_log;
+    uint32_t summary;
+
+    /* Set error log fields */
+    mc_log.r3 = r3;
+
+    summary = RTAS_LOG_SEVERITY_ERROR_SYNC;
+
+    if (flags & KVM_RUN_PPC_NMI_DISP_FULLY_RECOV) {
+        summary |= RTAS_LOG_DISPOSITION_FULLY_RECOVERED;
+    } else {
+        summary |= RTAS_LOG_DISPOSITION_NOT_RECOVERED;
+    }
+
+    summary |= (RTAS_LOG_INITIATOR_MEMORY | RTAS_LOG_TARGET_MEMORY);
+
+    if (err_type) {
+        summary |= RTAS_LOG_TYPE_ECC_UNCORR;
+    } else {
+        summary |= RTAS_LOG_TYPE_ECC_CORR;
+    }
+
+    mc_log.rtas_error_log.summary = cpu_to_be32(summary);
+
+    /* Handle all Host/Guest LE/BE combinations */
+    if (le) {
+        mc_log.r3 = cpu_to_le64(mc_log.r3);
+    } else {
+        mc_log.r3 = cpu_to_be64(mc_log.r3);
+    }
+
+    cpu_physical_memory_write(rtas_addr + RTAS_ERRLOG_OFFSET,
+                              &mc_log, sizeof(mc_log));
+
+    return rtas_addr + RTAS_ERRLOG_OFFSET;
+}
+
 static void check_exception(PowerPCCPU *cpu, sPAPRMachineState *spapr,
                             uint32_t token, uint32_t nargs,
                             target_ulong args,
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 28b6e2e..a75e9cf 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -556,6 +556,9 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
 #define DIAGNOSTICS_RUN_MODE_IMMEDIATE 2
 #define DIAGNOSTICS_RUN_MODE_PERIODIC  3
 
+/* Offset from rtas-base where error log is placed */
+#define RTAS_ERRLOG_OFFSET       0x200
+
 static inline uint64_t ppc64_phys_to_real(uint64_t addr)
 {
     return addr & ~0xF000000000000000ULL;
@@ -675,6 +678,9 @@ int spapr_hpt_shift_for_ramsize(uint64_t ramsize);
 void spapr_reallocate_hpt(sPAPRMachineState *spapr, int shift,
                           Error **errp);
 void spapr_clear_pending_events(sPAPRMachineState *spapr);
+ssize_t spapr_get_rtas_size(void);
+target_ulong spapr_mce_req_event(target_ulong r3, hwaddr rtas_addr,
+                                 uint16_t flags, bool err_type, bool le);
 
 /* CPU and LMB DRC release callbacks. */
 void spapr_core_release(DeviceState *dev);
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 171d3d8..7e4ce02 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -1798,6 +1798,11 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
         ret = 0;
         break;
 
+    case KVM_EXIT_NMI:
+        DPRINTF("handle NMI exception\n");
+        ret = kvm_handle_nmi(cpu, run);
+        break;
+
     default:
         fprintf(stderr, "KVM: unknown exit reason %d\n", run->exit_reason);
         ret = -1;
@@ -2746,6 +2751,63 @@ int kvm_arch_msi_data_to_gsi(uint32_t data)
     return data & 0xffff;
 }
 
+int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run)
+{
+    CPUPPCState *env = &cpu->env;
+    sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
+    PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
+    target_ulong msr = 0;
+    bool type, le;
+
+    cpu_synchronize_state(CPU(cpu));
+
+    /*
+     * Properly set bits in MSR before we invoke the handler.
+     * SRR0/1, DAR and DSISR are properly set by KVM
+     */
+    if (!(*pcc->interrupts_big_endian)(cpu)) {
+        msr |= (1ULL << MSR_LE);
+    }
+
+    if (env->msr && (1ULL << MSR_SF)) {
+        msr |= (1ULL << MSR_SF);
+    }
+
+    msr |= (1ULL << MSR_ME);
+    env->msr = msr;
+
+    if (!spapr->guest_machine_check_addr) {
+        /*
+         * If OS has not registered with "ibm,nmi-register"
+         * jump to 0x200
+         */
+        env->nip = 0x200;
+        return 0;
+    }
+
+    while (spapr->mc_status != -1) {
+        /*
+         * Check whether the same CPU got machine check error
+         * while still handling the mc error (i.e., before
+         * that CPU called "ibm,nmi-interlock"
+         */
+        if (spapr->mc_status == cpu->vcpu_id) {
+            qemu_system_guest_panicked(NULL);
+        }
+        qemu_cond_wait_iothread(&spapr->mc_delivery_cond);
+    }
+
+    spapr->mc_status = cpu->vcpu_id;
+
+    type = !!(env->spr[SPR_DSISR] & P7_DSISR_MC_UE);
+    le = !!(env->msr & (1ULL << MSR_LE));
+    env->gpr[3] = spapr_mce_req_event(env->gpr[3], spapr->rtas_addr,
+                                      run->flags, type, le);
+    env->nip = spapr->guest_machine_check_addr;
+
+    return 0;
+}
+
 int kvmppc_enable_hwrng(void)
 {
     if (!kvm_enabled() || !kvm_check_extension(kvm_state, KVM_CAP_PPC_HWRNG)) {
diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
index d6be38e..0139dae 100644
--- a/target/ppc/kvm_ppc.h
+++ b/target/ppc/kvm_ppc.h
@@ -71,6 +71,20 @@ bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
 
 bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path);
 
+int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run);
+
+/*
+ * Currently KVM only passes on the uncorrected machine
+ * check memory error to guest. Other machine check errors
+ * such as SLB multi-hit and TLB multi-hit are recovered
+ * in KVM and are not passed on to guest.
+ *
+ * DSISR Bit for uncorrected machine check error. Based
+ * on arch/powerpc/include/asm/mce.h
+ */
+#define PPC_BIT(bit)                (0x8000000000000000ULL >> bit)
+#define P7_DSISR_MC_UE              (PPC_BIT(48))  /* P8 too */
+
 #else
 
 static inline uint32_t kvmppc_get_tbfreq(void)

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH v5 5/6] ppc: spapr: Enable FWNMI capability
  2017-09-28 10:37 [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
                   ` (3 preceding siblings ...)
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 4/6] target/ppc: Handle NMI guest exit Aravinda Prasad
@ 2017-09-28 10:38 ` Aravinda Prasad
  2017-10-04  1:34   ` David Gibson
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 6/6] migration: Block migration while handling machine check Aravinda Prasad
  2017-09-28 10:53 ` [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests no-reply
  6 siblings, 1 reply; 27+ messages in thread
From: Aravinda Prasad @ 2017-09-28 10:38 UTC (permalink / raw)
  To: qemu-ppc, qemu-devel, david; +Cc: aik, mahesh, benh, paulus, sam.bobroff

Enable the KVM capability KVM_CAP_PPC_FWNMI so that
the KVM causes guest exit with NMI as exit reason
when it encounters a machine check exception on the
address belonging to a guest. Without this capability
enabled, KVM redirects machine check exceptions to
guest's 0x200 vector.

Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
---
 hw/ppc/spapr_rtas.c  |   15 +++++++++++++++
 target/ppc/kvm.c     |   13 +++++++++++++
 target/ppc/kvm_ppc.h |    6 ++++++
 3 files changed, 34 insertions(+)

diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 08e9a5e..d017a67 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -46,6 +46,7 @@
 #include "qemu/cutils.h"
 #include "trace.h"
 #include "hw/ppc/fdt.h"
+#include "kvm_ppc.h"
 
 static void rtas_display_character(PowerPCCPU *cpu, sPAPRMachineState *spapr,
                                    uint32_t token, uint32_t nargs,
@@ -354,6 +355,20 @@ static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
                                   target_ulong args,
                                   uint32_t nret, target_ulong rets)
 {
+    int ret;
+
+    ret = kvmppc_fwnmi_enable(cpu);
+
+    if (ret == 1) {
+        rtas_st(rets, 0, RTAS_OUT_NOT_SUPPORTED);
+        return;
+    }
+
+    if (ret < 0) {
+        rtas_st(rets, 0, RTAS_OUT_HW_ERROR);
+        return;
+    }
+
     spapr->guest_machine_check_addr = rtas_ld(args, 1);
     rtas_st(rets, 0, RTAS_OUT_SUCCESS);
 }
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 7e4ce02..59b3322 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -92,6 +92,7 @@ static int cap_mmu_radix;
 static int cap_mmu_hash_v3;
 static int cap_resize_hpt;
 static int cap_ppc_pvr_compat;
+static int cap_fwnmi;
 
 static uint32_t debug_inst_opcode;
 
@@ -150,6 +151,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
     cap_mmu_radix = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_RADIX);
     cap_mmu_hash_v3 = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_HASH_V3);
     cap_resize_hpt = kvm_vm_check_extension(s, KVM_CAP_SPAPR_RESIZE_HPT);
+    cap_fwnmi = kvm_check_extension(s, KVM_CAP_PPC_FWNMI);
     /*
      * Note: setting it to false because there is not such capability
      * in KVM at this moment.
@@ -2142,6 +2144,17 @@ void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
     }
 }
 
+int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
+{
+    CPUState *cs = CPU(cpu);
+
+    if (!cap_fwnmi) {
+        return 1;
+    }
+
+    return kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_FWNMI, 0);
+}
+
 int kvmppc_smt_threads(void)
 {
     return cap_ppc_smt ? cap_ppc_smt : 1;
diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
index 0139dae..55b6df2 100644
--- a/target/ppc/kvm_ppc.h
+++ b/target/ppc/kvm_ppc.h
@@ -28,6 +28,7 @@ void kvmppc_enable_clear_ref_mod_hcalls(void);
 void kvmppc_set_papr(PowerPCCPU *cpu);
 int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr);
 void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy);
+int kvmppc_fwnmi_enable(PowerPCCPU *cpu);
 int kvmppc_smt_threads(void);
 void kvmppc_hint_smt_possible(Error **errp);
 int kvmppc_set_smt_threads(int smt);
@@ -157,6 +158,11 @@ static inline void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
 {
 }
 
+int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
+{
+    return 1;
+}
+
 static inline int kvmppc_smt_threads(void)
 {
     return 1;

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH v5 6/6] migration: Block migration while handling machine check
  2017-09-28 10:37 [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
                   ` (4 preceding siblings ...)
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 5/6] ppc: spapr: Enable FWNMI capability Aravinda Prasad
@ 2017-09-28 10:38 ` Aravinda Prasad
  2017-10-04  1:39   ` David Gibson
  2017-09-28 10:53 ` [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests no-reply
  6 siblings, 1 reply; 27+ messages in thread
From: Aravinda Prasad @ 2017-09-28 10:38 UTC (permalink / raw)
  To: qemu-ppc, qemu-devel, david; +Cc: aik, mahesh, benh, paulus, sam.bobroff

Block VM migration requests until the machine check
error handling is complete as (i) these errors are
specific to the source hardware and is irrelevant on
the target hardware, (ii) these errors cause data
corruption and should be handled before migration.

Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
---
 hw/ppc/spapr_rtas.c    |    3 +++
 include/hw/ppc/spapr.h |    2 ++
 target/ppc/kvm.c       |   17 +++++++++++++++++
 3 files changed, 22 insertions(+)

diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index d017a67..17f6567 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -47,6 +47,7 @@
 #include "trace.h"
 #include "hw/ppc/fdt.h"
 #include "kvm_ppc.h"
+#include "migration/blocker.h"
 
 static void rtas_display_character(PowerPCCPU *cpu, sPAPRMachineState *spapr,
                                    uint32_t token, uint32_t nargs,
@@ -390,6 +391,8 @@ static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu,
         spapr->mc_status = -1;
         qemu_cond_signal(&spapr->mc_delivery_cond);
         rtas_st(rets, 0, RTAS_OUT_SUCCESS);
+        migrate_del_blocker(spapr->migration_blocker);
+        error_free(spapr->migration_blocker);
     }
 }
 
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index a75e9cf..0890a44 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -7,6 +7,7 @@
 #include "hw/ppc/spapr_drc.h"
 #include "hw/mem/pc-dimm.h"
 #include "hw/ppc/spapr_ovec.h"
+#include "qapi/error.h"
 
 struct VIOsPAPRBus;
 struct sPAPRPHBState;
@@ -136,6 +137,7 @@ struct sPAPRMachineState {
     MemoryHotplugState hotplug_memory;
 
     const char *icp_type;
+    Error *migration_blocker;
 };
 
 #define H_SUCCESS         0
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 59b3322..58de7ea 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -52,6 +52,7 @@
 #endif
 #include "elf.h"
 #include "sysemu/kvm_int.h"
+#include "migration/blocker.h"
 
 //#define DEBUG_KVM
 
@@ -2770,10 +2771,26 @@ int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run)
     sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
     PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
     target_ulong msr = 0;
+    Error *local_err = NULL;
+    int ret;
     bool type, le;
 
     cpu_synchronize_state(CPU(cpu));
 
+    error_setg(&spapr->migration_blocker,
+            "Live migration not supported during machine check error handling");
+    ret = migrate_add_blocker(spapr->migration_blocker, &local_err);
+    if (ret < 0) {
+        /*
+         * We don't want to abort and let the migration to continue. In a
+         * rare case, the machine check handler will run on the target
+         * hardware. Though this is not preferable, it is better than aborting
+         * the migration or killing the VM.
+         */
+        error_free(spapr->migration_blocker);
+        fprintf(stderr, "Warning: Machine check during VM migration\n");
+    }
+
     /*
      * Properly set bits in MSR before we invoke the handler.
      * SRR0/1, DAR and DSISR are properly set by KVM

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests
  2017-09-28 10:37 [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
                   ` (5 preceding siblings ...)
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 6/6] migration: Block migration while handling machine check Aravinda Prasad
@ 2017-09-28 10:53 ` no-reply
  6 siblings, 0 replies; 27+ messages in thread
From: no-reply @ 2017-09-28 10:53 UTC (permalink / raw)
  To: aravinda
  Cc: famz, qemu-ppc, qemu-devel, david, aik, benh, paulus, sam.bobroff

Hi,

This series failed build test on s390x host. Please find the details below.

Type: series
Subject: [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests
Message-id: 150659494872.25889.2069124544245723984.stgit@aravinda

=== TEST SCRIPT BEGIN ===
#!/bin/bash
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
set -e
echo "=== ENV ==="
env
echo "=== PACKAGES ==="
rpm -qa
echo "=== TEST BEGIN ==="
CC=$HOME/bin/cc
INSTALL=$PWD/install
BUILD=$PWD/build
echo -n "Using CC: "
realpath $CC
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --cc=$CC --prefix=$INSTALL
make -j4
# XXX: we need reliable clean up
# make check -j4 V=1
make install
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 - [tag update]      patchew/1506592361-26168-1-git-send-email-thuth@redhat.com -> patchew/1506592361-26168-1-git-send-email-thuth@redhat.com
 * [new tag]         patchew/150659494872.25889.2069124544245723984.stgit@aravinda -> patchew/150659494872.25889.2069124544245723984.stgit@aravinda
Switched to a new branch 'test'
8868f85 migration: Block migration while handling machine check
853ba58 ppc: spapr: Enable FWNMI capability
febbd34 target/ppc: Handle NMI guest exit
f6f4820 Wrapper function to wait on condition for the main loop mutex
2cb68e5 ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls
79a66b4 ppc: spapr: Register and handle HCALL to receive updated RTAS region

=== OUTPUT BEGIN ===
=== ENV ===
XDG_SESSION_ID=22623
SHELL=/bin/sh
USER=fam
PATCHEW=/home/fam/patchew/patchew-cli -s http://patchew.org --nodebug
PATH=/usr/bin:/bin
PWD=/var/tmp/patchew-tester-tmp-bbu6uy4t/src
LANG=en_US.UTF-8
HOME=/home/fam
SHLVL=2
LOGNAME=fam
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1012/bus
XDG_RUNTIME_DIR=/run/user/1012
_=/usr/bin/env
=== PACKAGES ===
gpg-pubkey-873529b8-54e386ff
xz-libs-5.2.2-2.fc24.s390x
libxshmfence-1.2-3.fc24.s390x
giflib-4.1.6-15.fc24.s390x
trousers-lib-0.3.13-6.fc24.s390x
ncurses-base-6.0-6.20160709.fc25.noarch
gmp-6.1.1-1.fc25.s390x
libidn-1.33-1.fc25.s390x
slang-2.3.0-7.fc25.s390x
pkgconfig-0.29.1-1.fc25.s390x
alsa-lib-1.1.1-2.fc25.s390x
yum-metadata-parser-1.1.4-17.fc25.s390x
python3-slip-dbus-0.6.4-4.fc25.noarch
python2-cssselect-0.9.2-1.fc25.noarch
createrepo_c-libs-0.10.0-6.fc25.s390x
initscripts-9.69-1.fc25.s390x
parted-3.2-21.fc25.s390x
flex-2.6.0-3.fc25.s390x
colord-libs-1.3.4-1.fc25.s390x
python-osbs-client-0.33-3.fc25.noarch
perl-Pod-Simple-3.35-1.fc25.noarch
python2-simplejson-3.10.0-1.fc25.s390x
brltty-5.4-2.fc25.s390x
librados2-10.2.4-2.fc25.s390x
tcp_wrappers-7.6-83.fc25.s390x
libcephfs_jni1-10.2.4-2.fc25.s390x
nettle-devel-3.3-1.fc25.s390x
bzip2-devel-1.0.6-21.fc25.s390x
libuuid-2.28.2-2.fc25.s390x
python3-dnf-1.1.10-6.fc25.noarch
texlive-kpathsea-doc-svn41139-33.fc25.1.noarch
openssh-7.4p1-4.fc25.s390x
texlive-kpathsea-bin-svn40473-33.20160520.fc25.1.s390x
texlive-graphics-svn41015-33.fc25.1.noarch
texlive-dvipdfmx-def-svn40328-33.fc25.1.noarch
texlive-mfware-svn40768-33.fc25.1.noarch
texlive-texlive-scripts-svn41433-33.fc25.1.noarch
texlive-euro-svn22191.1.1-33.fc25.1.noarch
texlive-etex-svn37057.0-33.fc25.1.noarch
texlive-iftex-svn29654.0.2-33.fc25.1.noarch
texlive-palatino-svn31835.0-33.fc25.1.noarch
texlive-texlive-docindex-svn41430-33.fc25.1.noarch
texlive-xunicode-svn30466.0.981-33.fc25.1.noarch
texlive-koma-script-svn41508-33.fc25.1.noarch
texlive-pst-grad-svn15878.1.06-33.fc25.1.noarch
texlive-pst-blur-svn15878.2.0-33.fc25.1.noarch
texlive-jknapltx-svn19440.0-33.fc25.1.noarch
texinfo-6.1-4.fc25.s390x
openssl-devel-1.0.2k-1.fc25.s390x
jansson-2.10-2.fc25.s390x
fedora-repos-25-4.noarch
perl-Errno-1.25-387.fc25.s390x
acl-2.2.52-13.fc25.s390x
systemd-pam-231-17.fc25.s390x
NetworkManager-libnm-1.4.4-5.fc25.s390x
poppler-0.45.0-5.fc25.s390x
ccache-3.3.4-1.fc25.s390x
valgrind-3.12.0-9.fc25.s390x
perl-open-1.10-387.fc25.noarch
libgcc-6.4.1-1.fc25.s390x
libsoup-2.56.1-1.fc25.s390x
libstdc++-devel-6.4.1-1.fc25.s390x
libobjc-6.4.1-1.fc25.s390x
python2-rpm-4.13.0.1-2.fc25.s390x
python2-gluster-3.10.5-1.fc25.s390x
rpm-build-4.13.0.1-2.fc25.s390x
glibc-static-2.24-10.fc25.s390x
lz4-1.8.0-1.fc25.s390x
xapian-core-libs-1.2.24-1.fc25.s390x
elfutils-libelf-devel-0.169-1.fc25.s390x
nss-softokn-3.32.0-1.2.fc25.s390x
pango-1.40.9-1.fc25.s390x
glibc-debuginfo-common-2.24-10.fc25.s390x
libaio-0.3.110-6.fc24.s390x
libfontenc-1.1.3-3.fc24.s390x
lzo-2.08-8.fc24.s390x
isl-0.14-5.fc24.s390x
libXau-1.0.8-6.fc24.s390x
linux-atm-libs-2.5.1-14.fc24.s390x
libXext-1.3.3-4.fc24.s390x
libXxf86vm-1.1.4-3.fc24.s390x
bison-3.0.4-4.fc24.s390x
perl-srpm-macros-1-20.fc25.noarch
gawk-4.1.3-8.fc25.s390x
libwayland-client-1.12.0-1.fc25.s390x
perl-Exporter-5.72-366.fc25.noarch
perl-version-0.99.17-1.fc25.s390x
fftw-libs-double-3.3.5-3.fc25.s390x
libssh2-1.8.0-1.fc25.s390x
ModemManager-glib-1.6.4-1.fc25.s390x
newt-python3-0.52.19-2.fc25.s390x
python-munch-2.0.4-3.fc25.noarch
python-bugzilla-1.2.2-4.fc25.noarch
libedit-3.1-16.20160618cvs.fc25.s390x
createrepo_c-0.10.0-6.fc25.s390x
device-mapper-multipath-libs-0.4.9-83.fc25.s390x
yum-3.4.3-510.fc25.noarch
mozjs17-17.0.0-16.fc25.s390x
libselinux-2.5-13.fc25.s390x
python2-pyparsing-2.1.10-1.fc25.noarch
cairo-gobject-1.14.8-1.fc25.s390x
xorg-x11-proto-devel-7.7-20.fc25.noarch
brlapi-0.6.5-2.fc25.s390x
librados-devel-10.2.4-2.fc25.s390x
libXinerama-devel-1.1.3-6.fc24.s390x
lua-posix-33.3.1-3.fc25.s390x
usbredir-devel-0.7.1-2.fc24.s390x
python3-dnf-plugins-core-0.1.21-5.fc25.noarch
texlive-pdftex-doc-svn41149-33.fc25.1.noarch
openssh-clients-7.4p1-4.fc25.s390x
iptables-1.6.0-3.fc25.s390x
texlive-texlive.infra-svn41280-33.fc25.1.noarch
texlive-graphics-cfg-svn40269-33.fc25.1.noarch
texlive-bibtex-svn40768-33.fc25.1.noarch
texlive-mfware-bin-svn40473-33.20160520.fc25.1.s390x
texlive-texlive-scripts-bin-svn29741.0-33.20160520.fc25.1.noarch
texlive-sauerj-svn15878.0-33.fc25.1.noarch
texlive-enctex-svn34957.0-33.fc25.1.noarch
texlive-ifetex-svn24853.1.2-33.fc25.1.noarch
texlive-ntgclass-svn15878.2.1a-33.fc25.1.noarch
texlive-tex-gyre-math-svn41264-33.fc25.1.noarch
texlive-bera-svn20031.0-33.fc25.1.noarch
texlive-ms-svn29849.0-33.fc25.1.noarch
texlive-pst-fill-svn15878.1.01-33.fc25.1.noarch
texlive-ctable-svn38672-33.fc25.1.noarch
texlive-extsizes-svn17263.1.4a-33.fc25.1.noarch
texlive-collection-latexrecommended-svn35765.0-33.20160520.fc25.1.noarch
perl-Filter-1.57-1.fc25.s390x
python2-rpm-macros-3-12.fc25.noarch
gdbm-1.13-1.fc25.s390x
libtasn1-4.12-1.fc25.s390x
fedora-release-25-2.noarch
gdb-headless-7.12.1-48.fc25.s390x
perl-macros-5.24.2-387.fc25.s390x
pcre-devel-8.41-1.fc25.s390x
libX11-1.6.5-1.fc25.s390x
coreutils-8.25-17.fc25.s390x
python2-openidc-client-0-3.20170523git77cb3ee.fc25.noarch
systemtap-client-3.1-5.fc25.s390x
firewalld-0.4.4.5-1.fc25.noarch
glibc-2.24-10.fc25.s390x
libglvnd-egl-0.2.999-24.20170818git8d4d03f.fc25.s390x
libkadm5-1.14.4-8.fc25.s390x
glusterfs-fuse-3.10.5-1.fc25.s390x
libgfortran-6.4.1-1.fc25.s390x
python3-rpm-4.13.0.1-2.fc25.s390x
glusterfs-extra-xlators-3.10.5-1.fc25.s390x
dracut-config-rescue-046-2.git20170811.fc25.s390x
python2-sphinx-theme-alabaster-0.7.9-1.fc25.noarch
elfutils-devel-0.169-1.fc25.s390x
nss-3.32.0-1.1.fc25.s390x
pango-devel-1.40.9-1.fc25.s390x
glibc-debuginfo-2.24-10.fc25.s390x
gpg-pubkey-efe550f5-5220ba41
gpg-pubkey-81b46521-55b3ca9a
filesystem-3.2-37.fc24.s390x
libffi-3.1-9.fc24.s390x
keyutils-libs-1.5.9-8.fc24.s390x
libnfnetlink-1.0.1-8.fc24.s390x
libtheora-1.1.1-14.fc24.s390x
xml-common-0.6.3-44.fc24.noarch
autoconf-2.69-22.fc24.noarch
libXt-1.1.5-3.fc24.s390x
kbd-legacy-2.0.3-3.fc24.noarch
ghostscript-fonts-5.50-35.fc24.noarch
libXevie-1.0.3-11.fc24.s390x
libcap-2.25-2.fc25.s390x
mpfr-3.1.5-1.fc25.s390x
perl-Carp-1.40-365.fc25.noarch
libmnl-1.0.4-1.fc25.s390x
perl-Unicode-EastAsianWidth-1.33-8.fc25.noarch
libwayland-cursor-1.12.0-1.fc25.s390x
python-krbV-1.0.90-12.fc25.s390x
python2-urllib3-1.15.1-3.fc25.noarch
fipscheck-1.4.1-11.fc25.s390x
libndp-1.6-1.fc25.s390x
gnupg2-2.1.13-2.fc25.s390x
libXfixes-5.0.3-1.fc25.s390x
adwaita-icon-theme-3.22.0-1.fc25.noarch
dconf-0.26.0-1.fc25.s390x
ncurses-devel-6.0-6.20160709.fc25.s390x
dejagnu-1.6-1.fc25.noarch
device-mapper-1.02.136-3.fc25.s390x
libevent-2.0.22-1.fc25.s390x
atk-devel-2.22.0-1.fc25.s390x
libev-4.24-1.fc25.s390x
xorg-x11-fonts-Type1-7.5-16.fc24.noarch
brlapi-devel-0.6.5-2.fc25.s390x
pulseaudio-libs-10.0-2.fc25.s390x
glib2-2.50.3-1.fc25.s390x
dnf-1.1.10-6.fc25.noarch
texlive-metafont-bin-svn40987-33.20160520.fc25.1.s390x
texlive-xkeyval-svn35741.2.7a-33.fc25.1.noarch
texlive-euler-svn17261.2.5-33.fc25.1.noarch
texlive-mptopdf-svn41282-33.fc25.1.noarch
texlive-wasy-svn35831.0-33.fc25.1.noarch
texlive-avantgar-svn31835.0-33.fc25.1.noarch
texlive-eurosym-svn17265.1.4_subrfix-33.fc25.1.noarch
texlive-knuth-lib-svn35820.0-33.fc25.1.noarch
texlive-parallel-svn15878.0-33.fc25.1.noarch
texlive-texlive-msg-translations-svn41431-33.fc25.1.noarch
texlive-latex-svn40218-33.fc25.1.noarch
texlive-lualatex-math-svn40621-33.fc25.1.noarch
texlive-auto-pst-pdf-svn23723.0.6-33.fc25.1.noarch
texlive-powerdot-svn38984-33.fc25.1.noarch
texlive-wasysym-svn15878.2.0-33.fc25.1.noarch
ImageMagick-libs-6.9.3.0-6.fc25.s390x
geoclue2-2.4.5-1.fc25.s390x
perl-IO-Socket-IP-0.39-1.fc25.noarch
python2-pyasn1-0.2.3-1.fc25.noarch
at-spi2-core-devel-2.22.1-1.fc25.s390x
libacl-2.2.52-13.fc25.s390x
perl-libs-5.24.2-387.fc25.s390x
mesa-libglapi-17.0.5-3.fc25.s390x
python3-rpmconf-1.0.19-1.fc25.noarch
pcre-utf32-8.41-1.fc25.s390x
libX11-common-1.6.5-1.fc25.noarch
coreutils-common-8.25-17.fc25.s390x
mesa-libEGL-17.0.5-3.fc25.s390x
systemtap-runtime-3.1-5.fc25.s390x
NetworkManager-glib-1.4.4-5.fc25.s390x
audit-2.7.7-1.fc25.s390x
glibc-all-langpacks-2.24-10.fc25.s390x
libglvnd-glx-0.2.999-24.20170818git8d4d03f.fc25.s390x
glusterfs-api-3.10.5-1.fc25.s390x
libepoxy-devel-1.4.3-1.fc25.1.s390x
gtk3-3.22.17-2.fc25.s390x
rpm-4.13.0.1-2.fc25.s390x
net-snmp-agent-libs-5.7.3-15.fc25.s390x
pcre2-devel-10.23-9.fc25.s390x
subversion-1.9.7-1.fc25.s390x
libsndfile-1.0.28-6.fc25.s390x
lasi-1.1.2-6.fc24.s390x
python2-snowballstemmer-1.2.1-1.fc25.noarch
nss-util-devel-3.32.0-1.0.fc25.s390x
vim-common-8.0.1030-1.fc25.s390x
gd-2.2.5-1.fc25.s390x
gpg-pubkey-34ec9cba-54e38751
gpg-pubkey-030d5aed-55b577f0
basesystem-11-2.fc24.noarch
libmpc-1.0.2-5.fc24.s390x
libunistring-0.9.4-3.fc24.s390x
libmodman-2.0.1-12.fc24.s390x
lsscsi-0.28-3.fc24.s390x
kbd-misc-2.0.3-3.fc24.noarch
kmod-23-1.fc25.s390x
newt-0.52.19-2.fc25.s390x
perl-Text-Unidecode-1.27-3.fc25.noarch
plymouth-core-libs-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
which-2.21-1.fc25.s390x
python3-slip-0.6.4-4.fc25.noarch
python3-systemd-232-1.fc25.s390x
python-lockfile-0.11.0-4.fc25.noarch
python2-requests-2.10.0-4.fc25.noarch
libnghttp2-1.13.0-2.fc25.s390x
python-urlgrabber-3.10.1-9.fc25.noarch
iputils-20161105-1.fc25.s390x
rest-0.8.0-1.fc25.s390x
adwaita-cursor-theme-3.22.0-1.fc25.noarch
authconfig-6.2.10-14.fc25.s390x
automake-1.15-7.fc25.noarch
shared-mime-info-1.8-1.fc25.s390x
pigz-2.3.4-1.fc25.s390x
device-mapper-libs-1.02.136-3.fc25.s390x
dnsmasq-2.76-2.fc25.s390x
fedora-packager-0.6.0.1-1.fc25.noarch
libwebp-0.5.2-1.fc25.s390x
boost-system-1.60.0-10.fc25.s390x
libasyncns-0.8-10.fc24.s390x
libXau-devel-1.0.8-6.fc24.s390x
libverto-libev-0.2.6-6.fc24.s390x
python3-html5lib-0.999-9.fc25.noarch
ttmkfdir-3.0.9-48.fc24.s390x
pulseaudio-libs-glib2-10.0-2.fc25.s390x
texlive-lib-2016-33.20160520.fc25.s390x
libXi-devel-1.7.9-1.fc25.s390x
python3-distro-1.0.3-1.fc25.noarch
texlive-texlive-common-doc-svn40682-33.fc25.1.noarch
packagedb-cli-2.14.1-1.fc25.noarch
texlive-metafont-svn40793-33.fc25.1.noarch
texlive-tools-svn40934-33.fc25.1.noarch
texlive-enumitem-svn24146.3.5.2-33.fc25.1.noarch
texlive-mptopdf-bin-svn18674.0-33.20160520.fc25.1.noarch
texlive-underscore-svn18261.0-33.fc25.1.noarch
texlive-anysize-svn15878.0-33.fc25.1.noarch
texlive-euenc-svn19795.0.1h-33.fc25.1.noarch
texlive-kastrup-svn15878.0-33.fc25.1.noarch
texlive-paralist-svn39247-33.fc25.1.noarch
texlive-texlive-en-svn41185-33.fc25.1.noarch
texlive-tipa-svn29349.1.3-33.fc25.1.noarch
texlive-currfile-svn40725-33.fc25.1.noarch
texlive-pst-node-svn40743-33.fc25.1.noarch
texlive-pst-slpe-svn24391.1.31-33.fc25.1.noarch
texlive-typehtml-svn17134.0-33.fc25.1.noarch
SDL2-devel-2.0.5-3.fc25.s390x
libcroco-0.6.11-3.fc25.s390x
bluez-libs-devel-5.44-1.fc25.s390x
firewalld-filesystem-0.4.4.5-1.fc25.noarch
pcre-cpp-8.41-1.fc25.s390x
python3-firewall-0.4.4.5-1.fc25.noarch
freetype-devel-2.6.5-9.fc25.s390x
pcre-utf16-8.41-1.fc25.s390x
linux-firmware-20170605-74.git37857004.fc25.noarch
kernel-modules-4.11.10-200.fc25.s390x
systemtap-devel-3.1-5.fc25.s390x
polkit-0.113-8.fc25.s390x
perl-SelfLoader-1.23-387.fc25.noarch
libdb-utils-5.3.28-24.fc25.s390x
glibc-common-2.24-10.fc25.s390x
libglvnd-0.2.999-24.20170818git8d4d03f.fc25.s390x
webkitgtk4-2.16.6-1.fc25.s390x
rpm-build-libs-4.13.0.1-2.fc25.s390x
libglvnd-core-devel-0.2.999-24.20170818git8d4d03f.fc25.s390x
rpm-devel-4.13.0.1-2.fc25.s390x
kernel-4.12.9-200.fc25.s390x
libtool-ltdl-2.4.6-14.fc25.s390x
gts-0.7.6-29.20121130.fc24.s390x
python2-imagesize-0.7.1-2.fc25.noarch
nss-softokn-freebl-3.32.0-1.2.fc25.s390x
selinux-policy-3.13.1-225.22.fc25.noarch
kernel-devel-4.12.11-200.fc25.s390x
fontpackages-filesystem-1.44-17.fc24.noarch
groff-base-1.22.3-8.fc24.s390x
ilmbase-2.2.0-5.fc24.s390x
OpenEXR-libs-2.2.0-5.fc24.s390x
hesiod-3.2.1-6.fc24.s390x
sysfsutils-2.1.0-19.fc24.s390x
ocaml-srpm-macros-2-4.fc24.noarch
mailx-12.5-19.fc24.s390x
ncurses-libs-6.0-6.20160709.fc25.s390x
ipset-libs-6.29-1.fc25.s390x
gmp-devel-6.1.1-1.fc25.s390x
python-pip-8.1.2-2.fc25.noarch
harfbuzz-1.3.2-1.fc25.s390x
python2-iniparse-0.4-20.fc25.noarch
python3-iniparse-0.4-20.fc25.noarch
python3-kickstart-2.32-1.fc25.noarch
perl-Net-SSLeay-1.78-1.fc25.s390x
drpm-0.3.0-3.fc25.s390x
glib-networking-2.50.0-1.fc25.s390x
webkitgtk3-2.4.11-3.fc25.s390x
libXaw-1.0.13-4.fc25.s390x
xorg-x11-font-utils-7.5-32.fc25.s390x
hardlink-1.1-1.fc25.s390x
libcom_err-1.43.3-1.fc25.s390x
python2-dateutil-2.6.0-1.fc25.noarch
libXpm-3.5.12-1.fc25.s390x
poppler-data-0.4.7-6.fc25.noarch
librbd1-10.2.4-2.fc25.s390x
perl-Digest-MD5-2.55-2.fc25.s390x
wayland-protocols-devel-1.7-1.fc25.noarch
texi2html-5.0-4.fc24.noarch
libxkbcommon-0.7.1-1.fc25.s390x
libuuid-devel-2.28.2-2.fc25.s390x
libcacard-2.5.3-1.fc25.s390x
libwmf-lite-0.2.8.4-50.fc25.s390x
texlive-tetex-svn41059-33.fc25.1.noarch
texlive-thumbpdf-svn34621.3.16-33.fc25.1.noarch
texlive-carlisle-svn18258.0-33.fc25.1.noarch
texlive-makeindex-bin-svn40473-33.20160520.fc25.1.s390x
texlive-pdftex-svn41149-33.fc25.1.noarch
texlive-csquotes-svn39538-33.fc25.1.noarch
texlive-courier-svn35058.0-33.fc25.1.noarch
texlive-helvetic-svn31835.0-33.fc25.1.noarch
texlive-mfnfss-svn19410.0-33.fc25.1.noarch
texlive-sepnum-svn20186.2.0-33.fc25.1.noarch
texlive-utopia-svn15878.0-33.fc25.1.noarch
texlive-luatexbase-svn38550-33.fc25.1.noarch
texlive-pst-3d-svn17257.1.10-33.fc25.1.noarch
texlive-latex-bin-bin-svn14050.0-33.20160520.fc25.1.noarch
texlive-l3experimental-svn41163-33.fc25.1.noarch
net-tools-2.0-0.40.20160329git.fc25.s390x
perl-Pod-Perldoc-3.28-1.fc25.noarch
openssl-1.0.2k-1.fc25.s390x
man-pages-4.06-4.fc25.noarch
libxml2-2.9.4-2.fc25.s390x
python3-dateutil-2.6.0-1.fc25.noarch
perl-threads-shared-1.57-1.fc25.s390x
libnotify-0.7.7-1.fc25.s390x
unzip-6.0-32.fc25.s390x
python-beautifulsoup4-4.6.0-1.fc25.noarch
dhcp-client-4.3.5-3.fc25.s390x
python2-fedora-0.9.0-6.fc25.noarch
gdb-7.12.1-48.fc25.s390x
sqlite-libs-3.14.2-3.fc25.s390x
webkitgtk4-jsc-2.16.6-1.fc25.s390x
libgomp-6.4.1-1.fc25.s390x
p11-kit-trust-0.23.8-1.fc25.s390x
gdk-pixbuf2-devel-2.36.9-1.fc25.s390x
rpm-plugin-selinux-4.13.0.1-2.fc25.s390x
mariadb-common-10.1.25-1.fc25.s390x
dbus-devel-1.11.16-1.fc25.s390x
lz4-libs-1.8.0-1.fc25.s390x
python2-jinja2-2.8.1-1.fc25.noarch
system-python-libs-3.5.4-1.fc25.s390x
python2-rpkg-1.50-2.fc25.noarch
libsolv-0.6.29-1.fc25.s390x
gpg-pubkey-95a43f54-5284415a
dejavu-fonts-common-2.35-3.fc24.noarch
libSM-1.2.2-4.fc24.s390x
diffutils-3.3-13.fc24.s390x
libogg-1.3.2-5.fc24.s390x
hunspell-en-US-0.20140811.1-5.fc24.noarch
libdaemon-0.14-10.fc24.s390x
patch-2.7.5-3.fc24.s390x
libsysfs-2.1.0-19.fc24.s390x
procmail-3.22-39.fc24.s390x
libXdamage-1.1.4-8.fc24.s390x
libotf-0.9.13-7.fc24.s390x
urw-fonts-2.4-22.fc24.noarch
crontabs-1.11-12.20150630git.fc24.noarch
ppp-2.4.7-9.fc24.s390x
cyrus-sasl-2.1.26-26.2.fc24.s390x
zlib-devel-1.2.8-10.fc24.s390x
time-1.7-49.fc24.s390x
gpg-pubkey-fdb19c98-56fd6333
libcap-ng-0.7.8-1.fc25.s390x
binutils-2.26.1-1.fc25.s390x
lcms2-2.8-2.fc25.s390x
libcomps-0.1.7-5.fc25.s390x
perl-constant-1.33-367.fc25.noarch
perl-Data-Dumper-2.161-1.fc25.s390x
ipcalc-0.1.8-1.fc25.s390x
gmp-c++-6.1.1-1.fc25.s390x
fontconfig-2.12.1-1.fc25.s390x
enchant-1.6.0-14.fc25.s390x
pyliblzma-0.5.3-16.fc25.s390x
libsepol-devel-2.5-10.fc25.s390x
python3-ordered-set-2.0.0-4.fc25.noarch
python-ipaddress-1.0.16-3.fc25.noarch
python2-kerberos-1.2.5-1.fc25.s390x
python2-pysocks-1.5.6-5.fc25.noarch
fipscheck-lib-1.4.1-11.fc25.s390x
libatomic_ops-7.4.4-1.fc25.s390x
python2-pygpgme-0.3-18.fc25.s390x
orc-0.4.26-1.fc25.s390x
yum-utils-1.1.31-511.fc25.noarch
libXrender-0.9.10-1.fc25.s390x
libXrandr-1.5.1-1.fc25.s390x
go-srpm-macros-2-7.fc25.noarch
gnupg2-smime-2.1.13-2.fc25.s390x
guile-devel-2.0.13-1.fc25.s390x
uboot-tools-2016.09.01-2.fc25.s390x
pykickstart-2.32-1.fc25.noarch
python-bunch-1.0.1-9.fc25.noarch
perl-generators-1.10-1.fc25.noarch
perl-Mozilla-CA-20160104-3.fc25.noarch
bzip2-libs-1.0.6-21.fc25.s390x
libpng-1.6.27-1.fc25.s390x
desktop-file-utils-0.23-2.fc25.s390x
python2-cccolutils-1.4-1.fc25.s390x
python2-lxml-3.7.2-1.fc25.s390x
redhat-rpm-config-45-1.fc25.noarch
device-mapper-event-libs-1.02.136-3.fc25.s390x
lvm2-libs-2.02.167-3.fc25.s390x
libselinux-python-2.5-13.fc25.s390x
boost-thread-1.60.0-10.fc25.s390x
librbd-devel-10.2.4-2.fc25.s390x
libXcursor-devel-1.1.14-6.fc24.s390x
latex2html-2012-7.fc24.noarch
lksctp-tools-1.0.16-5.fc24.s390x
libfdt-1.4.2-1.fc25.s390x
libXft-devel-2.3.2-4.fc24.s390x
libattr-devel-2.4.47-16.fc24.s390x
libiscsi-devel-1.15.0-2.fc24.s390x
gettext-0.19.8.1-3.fc25.s390x
libjpeg-turbo-devel-1.5.1-0.fc25.s390x
pulseaudio-libs-devel-10.0-2.fc25.s390x
libmount-2.28.2-2.fc25.s390x
python3-decorator-4.0.11-1.fc25.noarch
tzdata-java-2017b-1.fc25.noarch
python-srpm-macros-3-12.fc25.noarch
libsmartcols-2.28.2-2.fc25.s390x
texlive-kpathsea-svn41139-33.fc25.1.noarch
texlive-amsmath-svn41561-33.fc25.1.noarch
texlive-thumbpdf-bin-svn6898.0-33.20160520.fc25.1.noarch
texlive-psnfss-svn33946.9.2a-33.fc25.1.noarch
texlive-subfig-svn15878.1.3-33.fc25.1.noarch
texlive-fancybox-svn18304.1.4-33.fc25.1.noarch
texlive-lua-alt-getopt-svn29349.0.7.0-33.fc25.1.noarch
texlive-natbib-svn20668.8.31b-33.fc25.1.noarch
texlive-pdftex-bin-svn40987-33.20160520.fc25.1.s390x
texlive-xdvi-svn40768-33.fc25.1.noarch
texlive-crop-svn15878.1.5-33.fc25.1.noarch
texlive-babel-english-svn30264.3.3p-33.fc25.1.noarch
texlive-cmextra-svn32831.0-33.fc25.1.noarch
texlive-fancyhdr-svn15878.3.1-33.fc25.1.noarch
texlive-luatex-svn40963-33.fc25.1.noarch
texlive-knuth-local-svn38627-33.fc25.1.noarch
texlive-mflogo-font-svn36898.1.002-33.fc25.1.noarch
texlive-parskip-svn19963.2.0-33.fc25.1.noarch
texlive-section-svn20180.0-33.fc25.1.noarch
texlive-textcase-svn15878.0-33.fc25.1.noarch
texlive-updmap-map-svn41159-33.fc25.1.noarch
texlive-attachfile-svn38830-33.fc25.1.noarch
libtiff-4.0.8-1.fc25.s390x
libdb-5.3.28-24.fc25.s390x
bind-license-9.10.5-2.P2.fc25.noarch
mesa-libGLES-17.0.5-3.fc25.s390x
python3-requests-kerberos-0.10.0-2.fc25.noarch
python3-pyOpenSSL-16.2.0-1.fc25.noarch
perl-threads-2.16-1.fc25.s390x
cryptsetup-libs-1.7.5-1.fc25.s390x
netpbm-10.79.00-1.fc25.s390x
qrencode-libs-3.4.4-1.fc25.s390x
gstreamer1-plugins-base-1.10.5-1.fc25.s390x
elfutils-default-yama-scope-0.169-1.fc25.noarch
systemd-udev-231-17.fc25.s390x
python2-koji-1.13.0-2.fc25.noarch
unbound-libs-1.6.3-1.fc25.s390x
openldap-2.4.44-11.fc25.s390x
koji-1.13.0-2.fc25.noarch
bind99-libs-9.9.10-2.P3.fc25.s390x
mesa-libGL-devel-17.0.5-3.fc25.s390x
graphite2-devel-1.3.10-1.fc25.s390x
systemtap-sdt-devel-3.1-5.fc25.s390x
iproute-tc-4.11.0-1.fc25.s390x
libarchive-3.2.2-2.fc25.s390x
publicsuffix-list-dafsa-20170424-1.fc25.noarch
expat-2.2.3-1.fc25.s390x
p11-kit-0.23.8-1.fc25.s390x
kernel-core-4.12.9-200.fc25.s390x
emacs-filesystem-25.2-3.fc25.noarch
ca-certificates-2017.2.16-1.0.fc25.noarch
librsvg2-2.40.18-1.fc25.s390x
gtk-update-icon-cache-3.22.17-2.fc25.s390x
libidn2-2.0.4-1.fc25.s390x
rpm-libs-4.13.0.1-2.fc25.s390x
mariadb-libs-10.1.25-1.fc25.s390x
java-1.8.0-openjdk-headless-1.8.0.144-5.b01.fc25.s390x
gcc-objc-6.4.1-1.fc25.s390x
p11-kit-devel-0.23.8-1.fc25.s390x
ethtool-4.11-1.fc25.s390x
python2-sssdconfig-1.15.3-1.fc25.noarch
xorg-x11-fonts-ISO8859-1-100dpi-7.5-16.fc24.noarch
lato-fonts-2.015-2.fc24.noarch
python-sphinx-locale-1.5.2-2.fc25.noarch
dpkg-1.17.27-1.fc25.s390x
gnutls-3.5.15-1.fc25.s390x
nss-softokn-freebl-devel-3.32.0-1.2.fc25.s390x
vim-filesystem-8.0.1030-1.fc25.s390x
gnutls-devel-3.5.15-1.fc25.s390x
kernel-headers-4.12.11-200.fc25.s390x
texlive-luaotfload-svn40902-33.fc25.1.noarch
texlive-unicode-math-svn38462-33.fc25.1.noarch
texlive-fancyvrb-svn18492.2.8-33.fc25.1.noarch
texlive-pst-pdf-bin-svn7838.0-33.20160520.fc25.1.noarch
texlive-amscls-svn36804.0-33.fc25.1.noarch
texlive-ltxmisc-svn21927.0-33.fc25.1.noarch
texlive-breqn-svn38099.0.98d-33.fc25.1.noarch
texlive-xetex-def-svn40327-33.fc25.1.noarch
openssh-server-7.4p1-4.fc25.s390x
sendmail-8.15.2-8.fc25.s390x
tzdata-2017b-1.fc25.noarch
hunspell-1.4.1-2.fc25.s390x
gpg-pubkey-8e1431d5-53bcbac7
zlib-1.2.8-10.fc24.s390x
sed-4.2.2-15.fc24.s390x
psmisc-22.21-8.fc24.s390x
gpm-libs-1.20.7-9.fc24.s390x
zip-3.0-16.fc24.s390x
libyubikey-1.13-2.fc24.s390x
sg3_utils-libs-1.41-3.fc24.s390x
polkit-pkla-compat-0.1-7.fc24.s390x
passwd-0.79-8.fc24.s390x
trousers-0.3.13-6.fc24.s390x
grubby-8.40-3.fc24.s390x
rootfiles-8.1-19.fc24.noarch
nettle-3.3-1.fc25.s390x
libksba-1.3.5-1.fc25.s390x
perl-Text-ParseWords-3.30-365.fc25.noarch
perl-PathTools-3.63-366.fc25.s390x
perl-File-Temp-0.23.04-365.fc25.noarch
fuse-libs-2.9.7-1.fc25.s390x
perl-Pod-Escapes-1.07-365.fc25.noarch
perl-Term-ANSIColor-4.05-2.fc25.noarch
perl-URI-1.71-5.fc25.noarch
libXfont-1.5.2-1.fc25.s390x
python-six-1.10.0-3.fc25.noarch
dbus-glib-0.108-1.fc25.s390x
gobject-introspection-1.50.0-1.fc25.s390x
libpwquality-1.3.0-6.fc25.s390x
python-gobject-base-3.22.0-1.fc25.s390x
python-html5lib-0.999-9.fc25.noarch
python3-dbus-1.2.4-2.fc25.s390x
python3-chardet-2.3.0-1.fc25.noarch
python3-urllib3-1.15.1-3.fc25.noarch
python-offtrac-0.1.0-7.fc25.noarch
python2-cryptography-1.5.3-3.fc25.s390x
python2-requests-kerberos-0.10.0-2.fc25.noarch
libserf-1.3.9-1.fc25.s390x
libdatrie-0.2.9-3.fc25.s390x
s390utils-base-1.36.0-1.fc25.s390x
kpartx-0.4.9-83.fc25.s390x
s390utils-cpuplugd-1.36.0-1.fc25.s390x
s390utils-osasnmpd-1.36.0-1.fc25.s390x
python-dnf-plugins-extras-common-0.0.12-4.fc25.noarch
fpc-srpm-macros-1.0-1.fc25.noarch
libuser-0.62-4.fc25.s390x
man-db-2.7.5-3.fc25.s390x
python-systemd-doc-232-1.fc25.s390x
bodhi-client-0.9.12.2-6.fc25.noarch
cairo-1.14.8-1.fc25.s390x
cracklib-dicts-2.9.6-4.fc25.s390x
libselinux-python3-2.5-13.fc25.s390x
python2-enchant-1.6.8-1.fc25.noarch
boost-iostreams-1.60.0-10.fc25.s390x
userspace-rcu-0.9.2-2.fc25.s390x
libXext-devel-1.3.3-4.fc24.s390x
libXrandr-devel-1.5.1-1.fc25.s390x
python3-lxml-3.7.2-1.fc25.s390x
libiscsi-1.15.0-2.fc24.s390x
fontconfig-devel-2.12.1-1.fc25.s390x
libfdt-devel-1.4.2-1.fc25.s390x
ceph-devel-compat-10.2.4-2.fc25.s390x
zlib-static-1.2.8-10.fc24.s390x
chrpath-0.16-3.fc24.s390x
info-6.1-4.fc25.s390x
iptables-libs-1.6.0-3.fc25.s390x
libfdisk-2.28.2-2.fc25.s390x
dnf-plugins-core-0.1.21-5.fc25.noarch
perl-Storable-2.56-368.fc25.s390x
python2-decorator-4.0.11-1.fc25.noarch
libnetfilter_conntrack-1.0.6-2.fc25.s390x
texlive-texlive.infra-bin-svn40312-33.20160520.fc25.1.s390x
texlive-ifluatex-svn41346-33.fc25.1.noarch
texlive-fp-svn15878.0-33.fc25.1.noarch
texlive-latex-fonts-svn28888.0-33.fc25.1.noarch
texlive-bibtex-bin-svn40473-33.20160520.fc25.1.s390x
texlive-glyphlist-svn28576.0-33.fc25.1.noarch
texlive-marvosym-svn29349.2.2a-33.fc25.1.noarch
texlive-tex-bin-svn40987-33.20160520.fc25.1.s390x
texlive-texconfig-svn40768-33.fc25.1.noarch
texlive-wasy2-ps-svn35830.0-33.fc25.1.noarch
texlive-psfrag-svn15878.3.04-33.fc25.1.noarch
texlive-charter-svn15878.0-33.fc25.1.noarch
texlive-ec-svn25033.1.0-33.fc25.1.noarch
texlive-lineno-svn21442.4.41-33.fc25.1.noarch
texlive-hyphen-base-svn41138-33.fc25.1.noarch
texlive-manfnt-font-svn35799.0-33.fc25.1.noarch
texlive-ncntrsbk-svn31835.0-33.fc25.1.noarch
texlive-pst-math-svn34786.0.63-33.fc25.1.noarch
texlive-symbol-svn31835.0-33.fc25.1.noarch
texlive-environ-svn33821.0.3-33.fc25.1.noarch
texlive-algorithms-svn38085.0.1-33.fc25.1.noarch
python3-hawkey-0.6.4-3.fc25.s390x
freetype-2.6.5-9.fc25.s390x
mesa-libwayland-egl-17.0.5-3.fc25.s390x
libicu-57.1-5.fc25.s390x
libnl3-cli-3.2.29-3.fc25.s390x
cups-libs-2.2.0-9.fc25.s390x
bind-libs-lite-9.10.5-2.P2.fc25.s390x
python3-kerberos-1.2.5-1.fc25.s390x
python3-cryptography-1.5.3-3.fc25.s390x
perl-IO-1.36-387.fc25.s390x
dhcp-libs-4.3.5-3.fc25.s390x
rsync-3.1.2-4.fc25.s390x
make-4.1-6.fc25.s390x
quota-4.03-8.fc25.s390x
libX11-devel-1.6.5-1.fc25.s390x
ghostscript-9.20-9.fc25.s390x
rpcbind-0.2.4-6.rc2.fc25.s390x
pyOpenSSL-16.2.0-1.fc25.noarch
python3-pycurl-7.43.0-6.fc25.s390x
bind99-license-9.9.10-2.P3.fc25.noarch
python-firewall-0.4.4.5-1.fc25.noarch
netpbm-progs-10.79.00-1.fc25.s390x
wget-1.18-3.fc25.s390x
libsemanage-2.5-9.fc25.s390x
telnet-0.17-68.fc25.s390x
gdk-pixbuf2-2.36.9-1.fc25.s390x
dbus-libs-1.11.16-1.fc25.s390x
glusterfs-client-xlators-3.10.5-1.fc25.s390x
libepoxy-1.4.3-1.fc25.1.s390x
dracut-046-2.git20170811.fc25.s390x
net-snmp-libs-5.7.3-15.fc25.s390x
libgo-devel-6.4.1-1.fc25.s390x
libglvnd-opengl-0.2.999-24.20170818git8d4d03f.fc25.s390x
sqlite-devel-3.14.2-3.fc25.s390x
cpp-6.4.1-1.fc25.s390x
git-2.9.5-1.fc25.s390x
pcre2-10.23-9.fc25.s390x
python2-GitPython-2.1.5-1.fc25.noarch
glusterfs-devel-3.10.5-1.fc25.s390x
net-snmp-5.7.3-15.fc25.s390x
rpm-plugin-systemd-inhibit-4.13.0.1-2.fc25.s390x
emacs-25.2-3.fc25.s390x
libstdc++-static-6.4.1-1.fc25.s390x
expat-devel-2.2.3-1.fc25.s390x
perl-Time-HiRes-1.9744-1.fc25.s390x
fontawesome-fonts-4.7.0-1.fc25.noarch
python-markupsafe-0.23-10.fc25.s390x
pytz-2016.6.1-1.fc25.noarch
python2-sphinx-1.5.2-2.fc25.noarch
nss-util-3.32.0-1.0.fc25.s390x
nss-sysinit-3.32.0-1.1.fc25.s390x
python3-3.5.4-1.fc25.s390x
selinux-policy-targeted-3.13.1-225.22.fc25.noarch
vim-minimal-8.0.1030-1.fc25.s390x
texlive-ifplatform-svn21156.0.4-33.fc25.1.noarch
texlive-eso-pic-svn37925.2.0g-33.fc25.1.noarch
texlive-xcolor-svn41044-33.fc25.1.noarch
texlive-pst-eps-svn15878.1.0-33.fc25.1.noarch
texlive-pst-text-svn15878.1.00-33.fc25.1.noarch
texlive-rotating-svn16832.2.16b-33.fc25.1.noarch
texlive-pdfpages-svn40638-33.fc25.1.noarch
texlive-cm-super-svn15878.0-33.fc25.1.noarch
texlive-xetex-svn41438-33.fc25.1.noarch
dnf-yum-1.1.10-6.fc25.noarch
libseccomp-devel-2.3.2-1.fc25.s390x
gpgme-1.8.0-10.fc25.s390x
apr-util-1.5.4-3.fc24.s390x
jbigkit-libs-2.1-5.fc24.s390x
pixman-0.34.0-2.fc24.s390x
dwz-0.12-2.fc24.s390x
expect-5.45-22.fc24.s390x
libsigsegv-2.10-10.fc24.s390x
fakeroot-libs-1.20.2-4.fc24.s390x
m17n-lib-1.7.0-5.fc24.s390x
libverto-0.2.6-6.fc24.s390x
libXmu-1.1.2-4.fc24.s390x
libXcursor-1.1.14-6.fc24.s390x
python-kitchen-1.2.4-2.fc24.noarch
fakeroot-1.20.2-4.fc24.s390x
blktrace-1.1.0-3.fc24.s390x
usermode-1.111-8.fc24.s390x
kbd-2.0.3-3.fc24.s390x
libaio-devel-0.3.110-6.fc24.s390x
web-assets-filesystem-5-4.fc24.noarch
libgpg-error-1.24-1.fc25.s390x
findutils-4.6.0-8.fc25.s390x
libassuan-2.4.3-1.fc25.s390x
libusbx-1.0.21-1.fc25.s390x
libxslt-1.1.28-13.fc25.s390x
libmetalink-0.1.3-1.fc25.s390x
perl-MIME-Base64-3.15-365.fc25.s390x
ncurses-6.0-6.20160709.fc25.s390x
libwayland-server-1.12.0-1.fc25.s390x
perl-Fedora-VSP-0.001-4.fc25.noarch
perl-libintl-perl-1.26-1.fc25.s390x
shadow-utils-4.2.1-11.fc25.s390x
atk-2.22.0-1.fc25.s390x
pam-1.3.0-1.fc25.s390x
harfbuzz-icu-1.3.2-1.fc25.s390x
libsecret-0.18.5-2.fc25.s390x
s390utils-iucvterm-1.36.0-1.fc25.s390x
python3-requests-2.10.0-4.fc25.noarch
pyusb-1.0.0-2.fc25.noarch
python-enum34-1.0.4-6.fc25.noarch
pyxattr-0.5.3-8.fc25.s390x
libbabeltrace-1.4.0-3.fc25.s390x
libthai-0.1.25-1.fc25.s390x
deltarpm-3.6-17.fc25.s390x
s390utils-mon_statd-1.36.0-1.fc25.s390x
device-mapper-multipath-0.4.9-83.fc25.s390x
python3-pygpgme-0.3-18.fc25.s390x
libreport-filesystem-2.8.0-1.fc25.s390x
ghc-srpm-macros-1.4.2-4.fc25.noarch
rpmdevtools-8.9-1.fc25.noarch
python-dnf-plugins-extras-migrate-0.0.12-4.fc25.noarch
perl-IO-Socket-SSL-2.038-1.fc25.noarch
perl-File-ShareDir-1.102-7.fc25.noarch
tcl-8.6.6-1.fc25.s390x
bzip2-1.0.6-21.fc25.s390x
libss-1.43.3-1.fc25.s390x
libselinux-utils-2.5-13.fc25.s390x
python3-enchant-1.6.8-1.fc25.noarch
python2-dockerfile-parse-0.0.5-7.fc25.noarch
systemd-bootchart-231-2.fc25.s390x
e2fsprogs-1.43.3-1.fc25.s390x
libpng-devel-1.6.27-1.fc25.s390x
perl-XML-Parser-2.44-5.fc25.s390x
lttng-ust-2.8.1-2.fc25.s390x
libXfixes-devel-5.0.3-1.fc25.s390x
libXcomposite-devel-0.4.4-8.fc24.s390x
python3-javapackages-4.7.0-6.1.fc25.noarch
libcephfs_jni-devel-10.2.4-2.fc25.s390x
keyutils-libs-devel-1.5.9-8.fc24.s390x
harfbuzz-devel-1.3.2-1.fc25.s390x
libidn-devel-1.33-1.fc25.s390x
libnfs-1.9.8-2.fc24.s390x
libssh2-devel-1.8.0-1.fc25.s390x
qemu-sanity-check-nodeps-1.1.5-5.fc24.s390x
alsa-lib-devel-1.1.1-2.fc25.s390x
libpsl-0.17.0-1.fc25.s390x
libseccomp-2.3.2-1.fc25.s390x
json-glib-1.2.6-1.fc25.s390x
python2-dnf-1.1.10-6.fc25.noarch
texlive-tetex-bin-svn36770.0-33.20160520.fc25.1.noarch
texlive-amsfonts-svn29208.3.04-33.fc25.1.noarch
texlive-babel-svn40706-33.fc25.1.noarch
texlive-colortbl-svn29803.v1.0a-33.fc25.1.noarch
texlive-babelbib-svn25245.1.31-33.fc25.1.noarch
texlive-footmisc-svn23330.5.5b-33.fc25.1.noarch
texlive-makeindex-svn40768-33.fc25.1.noarch
texlive-plain-svn40274-33.fc25.1.noarch
texlive-texconfig-bin-svn29741.0-33.20160520.fc25.1.noarch
texlive-zapfding-svn31835.0-33.fc25.1.noarch
texlive-microtype-svn41127-33.fc25.1.noarch
texlive-bookman-svn31835.0-33.fc25.1.noarch
texlive-dvisvgm-def-svn41011-33.fc25.1.noarch
texlive-finstrut-svn21719.0.5-33.fc25.1.noarch
texlive-hyph-utf8-svn41189-33.fc25.1.noarch
texlive-lualibs-svn40370-33.fc25.1.noarch
python2-hawkey-0.6.4-3.fc25.s390x
elfutils-libelf-0.169-1.fc25.s390x
libnl3-3.2.29-3.fc25.s390x
gstreamer1-1.10.5-1.fc25.s390x
polkit-libs-0.113-8.fc25.s390x
libtirpc-1.0.2-0.fc25.s390x
libteam-1.27-1.fc25.s390x
python3-pyasn1-0.2.3-1.fc25.noarch
perl-File-Path-2.12-366.fc25.noarch
mesa-libwayland-egl-devel-17.0.5-3.fc25.s390x
libacl-devel-2.2.52-13.fc25.s390x
lua-libs-5.3.4-3.fc25.s390x
quota-nls-4.03-8.fc25.noarch
ghostscript-x11-9.20-9.fc25.s390x
systemd-231-17.fc25.s390x
dhcp-common-4.3.5-3.fc25.noarch
vte291-devel-0.46.2-1.fc25.s390x
python-devel-2.7.13-2.fc25.s390x
elfutils-0.169-1.fc25.s390x
lua-5.3.4-3.fc25.s390x
python3-beautifulsoup4-4.6.0-1.fc25.noarch
libmicrohttpd-0.9.55-1.fc25.s390x
screen-4.6.1-1.fc25.s390x
strace-4.18-1.fc25.s390x
libstdc++-6.4.1-1.fc25.s390x
glusterfs-3.10.5-1.fc25.s390x
file-5.29-9.fc25.s390x
libgo-6.4.1-1.fc25.s390x
tar-1.29-4.fc25.s390x
subversion-libs-1.9.7-1.fc25.s390x
libglvnd-gles-0.2.999-24.20170818git8d4d03f.fc25.s390x
gdk-pixbuf2-modules-2.36.9-1.fc25.s390x
gcc-6.4.1-1.fc25.s390x
curl-7.51.0-9.fc25.s390x
pcre2-utf16-10.23-9.fc25.s390x
mariadb-config-10.1.25-1.fc25.s390x
distribution-gpg-keys-1.14-1.fc25.noarch
libcurl-devel-7.51.0-9.fc25.s390x
gtk3-devel-3.22.17-2.fc25.s390x
krb5-devel-1.14.4-8.fc25.s390x
wpa_supplicant-2.6-3.fc25.s390x
fontawesome-fonts-web-4.7.0-1.fc25.noarch
python2-pygments-2.2.0-7.fc25.noarch
python2-babel-2.3.4-2.fc25.noarch
doxygen-1.8.13-9.fc25.s390x
nspr-devel-4.16.0-1.fc25.s390x
kernel-core-4.12.11-200.fc25.s390x
rpmlint-1.10-3.fc25.noarch
vim-enhanced-8.0.1030-1.fc25.s390x
openjpeg2-2.2.0-3.fc25.s390x
texlive-mparhack-svn15878.1.4-33.fc25.1.noarch
texlive-pspicture-svn15878.0-33.fc25.1.noarch
texlive-soul-svn15878.2.4-33.fc25.1.noarch
texlive-trimspaces-svn15878.1.1-33.fc25.1.noarch
texlive-varwidth-svn24104.0.92-33.fc25.1.noarch
texlive-geometry-svn19716.5.6-33.fc25.1.noarch
texlive-memoir-svn41203-33.fc25.1.noarch
texlive-pgf-svn40966-33.fc25.1.noarch
texlive-pst-coil-svn37377.1.07-33.fc25.1.noarch
texlive-pst-plot-svn41242-33.fc25.1.noarch
texlive-latex-bin-svn41438-33.fc25.1.noarch
texlive-ucs-svn35853.2.2-33.fc25.1.noarch
texlive-ae-svn15878.1.4-33.fc25.1.noarch
texlive-xetex-bin-svn41091-33.20160520.fc25.1.s390x
fedora-upgrade-26.1-1.fc25.noarch
perl-Thread-Queue-3.12-1.fc25.noarch
cdparanoia-libs-10.2-21.fc24.s390x
ustr-1.0.4-21.fc24.s390x
libusb-0.1.5-7.fc24.s390x
readline-devel-6.3-8.fc24.s390x
chkconfig-1.8-1.fc25.s390x
avahi-libs-0.6.32-4.fc25.s390x
perl-Unicode-Normalize-1.25-365.fc25.s390x
perl-libnet-3.10-1.fc25.noarch
perl-podlators-4.09-1.fc25.noarch
dbus-python-1.2.4-2.fc25.s390x
libgnome-keyring-3.12.0-7.fc25.s390x
python-backports-1.0-8.fc25.s390x
python-pycparser-2.14-7.fc25.noarch
plymouth-scripts-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
cronie-1.5.1-2.fc25.s390x
python2-librepo-1.7.18-3.fc25.s390x
libXv-1.0.11-1.fc25.s390x
python2-ndg_httpsclient-0.4.0-4.fc25.noarch
btrfs-progs-4.6.1-1.fc25.s390x
perl-Encode-2.88-5.fc25.s390x
cracklib-2.9.6-4.fc25.s390x
python3-dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch
boost-random-1.60.0-10.fc25.s390x
libref_array-0.1.5-29.fc25.s390x
libXrender-devel-0.9.10-1.fc25.s390x
javapackages-tools-4.7.0-6.1.fc25.noarch
keyutils-1.5.9-8.fc24.s390x
libcom_err-devel-1.43.3-1.fc25.s390x
lzo-minilzo-2.08-8.fc24.s390x
libusbx-devel-1.0.21-1.fc25.s390x
virglrenderer-devel-0.5.0-1.20160411git61846f92f.fc25.s390x
acpica-tools-20160831-1.fc25.s390x
grep-2.27-2.fc25.s390x
dnf-conf-1.1.10-6.fc25.noarch
crypto-policies-20160921-4.gitf3018dd.fc25.noarch
libnfsidmap-0.27-1.fc25.s390x
SDL2-2.0.5-3.fc25.s390x
texlive-etex-pkg-svn39355-33.fc25.1.noarch
texlive-multido-svn18302.1.42-33.fc25.1.noarch
texlive-gsftopk-svn40768-33.fc25.1.noarch
texlive-pst-ovl-svn40873-33.fc25.1.noarch
texlive-ltabptch-svn17533.1.74d-33.fc25.1.noarch
texlive-cite-svn36428.5.5-33.fc25.1.noarch
texlive-fpl-svn15878.1.002-33.fc25.1.noarch
texlive-mathpazo-svn15878.1.003-33.fc25.1.noarch
texlive-rcs-svn15878.0-33.fc25.1.noarch
texlive-type1cm-svn21820.0-33.fc25.1.noarch
texlive-l3kernel-svn41246-33.fc25.1.noarch
texlive-hyperref-svn41396-33.fc25.1.noarch
texlive-pst-tree-svn24142.1.12-33.fc25.1.noarch
texlive-sansmathaccent-svn30187.0-33.fc25.1.noarch
texlive-dvipdfmx-bin-svn40273-33.20160520.fc25.1.s390x
texlive-zapfchan-svn31835.0-33.fc25.1.noarch
glib2-static-2.50.3-1.fc25.s390x
bash-completion-2.5-1.fc25.noarch
hyphen-2.8.8-4.fc24.s390x
python3-idna-2.5-1.fc25.noarch
less-481-7.fc25.s390x
rpmconf-base-1.0.19-1.fc25.noarch
gtk2-2.24.31-2.fc25.s390x
mesa-libgbm-17.0.5-3.fc25.s390x
nfs-utils-2.1.1-5.rc4.fc25.s390x
mc-4.8.19-5.fc25.s390x
pcre-static-8.41-1.fc25.s390x
bind-libs-9.10.5-2.P2.fc25.s390x
libproxy-0.4.15-2.fc25.s390x
file-libs-5.29-9.fc25.s390x
glibc-devel-2.24-10.fc25.s390x
glusterfs-server-3.10.5-1.fc25.s390x
git-core-doc-2.9.5-1.fc25.s390x
python2-smmap-2.0.3-1.fc25.noarch
glusterfs-api-devel-3.10.5-1.fc25.s390x
gcc-gdb-plugin-6.4.1-1.fc25.s390x
python3-magic-5.29-9.fc25.noarch
GeoIP-GeoLite-data-2017.07-1.fc25.noarch
python2-funcsigs-1.0.2-2.fc25.noarch
dos2unix-7.3.4-1.fc25.s390x
gnutls-c++-3.5.15-1.fc25.s390x
nss-tools-3.32.0-1.1.fc25.s390x
gpg-pubkey-a29cb19c-53bcbba6
m4-1.4.17-9.fc24.s390x
liblockfile-1.09-4.fc24.s390x
sg3_utils-1.41-3.fc24.s390x
libXinerama-1.1.3-6.fc24.s390x
libXft-2.3.2-4.fc24.s390x
tcp_wrappers-libs-7.6-83.fc25.s390x
perl-Text-Tabs+Wrap-2013.0523-365.fc25.noarch
perl-Error-0.17024-7.fc25.noarch
perl-Term-Cap-1.17-365.fc25.noarch
perl-Pod-Usage-1.69-1.fc25.noarch
device-mapper-persistent-data-0.6.3-1.fc25.s390x
python3-six-1.10.0-3.fc25.noarch
python3-pysocks-1.5.6-5.fc25.noarch
python-chardet-2.3.0-1.fc25.noarch
python2-cffi-1.7.0-2.fc25.s390x
gc-devel-7.4.4-1.fc25.s390x
plymouth-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
ebtables-2.0.10-21.fc25.s390x
python3-librepo-1.7.18-3.fc25.s390x
at-spi2-atk-2.22.0-1.fc25.s390x
avahi-autoipd-0.6.32-4.fc25.s390x
pyparsing-2.1.10-1.fc25.noarch
python3-pyparsing-2.1.10-1.fc25.noarch
libcollection-0.7.0-29.fc25.s390x
libcephfs-devel-10.2.4-2.fc25.s390x
libXdamage-devel-1.1.4-8.fc24.s390x
libverto-devel-0.2.6-6.fc24.s390x
snappy-1.1.3-2.fc24.s390x
cairo-gobject-devel-1.14.8-1.fc25.s390x
cyrus-sasl-devel-2.1.26-26.2.fc24.s390x
libXi-1.7.9-1.fc25.s390x
texlive-base-2016-33.20160520.fc25.noarch
texlive-booktabs-svn40846-33.fc25.1.noarch
texlive-lm-svn28119.2.004-33.fc25.1.noarch
texlive-gsftopk-bin-svn40473-33.20160520.fc25.1.s390x
texlive-tex-svn40793-33.fc25.1.noarch
texlive-fancyref-svn15878.0.9c-33.fc25.1.noarch
texlive-chngcntr-svn17157.1.0a-33.fc25.1.noarch
texlive-fix2col-svn38770-33.fc25.1.noarch
texlive-marginnote-svn41382-33.fc25.1.noarch
texlive-pxfonts-svn15878.0-33.fc25.1.noarch
texlive-txfonts-svn15878.0-33.fc25.1.noarch
texlive-l3packages-svn41246-33.fc25.1.noarch
texlive-oberdiek-svn41346-33.fc25.1.noarch
texlive-pst-tools-svn34067.0.05-33.fc25.1.noarch
texlive-tex-gyre-svn18651.2.004-33.fc25.1.noarch
texlive-dvipdfmx-svn41149-33.fc25.1.noarch
texlive-collection-fontsrecommended-svn35830.0-33.20160520.fc25.1.noarch
libcacard-devel-2.5.3-1.fc25.s390x
ykpers-1.18.0-2.fc25.s390x
python2-idna-2.5-1.fc25.noarch
policycoreutils-2.5-20.fc25.s390x
libgcrypt-1.7.8-1.fc25.s390x
pcre-8.41-1.fc25.s390x
GeoIP-1.6.11-1.fc25.s390x
ghostscript-core-9.20-9.fc25.s390x
python3-cffi-1.7.0-2.fc25.s390x
json-c-0.12.1-2.fc25.s390x
vte291-0.46.2-1.fc25.s390x
gssproxy-0.7.0-9.fc25.s390x
systemtap-3.1-5.fc25.s390x
mesa-libgbm-devel-17.0.5-3.fc25.s390x
libgusb-0.2.10-1.fc25.s390x
kernel-modules-4.12.9-200.fc25.s390x
sqlite-3.14.2-3.fc25.s390x
perl-Git-2.9.5-1.fc25.noarch
python2-gitdb-2.0.2-1.fc25.noarch
libglvnd-devel-0.2.999-24.20170818git8d4d03f.fc25.s390x
gcc-c++-6.4.1-1.fc25.s390x
python-magic-5.29-9.fc25.noarch
kernel-devel-4.12.9-200.fc25.s390x
python2-mock-2.0.0-2.fc25.noarch
nspr-4.16.0-1.fc25.s390x
python3-libs-3.5.4-1.fc25.s390x
system-python-3.5.4-1.fc25.s390x
python-async-0.6.1-9.fc22.s390x
dejavu-sans-mono-fonts-2.35-3.fc24.noarch
popt-1.16-7.fc24.s390x
cyrus-sasl-lib-2.1.26-26.2.fc24.s390x
xz-5.2.2-2.fc24.s390x
libpipeline-1.4.1-2.fc24.s390x
pinentry-0.9.7-2.fc24.s390x
pth-2.0.7-27.fc24.s390x
libsepol-2.5-10.fc25.s390x
libxcb-1.12-1.fc25.s390x
perl-Getopt-Long-2.49.1-1.fc25.noarch
avahi-glib-0.6.32-4.fc25.s390x
python3-pip-8.1.2-2.fc25.noarch
python3-libcomps-0.1.7-5.fc25.s390x
python-slip-0.6.4-4.fc25.noarch
python2-libcomps-0.1.7-5.fc25.s390x
gc-7.4.4-1.fc25.s390x
s390utils-cmsfs-1.36.0-1.fc25.s390x
newt-python-0.52.19-2.fc25.s390x
qt5-srpm-macros-5.7.1-1.fc25.noarch
device-mapper-event-1.02.136-3.fc25.s390x
perl-Class-Inspector-1.31-2.fc25.noarch
libbasicobjects-0.1.1-29.fc25.s390x
libradosstriper1-10.2.4-2.fc25.s390x
libXxf86vm-devel-1.1.4-3.fc24.s390x
zziplib-0.13.62-7.fc24.s390x
libpaper-1.1.24-12.fc24.s390x
libini_config-1.3.0-29.fc25.s390x
snappy-devel-1.1.3-2.fc24.s390x
libcap-ng-devel-0.7.8-1.fc25.s390x
libxkbcommon-devel-0.7.1-1.fc25.s390x
openssl-libs-1.0.2k-1.fc25.s390x
util-linux-2.28.2-2.fc25.s390x
texlive-etoolbox-svn38031.2.2a-33.fc25.1.noarch
texlive-dvips-svn41149-33.fc25.1.noarch
texlive-latexconfig-svn40274-33.fc25.1.noarch
texlive-tex-ini-files-svn40533-33.fc25.1.noarch
texlive-qstest-svn15878.0-33.fc25.1.noarch
texlive-cmap-svn41168-33.fc25.1.noarch
texlive-luatex-bin-svn41091-33.20160520.fc25.1.s390x
texlive-mflogo-svn38628-33.fc25.1.noarch
texlive-sansmath-svn17997.1.1-33.fc25.1.noarch
texlive-unicode-data-svn39808-33.fc25.1.noarch
texlive-luaotfload-bin-svn34647.0-33.20160520.fc25.1.noarch
texlive-listings-svn37534.1.6-33.fc25.1.noarch
texlive-pstricks-svn41321-33.fc25.1.noarch
texlive-metalogo-svn18611.0.12-33.fc25.1.noarch
texlive-collection-latex-svn41011-33.20160520.fc25.1.noarch
python2-dnf-plugins-core-0.1.21-5.fc25.noarch
xkeyboard-config-2.20-2.fc25.noarch
perl-Test-Harness-3.39-1.fc25.noarch
systemd-libs-231-17.fc25.s390x
python3-pycparser-2.14-7.fc25.noarch
kernel-devel-4.11.10-200.fc25.s390x
gsm-1.0.17-1.fc25.s390x
python-2.7.13-2.fc25.s390x
kernel-4.11.10-200.fc25.s390x
rpmconf-1.0.19-1.fc25.noarch
teamd-1.27-1.fc25.s390x
jasper-libs-1.900.13-4.fc25.s390x
glusterfs-libs-3.10.5-1.fc25.s390x
libcrypt-nss-2.24-10.fc25.s390x
emacs-common-25.2-3.fc25.s390x
libcurl-7.51.0-9.fc25.s390x
java-1.8.0-openjdk-1.8.0.144-5.b01.fc25.s390x
gcc-go-6.4.1-1.fc25.s390x
perl-XML-XPath-1.39-2.fc25.noarch
python2-sphinx_rtd_theme-0.1.9-2.fc24.noarch
libxml2-devel-2.9.4-2.fc25.s390x
nss-softokn-devel-3.32.0-1.2.fc25.s390x
nss-devel-3.32.0-1.1.fc25.s390x
libattr-2.4.47-16.fc24.s390x
libvisual-0.4.0-20.fc24.s390x
libpcap-1.7.4-2.fc24.s390x
libutempter-1.1.6-8.fc24.s390x
libgudev-230-3.fc24.s390x
popt-devel-1.16-7.fc24.s390x
hicolor-icon-theme-0.15-3.fc24.noarch
setup-2.10.4-1.fc25.noarch
bash-4.3.43-4.fc25.s390x
libjpeg-turbo-1.5.1-0.fc25.s390x
perl-Socket-2.024-1.fc25.s390x
perl-HTTP-Tiny-0.070-1.fc25.noarch
ipset-6.29-1.fc25.s390x
python2-setuptools-25.1.1-1.fc25.noarch
gsettings-desktop-schemas-3.22.0-1.fc25.s390x
python3-setuptools-25.1.1-1.fc25.noarch
python-slip-dbus-0.6.4-4.fc25.noarch
python2-ply-3.8-2.fc25.noarch
dtc-1.4.2-1.fc25.s390x
guile-2.0.13-1.fc25.s390x
cronie-anacron-1.5.1-2.fc25.s390x
libXtst-1.2.3-1.fc25.s390x
iso-codes-3.70-1.fc25.noarch
s390utils-1.36.0-1.fc25.s390x
python-backports-ssl_match_hostname-3.5.0.1-3.fc25.noarch
fedora-cert-0.6.0.1-1.fc25.noarch
dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch
lvm2-2.02.167-3.fc25.s390x
libselinux-devel-2.5-13.fc25.s390x
perl-Time-Local-1.250-1.fc25.noarch
libradosstriper-devel-10.2.4-2.fc25.s390x
flac-libs-1.3.2-1.fc25.s390x
perl-Digest-1.17-366.fc25.noarch
teckit-2.5.1-15.fc24.s390x
libpath_utils-0.2.1-29.fc25.s390x
attr-2.4.47-16.fc24.s390x
usbredir-0.7.1-2.fc24.s390x
cairo-devel-1.14.8-1.fc25.s390x
lzo-devel-2.08-8.fc24.s390x
libcap-devel-2.25-2.fc25.s390x
libbsd-0.8.3-1.fc25.s390x
texlive-url-svn32528.3.4-33.fc25.1.noarch
texlive-dvips-bin-svn40987-33.20160520.fc25.1.s390x
texlive-index-svn24099.4.1beta-33.fc25.1.noarch
texlive-setspace-svn24881.6.7a-33.fc25.1.noarch
texlive-mathtools-svn38833-33.fc25.1.noarch
texlive-cm-svn32865.0-33.fc25.1.noarch
texlive-graphics-def-svn41879-33.fc25.1.noarch
texlive-mdwtools-svn15878.1.05.4-33.fc25.1.noarch
texlive-rsfs-svn15878.0-33.fc25.1.noarch
texlive-ucharcat-svn38907-33.fc25.1.noarch
texlive-fontspec-svn41262-33.fc25.1.noarch
texlive-showexpl-svn32737.v0.3l-33.fc25.1.noarch
texlive-pstricks-add-svn40744-33.fc25.1.noarch
texlive-beamer-svn36461.3.36-33.fc25.1.noarch
texlive-collection-basic-svn41149-33.20160520.fc25.1.noarch
xemacs-filesystem-21.5.34-20.20170124hgf412e9f093d4.fc25.noarch
hawkey-0.6.4-3.fc25.s390x
bluez-libs-5.44-1.fc25.s390x
audit-libs-2.7.7-1.fc25.s390x
iproute-4.11.0-1.fc25.s390x
libICE-1.0.9-9.fc25.s390x
python3-ply-3.8-2.fc25.noarch
perl-5.24.2-387.fc25.s390x
graphite2-1.3.10-1.fc25.s390x
vte-profile-0.46.2-1.fc25.s390x
python-libs-2.7.13-2.fc25.s390x
mesa-libGL-17.0.5-3.fc25.s390x
python2-pycurl-7.43.0-6.fc25.s390x
NetworkManager-1.4.4-5.fc25.s390x
mesa-libEGL-devel-17.0.5-3.fc25.s390x
mesa-libGLES-devel-17.0.5-3.fc25.s390x
hostname-3.15-8.fc25.s390x
glibc-headers-2.24-10.fc25.s390x
glusterfs-cli-3.10.5-1.fc25.s390x
git-core-2.9.5-1.fc25.s390x
mock-1.4.3-1.fc25.noarch
gcc-gfortran-6.4.1-1.fc25.s390x
webkitgtk4-plugin-process-gtk2-2.16.6-1.fc25.s390x
perl-Module-CoreList-5.20170821-1.fc25.noarch
python2-pbr-1.10.0-1.fc25.noarch
libtool-2.4.6-14.fc25.s390x
gnutls-dane-3.5.15-1.fc25.s390x
kernel-4.12.11-200.fc25.s390x
gpg-pubkey-a0a7badb-52844296
readline-6.3-8.fc24.s390x
cpio-2.12-3.fc24.s390x
libXcomposite-0.4.4-8.fc24.s390x
procps-ng-3.3.10-11.fc24.s390x
GConf2-3.2.6-16.fc24.s390x
xz-devel-5.2.2-2.fc24.s390x
fedora-logos-22.0.0-3.fc24.s390x
gpg-pubkey-e372e838-56fd7943
kmod-libs-23-1.fc25.s390x
perl-parent-0.236-1.fc25.noarch
perl-TermReadKey-2.37-1.fc25.s390x
ncurses-c++-libs-6.0-6.20160709.fc25.s390x
gzip-1.8-1.fc25.s390x
python3-gobject-base-3.22.0-1.fc25.s390x
python2-yubico-1.3.2-3.fc25.noarch
s390utils-ziomon-1.36.0-1.fc25.s390x
librepo-1.7.18-3.fc25.s390x
gnat-srpm-macros-4-1.fc25.noarch
python-decoratortools-1.8-12.fc25.noarch
m17n-db-1.7.0-7.fc25.noarch
e2fsprogs-libs-1.43.3-1.fc25.s390x
libvorbis-1.3.5-1.fc25.s390x
npth-1.3-1.fc25.s390x
libcephfs1-10.2.4-2.fc25.s390x
wayland-devel-1.12.0-1.fc25.s390x
libxcb-devel-1.12-1.fc25.s390x
perl-encoding-2.19-5.fc25.s390x
python3-cssselect-0.9.2-1.fc25.noarch
gettext-libs-0.19.8.1-3.fc25.s390x
at-spi2-atk-devel-2.22.0-1.fc25.s390x
virglrenderer-0.5.0-1.20160411git61846f92f.fc25.s390x
pixman-devel-0.34.0-2.fc24.s390x
libnfs-devel-1.9.8-2.fc24.s390x
libblkid-2.28.2-2.fc25.s390x
glib2-devel-2.50.3-1.fc25.s390x
texlive-ifxetex-svn19685.0.5-33.fc25.1.noarch
texlive-caption-svn41409-33.fc25.1.noarch
texlive-float-svn15878.1.3d-33.fc25.1.noarch
texlive-pdftex-def-svn22653.0.06d-33.fc25.1.noarch
texlive-xdvi-bin-svn40750-33.20160520.fc25.1.s390x
texlive-beton-svn15878.0-33.fc25.1.noarch
texlive-filecontents-svn24250.1.3-33.fc25.1.noarch
texlive-lm-math-svn36915.1.959-33.fc25.1.noarch
texlive-pslatex-svn16416.0-33.fc25.1.noarch
texlive-times-svn35058.0-33.fc25.1.noarch
texlive-breakurl-svn29901.1.40-33.fc25.1.noarch
texlive-filehook-svn24280.0.5d-33.fc25.1.noarch
texlive-pst-pdf-svn31660.1.1v-33.fc25.1.noarch
texlive-seminar-svn34011.1.62-33.fc25.1.noarch
texlive-xetexconfig-svn41133-33.fc25.1.noarch
python-rpm-macros-3-12.fc25.noarch
nss-pem-1.0.3-3.fc25.s390x
at-spi2-core-2.22.1-1.fc25.s390x
perl-Scalar-List-Utils-1.48-1.fc25.s390x
libtasn1-devel-4.12-1.fc25.s390x
python3-koji-1.13.0-2.fc25.noarch
opus-1.1.5-1.fc25.s390x
elfutils-libs-0.169-1.fc25.s390x
kernel-core-4.11.10-200.fc25.s390x
systemd-container-231-17.fc25.s390x
sudo-1.8.20p2-1.fc25.s390x
libicu-devel-57.1-5.fc25.s390x
js-jquery-2.2.4-3.fc25.noarch
krb5-libs-1.14.4-8.fc25.s390x
apr-1.6.2-1.fc25.s390x
dbus-1.11.16-1.fc25.s390x
libdrm-2.4.82-1.fc25.s390x
pcre2-utf32-10.23-9.fc25.s390x
copy-jdk-configs-2.3-1.fc25.noarch
libdrm-devel-2.4.82-1.fc25.s390x
krb5-workstation-1.14.4-8.fc25.s390x
python3-sssdconfig-1.15.3-1.fc25.noarch
python2-docutils-0.13.1-3.fc25.noarch
graphviz-2.38.0-39.fc25.s390x
kernel-modules-4.12.11-200.fc25.s390x
fedpkg-1.29-3.fc25.noarch
=== TEST BEGIN ===
Using CC: /home/fam/bin/cc
Install prefix    /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install
BIOS directory    /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/share/qemu
firmware path     /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/share/qemu-firmware
binary directory  /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/bin
library directory /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/lib
module directory  /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/include
config directory  /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/etc
local state directory   /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/var
Manual directory  /var/tmp/patchew-tester-tmp-bbu6uy4t/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /var/tmp/patchew-tester-tmp-bbu6uy4t/src
C compiler        /home/fam/bin/cc
Host C compiler   cc
C++ compiler      c++
Objective-C compiler /home/fam/bin/cc
ARFLAGS           rv
CFLAGS            -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g 
QEMU_CFLAGS       -I/usr/include/pixman-1  -Werror -DHAS_LIBSSH2_SFTP_FSYNC -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -DNCURSES_WIDECHAR -D_GNU_SOURCE -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv  -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/include/p11-kit-1    -I/usr/include/libpng16 -I/usr/include/libdrm 
LDFLAGS           -Wl,--warn-common -m64 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          s390x
host big endian   yes
target list       aarch64-softmmu alpha-softmmu arm-softmmu cris-softmmu i386-softmmu lm32-softmmu m68k-softmmu microblazeel-softmmu microblaze-softmmu mips64el-softmmu mips64-softmmu mipsel-softmmu mips-softmmu moxie-softmmu nios2-softmmu or1k-softmmu ppc64-softmmu ppcemb-softmmu ppc-softmmu s390x-softmmu sh4eb-softmmu sh4-softmmu sparc64-softmmu sparc-softmmu tricore-softmmu unicore32-softmmu x86_64-softmmu xtensaeb-softmmu xtensa-softmmu aarch64-linux-user alpha-linux-user armeb-linux-user arm-linux-user cris-linux-user hppa-linux-user i386-linux-user m68k-linux-user microblazeel-linux-user microblaze-linux-user mips64el-linux-user mips64-linux-user mipsel-linux-user mips-linux-user mipsn32el-linux-user mipsn32-linux-user nios2-linux-user or1k-linux-user ppc64abi32-linux-user ppc64le-linux-user ppc64-linux-user ppc-linux-user s390x-linux-user sh4eb-linux-user sh4-linux-user sparc32plus-linux-user sparc64-linux-user sparc-linux-user tilegx-linux-user x86_64-linux-user
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
SDL support       yes (2.0.5)
GTK support       yes (3.22.17)
GTK GL support    yes
VTE support       yes (0.46.2)
TLS priority      NORMAL
GNUTLS support    yes
GNUTLS rnd        yes
libgcrypt         no
libgcrypt kdf     no
nettle            yes (3.3)
nettle kdf        yes
libtasn1          yes
curses support    yes
virgl support     yes
curl support      yes
mingw32 support   no
Audio drivers     oss
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    yes
Multipath support no
VNC support       yes
VNC SASL support  yes
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    yes
bluez  support    yes
Documentation     yes
PIE               no
vde support       no
netmap support    no
Linux AIO support yes
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
HAX support       no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
RDMA support      no
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
libcap-ng support yes
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
vhost-user support yes
Trace backends    log
spice support     no 
rbd support       yes
xfsctl support    no
smartcard support yes
libusb            yes
usb net redir     yes
OpenGL support    yes
OpenGL dmabufs    yes
libiscsi support  yes
libnfs support    yes
build guest agent yes
QGA VSS support   no
QGA w32 disk info no
QGA MSI support   no
seccomp support   yes
coroutine backend ucontext
coroutine pool    yes
debug stack usage no
crypto afalg      no
GlusterFS support yes
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   yes
TPM passthrough   no
QOM debugging     yes
Live block migration yes
lzo support       yes
snappy support    yes
bzip2 support     yes
NUMA host support no
tcmalloc support  no
jemalloc support  no
avx2 optimization no
replication support yes
VxHS block device no
  GEN     aarch64-softmmu/config-devices.mak.tmp
  GEN     alpha-softmmu/config-devices.mak.tmp
  GEN     arm-softmmu/config-devices.mak.tmp
  GEN     cris-softmmu/config-devices.mak.tmp
  GEN     cris-softmmu/config-devices.mak
  GEN     arm-softmmu/config-devices.mak
  GEN     i386-softmmu/config-devices.mak.tmp
  GEN     alpha-softmmu/config-devices.mak
  GEN     lm32-softmmu/config-devices.mak.tmp
  GEN     aarch64-softmmu/config-devices.mak
  GEN     m68k-softmmu/config-devices.mak.tmp
  GEN     microblazeel-softmmu/config-devices.mak.tmp
  GEN     lm32-softmmu/config-devices.mak
  GEN     m68k-softmmu/config-devices.mak
  GEN     microblaze-softmmu/config-devices.mak.tmp
  GEN     i386-softmmu/config-devices.mak
  GEN     mips64el-softmmu/config-devices.mak.tmp
  GEN     mips64-softmmu/config-devices.mak.tmp
  GEN     microblazeel-softmmu/config-devices.mak
  GEN     microblaze-softmmu/config-devices.mak
  GEN     mipsel-softmmu/config-devices.mak.tmp
  GEN     mips-softmmu/config-devices.mak.tmp
  GEN     mips64el-softmmu/config-devices.mak
  GEN     moxie-softmmu/config-devices.mak.tmp
  GEN     mips64-softmmu/config-devices.mak
  GEN     nios2-softmmu/config-devices.mak.tmp
  GEN     moxie-softmmu/config-devices.mak
  GEN     mipsel-softmmu/config-devices.mak
  GEN     or1k-softmmu/config-devices.mak.tmp
  GEN     mips-softmmu/config-devices.mak
  GEN     ppc64-softmmu/config-devices.mak.tmp
  GEN     nios2-softmmu/config-devices.mak
  GEN     ppcemb-softmmu/config-devices.mak.tmp
  GEN     ppc-softmmu/config-devices.mak.tmp
  GEN     or1k-softmmu/config-devices.mak
  GEN     s390x-softmmu/config-devices.mak.tmp
  GEN     ppc64-softmmu/config-devices.mak
  GEN     s390x-softmmu/config-devices.mak
  GEN     ppcemb-softmmu/config-devices.mak
  GEN     sh4eb-softmmu/config-devices.mak.tmp
  GEN     sh4-softmmu/config-devices.mak.tmp
  GEN     ppc-softmmu/config-devices.mak
  GEN     sparc64-softmmu/config-devices.mak.tmp
  GEN     sparc-softmmu/config-devices.mak.tmp
  GEN     sparc-softmmu/config-devices.mak
  GEN     sh4eb-softmmu/config-devices.mak
  GEN     sh4-softmmu/config-devices.mak
  GEN     tricore-softmmu/config-devices.mak.tmp
  GEN     sparc64-softmmu/config-devices.mak
  GEN     unicore32-softmmu/config-devices.mak.tmp
  GEN     x86_64-softmmu/config-devices.mak.tmp
  GEN     xtensaeb-softmmu/config-devices.mak.tmp
  GEN     tricore-softmmu/config-devices.mak
  GEN     unicore32-softmmu/config-devices.mak
  GEN     xtensa-softmmu/config-devices.mak.tmp
  GEN     aarch64-linux-user/config-devices.mak.tmp
  GEN     xtensaeb-softmmu/config-devices.mak
  GEN     x86_64-softmmu/config-devices.mak
  GEN     alpha-linux-user/config-devices.mak.tmp
  GEN     xtensa-softmmu/config-devices.mak
  GEN     armeb-linux-user/config-devices.mak.tmp
  GEN     aarch64-linux-user/config-devices.mak
  GEN     cris-linux-user/config-devices.mak.tmp
  GEN     arm-linux-user/config-devices.mak.tmp
  GEN     armeb-linux-user/config-devices.mak
  GEN     alpha-linux-user/config-devices.mak
  GEN     arm-linux-user/config-devices.mak
  GEN     cris-linux-user/config-devices.mak
  GEN     hppa-linux-user/config-devices.mak.tmp
  GEN     i386-linux-user/config-devices.mak.tmp
  GEN     m68k-linux-user/config-devices.mak.tmp
  GEN     microblazeel-linux-user/config-devices.mak.tmp
  GEN     hppa-linux-user/config-devices.mak
  GEN     microblaze-linux-user/config-devices.mak.tmp
  GEN     m68k-linux-user/config-devices.mak
  GEN     i386-linux-user/config-devices.mak
  GEN     microblazeel-linux-user/config-devices.mak
  GEN     mips64el-linux-user/config-devices.mak.tmp
  GEN     mips64-linux-user/config-devices.mak.tmp
  GEN     mipsel-linux-user/config-devices.mak.tmp
  GEN     microblaze-linux-user/config-devices.mak
  GEN     mips64-linux-user/config-devices.mak
  GEN     mips-linux-user/config-devices.mak.tmp
  GEN     mips64el-linux-user/config-devices.mak
  GEN     mipsel-linux-user/config-devices.mak
  GEN     mipsn32el-linux-user/config-devices.mak.tmp
  GEN     mipsn32-linux-user/config-devices.mak.tmp
  GEN     nios2-linux-user/config-devices.mak.tmp
  GEN     mips-linux-user/config-devices.mak
  GEN     or1k-linux-user/config-devices.mak.tmp
  GEN     mipsn32-linux-user/config-devices.mak
  GEN     mipsn32el-linux-user/config-devices.mak
  GEN     nios2-linux-user/config-devices.mak
  GEN     ppc64abi32-linux-user/config-devices.mak.tmp
  GEN     ppc64le-linux-user/config-devices.mak.tmp
  GEN     ppc64-linux-user/config-devices.mak.tmp
  GEN     or1k-linux-user/config-devices.mak
  GEN     ppc-linux-user/config-devices.mak.tmp
  GEN     ppc64abi32-linux-user/config-devices.mak
  GEN     ppc64-linux-user/config-devices.mak
  GEN     ppc64le-linux-user/config-devices.mak
  GEN     sh4eb-linux-user/config-devices.mak.tmp
  GEN     s390x-linux-user/config-devices.mak.tmp
  GEN     sh4-linux-user/config-devices.mak.tmp
  GEN     ppc-linux-user/config-devices.mak
  GEN     sparc32plus-linux-user/config-devices.mak.tmp
  GEN     sh4eb-linux-user/config-devices.mak
  GEN     s390x-linux-user/config-devices.mak
  GEN     sh4-linux-user/config-devices.mak
  GEN     sparc64-linux-user/config-devices.mak.tmp
  GEN     sparc-linux-user/config-devices.mak.tmp
  GEN     tilegx-linux-user/config-devices.mak.tmp
  GEN     sparc32plus-linux-user/config-devices.mak
  GEN     x86_64-linux-user/config-devices.mak.tmp
  GEN     sparc64-linux-user/config-devices.mak
  GEN     sparc-linux-user/config-devices.mak
  GEN     tilegx-linux-user/config-devices.mak
  GEN     config-host.h
  GEN     qemu-options.def
  GEN     x86_64-linux-user/config-devices.mak
  GEN     qmp-commands.h
  GEN     qapi-types.h
  GEN     qapi-visit.h
  GEN     qapi-event.h
  GEN     qmp-marshal.c
  GEN     qapi-types.c
  GEN     qapi-visit.c
  GEN     qapi-event.c
  GEN     qmp-introspect.h
  GEN     qmp-introspect.c
  GEN     trace/generated-tcg-tracers.h
  GEN     trace/generated-helpers-wrappers.h
  GEN     trace/generated-helpers.h
  GEN     trace/generated-helpers.c
  GEN     module_block.h
  GEN     tests/test-qapi-types.h
  GEN     tests/test-qapi-visit.h
  GEN     tests/test-qmp-commands.h
  GEN     tests/test-qapi-event.h
  GEN     tests/test-qmp-introspect.h
  GEN     trace-root.h
  GEN     crypto/trace.h
  GEN     util/trace.h
  GEN     io/trace.h
  GEN     migration/trace.h
  GEN     block/trace.h
  GEN     chardev/trace.h
  GEN     hw/block/trace.h
  GEN     hw/block/dataplane/trace.h
  GEN     hw/char/trace.h
  GEN     hw/intc/trace.h
  GEN     hw/net/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/usb/trace.h
  GEN     hw/scsi/trace.h
  GEN     hw/nvram/trace.h
  GEN     hw/display/trace.h
  GEN     hw/timer/trace.h
  GEN     hw/input/trace.h
  GEN     hw/dma/trace.h
  GEN     hw/sparc/trace.h
  GEN     hw/sd/trace.h
  GEN     hw/isa/trace.h
  GEN     hw/mem/trace.h
  GEN     hw/i386/trace.h
  GEN     hw/i386/xen/trace.h
  GEN     hw/9pfs/trace.h
  GEN     hw/ppc/trace.h
  GEN     hw/s390x/trace.h
  GEN     hw/pci/trace.h
  GEN     hw/vfio/trace.h
  GEN     hw/acpi/trace.h
  GEN     hw/arm/trace.h
  GEN     hw/alpha/trace.h
  GEN     hw/xen/trace.h
  GEN     hw/ide/trace.h
  GEN     ui/trace.h
  GEN     audio/trace.h
  GEN     net/trace.h
  GEN     target/arm/trace.h
  GEN     target/i386/trace.h
  GEN     target/mips/trace.h
  GEN     target/sparc/trace.h
  GEN     target/s390x/trace.h
  GEN     target/ppc/trace.h
  GEN     qom/trace.h
  GEN     linux-user/trace.h
  GEN     qapi/trace.h
  GEN     accel/tcg/trace.h
  GEN     accel/kvm/trace.h
  GEN     nbd/trace.h
  GEN     scsi/trace.h
  GEN     trace-root.c
  GEN     util/trace.c
  GEN     crypto/trace.c
  GEN     io/trace.c
  GEN     migration/trace.c
  GEN     block/trace.c
  GEN     chardev/trace.c
  GEN     hw/block/trace.c
  GEN     hw/block/dataplane/trace.c
  GEN     hw/char/trace.c
  GEN     hw/intc/trace.c
  GEN     hw/net/trace.c
  GEN     hw/virtio/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/scsi/trace.c
  GEN     hw/nvram/trace.c
  GEN     hw/usb/trace.c
  GEN     hw/display/trace.c
  GEN     hw/input/trace.c
  GEN     hw/dma/trace.c
  GEN     hw/timer/trace.c
  GEN     hw/sparc/trace.c
  GEN     hw/sd/trace.c
  GEN     hw/mem/trace.c
  GEN     hw/isa/trace.c
  GEN     hw/i386/trace.c
  GEN     hw/i386/xen/trace.c
  GEN     hw/9pfs/trace.c
  GEN     hw/ppc/trace.c
  GEN     hw/pci/trace.c
  GEN     hw/s390x/trace.c
  GEN     hw/vfio/trace.c
  GEN     hw/acpi/trace.c
  GEN     hw/arm/trace.c
  GEN     hw/alpha/trace.c
  GEN     hw/xen/trace.c
  GEN     hw/ide/trace.c
  GEN     ui/trace.c
  GEN     audio/trace.c
  GEN     net/trace.c
  GEN     target/arm/trace.c
  GEN     target/i386/trace.c
  GEN     target/mips/trace.c
  GEN     target/sparc/trace.c
  GEN     target/s390x/trace.c
  GEN     target/ppc/trace.c
  GEN     qom/trace.c
  GEN     linux-user/trace.c
  GEN     qapi/trace.c
  GEN     accel/tcg/trace.c
  GEN     accel/kvm/trace.c
  GEN     nbd/trace.c
  GEN     scsi/trace.c
  GEN     config-all-devices.mak
  GEN     docs/version.texi
  GEN     qemu-options.texi
  CC      tests/qemu-iotests/socket_scm_helper.o
  GEN     qemu-img-cmds.texi
  GEN     qemu-monitor.texi
  GEN     qemu-monitor-info.texi
  GEN     qemu-img.1
  GEN     qemu-nbd.8
  GEN     qemu-ga.8
  GEN     docs/interop/qemu-qmp-qapi.texi
  GEN     docs/interop/qemu-ga-qapi.texi
  GEN     docs/qemu-block-drivers.7
  GEN     fsdev/virtfs-proxy-helper.1
  GEN     qga/qapi-generated/qga-qapi-types.h
  GEN     qga/qapi-generated/qga-qapi-visit.h
  GEN     qga/qapi-generated/qga-qmp-commands.h
  GEN     qga/qapi-generated/qga-qapi-visit.c
  GEN     qga/qapi-generated/qga-qapi-types.c
  GEN     qga/qapi-generated/qga-qmp-marshal.c
  CC      qmp-introspect.o
  CC      qapi-types.o
  CC      qapi-visit.o
  CC      qapi-event.o
  CC      qapi/qapi-visit-core.o
  CC      qapi/qapi-dealloc-visitor.o
  CC      qapi/qobject-input-visitor.o
  CC      qapi/qobject-output-visitor.o
  CC      qapi/qmp-registry.o
  CC      qapi/qmp-dispatch.o
  CC      qapi/string-output-visitor.o
  CC      qapi/string-input-visitor.o
  CC      qapi/opts-visitor.o
  CC      qapi/qapi-clone-visitor.o
  CC      qapi/qmp-event.o
  CC      qobject/qnull.o
  CC      qapi/qapi-util.o
  CC      qobject/qnum.o
  CC      qobject/qstring.o
  CC      qobject/qdict.o
  CC      qobject/qlist.o
  CC      qobject/qbool.o
  CC      qobject/qlit.o
  CC      qobject/qjson.o
  CC      qobject/qobject.o
  CC      qobject/json-lexer.o
  CC      qobject/json-streamer.o
  CC      qobject/json-parser.o
  CC      trace/control.o
  CC      trace/qmp.o
  CC      util/osdep.o
  CC      util/cutils.o
  CC      util/unicode.o
  CC      util/qemu-timer-common.o
  CC      util/lockcnt.o
  CC      util/bufferiszero.o
  CC      util/aiocb.o
  CC      util/async.o
  CC      util/thread-pool.o
  CC      util/qemu-timer.o
  CC      util/main-loop.o
  CC      util/iohandler.o
  CC      util/compatfd.o
  CC      util/aio-posix.o
  CC      util/event_notifier-posix.o
  CC      util/mmap-alloc.o
  CC      util/oslib-posix.o
  CC      util/qemu-openpty.o
  CC      util/qemu-thread-posix.o
  CC      util/memfd.o
  CC      util/path.o
  CC      util/envlist.o
  CC      util/module.o
  CC      util/host-utils.o
  CC      util/bitmap.o
  CC      util/bitops.o
  CC      util/hbitmap.o
  CC      util/fifo8.o
  CC      util/acl.o
  CC      util/cacheinfo.o
  CC      util/error.o
  CC      util/qemu-error.o
  CC      util/id.o
  CC      util/iov.o
  CC      util/qemu-config.o
  CC      util/qemu-sockets.o
  CC      util/uri.o
  CC      util/notify.o
  CC      util/qemu-option.o
  CC      util/qemu-progress.o
  CC      util/keyval.o
  CC      util/hexdump.o
  CC      util/crc32c.o
  CC      util/uuid.o
  CC      util/throttle.o
  CC      util/getauxval.o
  CC      util/readline.o
  CC      util/qemu-coroutine.o
  CC      util/rcu.o
  CC      util/qemu-coroutine-lock.o
  CC      util/qemu-coroutine-io.o
  CC      util/qemu-coroutine-sleep.o
  CC      util/coroutine-ucontext.o
  CC      util/timed-average.o
  CC      util/buffer.o
  CC      util/base64.o
  CC      util/log.o
  CC      util/qdist.o
  CC      util/qht.o
  CC      util/range.o
  CC      util/stats64.o
  CC      trace-root.o
  CC      util/systemd.o
  CC      util/trace.o
  CC      crypto/trace.o
  CC      io/trace.o
  CC      migration/trace.o
  CC      block/trace.o
  CC      chardev/trace.o
  CC      hw/block/trace.o
  CC      hw/block/dataplane/trace.o
  CC      hw/char/trace.o
  CC      hw/intc/trace.o
  CC      hw/net/trace.o
  CC      hw/virtio/trace.o
  CC      hw/audio/trace.o
  CC      hw/misc/trace.o
  CC      hw/usb/trace.o
  CC      hw/scsi/trace.o
  CC      hw/nvram/trace.o
  CC      hw/display/trace.o
  CC      hw/input/trace.o
  CC      hw/timer/trace.o
  CC      hw/dma/trace.o
  CC      hw/sparc/trace.o
  CC      hw/sd/trace.o
  CC      hw/isa/trace.o
  CC      hw/mem/trace.o
  CC      hw/i386/trace.o
  CC      hw/i386/xen/trace.o
  CC      hw/9pfs/trace.o
  CC      hw/ppc/trace.o
  CC      hw/pci/trace.o
  CC      hw/s390x/trace.o
  CC      hw/vfio/trace.o
  CC      hw/acpi/trace.o
  CC      hw/arm/trace.o
  CC      hw/alpha/trace.o
  CC      hw/xen/trace.o
  CC      ui/trace.o
  CC      hw/ide/trace.o
  CC      audio/trace.o
  CC      net/trace.o
  CC      target/arm/trace.o
  CC      target/i386/trace.o
  CC      target/mips/trace.o
  CC      target/sparc/trace.o
  CC      target/s390x/trace.o
  CC      target/ppc/trace.o
  CC      qom/trace.o
  CC      linux-user/trace.o
  CC      qapi/trace.o
  CC      accel/tcg/trace.o
  CC      accel/kvm/trace.o
  CC      nbd/trace.o
  CC      scsi/trace.o
  CC      crypto/pbkdf-stub.o
  CC      stubs/arch-query-cpu-def.o
  CC      stubs/arch-query-cpu-model-expansion.o
  CC      stubs/arch-query-cpu-model-comparison.o
  CC      stubs/arch-query-cpu-model-baseline.o
  CC      stubs/bdrv-next-monitor-owned.o
  CC      stubs/blk-commit-all.o
  CC      stubs/blockdev-close-all-bdrv-states.o
  CC      stubs/clock-warp.o
  CC      stubs/cpu-get-clock.o
  CC      stubs/cpu-get-icount.o
  CC      stubs/dump.o
  CC      stubs/error-printf.o
  CC      stubs/fdset.o
  CC      stubs/gdbstub.o
  CC      stubs/get-vm-name.o
  CC      stubs/iothread.o
  CC      stubs/iothread-lock.o
  CC      stubs/is-daemonized.o
  CC      stubs/linux-aio.o
  CC      stubs/machine-init-done.o
  CC      stubs/migr-blocker.o
  CC      stubs/change-state-handler.o
  CC      stubs/monitor.o
  CC      stubs/notify-event.o
  CC      stubs/qtest.o
  CC      stubs/runstate-check.o
  CC      stubs/replay.o
  CC      stubs/set-fd-handler.o
  CC      stubs/slirp.o
  CC      stubs/sysbus.o
  CC      stubs/trace-control.o
  CC      stubs/uuid.o
  CC      stubs/vm-stop.o
  CC      stubs/vmstate.o
  CC      stubs/qmp_pc_dimm.o
  CC      stubs/target-get-monitor-def.o
  CC      stubs/target-monitor-defs.o
  CC      stubs/pc_madt_cpu_entry.o
  CC      stubs/vmgenid.o
  CC      stubs/xen-common.o
  CC      stubs/xen-hvm.o
  CC      stubs/pci-host-piix.o
  CC      contrib/ivshmem-client/ivshmem-client.o
  CC      contrib/ivshmem-client/main.o
  CC      contrib/ivshmem-server/ivshmem-server.o
  CC      contrib/ivshmem-server/main.o
  CC      qemu-nbd.o
  CC      block.o
  CC      blockjob.o
  CC      qemu-io-cmds.o
  CC      replication.o
  CC      block/raw-format.o
  CC      block/qcow.o
  CC      block/vdi.o
  CC      block/vmdk.o
  CC      block/cloop.o
  CC      block/bochs.o
  CC      block/vpc.o
  CC      block/vvfat.o
  CC      block/dmg.o
  CC      block/qcow2.o
  CC      block/qcow2-refcount.o
  CC      block/qcow2-cluster.o
  CC      block/qcow2-snapshot.o
  CC      block/qcow2-cache.o
  CC      block/qcow2-bitmap.o
  CC      block/qed.o
  CC      block/qed-l2-cache.o
  CC      block/qed-table.o
  CC      block/qed-cluster.o
  CC      block/qed-check.o
  CC      block/vhdx.o
  CC      block/vhdx-endian.o
  CC      block/vhdx-log.o
  CC      block/quorum.o
  CC      block/parallels.o
  CC      block/blkdebug.o
  CC      block/blkverify.o
  CC      block/blkreplay.o
  CC      block/block-backend.o
  CC      block/snapshot.o
  CC      block/qapi.o
  CC      block/file-posix.o
  CC      block/linux-aio.o
  CC      block/null.o
  CC      block/mirror.o
  CC      block/commit.o
  CC      block/io.o
  CC      block/throttle-groups.o
  CC      block/nbd.o
  CC      block/nbd-client.o
  CC      block/sheepdog.o
  CC      block/iscsi-opts.o
  CC      block/accounting.o
  CC      block/dirty-bitmap.o
  CC      block/write-threshold.o
  CC      block/backup.o
  CC      block/replication.o
  CC      block/throttle.o
  CC      block/crypto.o
  CC      nbd/server.o
  CC      nbd/client.o
  CC      nbd/common.o
  CC      scsi/utils.o
  CC      scsi/pr-manager.o
  CC      scsi/pr-manager-helper.o
  CC      block/iscsi.o
  CC      block/nfs.o
  CC      block/curl.o
  CC      block/rbd.o
  CC      block/gluster.o
  CC      block/ssh.o
  CC      block/dmg-bz2.o
  CC      crypto/init.o
  CC      crypto/hash.o
  CC      crypto/hash-nettle.o
  CC      crypto/hmac.o
  CC      crypto/hmac-nettle.o
  CC      crypto/aes.o
  CC      crypto/desrfb.o
  CC      crypto/cipher.o
  CC      crypto/tlscreds.o
  CC      crypto/tlscredsanon.o
  CC      crypto/tlscredsx509.o
  CC      crypto/tlssession.o
  CC      crypto/secret.o
  CC      crypto/random-gnutls.o
  CC      crypto/pbkdf.o
  CC      crypto/pbkdf-nettle.o
  CC      crypto/ivgen.o
  CC      crypto/ivgen-essiv.o
  CC      crypto/ivgen-plain.o
  CC      crypto/ivgen-plain64.o
  CC      crypto/afsplit.o
  CC      crypto/xts.o
  CC      crypto/block.o
  CC      crypto/block-qcow.o
  CC      crypto/block-luks.o
  CC      io/channel.o
  CC      io/channel-buffer.o
  CC      io/channel-command.o
  CC      io/channel-file.o
  CC      io/channel-socket.o
  CC      io/channel-tls.o
  CC      io/channel-watch.o
  CC      io/channel-websock.o
  CC      io/channel-util.o
  CC      io/dns-resolver.o
  CC      io/task.o
  CC      qom/object.o
  CC      qom/container.o
  CC      qom/qom-qobject.o
  CC      qom/object_interfaces.o
  CC      qemu-io.o
  GEN     qemu-img-cmds.h
  CC      fsdev/9p-marshal.o
  CC      fsdev/virtfs-proxy-helper.o
  CC      scsi/qemu-pr-helper.o
  CC      fsdev/9p-iov-marshal.o
  CC      qemu-bridge-helper.o
  CC      blockdev.o
  CC      blockdev-nbd.o
  CC      bootdevice.o
  CC      iothread.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      os-posix.o
  CC      bt-host.o
  CC      bt-vhci.o
  CC      dma-helpers.o
  CC      vl.o
  CC      tpm.o
  CC      qemu-seccomp.o
  CC      device_tree.o
  CC      qmp-marshal.o
  CC      qmp.o
  CC      hmp.o
  CC      cpus-common.o
  CC      audio/audio.o
  CC      audio/noaudio.o
  CC      audio/wavaudio.o
  CC      audio/mixeng.o
  CC      audio/sdlaudio.o
  CC      audio/ossaudio.o
  CC      audio/wavcapture.o
  CC      backends/rng.o
  CC      backends/rng-egd.o
  CC      backends/rng-random.o
  CC      backends/tpm.o
  CC      backends/hostmem.o
  CC      backends/hostmem-ram.o
  CC      backends/hostmem-file.o
  CC      backends/cryptodev.o
  CC      backends/cryptodev-builtin.o
  CC      block/stream.o
  CC      chardev/msmouse.o
  CC      chardev/wctablet.o
  CC      chardev/testdev.o
  CC      chardev/baum.o
  CC      disas/alpha.o
  CC      disas/arm.o
  CXX     disas/arm-a64.o
  CC      disas/cris.o
  CC      disas/hppa.o
  CC      disas/m68k.o
  CC      disas/microblaze.o
  CC      disas/i386.o
  CC      disas/mips.o
  CC      disas/nios2.o
  CC      disas/moxie.o
  CC      disas/ppc.o
  CC      disas/s390.o
  CC      disas/sh4.o
  CC      disas/sparc.o
  CC      disas/lm32.o
  CXX     disas/libvixl/vixl/utils.o
  CXX     disas/libvixl/vixl/compiler-intrinsics.o
  CXX     disas/libvixl/vixl/a64/instructions-a64.o
  CXX     disas/libvixl/vixl/a64/decoder-a64.o
  CXX     disas/libvixl/vixl/a64/disasm-a64.o
  CC      fsdev/qemu-fsdev.o
  CC      fsdev/qemu-fsdev-opts.o
  CC      fsdev/qemu-fsdev-throttle.o
  CC      fsdev/qemu-fsdev-dummy.o
  CC      hw/9pfs/9p.o
  CC      hw/9pfs/9p-util.o
  CC      hw/9pfs/9p-local.o
  CC      hw/9pfs/9p-xattr.o
  CC      hw/9pfs/9p-xattr-user.o
  CC      hw/9pfs/9p-posix-acl.o
  CC      hw/9pfs/coth.o
  CC      hw/9pfs/cofs.o
  CC      hw/9pfs/cofile.o
  CC      hw/9pfs/codir.o
  CC      hw/9pfs/coxattr.o
  CC      hw/9pfs/9p-synth.o
  CC      hw/9pfs/9p-handle.o
  CC      hw/9pfs/9p-proxy.o
  CC      hw/acpi/core.o
  CC      hw/acpi/piix4.o
  CC      hw/acpi/pcihp.o
  CC      hw/acpi/ich9.o
  CC      hw/acpi/tco.o
  CC      hw/acpi/cpu_hotplug.o
  CC      hw/acpi/memory_hotplug.o
  CC      hw/acpi/cpu.o
  CC      hw/acpi/vmgenid.o
  CC      hw/acpi/nvdimm.o
  CC      hw/acpi/acpi_interface.o
  CC      hw/acpi/bios-linker-loader.o
  CC      hw/acpi/aml-build.o
  CC      hw/acpi/ipmi.o
  CC      hw/acpi/acpi-stub.o
  CC      hw/acpi/ipmi-stub.o
  CC      hw/audio/sb16.o
  CC      hw/audio/es1370.o
  CC      hw/audio/ac97.o
  CC      hw/audio/fmopl.o
  CC      hw/audio/adlib.o
  CC      hw/audio/gus.o
  CC      hw/audio/gusemu_hal.o
  CC      hw/audio/gusemu_mixer.o
  CC      hw/audio/cs4231a.o
  CC      hw/audio/hda-codec.o
  CC      hw/audio/intel-hda.o
  CC      hw/audio/pcspk.o
  CC      hw/audio/wm8750.o
  CC      hw/audio/pl041.o
  CC      hw/audio/lm4549.o
  CC      hw/audio/cs4231.o
  CC      hw/audio/marvell_88w8618.o
  CC      hw/audio/milkymist-ac97.o
  CC      hw/audio/soundhw.o
  CC      hw/block/block.o
  CC      hw/block/cdrom.o
  CC      hw/block/hd-geometry.o
  CC      hw/block/fdc.o
  CC      hw/block/m25p80.o
  CC      hw/block/nand.o
  CC      hw/block/pflash_cfi01.o
  CC      hw/block/pflash_cfi02.o
  CC      hw/block/ecc.o
  CC      hw/block/onenand.o
  CC      hw/block/nvme.o
  CC      hw/bt/core.o
  CC      hw/bt/l2cap.o
  CC      hw/bt/sdp.o
  CC      hw/bt/hci.o
  CC      hw/bt/hid.o
  CC      hw/bt/hci-csr.o
  CC      hw/char/ipoctal232.o
  CC      hw/char/escc.o
  CC      hw/char/parallel.o
  CC      hw/char/pl011.o
  CC      hw/char/serial.o
  CC      hw/char/serial-isa.o
  CC      hw/char/serial-pci.o
  CC      hw/char/virtio-console.o
  CC      hw/char/xilinx_uartlite.o
  CC      hw/char/cadence_uart.o
  CC      hw/char/cmsdk-apb-uart.o
  CC      hw/char/etraxfs_ser.o
  CC      hw/char/debugcon.o
  CC      hw/char/grlib_apbuart.o
  CC      hw/char/imx_serial.o
  CC      hw/char/lm32_juart.o
  CC      hw/char/lm32_uart.o
  CC      hw/char/milkymist-uart.o
  CC      hw/char/sclpconsole.o
  CC      hw/char/sclpconsole-lm.o
  CC      hw/core/qdev.o
  CC      hw/core/qdev-properties.o
  CC      hw/core/bus.o
  CC      hw/core/reset.o
  CC      hw/core/fw-path-provider.o
  CC      hw/core/irq.o
  CC      hw/core/hotplug.o
  CC      hw/core/nmi.o
  CC      hw/core/empty_slot.o
  CC      hw/core/stream.o
  CC      hw/core/ptimer.o
  CC      hw/core/sysbus.o
  CC      hw/core/machine.o
  CC      hw/core/loader.o
  CC      hw/core/loader-fit.o
  CC      hw/core/qdev-properties-system.o
  CC      hw/core/register.o
  CC      hw/core/or-irq.o
  CC      hw/core/platform-bus.o
  CC      hw/cpu/core.o
  CC      hw/display/ads7846.o
  CC      hw/display/cirrus_vga.o
  CC      hw/display/g364fb.o
  CC      hw/display/jazz_led.o
  CC      hw/display/pl110.o
  CC      hw/display/ssd0303.o
  CC      hw/display/ssd0323.o
  CC      hw/display/vga-pci.o
  CC      hw/display/vga-isa.o
  CC      hw/display/vga-isa-mm.o
  CC      hw/display/vmware_vga.o
  CC      hw/display/blizzard.o
  CC      hw/display/exynos4210_fimd.o
  CC      hw/display/framebuffer.o
  CC      hw/display/milkymist-vgafb.o
  CC      hw/display/tc6393xb.o
  CC      hw/display/milkymist-tmu2.o
  CC      hw/dma/puv3_dma.o
  CC      hw/dma/rc4030.o
  CC      hw/dma/pl080.o
  CC      hw/dma/pl330.o
  CC      hw/dma/i8257.o
  CC      hw/dma/i82374.o
  CC      hw/dma/xilinx_axidma.o
  CC      hw/dma/xlnx-zynq-devcfg.o
  CC      hw/dma/etraxfs_dma.o
  CC      hw/dma/sparc32_dma.o
  CC      hw/dma/sun4m_iommu.o
  CC      hw/gpio/max7310.o
  CC      hw/gpio/pl061.o
  CC      hw/gpio/puv3_gpio.o
  CC      hw/gpio/zaurus.o
  CC      hw/gpio/mpc8xxx.o
  CC      hw/gpio/gpio_key.o
  CC      hw/i2c/core.o
  CC      hw/i2c/smbus.o
  CC      hw/i2c/smbus_eeprom.o
  CC      hw/i2c/i2c-ddc.o
  CC      hw/i2c/versatile_i2c.o
  CC      hw/i2c/smbus_ich9.o
  CC      hw/i2c/pm_smbus.o
  CC      hw/i2c/bitbang_i2c.o
  CC      hw/i2c/exynos4210_i2c.o
  CC      hw/i2c/imx_i2c.o
  CC      hw/i2c/aspeed_i2c.o
  CC      hw/ide/core.o
  CC      hw/ide/atapi.o
  CC      hw/ide/qdev.o
  CC      hw/ide/pci.o
  CC      hw/ide/isa.o
  CC      hw/ide/piix.o
  CC      hw/ide/cmd646.o
  CC      hw/ide/macio.o
  CC      hw/ide/mmio.o
  CC      hw/ide/microdrive.o
  CC      hw/ide/via.o
  CC      hw/ide/ahci.o
  CC      hw/ide/ich.o
  CC      hw/input/adb.o
  CC      hw/input/hid.o
  CC      hw/input/lm832x.o
  CC      hw/input/pckbd.o
  CC      hw/input/pl050.o
  CC      hw/input/ps2.o
  CC      hw/input/stellaris_input.o
  CC      hw/input/tsc2005.o
  CC      hw/input/vmmouse.o
  CC      hw/input/virtio-input.o
  CC      hw/input/virtio-input-hid.o
  CC      hw/input/virtio-input-host.o
  CC      hw/intc/heathrow_pic.o
  CC      hw/intc/i8259_common.o
  CC      hw/intc/i8259.o
  CC      hw/intc/pl190.o
  CC      hw/intc/puv3_intc.o
  CC      hw/intc/xilinx_intc.o
  CC      hw/intc/etraxfs_pic.o
  CC      hw/intc/imx_avic.o
  CC      hw/intc/lm32_pic.o
  CC      hw/intc/realview_gic.o
  CC      hw/intc/ioapic_common.o
  CC      hw/intc/slavio_intctl.o
  CC      hw/intc/arm_gic_common.o
  CC      hw/intc/arm_gic.o
  CC      hw/intc/arm_gicv2m.o
  CC      hw/intc/arm_gicv3_common.o
  CC      hw/intc/arm_gicv3.o
  CC      hw/intc/arm_gicv3_dist.o
  CC      hw/intc/arm_gicv3_redist.o
  CC      hw/intc/arm_gicv3_its_common.o
  CC      hw/intc/openpic.o
  CC      hw/intc/intc.o
  CC      hw/ipack/ipack.o
  CC      hw/ipack/tpci200.o
  CC      hw/ipmi/ipmi.o
  CC      hw/ipmi/ipmi_bmc_sim.o
  CC      hw/ipmi/ipmi_bmc_extern.o
  CC      hw/ipmi/isa_ipmi_kcs.o
  CC      hw/ipmi/isa_ipmi_bt.o
  CC      hw/isa/isa-bus.o
  CC      hw/isa/apm.o
  CC      hw/isa/i82378.o
  CC      hw/isa/pc87312.o
  CC      hw/isa/piix4.o
  CC      hw/isa/vt82c686.o
  CC      hw/mem/pc-dimm.o
  CC      hw/mem/nvdimm.o
  CC      hw/misc/applesmc.o
  CC      hw/misc/max111x.o
  CC      hw/misc/tmp105.o
  CC      hw/misc/tmp421.o
  CC      hw/misc/debugexit.o
  CC      hw/misc/sga.o
  CC      hw/misc/pc-testdev.o
  CC      hw/misc/pci-testdev.o
  CC      hw/misc/edu.o
  CC      hw/misc/unimp.o
  CC      hw/misc/arm_l2x0.o
  CC      hw/misc/arm_integrator_debug.o
  CC      hw/misc/a9scu.o
  CC      hw/misc/arm11scu.o
  CC      hw/misc/puv3_pm.o
  CC      hw/misc/macio/macio.o
  CC      hw/misc/macio/cuda.o
  CC      hw/misc/macio/mac_dbdma.o
  CC      hw/net/dp8393x.o
  CC      hw/net/ne2000.o
  CC      hw/net/eepro100.o
  CC      hw/net/pcnet-pci.o
  CC      hw/net/pcnet.o
  CC      hw/net/e1000.o
  CC      hw/net/e1000x_common.o
  CC      hw/net/net_tx_pkt.o
  CC      hw/net/net_rx_pkt.o
  CC      hw/net/e1000e_core.o
  CC      hw/net/e1000e.o
  CC      hw/net/vmxnet3.o
  CC      hw/net/rtl8139.o
  CC      hw/net/smc91c111.o
  CC      hw/net/lan9118.o
  CC      hw/net/ne2000-isa.o
  CC      hw/net/opencores_eth.o
  CC      hw/net/xgmac.o
  CC      hw/net/mipsnet.o
  CC      hw/net/xilinx_axienet.o
  CC      hw/net/allwinner_emac.o
  CC      hw/net/imx_fec.o
  CC      hw/net/cadence_gem.o
  CC      hw/net/stellaris_enet.o
  CC      hw/net/lance.o
  CC      hw/net/sunhme.o
  CC      hw/net/ftgmac100.o
  CC      hw/net/sungem.o
  CC      hw/net/rocker/rocker.o
  CC      hw/net/rocker/rocker_desc.o
  CC      hw/net/rocker/rocker_fp.o
  CC      hw/net/rocker/rocker_world.o
  CC      hw/net/rocker/rocker_of_dpa.o
  CC      hw/nvram/ds1225y.o
  CC      hw/nvram/eeprom93xx.o
  CC      hw/nvram/fw_cfg.o
  CC      hw/nvram/chrp_nvram.o
  CC      hw/nvram/mac_nvram.o
  CC      hw/pci-bridge/pci_bridge_dev.o
  CC      hw/pci-bridge/pcie_pci_bridge.o
  CC      hw/pci-bridge/pcie_root_port.o
  CC      hw/pci-bridge/gen_pcie_root_port.o
  CC      hw/pci-bridge/pci_expander_bridge.o
  CC      hw/pci-bridge/xio3130_upstream.o
  CC      hw/pci-bridge/xio3130_downstream.o
  CC      hw/pci-bridge/ioh3420.o
  CC      hw/pci-bridge/i82801b11.o
  CC      hw/pci-bridge/dec.o
  CC      hw/pci-host/pam.o
  CC      hw/pci-host/prep.o
  CC      hw/pci-host/grackle.o
  CC      hw/pci-host/uninorth.o
  CC      hw/pci-host/ppce500.o
  CC      hw/pci-host/versatile.o
  CC      hw/pci-host/apb.o
  CC      hw/pci-host/bonito.o
  CC      hw/pci-host/piix.o
  CC      hw/pci-host/q35.o
  CC      hw/pci-host/gpex.o
  CC      hw/pci-host/xilinx-pcie.o
  CC      hw/pci/pci_bridge.o
  CC      hw/pci/pci.o
  CC      hw/pci/msix.o
  CC      hw/pci/msi.o
  CC      hw/pci/shpc.o
  CC      hw/pci/slotid_cap.o
  CC      hw/pci/pci_host.o
  CC      hw/pci/pcie_host.o
  CC      hw/pci/pcie.o
  CC      hw/pci/pcie_aer.o
  CC      hw/pci/pcie_port.o
  CC      hw/pci/pci-stub.o
  CC      hw/pcmcia/pcmcia.o
  CC      hw/scsi/scsi-disk.o
  CC      hw/scsi/scsi-generic.o
  CC      hw/scsi/scsi-bus.o
  CC      hw/scsi/lsi53c895a.o
  CC      hw/scsi/mptsas.o
  CC      hw/scsi/mptconfig.o
  CC      hw/scsi/mptendian.o
  CC      hw/scsi/megasas.o
  CC      hw/scsi/vmw_pvscsi.o
  CC      hw/scsi/esp.o
  CC      hw/scsi/esp-pci.o
  CC      hw/sd/pl181.o
  CC      hw/sd/ssi-sd.o
  CC      hw/sd/sd.o
  CC      hw/sd/core.o
  CC      hw/sd/sdhci.o
  CC      hw/smbios/smbios.o
  CC      hw/smbios/smbios_type_38.o
  CC      hw/smbios/smbios-stub.o
  CC      hw/smbios/smbios_type_38-stub.o
  CC      hw/ssi/pl022.o
  CC      hw/ssi/ssi.o
  CC      hw/ssi/xilinx_spi.o
  CC      hw/ssi/xilinx_spips.o
  CC      hw/ssi/aspeed_smc.o
  CC      hw/ssi/stm32f2xx_spi.o
  CC      hw/ssi/mss-spi.o
  CC      hw/timer/arm_timer.o
  CC      hw/timer/arm_mptimer.o
  CC      hw/timer/armv7m_systick.o
  CC      hw/timer/a9gtimer.o
  CC      hw/timer/cadence_ttc.o
  CC      hw/timer/ds1338.o
  CC      hw/timer/hpet.o
  CC      hw/timer/i8254_common.o
  CC      hw/timer/i8254.o
  CC      hw/timer/m48t59.o
  CC      hw/timer/m48t59-isa.o
  CC      hw/timer/pl031.o
  CC      hw/timer/puv3_ost.o
  CC      hw/timer/twl92230.o
  CC      hw/timer/xilinx_timer.o
  CC      hw/timer/slavio_timer.o
  CC      hw/timer/etraxfs_timer.o
  CC      hw/timer/grlib_gptimer.o
  CC      hw/timer/imx_epit.o
  CC      hw/timer/imx_gpt.o
  CC      hw/timer/lm32_timer.o
  CC      hw/timer/milkymist-sysctl.o
  CC      hw/timer/stm32f2xx_timer.o
  CC      hw/timer/sun4v-rtc.o
  CC      hw/timer/aspeed_timer.o
  CC      hw/timer/cmsdk-apb-timer.o
  CC      hw/timer/mss-timer.o
  CC      hw/tpm/tpm_tis.o
  CC      hw/usb/core.o
  CC      hw/usb/combined-packet.o
  CC      hw/usb/bus.o
  CC      hw/usb/libhw.o
  CC      hw/usb/desc-msos.o
  CC      hw/usb/desc.o
  CC      hw/usb/hcd-uhci.o
  CC      hw/usb/hcd-ohci.o
  CC      hw/usb/hcd-ehci.o
  CC      hw/usb/hcd-ehci-pci.o
  CC      hw/usb/hcd-ehci-sysbus.o
  CC      hw/usb/hcd-xhci.o
  CC      hw/usb/hcd-xhci-nec.o
  CC      hw/usb/hcd-musb.o
  CC      hw/usb/dev-hub.o
  CC      hw/usb/dev-hid.o
  CC      hw/usb/dev-wacom.o
  CC      hw/usb/dev-storage.o
  CC      hw/usb/dev-uas.o
  CC      hw/usb/dev-audio.o
  CC      hw/usb/dev-serial.o
  CC      hw/usb/dev-network.o
  CC      hw/usb/dev-smartcard-reader.o
  CC      hw/usb/dev-bluetooth.o
  CC      hw/usb/ccid-card-passthru.o
  CC      hw/usb/ccid-card-emulated.o
  CC      hw/usb/dev-mtp.o
  CC      hw/usb/redirect.o
  CC      hw/usb/quirks.o
  CC      hw/usb/host-stub.o
  CC      hw/virtio/virtio-rng.o
  CC      hw/virtio/virtio-pci.o
  CC      hw/virtio/virtio-mmio.o
  CC      hw/virtio/vhost-stub.o
  CC      hw/virtio/virtio-bus.o
  CC      hw/watchdog/watchdog.o
  CC      hw/watchdog/wdt_i6300esb.o
  CC      hw/watchdog/wdt_ib700.o
  CC      hw/watchdog/wdt_diag288.o
  CC      hw/watchdog/wdt_aspeed.o
  CC      migration/migration.o
  CC      migration/socket.o
  CC      migration/fd.o
  CC      migration/exec.o
  CC      migration/tls.o
  CC      migration/channel.o
  CC      migration/savevm.o
  CC      migration/colo-comm.o
  CC      migration/colo.o
  CC      migration/colo-failover.o
  CC      migration/vmstate.o
  CC      migration/vmstate-types.o
  CC      migration/page_cache.o
  CC      migration/qemu-file.o
  CC      migration/global_state.o
  CC      migration/qemu-file-channel.o
  CC      migration/xbzrle.o
  CC      migration/postcopy-ram.o
  CC      migration/qjson.o
  CC      migration/block.o
  CC      net/net.o
  CC      net/queue.o
  CC      net/checksum.o
  CC      net/util.o
  CC      net/socket.o
  CC      net/hub.o
  CC      net/eth.o
  CC      net/dump.o
  CC      net/vhost-user.o
  CC      net/l2tpv3.o
  CC      net/slirp.o
  CC      net/filter.o
  CC      net/filter-buffer.o
  CC      net/filter-mirror.o
  CC      net/colo-compare.o
  CC      net/colo.o
  CC      net/filter-replay.o
  CC      net/filter-rewriter.o
  CC      net/tap-linux.o
  CC      net/tap.o
  CC      qom/cpu.o
  CC      replay/replay.o
  CC      replay/replay-internal.o
  CC      replay/replay-events.o
  CC      replay/replay-time.o
  CC      replay/replay-input.o
  CC      replay/replay-char.o
  CC      replay/replay-snapshot.o
  CC      replay/replay-net.o
  CC      replay/replay-audio.o
  CC      slirp/if.o
  CC      slirp/cksum.o
  CC      slirp/ip_icmp.o
  CC      slirp/ip6_icmp.o
  CC      slirp/ip6_input.o
  CC      slirp/ip6_output.o
  CC      slirp/ip_input.o
  CC      slirp/ip_output.o
  CC      slirp/dnssearch.o
  CC      slirp/slirp.o
  CC      slirp/mbuf.o
  CC      slirp/dhcpv6.o
  CC      slirp/sbuf.o
  CC      slirp/misc.o
  CC      slirp/socket.o
  CC      slirp/tcp_input.o
  CC      slirp/tcp_output.o
  CC      slirp/tcp_subr.o
  CC      slirp/udp.o
  CC      slirp/tcp_timer.o
  CC      slirp/udp6.o
  CC      slirp/bootp.o
  CC      slirp/tftp.o
  CC      slirp/arp_table.o
  CC      slirp/ndp_table.o
  CC      slirp/ncsi.o
  CC      ui/keymaps.o
  CC      ui/console.o
  CC      ui/cursor.o
  CC      ui/qemu-pixman.o
  CC      ui/input.o
  CC      ui/input-keymap.o
  CC      ui/input-legacy.o
  CC      ui/input-linux.o
  CC      ui/sdl2.o
  CC      ui/sdl2-input.o
  CC      ui/sdl2-2d.o
  CC      ui/sdl2-gl.o
  CC      ui/x_keymap.o
  CC      ui/curses.o
  CC      ui/vnc.o
  CC      ui/vnc-enc-zlib.o
  CC      ui/vnc-enc-hextile.o
  CC      ui/vnc-enc-tight.o
  CC      ui/vnc-palette.o
  CC      ui/vnc-enc-zrle.o
  CC      ui/vnc-auth-vencrypt.o
  CC      ui/vnc-auth-sasl.o
  CC      ui/vnc-ws.o
  CC      ui/vnc-jobs.o
  CC      ui/gtk.o
  CC      ui/shader.o
  VERT    ui/shader/texture-blit-vert.h
  FRAG    ui/shader/texture-blit-frag.h
  CC      ui/egl-helpers.o
  CC      ui/egl-context.o
  CC      ui/egl-headless.o
  CC      ui/gtk-gl-area.o
  CC      chardev/char.o
  CC      chardev/char-fd.o
  CC      chardev/char-fe.o
  CC      chardev/char-file.o
  CC      chardev/char-io.o
  CC      chardev/char-mux.o
  CC      chardev/char-null.o
  CC      chardev/char-parallel.o
  CC      chardev/char-pipe.o
  CC      chardev/char-pty.o
  CC      chardev/char-ringbuf.o
  CC      chardev/char-serial.o
  CC      chardev/char-socket.o
  CC      chardev/char-stdio.o
  CC      chardev/char-udp.o
  CCAS    s390-ccw/start.o
  CC      s390-ccw/main.o
  CC      s390-ccw/bootmap.o
  LINK    tests/qemu-iotests/socket_scm_helper
  CC      s390-ccw/sclp.o
  GEN     qemu-doc.html
  CC      s390-ccw/virtio.o
  CC      s390-ccw/virtio-scsi.o
  CC      s390-ccw/virtio-blkdev.o
s390-netboot.img not built since roms/SLOF/ is not available.
  GEN     qemu-doc.txt
  GEN     qemu.1
  BUILD   s390-ccw/s390-ccw.elf
  STRIP   s390-ccw/s390-ccw.img
  GEN     docs/interop/qemu-qmp-ref.html
  GEN     docs/interop/qemu-qmp-ref.txt
  GEN     docs/interop/qemu-qmp-ref.7
  GEN     docs/interop/qemu-ga-ref.html
  GEN     docs/interop/qemu-ga-ref.txt
  GEN     docs/interop/qemu-ga-ref.7
  CC      qga/commands.o
  CC      qga/guest-agent-command-state.o
  CC      qga/main.o
  CC      qga/commands-posix.o
  CC      qga/channel-posix.o
  CC      qga/qapi-generated/qga-qapi-types.o
  CC      qga/qapi-generated/qga-qapi-visit.o
  CC      qga/qapi-generated/qga-qmp-marshal.o
  AR      libqemuutil.a
  CC      qemu-img.o
  LINK    qemu-io
  LINK    fsdev/virtfs-proxy-helper
  LINK    scsi/qemu-pr-helper
  LINK    qemu-bridge-helper
  CC      ui/console-gl.o
  LINK    qemu-ga
  LINK    ivshmem-client
  LINK    ivshmem-server
  LINK    qemu-nbd
  GEN     alpha-softmmu/hmp-commands.h
  GEN     aarch64-softmmu/hmp-commands.h
  GEN     alpha-softmmu/hmp-commands-info.h
  GEN     alpha-softmmu/config-target.h
  GEN     arm-softmmu/hmp-commands.h
  GEN     aarch64-softmmu/hmp-commands-info.h
  CC      alpha-softmmu/exec.o
  GEN     aarch64-softmmu/config-target.h
  GEN     arm-softmmu/hmp-commands-info.h
  GEN     arm-softmmu/config-target.h
  CC      aarch64-softmmu/exec.o
  CC      arm-softmmu/exec.o
  GEN     cris-softmmu/hmp-commands.h
  GEN     cris-softmmu/hmp-commands-info.h
  GEN     cris-softmmu/config-target.h
  CC      cris-softmmu/exec.o
  CC      alpha-softmmu/tcg/tcg.o
  CC      arm-softmmu/tcg/tcg.o
  CC      aarch64-softmmu/tcg/tcg.o
  CC      cris-softmmu/tcg/tcg.o
  CC      alpha-softmmu/tcg/tcg-op.o
  CC      arm-softmmu/tcg/tcg-op.o
  CC      aarch64-softmmu/tcg/tcg-op.o
  CC      cris-softmmu/tcg/tcg-op.o
  CC      aarch64-softmmu/tcg/optimize.o
  CC      alpha-softmmu/tcg/optimize.o
  CC      arm-softmmu/tcg/optimize.o
  CC      alpha-softmmu/tcg/tcg-common.o
  CC      cris-softmmu/tcg/optimize.o
  CC      arm-softmmu/tcg/tcg-common.o
  CC      alpha-softmmu/fpu/softfloat.o
  CC      aarch64-softmmu/tcg/tcg-common.o
  CC      arm-softmmu/fpu/softfloat.o
  CC      aarch64-softmmu/fpu/softfloat.o
  CC      cris-softmmu/tcg/tcg-common.o
  CC      cris-softmmu/fpu/softfloat.o
  CC      alpha-softmmu/disas.o
  CC      aarch64-softmmu/disas.o
  CC      alpha-softmmu/arch_init.o
  CC      arm-softmmu/disas.o
  CC      alpha-softmmu/cpus.o
  GEN     aarch64-softmmu/gdbstub-xml.c
  GEN     arm-softmmu/gdbstub-xml.c
  CC      arm-softmmu/arch_init.o
  CC      aarch64-softmmu/arch_init.o
  CC      arm-softmmu/cpus.o
  CC      alpha-softmmu/monitor.o
  CC      aarch64-softmmu/cpus.o
  CC      arm-softmmu/monitor.o
  CC      cris-softmmu/disas.o
  CC      cris-softmmu/arch_init.o
  CC      aarch64-softmmu/monitor.o
  CC      cris-softmmu/cpus.o
  CC      alpha-softmmu/gdbstub.o
  CC      cris-softmmu/monitor.o
  CC      arm-softmmu/gdbstub.o
  CC      alpha-softmmu/balloon.o
  CC      aarch64-softmmu/gdbstub.o
  CC      arm-softmmu/balloon.o
  CC      alpha-softmmu/ioport.o
  CC      arm-softmmu/ioport.o
  CC      aarch64-softmmu/balloon.o
  CC      alpha-softmmu/numa.o
  CC      aarch64-softmmu/ioport.o
  CC      cris-softmmu/gdbstub.o
  CC      arm-softmmu/numa.o
  CC      alpha-softmmu/qtest.o
  CC      aarch64-softmmu/numa.o
  CC      arm-softmmu/qtest.o
  CC      aarch64-softmmu/qtest.o
  CC      cris-softmmu/balloon.o
  CC      alpha-softmmu/memory.o
  CC      cris-softmmu/ioport.o
  CC      arm-softmmu/memory.o
  CC      aarch64-softmmu/memory.o
  CC      cris-softmmu/numa.o
  CC      alpha-softmmu/memory_mapping.o
  CC      cris-softmmu/qtest.o
  CC      arm-softmmu/memory_mapping.o
  CC      alpha-softmmu/dump.o
  CC      cris-softmmu/memory.o
  CC      aarch64-softmmu/memory_mapping.o
  CC      arm-softmmu/dump.o
  CC      aarch64-softmmu/dump.o
  CC      alpha-softmmu/migration/ram.o
  CC      arm-softmmu/migration/ram.o
  CC      cris-softmmu/memory_mapping.o
  CC      aarch64-softmmu/migration/ram.o
  CC      alpha-softmmu/accel/accel.o
  CC      cris-softmmu/dump.o
  CC      alpha-softmmu/accel/stubs/hax-stub.o
  CC      arm-softmmu/accel/accel.o
  CC      aarch64-softmmu/accel/accel.o
  CC      alpha-softmmu/accel/stubs/kvm-stub.o
  CC      cris-softmmu/migration/ram.o
  CC      arm-softmmu/accel/stubs/hax-stub.o
  CC      aarch64-softmmu/accel/stubs/hax-stub.o
  CC      aarch64-softmmu/accel/stubs/kvm-stub.o
  CC      arm-softmmu/accel/stubs/kvm-stub.o
  CC      alpha-softmmu/accel/tcg/tcg-all.o
  CC      arm-softmmu/accel/tcg/tcg-all.o
  CC      aarch64-softmmu/accel/tcg/tcg-all.o
  CC      alpha-softmmu/accel/tcg/cputlb.o
  CC      aarch64-softmmu/accel/tcg/cputlb.o
  CC      arm-softmmu/accel/tcg/cputlb.o
  CC      cris-softmmu/accel/accel.o
  CC      cris-softmmu/accel/stubs/hax-stub.o
  CC      alpha-softmmu/accel/tcg/tcg-runtime.o
  CC      alpha-softmmu/accel/tcg/cpu-exec.o
  CC      cris-softmmu/accel/stubs/kvm-stub.o
  CC      arm-softmmu/accel/tcg/tcg-runtime.o
  CC      cris-softmmu/accel/tcg/tcg-all.o
  CC      alpha-softmmu/accel/tcg/cpu-exec-common.o
  CC      aarch64-softmmu/accel/tcg/tcg-runtime.o
  CC      alpha-softmmu/accel/tcg/translate-all.o
  CC      arm-softmmu/accel/tcg/cpu-exec.o
  CC      cris-softmmu/accel/tcg/cputlb.o
  CC      aarch64-softmmu/accel/tcg/cpu-exec.o
  CC      alpha-softmmu/accel/tcg/translator.o
  CC      arm-softmmu/accel/tcg/cpu-exec-common.o
  CC      alpha-softmmu/hw/9pfs/virtio-9p-device.o
  CC      arm-softmmu/accel/tcg/translate-all.o
  CC      alpha-softmmu/hw/block/virtio-blk.o
  CC      aarch64-softmmu/accel/tcg/cpu-exec-common.o
  CC      cris-softmmu/accel/tcg/tcg-runtime.o
  CC      aarch64-softmmu/accel/tcg/translate-all.o
  CC      alpha-softmmu/hw/block/dataplane/virtio-blk.o
  CC      cris-softmmu/accel/tcg/cpu-exec.o
  CC      arm-softmmu/accel/tcg/translator.o
  CC      alpha-softmmu/hw/char/virtio-serial-bus.o
  CC      cris-softmmu/accel/tcg/cpu-exec-common.o
  CC      aarch64-softmmu/accel/tcg/translator.o
  CC      arm-softmmu/hw/9pfs/virtio-9p-device.o
  CC      cris-softmmu/accel/tcg/translate-all.o
  CC      arm-softmmu/hw/adc/stm32f2xx_adc.o
  CC      alpha-softmmu/hw/core/generic-loader.o
  CC      aarch64-softmmu/hw/9pfs/virtio-9p-device.o
  CC      arm-softmmu/hw/block/virtio-blk.o
  CC      aarch64-softmmu/hw/adc/stm32f2xx_adc.o
  CC      cris-softmmu/accel/tcg/translator.o
  CC      alpha-softmmu/hw/core/null-machine.o
  CC      aarch64-softmmu/hw/block/virtio-blk.o
  CC      cris-softmmu/hw/core/generic-loader.o
  CC      alpha-softmmu/hw/display/vga.o
  CC      arm-softmmu/hw/block/dataplane/virtio-blk.o
  CC      cris-softmmu/hw/core/null-machine.o
  CC      aarch64-softmmu/hw/block/dataplane/virtio-blk.o
  CC      arm-softmmu/hw/char/exynos4210_uart.o
  CC      cris-softmmu/hw/misc/mmio_interface.o
  CC      aarch64-softmmu/hw/char/exynos4210_uart.o
  CC      arm-softmmu/hw/char/omap_uart.o
  CC      alpha-softmmu/hw/display/virtio-gpu.o
  CC      cris-softmmu/hw/net/etraxfs_eth.o
  CC      aarch64-softmmu/hw/char/omap_uart.o
  CC      arm-softmmu/hw/char/digic-uart.o
  CC      cris-softmmu/hw/net/vhost_net.o
  CC      aarch64-softmmu/hw/char/digic-uart.o
  CC      arm-softmmu/hw/char/stm32f2xx_usart.o
  CC      cris-softmmu/hw/net/rocker/qmp-norocker.o
  CC      aarch64-softmmu/hw/char/stm32f2xx_usart.o
  CC      alpha-softmmu/hw/display/virtio-gpu-3d.o
  CC      cris-softmmu/hw/vfio/common.o
  CC      arm-softmmu/hw/char/bcm2835_aux.o
  CC      aarch64-softmmu/hw/char/bcm2835_aux.o
  CC      arm-softmmu/hw/char/virtio-serial-bus.o
  CC      alpha-softmmu/hw/display/virtio-gpu-pci.o
  CC      aarch64-softmmu/hw/char/virtio-serial-bus.o
  CC      cris-softmmu/hw/vfio/platform.o
  CC      arm-softmmu/hw/core/generic-loader.o
  CC      alpha-softmmu/hw/misc/ivshmem.o
  CC      aarch64-softmmu/hw/core/generic-loader.o
  CC      cris-softmmu/hw/vfio/spapr.o
  CC      arm-softmmu/hw/core/null-machine.o
  CC      alpha-softmmu/hw/misc/mmio_interface.o
  CC      arm-softmmu/hw/cpu/arm11mpcore.o
  CC      cris-softmmu/hw/cris/boot.o
  CC      aarch64-softmmu/hw/core/null-machine.o
  CC      alpha-softmmu/hw/net/virtio-net.o
  CC      cris-softmmu/hw/cris/axis_dev88.o
  CC      arm-softmmu/hw/cpu/realview_mpcore.o
  CC      aarch64-softmmu/hw/cpu/arm11mpcore.o
  CC      arm-softmmu/hw/cpu/a9mpcore.o
  CC      cris-softmmu/target/cris/translate.o
  CC      aarch64-softmmu/hw/cpu/realview_mpcore.o
  CC      arm-softmmu/hw/cpu/a15mpcore.o
  CC      alpha-softmmu/hw/net/vhost_net.o
  CC      arm-softmmu/hw/display/omap_dss.o
  CC      aarch64-softmmu/hw/cpu/a9mpcore.o
  CC      alpha-softmmu/hw/scsi/virtio-scsi.o
  CC      aarch64-softmmu/hw/cpu/a15mpcore.o
  CC      arm-softmmu/hw/display/omap_lcdc.o
  CC      alpha-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      aarch64-softmmu/hw/display/omap_dss.o
  CC      arm-softmmu/hw/display/pxa2xx_lcd.o
  CC      alpha-softmmu/hw/scsi/vhost-scsi-common.o
  CC      cris-softmmu/target/cris/op_helper.o
  CC      aarch64-softmmu/hw/display/omap_lcdc.o
  CC      alpha-softmmu/hw/scsi/vhost-scsi.o
  CC      cris-softmmu/target/cris/helper.o
  CC      alpha-softmmu/hw/scsi/vhost-user-scsi.o
  CC      aarch64-softmmu/hw/display/pxa2xx_lcd.o
  CC      cris-softmmu/target/cris/cpu.o
  CC      alpha-softmmu/hw/timer/mc146818rtc.o
  CC      arm-softmmu/hw/display/bcm2835_fb.o
  CC      cris-softmmu/target/cris/gdbstub.o
  CC      alpha-softmmu/hw/vfio/common.o
  CC      cris-softmmu/target/cris/mmu.o
  CC      arm-softmmu/hw/display/vga.o
  CC      cris-softmmu/target/cris/machine.o
  CC      alpha-softmmu/hw/vfio/pci.o
  CC      aarch64-softmmu/hw/display/bcm2835_fb.o
  GEN     trace/generated-helpers.c
  CC      cris-softmmu/trace/control-target.o
  CC      cris-softmmu/trace/generated-helpers.o
  CC      aarch64-softmmu/hw/display/vga.o
  CC      arm-softmmu/hw/display/virtio-gpu.o
  LINK    cris-softmmu/qemu-system-cris
  CC      alpha-softmmu/hw/vfio/pci-quirks.o
  CC      arm-softmmu/hw/display/virtio-gpu-3d.o
  CC      aarch64-softmmu/hw/display/virtio-gpu.o
  CC      alpha-softmmu/hw/vfio/platform.o
  CC      aarch64-softmmu/hw/display/virtio-gpu-3d.o
  CC      arm-softmmu/hw/display/virtio-gpu-pci.o
  CC      alpha-softmmu/hw/vfio/spapr.o
  CC      alpha-softmmu/hw/virtio/virtio.o
  CC      aarch64-softmmu/hw/display/virtio-gpu-pci.o
  CC      arm-softmmu/hw/dma/omap_dma.o
  CC      aarch64-softmmu/hw/display/dpcd.o
  CC      arm-softmmu/hw/dma/soc_dma.o
  CC      aarch64-softmmu/hw/display/xlnx_dp.o
  CC      arm-softmmu/hw/dma/pxa2xx_dma.o
  CC      alpha-softmmu/hw/virtio/virtio-balloon.o
  GEN     i386-softmmu/hmp-commands.h
  GEN     i386-softmmu/hmp-commands-info.h
  GEN     i386-softmmu/config-target.h
  CC      i386-softmmu/exec.o
  CC      aarch64-softmmu/hw/dma/xlnx_dpdma.o
  CC      arm-softmmu/hw/dma/bcm2835_dma.o
  CC      alpha-softmmu/hw/virtio/vhost.o
  CC      arm-softmmu/hw/gpio/omap_gpio.o
  CC      aarch64-softmmu/hw/dma/omap_dma.o
  CC      alpha-softmmu/hw/virtio/vhost-backend.o
  CC      arm-softmmu/hw/gpio/imx_gpio.o
  CC      alpha-softmmu/hw/virtio/vhost-user.o
  CC      aarch64-softmmu/hw/dma/soc_dma.o
  CC      arm-softmmu/hw/gpio/bcm2835_gpio.o
  CC      alpha-softmmu/hw/virtio/vhost-vsock.o
  CC      aarch64-softmmu/hw/dma/pxa2xx_dma.o
  CC      i386-softmmu/tcg/tcg.o
  CC      alpha-softmmu/hw/virtio/virtio-crypto.o
  CC      arm-softmmu/hw/i2c/omap_i2c.o
  CC      aarch64-softmmu/hw/dma/bcm2835_dma.o
  CC      alpha-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      arm-softmmu/hw/input/pxa2xx_keypad.o
  CC      aarch64-softmmu/hw/gpio/omap_gpio.o
  CC      alpha-softmmu/hw/alpha/dp264.o
  CC      arm-softmmu/hw/input/tsc210x.o
  CC      aarch64-softmmu/hw/gpio/imx_gpio.o
  CC      alpha-softmmu/hw/alpha/pci.o
  CC      aarch64-softmmu/hw/gpio/bcm2835_gpio.o
  CC      arm-softmmu/hw/intc/armv7m_nvic.o
  CC      alpha-softmmu/hw/alpha/typhoon.o
  CC      aarch64-softmmu/hw/i2c/omap_i2c.o
  CC      i386-softmmu/tcg/tcg-op.o
  CC      alpha-softmmu/target/alpha/machine.o
  CC      arm-softmmu/hw/intc/exynos4210_gic.o
  CC      aarch64-softmmu/hw/input/pxa2xx_keypad.o
  CC      alpha-softmmu/target/alpha/translate.o
  CC      arm-softmmu/hw/intc/exynos4210_combiner.o
  CC      arm-softmmu/hw/intc/omap_intc.o
  CC      aarch64-softmmu/hw/input/tsc210x.o
  CC      alpha-softmmu/target/alpha/helper.o
  CC      arm-softmmu/hw/intc/bcm2835_ic.o
  CC      aarch64-softmmu/hw/intc/armv7m_nvic.o
  CC      arm-softmmu/hw/intc/bcm2836_control.o
  CC      alpha-softmmu/target/alpha/cpu.o
  CC      alpha-softmmu/target/alpha/int_helper.o
  CC      arm-softmmu/hw/intc/allwinner-a10-pic.o
  CC      i386-softmmu/tcg/optimize.o
  CC      arm-softmmu/hw/intc/aspeed_vic.o
  CC      aarch64-softmmu/hw/intc/exynos4210_gic.o
  CC      alpha-softmmu/target/alpha/fpu_helper.o
  CC      alpha-softmmu/target/alpha/vax_helper.o
  CC      arm-softmmu/hw/intc/arm_gicv3_cpuif.o
  CC      aarch64-softmmu/hw/intc/exynos4210_combiner.o
  CC      alpha-softmmu/target/alpha/sys_helper.o
  CC      alpha-softmmu/target/alpha/mem_helper.o
  CC      i386-softmmu/tcg/tcg-common.o
  CC      aarch64-softmmu/hw/intc/omap_intc.o
  CC      alpha-softmmu/target/alpha/gdbstub.o
  CC      i386-softmmu/fpu/softfloat.o
  CC      aarch64-softmmu/hw/intc/bcm2835_ic.o
  GEN     trace/generated-helpers.c
  CC      arm-softmmu/hw/misc/ivshmem.o
  CC      alpha-softmmu/trace/control-target.o
  CC      aarch64-softmmu/hw/intc/bcm2836_control.o
  CC      alpha-softmmu/trace/generated-helpers.o
  CC      arm-softmmu/hw/misc/arm_sysctl.o
  CC      aarch64-softmmu/hw/intc/allwinner-a10-pic.o
  LINK    alpha-softmmu/qemu-system-alpha
  CC      arm-softmmu/hw/misc/cbus.o
  CC      aarch64-softmmu/hw/intc/aspeed_vic.o
  CC      arm-softmmu/hw/misc/exynos4210_pmu.o
  CC      aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o
  CC      arm-softmmu/hw/misc/exynos4210_clk.o
  CC      arm-softmmu/hw/misc/exynos4210_rng.o
  CC      arm-softmmu/hw/misc/imx_ccm.o
  CC      i386-softmmu/disas.o
  GEN     lm32-softmmu/hmp-commands.h
  CC      arm-softmmu/hw/misc/imx31_ccm.o
  CC      aarch64-softmmu/hw/misc/ivshmem.o
  GEN     lm32-softmmu/hmp-commands-info.h
  GEN     lm32-softmmu/config-target.h
  CC      lm32-softmmu/exec.o
  GEN     i386-softmmu/gdbstub-xml.c
  CC      arm-softmmu/hw/misc/imx25_ccm.o
  CC      arm-softmmu/hw/misc/imx6_ccm.o
  CC      aarch64-softmmu/hw/misc/arm_sysctl.o
  CC      i386-softmmu/arch_init.o
  CC      arm-softmmu/hw/misc/imx6_src.o
  CC      aarch64-softmmu/hw/misc/cbus.o
  CC      arm-softmmu/hw/misc/mst_fpga.o
  CC      i386-softmmu/cpus.o
  CC      aarch64-softmmu/hw/misc/exynos4210_pmu.o
  CC      arm-softmmu/hw/misc/omap_clk.o
  CC      aarch64-softmmu/hw/misc/exynos4210_clk.o
  CC      arm-softmmu/hw/misc/omap_gpmc.o
  CC      i386-softmmu/monitor.o
  CC      aarch64-softmmu/hw/misc/exynos4210_rng.o
  CC      lm32-softmmu/tcg/tcg.o
  CC      arm-softmmu/hw/misc/omap_l4.o
  CC      aarch64-softmmu/hw/misc/imx_ccm.o
  CC      arm-softmmu/hw/misc/omap_sdrc.o
  CC      aarch64-softmmu/hw/misc/imx31_ccm.o
  CC      i386-softmmu/gdbstub.o
  CC      arm-softmmu/hw/misc/omap_tap.o
  CC      aarch64-softmmu/hw/misc/imx25_ccm.o
  CC      arm-softmmu/hw/misc/bcm2835_mbox.o
  CC      aarch64-softmmu/hw/misc/imx6_ccm.o
  CC      i386-softmmu/balloon.o
  CC      arm-softmmu/hw/misc/bcm2835_property.o
  CC      aarch64-softmmu/hw/misc/imx6_src.o
  CC      i386-softmmu/ioport.o
  CC      lm32-softmmu/tcg/tcg-op.o
  CC      aarch64-softmmu/hw/misc/mst_fpga.o
  CC      arm-softmmu/hw/misc/bcm2835_rng.o
  CC      i386-softmmu/numa.o
  CC      aarch64-softmmu/hw/misc/omap_clk.o
  CC      arm-softmmu/hw/misc/zynq_slcr.o
  CC      aarch64-softmmu/hw/misc/omap_gpmc.o
  CC      arm-softmmu/hw/misc/zynq-xadc.o
  CC      i386-softmmu/qtest.o
  CC      arm-softmmu/hw/misc/stm32f2xx_syscfg.o
  CC      aarch64-softmmu/hw/misc/omap_l4.o
  CC      i386-softmmu/memory.o
  CC      arm-softmmu/hw/misc/mps2-scc.o
  CC      aarch64-softmmu/hw/misc/omap_sdrc.o
  CC      arm-softmmu/hw/misc/aspeed_scu.o
  CC      aarch64-softmmu/hw/misc/omap_tap.o
  CC      lm32-softmmu/tcg/optimize.o
  CC      arm-softmmu/hw/misc/aspeed_sdmc.o
  CC      aarch64-softmmu/hw/misc/bcm2835_mbox.o
  CC      arm-softmmu/hw/misc/mmio_interface.o
  CC      aarch64-softmmu/hw/misc/bcm2835_property.o
  CC      i386-softmmu/memory_mapping.o
  CC      arm-softmmu/hw/misc/msf2-sysreg.o
  CC      lm32-softmmu/tcg/tcg-common.o
  CC      i386-softmmu/dump.o
  CC      arm-softmmu/hw/net/virtio-net.o
  CC      aarch64-softmmu/hw/misc/bcm2835_rng.o
  CC      aarch64-softmmu/hw/misc/zynq_slcr.o
  CC      lm32-softmmu/fpu/softfloat.o
  CC      aarch64-softmmu/hw/misc/zynq-xadc.o
  CC      arm-softmmu/hw/net/vhost_net.o
  CC      i386-softmmu/migration/ram.o
  CC      aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o
  CC      arm-softmmu/hw/pcmcia/pxa2xx.o
  CC      aarch64-softmmu/hw/misc/mps2-scc.o
  CC      i386-softmmu/accel/accel.o
  CC      arm-softmmu/hw/scsi/virtio-scsi.o
  CC      aarch64-softmmu/hw/misc/auxbus.o
  CC      i386-softmmu/accel/stubs/hax-stub.o
  CC      i386-softmmu/accel/stubs/kvm-stub.o
  CC      arm-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      aarch64-softmmu/hw/misc/aspeed_scu.o
  CC      i386-softmmu/accel/tcg/tcg-all.o
  CC      arm-softmmu/hw/scsi/vhost-scsi-common.o
  CC      aarch64-softmmu/hw/misc/aspeed_sdmc.o
  CC      i386-softmmu/accel/tcg/cputlb.o
  CC      arm-softmmu/hw/scsi/vhost-scsi.o
  CC      aarch64-softmmu/hw/misc/mmio_interface.o
  CC      lm32-softmmu/disas.o
  CC      arm-softmmu/hw/scsi/vhost-user-scsi.o
  CC      aarch64-softmmu/hw/misc/msf2-sysreg.o
  CC      lm32-softmmu/arch_init.o
  CC      arm-softmmu/hw/sd/omap_mmc.o
  CC      aarch64-softmmu/hw/net/virtio-net.o
  CC      arm-softmmu/hw/sd/pxa2xx_mmci.o
  CC      lm32-softmmu/cpus.o
  CC      arm-softmmu/hw/sd/bcm2835_sdhost.o
  CC      i386-softmmu/accel/tcg/tcg-runtime.o
  CC      aarch64-softmmu/hw/net/vhost_net.o
  CC      arm-softmmu/hw/ssi/omap_spi.o
  CC      lm32-softmmu/monitor.o
  CC      aarch64-softmmu/hw/pcmcia/pxa2xx.o
  CC      arm-softmmu/hw/ssi/imx_spi.o
  CC      i386-softmmu/accel/tcg/cpu-exec.o
  CC      arm-softmmu/hw/timer/exynos4210_mct.o
  CC      aarch64-softmmu/hw/scsi/virtio-scsi.o
  CC      i386-softmmu/accel/tcg/cpu-exec-common.o
  CC      arm-softmmu/hw/timer/exynos4210_pwm.o
  CC      i386-softmmu/accel/tcg/translate-all.o
  CC      aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      arm-softmmu/hw/timer/exynos4210_rtc.o
  CC      lm32-softmmu/gdbstub.o
  CC      aarch64-softmmu/hw/scsi/vhost-scsi-common.o
  CC      arm-softmmu/hw/timer/omap_gptimer.o
  CC      i386-softmmu/accel/tcg/translator.o
  CC      aarch64-softmmu/hw/scsi/vhost-scsi.o
  CC      lm32-softmmu/balloon.o
  CC      arm-softmmu/hw/timer/omap_synctimer.o
  CC      aarch64-softmmu/hw/scsi/vhost-user-scsi.o
  CC      i386-softmmu/hw/9pfs/virtio-9p-device.o
  CC      lm32-softmmu/ioport.o
  CC      arm-softmmu/hw/timer/pxa2xx_timer.o
  CC      aarch64-softmmu/hw/sd/omap_mmc.o
  CC      i386-softmmu/hw/block/virtio-blk.o
  CC      arm-softmmu/hw/timer/digic-timer.o
  CC      lm32-softmmu/numa.o
  CC      aarch64-softmmu/hw/sd/pxa2xx_mmci.o
  CC      arm-softmmu/hw/timer/allwinner-a10-pit.o
  CC      i386-softmmu/hw/block/dataplane/virtio-blk.o
  CC      aarch64-softmmu/hw/sd/bcm2835_sdhost.o
  CC      arm-softmmu/hw/usb/tusb6010.o
  CC      lm32-softmmu/qtest.o
  CC      aarch64-softmmu/hw/ssi/omap_spi.o
  CC      i386-softmmu/hw/char/virtio-serial-bus.o
  CC      aarch64-softmmu/hw/ssi/imx_spi.o
  CC      arm-softmmu/hw/vfio/common.o
  CC      aarch64-softmmu/hw/timer/exynos4210_mct.o
  CC      lm32-softmmu/memory.o
  CC      aarch64-softmmu/hw/timer/exynos4210_pwm.o
  CC      arm-softmmu/hw/vfio/pci.o
  CC      i386-softmmu/hw/core/generic-loader.o
  CC      aarch64-softmmu/hw/timer/exynos4210_rtc.o
  CC      i386-softmmu/hw/core/null-machine.o
  CC      aarch64-softmmu/hw/timer/omap_gptimer.o
  CC      i386-softmmu/hw/display/vga.o
  CC      arm-softmmu/hw/vfio/pci-quirks.o
  CC      lm32-softmmu/memory_mapping.o
  CC      aarch64-softmmu/hw/timer/omap_synctimer.o
  CC      lm32-softmmu/dump.o
  CC      aarch64-softmmu/hw/timer/pxa2xx_timer.o
  CC      arm-softmmu/hw/vfio/platform.o
  CC      arm-softmmu/hw/vfio/calxeda-xgmac.o
  CC      i386-softmmu/hw/display/virtio-gpu.o
  CC      aarch64-softmmu/hw/timer/digic-timer.o
  CC      lm32-softmmu/migration/ram.o
  CC      arm-softmmu/hw/vfio/amd-xgbe.o
  CC      aarch64-softmmu/hw/timer/allwinner-a10-pit.o
  CC      arm-softmmu/hw/vfio/spapr.o
  CC      arm-softmmu/hw/virtio/virtio.o
  CC      aarch64-softmmu/hw/usb/tusb6010.o
  CC      i386-softmmu/hw/display/virtio-gpu-3d.o
  CC      lm32-softmmu/accel/accel.o
  CC      aarch64-softmmu/hw/vfio/common.o
  CC      lm32-softmmu/accel/stubs/hax-stub.o
  CC      i386-softmmu/hw/display/virtio-gpu-pci.o
  CC      arm-softmmu/hw/virtio/virtio-balloon.o
  CC      lm32-softmmu/accel/stubs/kvm-stub.o
  CC      i386-softmmu/hw/display/virtio-vga.o
  CC      lm32-softmmu/accel/tcg/tcg-all.o
  CC      aarch64-softmmu/hw/vfio/pci.o
  CC      arm-softmmu/hw/virtio/vhost.o
  CC      lm32-softmmu/accel/tcg/cputlb.o
  CC      i386-softmmu/hw/intc/apic.o
  CC      arm-softmmu/hw/virtio/vhost-backend.o
  CC      aarch64-softmmu/hw/vfio/pci-quirks.o
  CC      i386-softmmu/hw/intc/apic_common.o
  CC      arm-softmmu/hw/virtio/vhost-user.o
  CC      aarch64-softmmu/hw/vfio/platform.o
  CC      i386-softmmu/hw/intc/ioapic.o
  CC      lm32-softmmu/accel/tcg/tcg-runtime.o
  CC      arm-softmmu/hw/virtio/vhost-vsock.o
  CC      aarch64-softmmu/hw/vfio/calxeda-xgmac.o
  CC      lm32-softmmu/accel/tcg/cpu-exec.o
  CC      arm-softmmu/hw/virtio/virtio-crypto.o
  CC      i386-softmmu/hw/isa/lpc_ich9.o
  CC      aarch64-softmmu/hw/vfio/amd-xgbe.o
  CC      lm32-softmmu/accel/tcg/cpu-exec-common.o
  CC      arm-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      aarch64-softmmu/hw/vfio/spapr.o
  CC      i386-softmmu/hw/misc/vmport.o
  CC      lm32-softmmu/accel/tcg/translate-all.o
  CC      arm-softmmu/hw/arm/boot.o
  CC      aarch64-softmmu/hw/virtio/virtio.o
  CC      i386-softmmu/hw/misc/ivshmem.o
  CC      lm32-softmmu/accel/tcg/translator.o
  CC      arm-softmmu/hw/arm/collie.o
  CC      i386-softmmu/hw/misc/pvpanic.o
  CC      lm32-softmmu/hw/core/generic-loader.o
  CC      i386-softmmu/hw/misc/mmio_interface.o
  CC      arm-softmmu/hw/arm/exynos4_boards.o
  CC      i386-softmmu/hw/net/virtio-net.o
  CC      aarch64-softmmu/hw/virtio/virtio-balloon.o
  CC      lm32-softmmu/hw/core/null-machine.o
  CC      arm-softmmu/hw/arm/gumstix.o
  CC      lm32-softmmu/hw/input/milkymist-softusb.o
  CC      aarch64-softmmu/hw/virtio/vhost.o
  CC      i386-softmmu/hw/net/vhost_net.o
  CC      lm32-softmmu/hw/misc/milkymist-hpdmc.o
  CC      arm-softmmu/hw/arm/highbank.o
  CC      lm32-softmmu/hw/misc/milkymist-pfpu.o
  CC      aarch64-softmmu/hw/virtio/vhost-backend.o
  CC      i386-softmmu/hw/scsi/virtio-scsi.o
  CC      arm-softmmu/hw/arm/digic_boards.o
  CC      aarch64-softmmu/hw/virtio/vhost-user.o
  CC      lm32-softmmu/hw/misc/mmio_interface.o
  CC      arm-softmmu/hw/arm/integratorcp.o
  CC      i386-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      lm32-softmmu/hw/net/milkymist-minimac2.o
  CC      aarch64-softmmu/hw/virtio/vhost-vsock.o
  CC      i386-softmmu/hw/scsi/vhost-scsi-common.o
  CC      arm-softmmu/hw/arm/mainstone.o
  CC      aarch64-softmmu/hw/virtio/virtio-crypto.o
  CC      lm32-softmmu/hw/net/vhost_net.o
  CC      i386-softmmu/hw/scsi/vhost-scsi.o
  CC      arm-softmmu/hw/arm/musicpal.o
  CC      lm32-softmmu/hw/net/rocker/qmp-norocker.o
  CC      i386-softmmu/hw/scsi/vhost-user-scsi.o
  CC      aarch64-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      lm32-softmmu/hw/sd/milkymist-memcard.o
  CC      i386-softmmu/hw/timer/mc146818rtc.o
  CC      aarch64-softmmu/hw/arm/boot.o
  CC      arm-softmmu/hw/arm/nseries.o
  CC      lm32-softmmu/hw/vfio/common.o
  CC      i386-softmmu/hw/vfio/common.o
  CC      aarch64-softmmu/hw/arm/collie.o
  CC      aarch64-softmmu/hw/arm/exynos4_boards.o
  CC      arm-softmmu/hw/arm/omap_sx1.o
  CC      aarch64-softmmu/hw/arm/gumstix.o
  CC      lm32-softmmu/hw/vfio/platform.o
  CC      i386-softmmu/hw/vfio/pci.o
  CC      arm-softmmu/hw/arm/palm.o
  CC      aarch64-softmmu/hw/arm/highbank.o
  CC      lm32-softmmu/hw/vfio/spapr.o
  CC      aarch64-softmmu/hw/arm/digic_boards.o
  CC      lm32-softmmu/hw/lm32/lm32_boards.o
  CC      arm-softmmu/hw/arm/realview.o
  CC      lm32-softmmu/hw/lm32/milkymist.o
  CC      aarch64-softmmu/hw/arm/integratorcp.o
  CC      i386-softmmu/hw/vfio/pci-quirks.o
  CC      lm32-softmmu/target/lm32/translate.o
  CC      arm-softmmu/hw/arm/spitz.o
  CC      aarch64-softmmu/hw/arm/mainstone.o
  CC      aarch64-softmmu/hw/arm/musicpal.o
  CC      i386-softmmu/hw/vfio/platform.o
  CC      arm-softmmu/hw/arm/stellaris.o
  CC      lm32-softmmu/target/lm32/op_helper.o
  CC      i386-softmmu/hw/vfio/spapr.o
  CC      aarch64-softmmu/hw/arm/nseries.o
  CC      arm-softmmu/hw/arm/tosa.o
  CC      i386-softmmu/hw/virtio/virtio.o
  CC      lm32-softmmu/target/lm32/helper.o
  CC      arm-softmmu/hw/arm/versatilepb.o
  CC      lm32-softmmu/target/lm32/cpu.o
  CC      aarch64-softmmu/hw/arm/omap_sx1.o
  CC      arm-softmmu/hw/arm/vexpress.o
  CC      lm32-softmmu/target/lm32/gdbstub.o
  CC      aarch64-softmmu/hw/arm/palm.o
  CC      i386-softmmu/hw/virtio/virtio-balloon.o
  CC      lm32-softmmu/target/lm32/lm32-semi.o
  CC      arm-softmmu/hw/arm/virt.o
  CC      lm32-softmmu/target/lm32/machine.o
  CC      i386-softmmu/hw/virtio/vhost.o
  CC      aarch64-softmmu/hw/arm/realview.o
  GEN     trace/generated-helpers.c
  CC      lm32-softmmu/trace/control-target.o
  CC      aarch64-softmmu/hw/arm/spitz.o
  CC      i386-softmmu/hw/virtio/vhost-backend.o
  CC      arm-softmmu/hw/arm/xilinx_zynq.o
  CC      lm32-softmmu/trace/generated-helpers.o
  CC      i386-softmmu/hw/virtio/vhost-user.o
  LINK    lm32-softmmu/qemu-system-lm32
  CC      aarch64-softmmu/hw/arm/stellaris.o
  CC      arm-softmmu/hw/arm/z2.o
  CC      i386-softmmu/hw/virtio/vhost-vsock.o
  CC      arm-softmmu/hw/arm/virt-acpi-build.o
  CC      aarch64-softmmu/hw/arm/tosa.o
  CC      i386-softmmu/hw/virtio/virtio-crypto.o
  CC      aarch64-softmmu/hw/arm/versatilepb.o
  CC      arm-softmmu/hw/arm/netduino2.o
  CC      i386-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      i386-softmmu/hw/i386/multiboot.o
  CC      aarch64-softmmu/hw/arm/vexpress.o
  CC      arm-softmmu/hw/arm/sysbus-fdt.o
  CC      aarch64-softmmu/hw/arm/virt.o
  CC      arm-softmmu/hw/arm/armv7m.o
  CC      i386-softmmu/hw/i386/pc.o
  CC      arm-softmmu/hw/arm/exynos4210.o
  CC      aarch64-softmmu/hw/arm/xilinx_zynq.o
  CC      arm-softmmu/hw/arm/pxa2xx.o
  CC      aarch64-softmmu/hw/arm/z2.o
  GEN     m68k-softmmu/hmp-commands.h
  GEN     m68k-softmmu/hmp-commands-info.h
  GEN     m68k-softmmu/config-target.h
  CC      i386-softmmu/hw/i386/pc_piix.o
  CC      m68k-softmmu/exec.o
  CC      arm-softmmu/hw/arm/pxa2xx_gpio.o
  CC      aarch64-softmmu/hw/arm/virt-acpi-build.o
  CC      arm-softmmu/hw/arm/pxa2xx_pic.o
  CC      i386-softmmu/hw/i386/pc_q35.o
  CC      aarch64-softmmu/hw/arm/netduino2.o
  CC      arm-softmmu/hw/arm/digic.o
  CC      arm-softmmu/hw/arm/omap1.o
  CC      aarch64-softmmu/hw/arm/sysbus-fdt.o
  CC      i386-softmmu/hw/i386/pc_sysfw.o
  CC      aarch64-softmmu/hw/arm/armv7m.o
  CC      i386-softmmu/hw/i386/x86-iommu.o
  CC      aarch64-softmmu/hw/arm/exynos4210.o
  CC      i386-softmmu/hw/i386/intel_iommu.o
  CC      m68k-softmmu/tcg/tcg.o
  CC      aarch64-softmmu/hw/arm/pxa2xx.o
  CC      arm-softmmu/hw/arm/omap2.o
  CC      arm-softmmu/hw/arm/strongarm.o
  CC      i386-softmmu/hw/i386/amd_iommu.o
  CC      aarch64-softmmu/hw/arm/pxa2xx_gpio.o
  CC      arm-softmmu/hw/arm/allwinner-a10.o
  CC      aarch64-softmmu/hw/arm/pxa2xx_pic.o
  CC      i386-softmmu/hw/i386/kvmvapic.o
  CC      arm-softmmu/hw/arm/cubieboard.o
  CC      aarch64-softmmu/hw/arm/digic.o
  CC      m68k-softmmu/tcg/tcg-op.o
  CC      i386-softmmu/hw/i386/acpi-build.o
  CC      arm-softmmu/hw/arm/bcm2835_peripherals.o
  CC      aarch64-softmmu/hw/arm/omap1.o
  CC      arm-softmmu/hw/arm/bcm2836.o
  CC      i386-softmmu/hw/i386/pci-assign-load-rom.o
  CC      arm-softmmu/hw/arm/raspi.o
  CC      i386-softmmu/target/i386/helper.o
  CC      aarch64-softmmu/hw/arm/omap2.o
  CC      arm-softmmu/hw/arm/stm32f205_soc.o
  CC      aarch64-softmmu/hw/arm/strongarm.o
  CC      i386-softmmu/target/i386/cpu.o
  CC      arm-softmmu/hw/arm/fsl-imx25.o
  CC      m68k-softmmu/tcg/optimize.o
  CC      aarch64-softmmu/hw/arm/allwinner-a10.o
  CC      arm-softmmu/hw/arm/imx25_pdk.o
  CC      arm-softmmu/hw/arm/fsl-imx31.o
  CC      i386-softmmu/target/i386/gdbstub.o
  CC      aarch64-softmmu/hw/arm/cubieboard.o
  CC      m68k-softmmu/tcg/tcg-common.o
  CC      arm-softmmu/hw/arm/kzm.o
  CC      i386-softmmu/target/i386/xsave_helper.o
  CC      aarch64-softmmu/hw/arm/bcm2835_peripherals.o
  CC      arm-softmmu/hw/arm/fsl-imx6.o
  CC      m68k-softmmu/fpu/softfloat.o
  CC      i386-softmmu/target/i386/translate.o
  CC      aarch64-softmmu/hw/arm/bcm2836.o
  CC      arm-softmmu/hw/arm/sabrelite.o
  CC      arm-softmmu/hw/arm/aspeed_soc.o
  CC      aarch64-softmmu/hw/arm/raspi.o
  CC      aarch64-softmmu/hw/arm/stm32f205_soc.o
  CC      arm-softmmu/hw/arm/aspeed.o
  CC      aarch64-softmmu/hw/arm/xlnx-zynqmp.o
  CC      arm-softmmu/hw/arm/mps2.o
  CC      arm-softmmu/hw/arm/msf2-soc.o
  CC      aarch64-softmmu/hw/arm/xlnx-zcu102.o
  CC      m68k-softmmu/disas.o
  GEN     m68k-softmmu/gdbstub-xml.c
  CC      arm-softmmu/hw/arm/msf2-som.o
  CC      arm-softmmu/target/arm/arm-semi.o
  CC      m68k-softmmu/arch_init.o
  CC      aarch64-softmmu/hw/arm/fsl-imx25.o
  CC      m68k-softmmu/cpus.o
  CC      aarch64-softmmu/hw/arm/imx25_pdk.o
  CC      aarch64-softmmu/hw/arm/fsl-imx31.o
  CC      arm-softmmu/target/arm/machine.o
  CC      aarch64-softmmu/hw/arm/kzm.o
  CC      m68k-softmmu/monitor.o
  CC      arm-softmmu/target/arm/psci.o
  CC      aarch64-softmmu/hw/arm/fsl-imx6.o
  CC      arm-softmmu/target/arm/arch_dump.o
  CC      aarch64-softmmu/hw/arm/sabrelite.o
  CC      aarch64-softmmu/hw/arm/aspeed_soc.o
  CC      aarch64-softmmu/hw/arm/aspeed.o
  CC      arm-softmmu/target/arm/monitor.o
  CC      i386-softmmu/target/i386/bpt_helper.o
  CC      m68k-softmmu/gdbstub.o
  CC      aarch64-softmmu/hw/arm/mps2.o
  CC      arm-softmmu/target/arm/kvm-stub.o
  CC      i386-softmmu/target/i386/cc_helper.o
  CC      aarch64-softmmu/hw/arm/msf2-soc.o
  CC      arm-softmmu/target/arm/translate.o
  CC      m68k-softmmu/balloon.o
  CC      i386-softmmu/target/i386/excp_helper.o
  CC      aarch64-softmmu/hw/arm/msf2-som.o
  CC      m68k-softmmu/ioport.o
  CC      i386-softmmu/target/i386/fpu_helper.o
  CC      aarch64-softmmu/target/arm/arm-semi.o
  CC      m68k-softmmu/numa.o
  CC      aarch64-softmmu/target/arm/machine.o
  CC      m68k-softmmu/qtest.o
  CC      aarch64-softmmu/target/arm/psci.o
  CC      m68k-softmmu/memory.o
  CC      aarch64-softmmu/target/arm/arch_dump.o
  CC      aarch64-softmmu/target/arm/monitor.o
  CC      i386-softmmu/target/i386/int_helper.o
  CC      aarch64-softmmu/target/arm/kvm-stub.o
  CC      aarch64-softmmu/target/arm/translate.o
  CC      m68k-softmmu/memory_mapping.o
  CC      m68k-softmmu/dump.o
  CC      i386-softmmu/target/i386/mem_helper.o
  CC      i386-softmmu/target/i386/misc_helper.o
  CC      m68k-softmmu/migration/ram.o
  CC      i386-softmmu/target/i386/mpx_helper.o
  CC      arm-softmmu/target/arm/op_helper.o
  CC      i386-softmmu/target/i386/seg_helper.o
  CC      m68k-softmmu/accel/accel.o
  CC      arm-softmmu/target/arm/helper.o
  CC      m68k-softmmu/accel/stubs/hax-stub.o
  CC      m68k-softmmu/accel/stubs/kvm-stub.o
  CC      i386-softmmu/target/i386/smm_helper.o
  CC      m68k-softmmu/accel/tcg/tcg-all.o
  CC      i386-softmmu/target/i386/svm_helper.o
  CC      m68k-softmmu/accel/tcg/cputlb.o
  CC      aarch64-softmmu/target/arm/op_helper.o
  CC      i386-softmmu/target/i386/machine.o
  CC      i386-softmmu/target/i386/arch_memory_mapping.o
  CC      arm-softmmu/target/arm/cpu.o
  CC      i386-softmmu/target/i386/arch_dump.o
  CC      aarch64-softmmu/target/arm/helper.o
  CC      m68k-softmmu/accel/tcg/tcg-runtime.o
  CC      i386-softmmu/target/i386/monitor.o
  CC      arm-softmmu/target/arm/neon_helper.o
  CC      m68k-softmmu/accel/tcg/cpu-exec.o
  CC      i386-softmmu/target/i386/kvm-stub.o
  CC      m68k-softmmu/accel/tcg/cpu-exec-common.o
  GEN     trace/generated-helpers.c
  CC      i386-softmmu/trace/control-target.o
  CC      m68k-softmmu/accel/tcg/translate-all.o
  CC      arm-softmmu/target/arm/iwmmxt_helper.o
  CC      i386-softmmu/gdbstub-xml.o
  CC      m68k-softmmu/accel/tcg/translator.o
  CC      i386-softmmu/trace/generated-helpers.o
  CC      m68k-softmmu/hw/char/mcf_uart.o
  CC      arm-softmmu/target/arm/gdbstub.o
  LINK    i386-softmmu/qemu-system-i386
  CC      arm-softmmu/target/arm/crypto_helper.o
  CC      m68k-softmmu/hw/core/generic-loader.o
  CC      aarch64-softmmu/target/arm/cpu.o
  CC      arm-softmmu/target/arm/arm-powerctl.o
  CC      m68k-softmmu/hw/core/null-machine.o
  GEN     trace/generated-helpers.c
  CC      m68k-softmmu/hw/misc/mmio_interface.o
  CC      arm-softmmu/trace/control-target.o
  CC      aarch64-softmmu/target/arm/neon_helper.o
  CC      m68k-softmmu/hw/net/mcf_fec.o
  CC      arm-softmmu/gdbstub-xml.o
  CC      m68k-softmmu/hw/net/vhost_net.o
  CC      arm-softmmu/trace/generated-helpers.o
  CC      m68k-softmmu/hw/net/rocker/qmp-norocker.o
  GEN     microblazeel-softmmu/hmp-commands.h
  LINK    arm-softmmu/qemu-system-arm
  GEN     microblazeel-softmmu/hmp-commands-info.h
  CC      m68k-softmmu/hw/vfio/common.o
  GEN     microblazeel-softmmu/config-target.h
  CC      aarch64-softmmu/target/arm/iwmmxt_helper.o
  CC      microblazeel-softmmu/exec.o
  CC      m68k-softmmu/hw/vfio/platform.o
  CC      aarch64-softmmu/target/arm/gdbstub.o
  CC      aarch64-softmmu/target/arm/cpu64.o
  CC      m68k-softmmu/hw/vfio/spapr.o
  CC      aarch64-softmmu/target/arm/translate-a64.o
  CC      microblazeel-softmmu/tcg/tcg.o
  CC      m68k-softmmu/hw/m68k/an5206.o
  CC      aarch64-softmmu/target/arm/helper-a64.o
  CC      m68k-softmmu/hw/m68k/mcf5208.o
  CC      m68k-softmmu/hw/m68k/mcf5206.o
  CC      aarch64-softmmu/target/arm/gdbstub64.o
  CC      m68k-softmmu/hw/m68k/mcf_intc.o
  CC      microblazeel-softmmu/tcg/tcg-op.o
  CC      m68k-softmmu/target/m68k/m68k-semi.o
  GEN     microblaze-softmmu/hmp-commands.h
  GEN     microblaze-softmmu/hmp-commands-info.h
  GEN     microblaze-softmmu/config-target.h
  CC      m68k-softmmu/target/m68k/translate.o
  CC      microblaze-softmmu/exec.o
  CC      aarch64-softmmu/target/arm/crypto_helper.o
  CC      aarch64-softmmu/target/arm/arm-powerctl.o
  CC      microblazeel-softmmu/tcg/optimize.o
  GEN     trace/generated-helpers.c
  CC      aarch64-softmmu/trace/control-target.o
  CC      microblaze-softmmu/tcg/tcg.o
  CC      aarch64-softmmu/gdbstub-xml.o
  CC      m68k-softmmu/target/m68k/op_helper.o
  CC      microblazeel-softmmu/tcg/tcg-common.o
  CC      m68k-softmmu/target/m68k/helper.o
  CC      aarch64-softmmu/trace/generated-helpers.o
  CC      microblazeel-softmmu/fpu/softfloat.o
  CC      m68k-softmmu/target/m68k/cpu.o
  LINK    aarch64-softmmu/qemu-system-aarch64
  CC      m68k-softmmu/target/m68k/fpu_helper.o
  CC      m68k-softmmu/target/m68k/gdbstub.o
  CC      microblaze-softmmu/tcg/tcg-op.o
  GEN     trace/generated-helpers.c
  CC      m68k-softmmu/trace/control-target.o
  CC      m68k-softmmu/gdbstub-xml.o
  CC      microblaze-softmmu/tcg/optimize.o
  CC      m68k-softmmu/trace/generated-helpers.o
  CC      microblazeel-softmmu/disas.o
  LINK    m68k-softmmu/qemu-system-m68k
  CC      microblazeel-softmmu/arch_init.o
  CC      microblazeel-softmmu/cpus.o
  CC      microblaze-softmmu/tcg/tcg-common.o
  CC      microblaze-softmmu/fpu/softfloat.o
  CC      microblazeel-softmmu/monitor.o
  CC      microblaze-softmmu/disas.o
  CC      microblaze-softmmu/arch_init.o
  CC      microblazeel-softmmu/gdbstub.o
  GEN     mips64el-softmmu/hmp-commands.h
  GEN     mips64el-softmmu/hmp-commands-info.h
  GEN     mips64el-softmmu/config-target.h
  CC      mips64el-softmmu/exec.o
  GEN     mips64-softmmu/hmp-commands.h
  CC      microblazeel-softmmu/balloon.o
  GEN     mips64-softmmu/hmp-commands-info.h
  GEN     mips64-softmmu/config-target.h
  CC      mips64-softmmu/exec.o
  CC      microblazeel-softmmu/ioport.o
  CC      microblaze-softmmu/cpus.o
  CC      microblazeel-softmmu/numa.o
  CC      microblaze-softmmu/monitor.o
  CC      mips64el-softmmu/tcg/tcg.o
  CC      microblazeel-softmmu/qtest.o
  CC      mips64-softmmu/tcg/tcg.o
  CC      microblazeel-softmmu/memory.o
  CC      microblaze-softmmu/gdbstub.o
  CC      mips64el-softmmu/tcg/tcg-op.o
  CC      microblaze-softmmu/balloon.o
  CC      mips64-softmmu/tcg/tcg-op.o
  CC      microblaze-softmmu/ioport.o
  CC      microblazeel-softmmu/memory_mapping.o
  CC      microblazeel-softmmu/dump.o
  CC      microblaze-softmmu/numa.o
  CC      microblazeel-softmmu/migration/ram.o
  CC      microblaze-softmmu/qtest.o
  CC      mips64el-softmmu/tcg/optimize.o
  CC      microblazeel-softmmu/accel/accel.o
  CC      microblaze-softmmu/memory.o
  CC      mips64-softmmu/tcg/optimize.o
  CC      microblazeel-softmmu/accel/stubs/hax-stub.o
  CC      microblazeel-softmmu/accel/stubs/kvm-stub.o
  CC      mips64el-softmmu/tcg/tcg-common.o
  CC      mips64el-softmmu/fpu/softfloat.o
  CC      mips64-softmmu/tcg/tcg-common.o
  CC      microblaze-softmmu/memory_mapping.o
  CC      microblazeel-softmmu/accel/tcg/tcg-all.o
  CC      microblaze-softmmu/dump.o
  CC      microblazeel-softmmu/accel/tcg/cputlb.o
  CC      mips64-softmmu/fpu/softfloat.o
  CC      microblaze-softmmu/migration/ram.o
  CC      microblazeel-softmmu/accel/tcg/tcg-runtime.o
  CC      microblaze-softmmu/accel/accel.o
  CC      microblazeel-softmmu/accel/tcg/cpu-exec.o
  CC      microblaze-softmmu/accel/stubs/hax-stub.o
  CC      mips64el-softmmu/disas.o
  CC      microblazeel-softmmu/accel/tcg/cpu-exec-common.o
  CC      microblaze-softmmu/accel/stubs/kvm-stub.o
  CC      mips64el-softmmu/arch_init.o
  CC      mips64-softmmu/disas.o
  CC      microblazeel-softmmu/accel/tcg/translate-all.o
  CC      microblaze-softmmu/accel/tcg/tcg-all.o
  CC      mips64el-softmmu/cpus.o
  CC      mips64-softmmu/arch_init.o
  CC      microblaze-softmmu/accel/tcg/cputlb.o
  CC      mips64-softmmu/cpus.o
  CC      microblazeel-softmmu/accel/tcg/translator.o
  CC      mips64el-softmmu/monitor.o
  CC      microblazeel-softmmu/hw/core/generic-loader.o
  CC      mips64-softmmu/monitor.o
  CC      microblazeel-softmmu/hw/core/null-machine.o
  CC      microblazeel-softmmu/hw/misc/mmio_interface.o
  CC      microblaze-softmmu/accel/tcg/tcg-runtime.o
  CC      microblazeel-softmmu/hw/net/xilinx_ethlite.o
  CC      mips64el-softmmu/gdbstub.o
  CC      microblaze-softmmu/accel/tcg/cpu-exec.o
  CC      microblazeel-softmmu/hw/net/vhost_net.o
  CC      microblaze-softmmu/accel/tcg/cpu-exec-common.o
  CC      mips64el-softmmu/balloon.o
  CC      microblazeel-softmmu/hw/net/rocker/qmp-norocker.o
  CC      mips64-softmmu/gdbstub.o
  CC      microblazeel-softmmu/hw/vfio/common.o
  CC      mips64el-softmmu/ioport.o
  CC      microblaze-softmmu/accel/tcg/translate-all.o
  CC      mips64el-softmmu/numa.o
  CC      mips64-softmmu/balloon.o
  CC      microblaze-softmmu/accel/tcg/translator.o
  CC      microblazeel-softmmu/hw/vfio/platform.o
  CC      mips64el-softmmu/qtest.o
  CC      mips64-softmmu/ioport.o
  CC      mips64-softmmu/numa.o
  CC      microblaze-softmmu/hw/core/generic-loader.o
  CC      microblazeel-softmmu/hw/vfio/spapr.o
  CC      mips64el-softmmu/memory.o
  CC      microblaze-softmmu/hw/core/null-machine.o
  CC      microblazeel-softmmu/hw/microblaze/petalogix_s3adsp1800_mmu.o
  CC      mips64-softmmu/qtest.o
  CC      microblaze-softmmu/hw/misc/mmio_interface.o
  CC      microblazeel-softmmu/hw/microblaze/petalogix_ml605_mmu.o
  CC      microblaze-softmmu/hw/net/xilinx_ethlite.o
  CC      microblazeel-softmmu/hw/microblaze/boot.o
  CC      mips64-softmmu/memory.o
  CC      microblaze-softmmu/hw/net/vhost_net.o
  CC      microblazeel-softmmu/target/microblaze/translate.o
  CC      mips64el-softmmu/memory_mapping.o
  CC      microblaze-softmmu/hw/net/rocker/qmp-norocker.o
  CC      mips64el-softmmu/dump.o
  CC      microblaze-softmmu/hw/vfio/common.o
  CC      mips64-softmmu/memory_mapping.o
  CC      microblaze-softmmu/hw/vfio/platform.o
  CC      microblazeel-softmmu/target/microblaze/op_helper.o
  CC      mips64-softmmu/dump.o
  CC      mips64el-softmmu/migration/ram.o
  CC      microblaze-softmmu/hw/vfio/spapr.o
  CC      microblazeel-softmmu/target/microblaze/helper.o
  CC      mips64-softmmu/migration/ram.o
  CC      microblaze-softmmu/hw/microblaze/petalogix_s3adsp1800_mmu.o
  CC      microblazeel-softmmu/target/microblaze/cpu.o
  CC      mips64el-softmmu/accel/accel.o
  CC      microblazeel-softmmu/target/microblaze/gdbstub.o
  CC      microblaze-softmmu/hw/microblaze/petalogix_ml605_mmu.o
  CC      mips64el-softmmu/accel/stubs/hax-stub.o
  CC      microblaze-softmmu/hw/microblaze/boot.o
  CC      microblazeel-softmmu/target/microblaze/mmu.o
  CC      mips64-softmmu/accel/accel.o
  CC      mips64el-softmmu/accel/stubs/kvm-stub.o
  CC      microblaze-softmmu/target/microblaze/translate.o
  GEN     trace/generated-helpers.c
  CC      microblazeel-softmmu/trace/control-target.o
  CC      mips64-softmmu/accel/stubs/hax-stub.o
  CC      mips64el-softmmu/accel/tcg/tcg-all.o
  CC      microblazeel-softmmu/trace/generated-helpers.o
  CC      mips64-softmmu/accel/stubs/kvm-stub.o
  CC      mips64-softmmu/accel/tcg/tcg-all.o
  CC      mips64el-softmmu/accel/tcg/cputlb.o
  CC      mips64-softmmu/accel/tcg/cputlb.o
  LINK    microblazeel-softmmu/qemu-system-microblazeel
  CC      microblaze-softmmu/target/microblaze/op_helper.o
  CC      mips64-softmmu/accel/tcg/tcg-runtime.o
  CC      microblaze-softmmu/target/microblaze/helper.o
  CC      mips64-softmmu/accel/tcg/cpu-exec.o
  CC      mips64el-softmmu/accel/tcg/tcg-runtime.o
  CC      microblaze-softmmu/target/microblaze/cpu.o
  CC      mips64-softmmu/accel/tcg/cpu-exec-common.o
  CC      microblaze-softmmu/target/microblaze/gdbstub.o
  CC      mips64el-softmmu/accel/tcg/cpu-exec.o
  CC      mips64-softmmu/accel/tcg/translate-all.o
  GEN     mipsel-softmmu/hmp-commands.h
  GEN     mipsel-softmmu/hmp-commands-info.h
  GEN     mipsel-softmmu/config-target.h
  CC      microblaze-softmmu/target/microblaze/mmu.o
  CC      mipsel-softmmu/exec.o
  GEN     trace/generated-helpers.c
  CC      microblaze-softmmu/trace/control-target.o
  CC      mips64-softmmu/accel/tcg/translator.o
  CC      mips64el-softmmu/accel/tcg/cpu-exec-common.o
  CC      microblaze-softmmu/trace/generated-helpers.o
  CC      mips64el-softmmu/accel/tcg/translate-all.o
  LINK    microblaze-softmmu/qemu-system-microblaze
  CC      mips64-softmmu/hw/9pfs/virtio-9p-device.o
  CC      mips64el-softmmu/accel/tcg/translator.o
  CC      mips64-softmmu/hw/block/virtio-blk.o
  CC      mipsel-softmmu/tcg/tcg.o
  CC      mips64-softmmu/hw/block/dataplane/virtio-blk.o
  CC      mips64el-softmmu/hw/9pfs/virtio-9p-device.o
  CC      mips64-softmmu/hw/char/virtio-serial-bus.o
  CC      mips64el-softmmu/hw/block/virtio-blk.o
  CC      mips64-softmmu/hw/core/generic-loader.o
  CC      mips64-softmmu/hw/core/null-machine.o
  CC      mips64-softmmu/hw/display/vga.o
  CC      mips64el-softmmu/hw/block/dataplane/virtio-blk.o
  CC      mips64el-softmmu/hw/char/virtio-serial-bus.o
  GEN     mips-softmmu/hmp-commands.h
  GEN     mips-softmmu/hmp-commands-info.h
  GEN     mips-softmmu/config-target.h
  CC      mips64el-softmmu/hw/core/generic-loader.o
  CC      mipsel-softmmu/tcg/tcg-op.o
  CC      mips-softmmu/exec.o
  CC      mips64-softmmu/hw/display/virtio-gpu.o
  CC      mips64el-softmmu/hw/core/null-machine.o
  CC      mips64el-softmmu/hw/display/vga.o
  CC      mips64-softmmu/hw/display/virtio-gpu-3d.o
  CC      mips64el-softmmu/hw/display/virtio-gpu.o
  CC      mips64-softmmu/hw/display/virtio-gpu-pci.o
  CC      mips-softmmu/tcg/tcg.o
  CC      mips64-softmmu/hw/intc/mips_gic.o
  CC      mips64el-softmmu/hw/display/virtio-gpu-3d.o
  CC      mipsel-softmmu/tcg/optimize.o
  CC      mips64-softmmu/hw/misc/ivshmem.o
  CC      mips64el-softmmu/hw/display/virtio-gpu-pci.o
  CC      mips64-softmmu/hw/misc/mips_cmgcr.o
  CC      mips64el-softmmu/hw/intc/mips_gic.o
  CC      mips64-softmmu/hw/misc/mips_cpc.o
  CC      mips64-softmmu/hw/misc/mips_itu.o
  CC      mipsel-softmmu/tcg/tcg-common.o
  CC      mips64el-softmmu/hw/misc/ivshmem.o
  CC      mips-softmmu/tcg/tcg-op.o
  CC      mipsel-softmmu/fpu/softfloat.o
  CC      mips64-softmmu/hw/misc/mmio_interface.o
  CC      mips64-softmmu/hw/net/virtio-net.o
  CC      mips64el-softmmu/hw/misc/mips_cmgcr.o
  CC      mips64el-softmmu/hw/misc/mips_cpc.o
  CC      mips64-softmmu/hw/net/vhost_net.o
  CC      mips64el-softmmu/hw/misc/mips_itu.o
  CC      mips64el-softmmu/hw/misc/mmio_interface.o
  CC      mips64-softmmu/hw/scsi/virtio-scsi.o
  CC      mips64el-softmmu/hw/net/virtio-net.o
  CC      mips64-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      mips64el-softmmu/hw/net/vhost_net.o
  CC      mips64-softmmu/hw/scsi/vhost-scsi-common.o
  CC      mips-softmmu/tcg/optimize.o
  CC      mipsel-softmmu/disas.o
  CC      mips64el-softmmu/hw/scsi/virtio-scsi.o
  CC      mips64-softmmu/hw/scsi/vhost-scsi.o
  CC      mipsel-softmmu/arch_init.o
  CC      mipsel-softmmu/cpus.o
  CC      mips64el-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      mips64-softmmu/hw/scsi/vhost-user-scsi.o
  CC      mips64-softmmu/hw/timer/mips_gictimer.o
  CC      mips-softmmu/tcg/tcg-common.o
  CC      mips64el-softmmu/hw/scsi/vhost-scsi-common.o
  CC      mips-softmmu/fpu/softfloat.o
  CC      mipsel-softmmu/monitor.o
  CC      mips64el-softmmu/hw/scsi/vhost-scsi.o
  CC      mips64-softmmu/hw/timer/mc146818rtc.o
  CC      mips64el-softmmu/hw/scsi/vhost-user-scsi.o
  CC      mips64-softmmu/hw/vfio/common.o
  CC      mips64el-softmmu/hw/timer/mips_gictimer.o
  CC      mips64el-softmmu/hw/timer/mc146818rtc.o
  CC      mips64-softmmu/hw/vfio/pci.o
  CC      mipsel-softmmu/gdbstub.o
  CC      mips64el-softmmu/hw/vfio/common.o
  CC      mipsel-softmmu/balloon.o
  CC      mipsel-softmmu/ioport.o
  CC      mips64el-softmmu/hw/vfio/pci.o
  CC      mips64-softmmu/hw/vfio/pci-quirks.o
  CC      mipsel-softmmu/numa.o
  CC      mips-softmmu/disas.o
  CC      mips-softmmu/arch_init.o
  CC      mipsel-softmmu/qtest.o
  CC      mips-softmmu/cpus.o
  CC      mips64-softmmu/hw/vfio/platform.o
  CC      mipsel-softmmu/memory.o
  CC      mips64-softmmu/hw/vfio/spapr.o
  CC      mips64el-softmmu/hw/vfio/pci-quirks.o
  CC      mips-softmmu/monitor.o
  CC      mips64-softmmu/hw/virtio/virtio.o
  CC      mips64el-softmmu/hw/vfio/platform.o
  CC      mipsel-softmmu/memory_mapping.o
  CC      mips-softmmu/gdbstub.o
  CC      mips64el-softmmu/hw/vfio/spapr.o
  CC      mipsel-softmmu/dump.o
  CC      mips64-softmmu/hw/virtio/virtio-balloon.o
  CC      mips64el-softmmu/hw/virtio/virtio.o
  CC      mips-softmmu/balloon.o
  CC      mipsel-softmmu/migration/ram.o
  CC      mips64-softmmu/hw/virtio/vhost.o
  CC      mips-softmmu/ioport.o
  CC      mips64el-softmmu/hw/virtio/virtio-balloon.o
  CC      mips64-softmmu/hw/virtio/vhost-backend.o
  CC      mips-softmmu/numa.o
  CC      mipsel-softmmu/accel/accel.o
  CC      mips64-softmmu/hw/virtio/vhost-user.o
  CC      mips64el-softmmu/hw/virtio/vhost.o
  CC      mips-softmmu/qtest.o
  CC      mipsel-softmmu/accel/stubs/hax-stub.o
  CC      mips64-softmmu/hw/virtio/vhost-vsock.o
  CC      mips-softmmu/memory.o
  CC      mips64el-softmmu/hw/virtio/vhost-backend.o
  CC      mipsel-softmmu/accel/stubs/kvm-stub.o
  CC      mips64-softmmu/hw/virtio/virtio-crypto.o
  CC      mips64el-softmmu/hw/virtio/vhost-user.o
  CC      mipsel-softmmu/accel/tcg/tcg-all.o
  CC      mips64el-softmmu/hw/virtio/vhost-vsock.o
  CC      mipsel-softmmu/accel/tcg/cputlb.o
  CC      mips64-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      mips64el-softmmu/hw/virtio/virtio-crypto.o
  CC      mips64el-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      mips64-softmmu/hw/mips/mips_r4k.o
  CC      mips-softmmu/memory_mapping.o
  CC      mips64el-softmmu/hw/mips/mips_r4k.o
  CC      mips64-softmmu/hw/mips/mips_malta.o
  CC      mips-softmmu/dump.o
  CC      mipsel-softmmu/accel/tcg/tcg-runtime.o
  CC      mips64el-softmmu/hw/mips/mips_malta.o
  CC      mips64-softmmu/hw/mips/mips_mipssim.o
  CC      mips-softmmu/migration/ram.o
  CC      mipsel-softmmu/accel/tcg/cpu-exec.o
  CC      mips64el-softmmu/hw/mips/mips_mipssim.o
  CC      mips64-softmmu/hw/mips/addr.o
  CC      mipsel-softmmu/accel/tcg/cpu-exec-common.o
  CC      mips64-softmmu/hw/mips/mips_int.o
  CC      mips64el-softmmu/hw/mips/addr.o
  CC      mipsel-softmmu/accel/tcg/translate-all.o
  CC      mips64-softmmu/hw/mips/mips_jazz.o
  CC      mips64el-softmmu/hw/mips/mips_int.o
  CC      mips-softmmu/accel/accel.o
  CC      mipsel-softmmu/accel/tcg/translator.o
  CC      mips64el-softmmu/hw/mips/mips_jazz.o
  CC      mips-softmmu/accel/stubs/hax-stub.o
  CC      mips64-softmmu/hw/mips/gt64xxx_pci.o
  CC      mips-softmmu/accel/stubs/kvm-stub.o
  CC      mips64el-softmmu/hw/mips/mips_fulong2e.o
  CC      mips64-softmmu/hw/mips/cps.o
  CC      mipsel-softmmu/hw/9pfs/virtio-9p-device.o
  CC      mips64el-softmmu/hw/mips/gt64xxx_pci.o
  CC      mips-softmmu/accel/tcg/tcg-all.o
  CC      mips64-softmmu/target/mips/translate.o
  CC      mipsel-softmmu/hw/block/virtio-blk.o
  CC      mips-softmmu/accel/tcg/cputlb.o
  CC      mips64el-softmmu/hw/mips/cps.o
  CC      mips64el-softmmu/hw/mips/boston.o
  CC      mipsel-softmmu/hw/block/dataplane/virtio-blk.o
  CC      mips64el-softmmu/target/mips/translate.o
  CC      mipsel-softmmu/hw/char/virtio-serial-bus.o
  CC      mips-softmmu/accel/tcg/tcg-runtime.o
  CC      mipsel-softmmu/hw/core/generic-loader.o
  CC      mips-softmmu/accel/tcg/cpu-exec.o
  CC      mipsel-softmmu/hw/core/null-machine.o
  CC      mips-softmmu/accel/tcg/cpu-exec-common.o
  CC      mipsel-softmmu/hw/display/vga.o
  CC      mips-softmmu/accel/tcg/translate-all.o
  CC      mips-softmmu/accel/tcg/translator.o
  CC      mipsel-softmmu/hw/display/virtio-gpu.o
  CC      mips-softmmu/hw/9pfs/virtio-9p-device.o
  CC      mips-softmmu/hw/block/virtio-blk.o
  CC      mipsel-softmmu/hw/display/virtio-gpu-3d.o
  CC      mips-softmmu/hw/block/dataplane/virtio-blk.o
  CC      mips64-softmmu/target/mips/dsp_helper.o
  CC      mipsel-softmmu/hw/display/virtio-gpu-pci.o
  CC      mips-softmmu/hw/char/virtio-serial-bus.o
  CC      mipsel-softmmu/hw/intc/mips_gic.o
  CC      mips-softmmu/hw/core/generic-loader.o
  CC      mipsel-softmmu/hw/misc/ivshmem.o
  CC      mips-softmmu/hw/core/null-machine.o
  CC      mips-softmmu/hw/display/vga.o
  CC      mips64-softmmu/target/mips/op_helper.o
  CC      mips64el-softmmu/target/mips/dsp_helper.o
  CC      mipsel-softmmu/hw/misc/mips_cmgcr.o
  CC      mipsel-softmmu/hw/misc/mips_cpc.o
  CC      mipsel-softmmu/hw/misc/mips_itu.o
  CC      mips-softmmu/hw/display/virtio-gpu.o
  CC      mipsel-softmmu/hw/misc/mmio_interface.o
  CC      mips64el-softmmu/target/mips/op_helper.o
  CC      mipsel-softmmu/hw/net/virtio-net.o
  CC      mips-softmmu/hw/display/virtio-gpu-3d.o
  CC      mipsel-softmmu/hw/net/vhost_net.o
  CC      mips64-softmmu/target/mips/lmi_helper.o
  CC      mipsel-softmmu/hw/scsi/virtio-scsi.o
  CC      mips-softmmu/hw/display/virtio-gpu-pci.o
  CC      mips-softmmu/hw/intc/mips_gic.o
  CC      mips64-softmmu/target/mips/helper.o
  CC      mipsel-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      mips-softmmu/hw/misc/ivshmem.o
  CC      mips64-softmmu/target/mips/cpu.o
  CC      mipsel-softmmu/hw/scsi/vhost-scsi-common.o
  CC      mips64el-softmmu/target/mips/lmi_helper.o
  CC      mips64-softmmu/target/mips/gdbstub.o
  CC      mipsel-softmmu/hw/scsi/vhost-scsi.o
  CC      mips-softmmu/hw/misc/mips_cmgcr.o
  CC      mipsel-softmmu/hw/scsi/vhost-user-scsi.o
  CC      mips64-softmmu/target/mips/msa_helper.o
  CC      mips-softmmu/hw/misc/mips_cpc.o
  CC      mips64el-softmmu/target/mips/helper.o
  CC      mips-softmmu/hw/misc/mips_itu.o
  CC      mipsel-softmmu/hw/timer/mips_gictimer.o
  CC      mips-softmmu/hw/misc/mmio_interface.o
  CC      mipsel-softmmu/hw/timer/mc146818rtc.o
  CC      mips64el-softmmu/target/mips/cpu.o
  CC      mips-softmmu/hw/net/virtio-net.o
  CC      mips64el-softmmu/target/mips/gdbstub.o
  CC      mipsel-softmmu/hw/vfio/common.o
  CC      mips64el-softmmu/target/mips/msa_helper.o
  CC      mips-softmmu/hw/net/vhost_net.o
  CC      mips-softmmu/hw/scsi/virtio-scsi.o
  CC      mipsel-softmmu/hw/vfio/pci.o
  CC      mips-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      mips-softmmu/hw/scsi/vhost-scsi-common.o
  CC      mipsel-softmmu/hw/vfio/pci-quirks.o
  CC      mips64-softmmu/target/mips/mips-semi.o
  CC      mips-softmmu/hw/scsi/vhost-scsi.o
  CC      mipsel-softmmu/hw/vfio/platform.o
  CC      mips-softmmu/hw/scsi/vhost-user-scsi.o
  CC      mips64-softmmu/target/mips/machine.o
  CC      mips-softmmu/hw/timer/mips_gictimer.o
  CC      mips64-softmmu/target/mips/cp0_timer.o
  CC      mipsel-softmmu/hw/vfio/spapr.o
  CC      mips-softmmu/hw/timer/mc146818rtc.o
  GEN     trace/generated-helpers.c
  CC      mips64-softmmu/trace/control-target.o
  CC      mipsel-softmmu/hw/virtio/virtio.o
  CC      mips-softmmu/hw/vfio/common.o
  CC      mips64el-softmmu/target/mips/mips-semi.o
  CC      mips64-softmmu/trace/generated-helpers.o
  LINK    mips64-softmmu/qemu-system-mips64
  CC      mips64el-softmmu/target/mips/machine.o
  CC      mips-softmmu/hw/vfio/pci.o
  CC      mipsel-softmmu/hw/virtio/virtio-balloon.o
  CC      mips64el-softmmu/target/mips/cp0_timer.o
  GEN     trace/generated-helpers.c
  CC      mipsel-softmmu/hw/virtio/vhost.o
  CC      mips64el-softmmu/trace/control-target.o
  CC      mips-softmmu/hw/vfio/pci-quirks.o
  CC      mips64el-softmmu/trace/generated-helpers.o
  CC      mipsel-softmmu/hw/virtio/vhost-backend.o
  LINK    mips64el-softmmu/qemu-system-mips64el
  GEN     moxie-softmmu/hmp-commands.h
  GEN     moxie-softmmu/hmp-commands-info.h
  CC      mips-softmmu/hw/vfio/platform.o
  GEN     moxie-softmmu/config-target.h
  CC      mipsel-softmmu/hw/virtio/vhost-user.o
  CC      moxie-softmmu/exec.o
  CC      mips-softmmu/hw/vfio/spapr.o
  CC      mipsel-softmmu/hw/virtio/vhost-vsock.o
  CC      mips-softmmu/hw/virtio/virtio.o
  CC      mipsel-softmmu/hw/virtio/virtio-crypto.o
  CC      moxie-softmmu/tcg/tcg.o
  CC      mipsel-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      mips-softmmu/hw/virtio/virtio-balloon.o
  CC      moxie-softmmu/tcg/tcg-op.o
  CC      mipsel-softmmu/hw/mips/mips_r4k.o
  CC      mips-softmmu/hw/virtio/vhost.o
  CC      mipsel-softmmu/hw/mips/mips_malta.o
  CC      mips-softmmu/hw/virtio/vhost-backend.o
  CC      moxie-softmmu/tcg/optimize.o
  CC      mips-softmmu/hw/virtio/vhost-user.o
  CC      mipsel-softmmu/hw/mips/mips_mipssim.o
  CC      moxie-softmmu/tcg/tcg-common.o
  CC      mips-softmmu/hw/virtio/vhost-vsock.o
  CC      mipsel-softmmu/hw/mips/addr.o
  CC      moxie-softmmu/fpu/softfloat.o
  CC      mips-softmmu/hw/virtio/virtio-crypto.o
  CC      mipsel-softmmu/hw/mips/mips_int.o
  CC      mipsel-softmmu/hw/mips/gt64xxx_pci.o
  GEN     nios2-softmmu/hmp-commands.h
  GEN     nios2-softmmu/hmp-commands-info.h
  GEN     nios2-softmmu/config-target.h
  CC      nios2-softmmu/exec.o
  CC      mips-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      mipsel-softmmu/hw/mips/cps.o
  CC      mips-softmmu/hw/mips/mips_r4k.o
  CC      mipsel-softmmu/target/mips/translate.o
  CC      mips-softmmu/hw/mips/mips_malta.o
  CC      mips-softmmu/hw/mips/mips_mipssim.o
  CC      mips-softmmu/hw/mips/addr.o
  CC      nios2-softmmu/tcg/tcg.o
  CC      moxie-softmmu/disas.o
  CC      mips-softmmu/hw/mips/mips_int.o
  CC      moxie-softmmu/arch_init.o
  CC      mips-softmmu/hw/mips/gt64xxx_pci.o
  CC      mips-softmmu/hw/mips/cps.o
  CC      moxie-softmmu/cpus.o
  CC      mips-softmmu/target/mips/translate.o
  CC      nios2-softmmu/tcg/tcg-op.o
  CC      moxie-softmmu/monitor.o
  CC      mipsel-softmmu/target/mips/dsp_helper.o
  CC      moxie-softmmu/gdbstub.o
  CC      mipsel-softmmu/target/mips/op_helper.o
  CC      nios2-softmmu/tcg/optimize.o
  CC      moxie-softmmu/balloon.o
  CC      moxie-softmmu/ioport.o
  CC      nios2-softmmu/tcg/tcg-common.o
  CC      moxie-softmmu/numa.o
  CC      nios2-softmmu/fpu/softfloat.o
  CC      moxie-softmmu/qtest.o
  CC      moxie-softmmu/memory.o
  CC      mips-softmmu/target/mips/dsp_helper.o
  CC      mipsel-softmmu/target/mips/lmi_helper.o
  CC      mipsel-softmmu/target/mips/helper.o
  CC      moxie-softmmu/memory_mapping.o
  CC      mips-softmmu/target/mips/op_helper.o
  CC      nios2-softmmu/disas.o
  CC      moxie-softmmu/dump.o
  CC      mipsel-softmmu/target/mips/cpu.o
  CC      nios2-softmmu/arch_init.o
  CC      mipsel-softmmu/target/mips/gdbstub.o
  CC      moxie-softmmu/migration/ram.o
  CC      nios2-softmmu/cpus.o
  CC      mipsel-softmmu/target/mips/msa_helper.o
  CC      nios2-softmmu/monitor.o
  CC      moxie-softmmu/accel/accel.o
  CC      mips-softmmu/target/mips/lmi_helper.o
  CC      moxie-softmmu/accel/stubs/hax-stub.o
  CC      moxie-softmmu/accel/stubs/kvm-stub.o
  CC      mips-softmmu/target/mips/helper.o
  CC      moxie-softmmu/accel/tcg/tcg-all.o
  CC      nios2-softmmu/gdbstub.o
  CC      mips-softmmu/target/mips/cpu.o
  CC      moxie-softmmu/accel/tcg/cputlb.o
  CC      mips-softmmu/target/mips/gdbstub.o
  CC      nios2-softmmu/balloon.o
  CC      mips-softmmu/target/mips/msa_helper.o
  CC      moxie-softmmu/accel/tcg/tcg-runtime.o
  CC      nios2-softmmu/ioport.o
  CC      moxie-softmmu/accel/tcg/cpu-exec.o
  CC      nios2-softmmu/numa.o
  CC      mipsel-softmmu/target/mips/mips-semi.o
  CC      moxie-softmmu/accel/tcg/cpu-exec-common.o
  CC      nios2-softmmu/qtest.o
  CC      moxie-softmmu/accel/tcg/translate-all.o
  CC      mipsel-softmmu/target/mips/machine.o
  CC      moxie-softmmu/accel/tcg/translator.o
  CC      mipsel-softmmu/target/mips/cp0_timer.o
  CC      nios2-softmmu/memory.o
  GEN     trace/generated-helpers.c
  CC      mipsel-softmmu/trace/control-target.o
  CC      moxie-softmmu/hw/core/generic-loader.o
  CC      moxie-softmmu/hw/core/null-machine.o
  CC      mipsel-softmmu/trace/generated-helpers.o
  CC      moxie-softmmu/hw/display/vga.o
  CC      nios2-softmmu/memory_mapping.o
  CC      mips-softmmu/target/mips/mips-semi.o
  LINK    mipsel-softmmu/qemu-system-mipsel
  CC      nios2-softmmu/dump.o
  CC      mips-softmmu/target/mips/machine.o
  CC      mips-softmmu/target/mips/cp0_timer.o
  CC      moxie-softmmu/hw/misc/mmio_interface.o
  CC      nios2-softmmu/migration/ram.o
  GEN     trace/generated-helpers.c
  CC      mips-softmmu/trace/control-target.o
  CC      moxie-softmmu/hw/net/vhost_net.o
  CC      moxie-softmmu/hw/net/rocker/qmp-norocker.o
  CC      nios2-softmmu/accel/accel.o
  CC      mips-softmmu/trace/generated-helpers.o
  CC      moxie-softmmu/hw/timer/mc146818rtc.o
  LINK    mips-softmmu/qemu-system-mips
  CC      nios2-softmmu/accel/stubs/hax-stub.o
  GEN     or1k-softmmu/hmp-commands.h
  CC      moxie-softmmu/hw/vfio/common.o
  GEN     or1k-softmmu/hmp-commands-info.h
  CC      nios2-softmmu/accel/stubs/kvm-stub.o
  GEN     or1k-softmmu/config-target.h
  CC      or1k-softmmu/exec.o
  CC      nios2-softmmu/accel/tcg/tcg-all.o
  CC      moxie-softmmu/hw/vfio/platform.o
  CC      nios2-softmmu/accel/tcg/cputlb.o
  CC      moxie-softmmu/hw/vfio/spapr.o
  CC      moxie-softmmu/hw/moxie/moxiesim.o
  CC      moxie-softmmu/target/moxie/translate.o
  GEN     ppc64-softmmu/hmp-commands.h
  GEN     ppc64-softmmu/hmp-commands-info.h
  GEN     ppc64-softmmu/config-target.h
  CC      ppc64-softmmu/exec.o
  CC      nios2-softmmu/accel/tcg/tcg-runtime.o
  CC      moxie-softmmu/target/moxie/helper.o
  CC      or1k-softmmu/tcg/tcg.o
  CC      nios2-softmmu/accel/tcg/cpu-exec.o
  CC      moxie-softmmu/target/moxie/machine.o
  CC      moxie-softmmu/target/moxie/cpu.o
  CC      nios2-softmmu/accel/tcg/cpu-exec-common.o
  CC      nios2-softmmu/accel/tcg/translate-all.o
  CC      moxie-softmmu/target/moxie/mmu.o
  GEN     trace/generated-helpers.c
  CC      moxie-softmmu/trace/control-target.o
  CC      nios2-softmmu/accel/tcg/translator.o
  CC      ppc64-softmmu/tcg/tcg.o
  CC      nios2-softmmu/hw/core/generic-loader.o
  CC      moxie-softmmu/trace/generated-helpers.o
  CC      or1k-softmmu/tcg/tcg-op.o
  LINK    moxie-softmmu/qemu-system-moxie
  CC      nios2-softmmu/hw/core/null-machine.o
  CC      nios2-softmmu/hw/intc/nios2_iic.o
  CC      nios2-softmmu/hw/misc/mmio_interface.o
  CC      nios2-softmmu/hw/net/vhost_net.o
  CC      nios2-softmmu/hw/net/rocker/qmp-norocker.o
  CC      ppc64-softmmu/tcg/tcg-op.o
  CC      or1k-softmmu/tcg/optimize.o
  CC      nios2-softmmu/hw/timer/altera_timer.o
  CC      nios2-softmmu/hw/vfio/common.o
  CC      or1k-softmmu/tcg/tcg-common.o
  CC      or1k-softmmu/fpu/softfloat.o
  CC      or1k-softmmu/disas.o
  CC      nios2-softmmu/hw/vfio/platform.o
  CC      nios2-softmmu/hw/vfio/spapr.o
  CC      nios2-softmmu/hw/nios2/boot.o
  CC      nios2-softmmu/hw/nios2/cpu_pic.o
  GEN     ppcemb-softmmu/hmp-commands.h
  GEN     ppcemb-softmmu/hmp-commands-info.h
  CC      nios2-softmmu/hw/nios2/10m50_devboard.o
  GEN     ppcemb-softmmu/config-target.h
  CC      ppc64-softmmu/tcg/optimize.o
  CC      ppcemb-softmmu/exec.o
  CC      nios2-softmmu/target/nios2/translate.o
  CC      nios2-softmmu/target/nios2/op_helper.o
  CC      ppc64-softmmu/tcg/tcg-common.o
  CC      nios2-softmmu/target/nios2/helper.o
  CC      or1k-softmmu/arch_init.o
  CC      ppcemb-softmmu/tcg/tcg.o
  CC      ppc64-softmmu/fpu/softfloat.o
  CC      nios2-softmmu/target/nios2/cpu.o
  CC      or1k-softmmu/cpus.o
  CC      nios2-softmmu/target/nios2/mmu.o
  CC      nios2-softmmu/target/nios2/monitor.o
  CC      or1k-softmmu/monitor.o
  GEN     trace/generated-helpers.c
  CC      nios2-softmmu/trace/control-target.o
  CC      nios2-softmmu/trace/generated-helpers.o
  CC      ppc64-softmmu/disas.o
  LINK    nios2-softmmu/qemu-system-nios2
  CC      ppcemb-softmmu/tcg/tcg-op.o
  CC      or1k-softmmu/gdbstub.o
  GEN     ppc64-softmmu/gdbstub-xml.c
  CC      or1k-softmmu/balloon.o
  CC      or1k-softmmu/ioport.o
  GEN     ppc-softmmu/hmp-commands.h
  CC      ppc64-softmmu/libdecnumber/decContext.o
  GEN     ppc-softmmu/hmp-commands-info.h
  GEN     ppc-softmmu/config-target.h
  CC      ppc-softmmu/exec.o
  CC      or1k-softmmu/numa.o
  CC      ppc64-softmmu/libdecnumber/decNumber.o
  CC      or1k-softmmu/qtest.o
  CC      or1k-softmmu/memory.o
  CC      ppcemb-softmmu/tcg/optimize.o
  CC      ppc-softmmu/tcg/tcg.o
  CC      ppc64-softmmu/libdecnumber/dpd/decimal32.o
  CC      or1k-softmmu/memory_mapping.o
  CC      ppc64-softmmu/libdecnumber/dpd/decimal64.o
  CC      ppcemb-softmmu/tcg/tcg-common.o
  CC      ppc64-softmmu/libdecnumber/dpd/decimal128.o
  CC      ppcemb-softmmu/fpu/softfloat.o
  CC      or1k-softmmu/dump.o
  CC      ppc64-softmmu/arch_init.o
  CC      or1k-softmmu/migration/ram.o
  CC      ppc64-softmmu/cpus.o
  CC      ppc-softmmu/tcg/tcg-op.o
  CC      or1k-softmmu/accel/accel.o
  CC      ppc64-softmmu/monitor.o
  CC      or1k-softmmu/accel/stubs/hax-stub.o
  CC      or1k-softmmu/accel/stubs/kvm-stub.o
  CC      or1k-softmmu/accel/tcg/tcg-all.o
  CC      or1k-softmmu/accel/tcg/cputlb.o
  CC      ppcemb-softmmu/disas.o
  CC      ppc64-softmmu/gdbstub.o
  GEN     ppcemb-softmmu/gdbstub-xml.c
  CC      or1k-softmmu/accel/tcg/tcg-runtime.o
  CC      ppc64-softmmu/balloon.o
  CC      ppc-softmmu/tcg/optimize.o
  CC      ppcemb-softmmu/libdecnumber/decContext.o
  CC      or1k-softmmu/accel/tcg/cpu-exec.o
  CC      ppc64-softmmu/ioport.o
  CC      ppcemb-softmmu/libdecnumber/decNumber.o
  CC      or1k-softmmu/accel/tcg/cpu-exec-common.o
  CC      ppc64-softmmu/numa.o
  CC      or1k-softmmu/accel/tcg/translate-all.o
  CC      ppc-softmmu/tcg/tcg-common.o
  CC      ppc-softmmu/fpu/softfloat.o
  CC      ppc64-softmmu/qtest.o
  CC      or1k-softmmu/accel/tcg/translator.o
  CC      ppcemb-softmmu/libdecnumber/dpd/decimal32.o
  CC      ppc64-softmmu/memory.o
  CC      ppcemb-softmmu/libdecnumber/dpd/decimal64.o
  CC      or1k-softmmu/hw/core/generic-loader.o
  CC      or1k-softmmu/hw/core/null-machine.o
  CC      ppcemb-softmmu/libdecnumber/dpd/decimal128.o
  CC      or1k-softmmu/hw/misc/mmio_interface.o
  CC      ppcemb-softmmu/arch_init.o
  CC      or1k-softmmu/hw/net/vhost_net.o
  CC      ppc64-softmmu/memory_mapping.o
  CC      or1k-softmmu/hw/net/rocker/qmp-norocker.o
  CC      ppcemb-softmmu/cpus.o
  CC      ppc64-softmmu/dump.o
  CC      ppc-softmmu/disas.o
  CC      or1k-softmmu/hw/vfio/common.o
  GEN     ppc-softmmu/gdbstub-xml.c
  CC      or1k-softmmu/hw/vfio/platform.o
  CC      ppcemb-softmmu/monitor.o
  CC      ppc64-softmmu/migration/ram.o
  CC      or1k-softmmu/hw/vfio/spapr.o
  CC      ppc-softmmu/libdecnumber/decContext.o
  CC      or1k-softmmu/hw/openrisc/pic_cpu.o
  CC      ppc-softmmu/libdecnumber/decNumber.o
  CC      or1k-softmmu/hw/openrisc/cputimer.o
  CC      ppc64-softmmu/accel/accel.o
  CC      or1k-softmmu/hw/openrisc/openrisc_sim.o
  CC      ppcemb-softmmu/gdbstub.o
  CC      ppc64-softmmu/accel/stubs/hax-stub.o
  CC      or1k-softmmu/target/openrisc/machine.o
  CC      ppc64-softmmu/accel/stubs/kvm-stub.o
  CC      or1k-softmmu/target/openrisc/cpu.o
  CC      ppc64-softmmu/accel/tcg/tcg-all.o
  CC      ppcemb-softmmu/balloon.o
  CC      ppc64-softmmu/accel/tcg/cputlb.o
  CC      or1k-softmmu/target/openrisc/exception.o
  CC      or1k-softmmu/target/openrisc/interrupt.o
  CC      ppcemb-softmmu/ioport.o
  CC      or1k-softmmu/target/openrisc/mmu.o
  CC      ppc-softmmu/libdecnumber/dpd/decimal32.o
  CC      ppcemb-softmmu/numa.o
  CC      or1k-softmmu/target/openrisc/translate.o
  CC      ppc-softmmu/libdecnumber/dpd/decimal64.o
  CC      ppc64-softmmu/accel/tcg/tcg-runtime.o
  CC      ppcemb-softmmu/qtest.o
  CC      ppc-softmmu/libdecnumber/dpd/decimal128.o
  CC      ppc64-softmmu/accel/tcg/cpu-exec.o
  CC      ppc-softmmu/arch_init.o
  CC      or1k-softmmu/target/openrisc/exception_helper.o
  CC      ppcemb-softmmu/memory.o
  CC      ppc64-softmmu/accel/tcg/cpu-exec-common.o
  CC      ppc-softmmu/cpus.o
  CC      or1k-softmmu/target/openrisc/fpu_helper.o
  CC      ppc64-softmmu/accel/tcg/translate-all.o
  CC      or1k-softmmu/target/openrisc/interrupt_helper.o
  CC      ppc-softmmu/monitor.o
  CC      or1k-softmmu/target/openrisc/mmu_helper.o
  CC      ppcemb-softmmu/memory_mapping.o
  CC      ppc64-softmmu/accel/tcg/translator.o
  CC      ppcemb-softmmu/dump.o
  CC      or1k-softmmu/target/openrisc/sys_helper.o
  CC      or1k-softmmu/target/openrisc/gdbstub.o
  CC      ppc64-softmmu/hw/9pfs/virtio-9p-device.o
  CC      ppc-softmmu/gdbstub.o
  GEN     trace/generated-helpers.c
  CC      or1k-softmmu/trace/control-target.o
  CC      ppcemb-softmmu/migration/ram.o
  CC      ppc64-softmmu/hw/block/virtio-blk.o
  CC      or1k-softmmu/trace/generated-helpers.o
  LINK    or1k-softmmu/qemu-system-or1k
  CC      ppc64-softmmu/hw/block/dataplane/virtio-blk.o
  CC      ppc-softmmu/balloon.o
  CC      ppcemb-softmmu/accel/accel.o
  CC      ppc64-softmmu/hw/char/spapr_vty.o
  CC      ppc-softmmu/ioport.o
  CC      ppcemb-softmmu/accel/stubs/hax-stub.o
  CC      ppc64-softmmu/hw/char/virtio-serial-bus.o
  CC      ppcemb-softmmu/accel/stubs/kvm-stub.o
  CC      ppc-softmmu/numa.o
  CC      ppc64-softmmu/hw/core/generic-loader.o
  CC      ppcemb-softmmu/accel/tcg/tcg-all.o
  CC      ppc-softmmu/qtest.o
  GEN     s390x-softmmu/hmp-commands.h
  CC      ppc64-softmmu/hw/core/null-machine.o
  CC      ppcemb-softmmu/accel/tcg/cputlb.o
  GEN     s390x-softmmu/hmp-commands-info.h
  CC      s390x-softmmu/gen-features
  CC      ppc64-softmmu/hw/display/sm501.o
  CC      ppc-softmmu/memory.o
  GEN     s390x-softmmu/config-target.h
  GEN     s390x-softmmu/gen-features.h
  CC      s390x-softmmu/exec.o
  CC      ppcemb-softmmu/accel/tcg/tcg-runtime.o
  CC      ppc64-softmmu/hw/display/vga.o
  CC      ppc-softmmu/memory_mapping.o
  CC      ppcemb-softmmu/accel/tcg/cpu-exec.o
  CC      ppc-softmmu/dump.o
  CC      ppcemb-softmmu/accel/tcg/cpu-exec-common.o
  CC      ppc64-softmmu/hw/display/virtio-gpu.o
  CC      s390x-softmmu/tcg/tcg.o
  CC      ppc-softmmu/migration/ram.o
  CC      ppcemb-softmmu/accel/tcg/translate-all.o
  CC      ppcemb-softmmu/accel/tcg/translator.o
  CC      ppc64-softmmu/hw/display/virtio-gpu-3d.o
  CC      ppc-softmmu/accel/accel.o
  CC      ppc-softmmu/accel/stubs/hax-stub.o
  CC      ppc64-softmmu/hw/display/virtio-gpu-pci.o
  CC      ppcemb-softmmu/hw/9pfs/virtio-9p-device.o
  CC      ppc-softmmu/accel/stubs/kvm-stub.o
  CC      ppcemb-softmmu/hw/block/virtio-blk.o
  CC      s390x-softmmu/tcg/tcg-op.o
  CC      ppc64-softmmu/hw/display/virtio-vga.o
  CC      ppc-softmmu/accel/tcg/tcg-all.o
  CC      ppcemb-softmmu/hw/block/dataplane/virtio-blk.o
  CC      ppc-softmmu/accel/tcg/cputlb.o
  CC      ppc64-softmmu/hw/i2c/ppc4xx_i2c.o
  CC      ppcemb-softmmu/hw/char/virtio-serial-bus.o
  CC      ppc64-softmmu/hw/intc/xics.o
  CC      ppcemb-softmmu/hw/core/generic-loader.o
  CC      ppc-softmmu/accel/tcg/tcg-runtime.o
  CC      ppc64-softmmu/hw/intc/xics_spapr.o
  CC      ppcemb-softmmu/hw/core/null-machine.o
  CC      ppc-softmmu/accel/tcg/cpu-exec.o
  CC      s390x-softmmu/tcg/optimize.o
  CC      ppc64-softmmu/hw/intc/xics_pnv.o
  CC      ppcemb-softmmu/hw/display/sm501.o
  CC      ppc-softmmu/accel/tcg/cpu-exec-common.o
  CC      ppc64-softmmu/hw/misc/ivshmem.o
  CC      ppc-softmmu/accel/tcg/translate-all.o
  CC      s390x-softmmu/tcg/tcg-common.o
  CC      ppcemb-softmmu/hw/display/vga.o
  CC      ppc64-softmmu/hw/misc/mmio_interface.o
  CC      s390x-softmmu/fpu/softfloat.o
  CC      ppc-softmmu/accel/tcg/translator.o
  CC      ppc64-softmmu/hw/net/spapr_llan.o
  CC      ppc-softmmu/hw/9pfs/virtio-9p-device.o
  CC      ppcemb-softmmu/hw/display/virtio-gpu.o
  CC      ppc64-softmmu/hw/net/xilinx_ethlite.o
  CC      ppc-softmmu/hw/block/virtio-blk.o
  CC      ppc64-softmmu/hw/net/virtio-net.o
  CC      ppcemb-softmmu/hw/display/virtio-gpu-3d.o
  CC      ppc-softmmu/hw/block/dataplane/virtio-blk.o
  CC      ppc64-softmmu/hw/net/vhost_net.o
  CC      ppc-softmmu/hw/char/virtio-serial-bus.o
  CC      ppc64-softmmu/hw/net/fsl_etsec/etsec.o
  CC      s390x-softmmu/disas.o
  CC      ppc64-softmmu/hw/net/fsl_etsec/registers.o
  CC      ppcemb-softmmu/hw/display/virtio-gpu-pci.o
  CC      ppc-softmmu/hw/core/generic-loader.o
  GEN     s390x-softmmu/gdbstub-xml.c
  CC      ppc64-softmmu/hw/net/fsl_etsec/rings.o
  CC      ppcemb-softmmu/hw/i2c/ppc4xx_i2c.o
  CC      ppcemb-softmmu/hw/misc/ivshmem.o
  CC      ppc-softmmu/hw/core/null-machine.o
  CC      ppc64-softmmu/hw/net/fsl_etsec/miim.o
  CC      ppc-softmmu/hw/display/sm501.o
  CC      ppcemb-softmmu/hw/misc/mmio_interface.o
  CC      ppc64-softmmu/hw/nvram/spapr_nvram.o
  CC      s390x-softmmu/arch_init.o
  CC      ppcemb-softmmu/hw/net/xilinx_ethlite.o
  CC      ppc64-softmmu/hw/scsi/spapr_vscsi.o
  CC      ppc-softmmu/hw/display/vga.o
  CC      s390x-softmmu/cpus.o
  CC      ppcemb-softmmu/hw/net/virtio-net.o
  CC      ppc64-softmmu/hw/scsi/virtio-scsi.o
  CC      s390x-softmmu/monitor.o
  CC      ppcemb-softmmu/hw/net/vhost_net.o
  CC      ppc-softmmu/hw/display/virtio-gpu.o
  CC      ppcemb-softmmu/hw/scsi/virtio-scsi.o
  CC      ppc64-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      ppcemb-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      ppc64-softmmu/hw/scsi/vhost-scsi-common.o
  CC      ppc-softmmu/hw/display/virtio-gpu-3d.o
  CC      ppcemb-softmmu/hw/scsi/vhost-scsi-common.o
  CC      ppc64-softmmu/hw/scsi/vhost-scsi.o
  CC      s390x-softmmu/gdbstub.o
  CC      ppcemb-softmmu/hw/scsi/vhost-scsi.o
  CC      ppc-softmmu/hw/display/virtio-gpu-pci.o
  CC      ppc64-softmmu/hw/scsi/vhost-user-scsi.o
  CC      ppcemb-softmmu/hw/scsi/vhost-user-scsi.o
  CC      s390x-softmmu/balloon.o
  CC      ppc-softmmu/hw/i2c/ppc4xx_i2c.o
  CC      ppcemb-softmmu/hw/vfio/common.o
  CC      ppc64-softmmu/hw/timer/mc146818rtc.o
  CC      s390x-softmmu/ioport.o
  CC      ppc-softmmu/hw/misc/ivshmem.o
  CC      ppc64-softmmu/hw/vfio/common.o
  CC      s390x-softmmu/numa.o
  CC      ppcemb-softmmu/hw/vfio/pci.o
  CC      ppc-softmmu/hw/misc/mmio_interface.o
  CC      s390x-softmmu/qtest.o
  CC      ppc64-softmmu/hw/vfio/pci.o
  CC      ppc-softmmu/hw/net/xilinx_ethlite.o
  CC      s390x-softmmu/memory.o
  CC      ppc-softmmu/hw/net/virtio-net.o
  CC      ppcemb-softmmu/hw/vfio/pci-quirks.o
  CC      ppc64-softmmu/hw/vfio/pci-quirks.o
  CC      ppc-softmmu/hw/net/vhost_net.o
  CC      ppc-softmmu/hw/net/fsl_etsec/etsec.o
  CC      ppcemb-softmmu/hw/vfio/platform.o
  CC      ppc64-softmmu/hw/vfio/platform.o
  CC      s390x-softmmu/memory_mapping.o
  CC      ppc-softmmu/hw/net/fsl_etsec/registers.o
  CC      s390x-softmmu/dump.o
  CC      ppcemb-softmmu/hw/vfio/spapr.o
  CC      ppc64-softmmu/hw/vfio/spapr.o
  CC      ppc-softmmu/hw/net/fsl_etsec/rings.o
  CC      ppcemb-softmmu/hw/virtio/virtio.o
  CC      ppc64-softmmu/hw/virtio/virtio.o
  CC      ppc-softmmu/hw/net/fsl_etsec/miim.o
  CC      s390x-softmmu/migration/ram.o
  CC      ppc-softmmu/hw/scsi/virtio-scsi.o
  CC      ppcemb-softmmu/hw/virtio/virtio-balloon.o
  CC      ppc64-softmmu/hw/virtio/virtio-balloon.o
  CC      ppc-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      s390x-softmmu/accel/accel.o
  CC      ppcemb-softmmu/hw/virtio/vhost.o
  CC      ppc64-softmmu/hw/virtio/vhost.o
  CC      ppc-softmmu/hw/scsi/vhost-scsi-common.o
  CC      s390x-softmmu/accel/kvm/kvm-all.o
  CC      ppcemb-softmmu/hw/virtio/vhost-backend.o
  CC      ppc-softmmu/hw/scsi/vhost-scsi.o
  CC      ppc64-softmmu/hw/virtio/vhost-backend.o
  CC      ppcemb-softmmu/hw/virtio/vhost-user.o
  CC      ppc-softmmu/hw/scsi/vhost-user-scsi.o
  CC      s390x-softmmu/accel/stubs/hax-stub.o
  CC      ppc64-softmmu/hw/virtio/vhost-user.o
  CC      s390x-softmmu/accel/tcg/tcg-all.o
  CC      ppc-softmmu/hw/timer/mc146818rtc.o
  CC      ppcemb-softmmu/hw/virtio/vhost-vsock.o
  CC      ppc64-softmmu/hw/virtio/vhost-vsock.o
  CC      s390x-softmmu/accel/tcg/cputlb.o
  CC      ppcemb-softmmu/hw/virtio/virtio-crypto.o
  CC      ppc64-softmmu/hw/virtio/virtio-crypto.o
  CC      ppc-softmmu/hw/vfio/common.o
  CC      ppcemb-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      ppc64-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      ppc-softmmu/hw/vfio/pci.o
  CC      ppcemb-softmmu/hw/ppc/ppc.o
  CC      ppc64-softmmu/hw/ppc/ppc.o
  CC      s390x-softmmu/accel/tcg/tcg-runtime.o
In file included from /var/tmp/patchew-tester-tmp-bbu6uy4t/src/hw/ppc/ppc.c:39:0:
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/target/ppc/kvm_ppc.h:161:5: error: no previous prototype for ‘kvmppc_fwnmi_enable’ [-Werror=missing-prototypes]
 int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
     ^~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/rules.mak:66: recipe for target 'hw/ppc/ppc.o' failed
make[1]: *** [hw/ppc/ppc.o] Error 1
Makefile:327: recipe for target 'subdir-ppcemb-softmmu' failed
make: *** [subdir-ppcemb-softmmu] Error 2
make: *** Waiting for unfinished jobs....
In file included from /var/tmp/patchew-tester-tmp-bbu6uy4t/src/hw/ppc/ppc.c:39:0:
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/target/ppc/kvm_ppc.h:161:5: error: no previous prototype for ‘kvmppc_fwnmi_enable’ [-Werror=missing-prototypes]
 int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
     ^~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/rules.mak:66: recipe for target 'hw/ppc/ppc.o' failed
make[1]: *** [hw/ppc/ppc.o] Error 1
make[1]: *** Waiting for unfinished jobs....
  CC      ppc64-softmmu/hw/ppc/ppc_booke.o
  CC      s390x-softmmu/accel/tcg/cpu-exec.o
In file included from /var/tmp/patchew-tester-tmp-bbu6uy4t/src/hw/ppc/ppc_booke.c:34:0:
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/target/ppc/kvm_ppc.h:161:5: error: no previous prototype for ‘kvmppc_fwnmi_enable’ [-Werror=missing-prototypes]
 int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
     ^~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/rules.mak:66: recipe for target 'hw/ppc/ppc_booke.o' failed
make[1]: *** [hw/ppc/ppc_booke.o] Error 1
Makefile:327: recipe for target 'subdir-ppc64-softmmu' failed
make: *** [subdir-ppc64-softmmu] Error 2
  CC      s390x-softmmu/accel/tcg/cpu-exec-common.o
  CC      ppc-softmmu/hw/vfio/pci-quirks.o
  CC      s390x-softmmu/accel/tcg/translate-all.o
  CC      ppc-softmmu/hw/vfio/platform.o
  CC      ppc-softmmu/hw/vfio/spapr.o
  CC      s390x-softmmu/accel/tcg/translator.o
  CC      s390x-softmmu/hw/9pfs/virtio-9p-device.o
  CC      ppc-softmmu/hw/virtio/virtio-balloon.o
  CC      ppc-softmmu/hw/virtio/virtio.o
  CC      s390x-softmmu/hw/block/virtio-blk.o
  CC      ppc-softmmu/hw/virtio/vhost.o
  CC      s390x-softmmu/hw/block/dataplane/virtio-blk.o
  CC      s390x-softmmu/hw/char/virtio-serial-bus.o
  CC      s390x-softmmu/hw/char/terminal3270.o
  CC      ppc-softmmu/hw/virtio/vhost-backend.o
  CC      ppc-softmmu/hw/virtio/vhost-user.o
  CC      s390x-softmmu/hw/core/generic-loader.o
  CC      s390x-softmmu/hw/core/null-machine.o
  CC      ppc-softmmu/hw/virtio/vhost-vsock.o
  CC      s390x-softmmu/hw/display/virtio-gpu.o
  CC      s390x-softmmu/hw/display/virtio-gpu-3d.o
  CC      ppc-softmmu/hw/virtio/virtio-crypto.o
  CC      ppc-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      ppc-softmmu/hw/ppc/ppc.o
  CC      ppc-softmmu/hw/ppc/ppc_booke.o
  CC      s390x-softmmu/hw/display/virtio-gpu-pci.o
  CC      s390x-softmmu/hw/intc/s390_flic.o
In file included from /var/tmp/patchew-tester-tmp-bbu6uy4t/src/hw/ppc/ppc_booke.c:34:0:
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/target/ppc/kvm_ppc.h:161:5: error: no previous prototype for ‘kvmppc_fwnmi_enable’ [-Werror=missing-prototypes]
 int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
     ^~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/rules.mak:66: recipe for target 'hw/ppc/ppc_booke.o' failed
make[1]: *** [hw/ppc/ppc_booke.o] Error 1
make[1]: *** Waiting for unfinished jobs....
  CC      s390x-softmmu/hw/intc/s390_flic_kvm.o
In file included from /var/tmp/patchew-tester-tmp-bbu6uy4t/src/hw/ppc/ppc.c:39:0:
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/target/ppc/kvm_ppc.h:161:5: error: no previous prototype for ‘kvmppc_fwnmi_enable’ [-Werror=missing-prototypes]
 int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
     ^~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-bbu6uy4t/src/rules.mak:66: recipe for target 'hw/ppc/ppc.o' failed
make[1]: *** [hw/ppc/ppc.o] Error 1
Makefile:327: recipe for target 'subdir-ppc-softmmu' failed
make: *** [subdir-ppc-softmmu] Error 2
  CC      s390x-softmmu/hw/misc/mmio_interface.o
  CC      s390x-softmmu/hw/net/virtio-net.o
  CC      s390x-softmmu/hw/net/vhost_net.o
  CC      s390x-softmmu/hw/net/rocker/qmp-norocker.o
  CC      s390x-softmmu/hw/scsi/virtio-scsi.o
  CC      s390x-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      s390x-softmmu/hw/scsi/vhost-scsi-common.o
  CC      s390x-softmmu/hw/scsi/vhost-scsi.o
  CC      s390x-softmmu/hw/scsi/vhost-user-scsi.o
  CC      s390x-softmmu/hw/vfio/common.o
  CC      s390x-softmmu/hw/vfio/pci.o
  CC      s390x-softmmu/hw/vfio/pci-quirks.o
  CC      s390x-softmmu/hw/vfio/ccw.o
  CC      s390x-softmmu/hw/vfio/platform.o
  CC      s390x-softmmu/hw/vfio/spapr.o
  CC      s390x-softmmu/hw/virtio/virtio.o
  CC      s390x-softmmu/hw/virtio/virtio-balloon.o
  CC      s390x-softmmu/hw/virtio/vhost.o
  CC      s390x-softmmu/hw/virtio/vhost-backend.o
  CC      s390x-softmmu/hw/virtio/vhost-user.o
  CC      s390x-softmmu/hw/virtio/vhost-vsock.o
  CC      s390x-softmmu/hw/virtio/virtio-crypto.o
  CC      s390x-softmmu/hw/virtio/virtio-crypto-pci.o
  CC      s390x-softmmu/hw/s390x/s390-virtio-hcall.o
  CC      s390x-softmmu/hw/s390x/sclp.o
  CC      s390x-softmmu/hw/s390x/event-facility.o
  CC      s390x-softmmu/hw/s390x/sclpquiesce.o
  CC      s390x-softmmu/hw/s390x/sclpcpu.o
  CC      s390x-softmmu/hw/s390x/ipl.o
  CC      s390x-softmmu/hw/s390x/css.o
  CC      s390x-softmmu/hw/s390x/s390-virtio-ccw.o
  CC      s390x-softmmu/hw/s390x/3270-ccw.o
  CC      s390x-softmmu/hw/s390x/virtio-ccw.o
  CC      s390x-softmmu/hw/s390x/css-bridge.o
  CC      s390x-softmmu/hw/s390x/ccw-device.o
  CC      s390x-softmmu/hw/s390x/s390-pci-bus.o
  CC      s390x-softmmu/hw/s390x/s390-pci-inst.o
  CC      s390x-softmmu/hw/s390x/s390-skeys.o
  CC      s390x-softmmu/hw/s390x/s390-stattrib.o
  CC      s390x-softmmu/hw/s390x/s390-skeys-kvm.o
  CC      s390x-softmmu/hw/s390x/s390-stattrib-kvm.o
  CC      s390x-softmmu/hw/s390x/s390-ccw.o
  CC      s390x-softmmu/target/s390x/cpu.o
  CC      s390x-softmmu/target/s390x/cpu_models.o
  CC      s390x-softmmu/target/s390x/cpu_features.o
  CC      s390x-softmmu/target/s390x/gdbstub.o
  CC      s390x-softmmu/target/s390x/interrupt.o
  CC      s390x-softmmu/target/s390x/helper.o
  CC      s390x-softmmu/target/s390x/translate.o
  CC      s390x-softmmu/target/s390x/excp_helper.o
  CC      s390x-softmmu/target/s390x/cc_helper.o
  CC      s390x-softmmu/target/s390x/fpu_helper.o
  CC      s390x-softmmu/target/s390x/int_helper.o
  CC      s390x-softmmu/target/s390x/mem_helper.o
  CC      s390x-softmmu/target/s390x/misc_helper.o
  CC      s390x-softmmu/target/s390x/machine.o
  CC      s390x-softmmu/target/s390x/ioinst.o
  CC      s390x-softmmu/target/s390x/arch_dump.o
  CC      s390x-softmmu/target/s390x/mmu_helper.o
  CC      s390x-softmmu/target/s390x/diag.o
  CC      s390x-softmmu/target/s390x/kvm.o
  GEN     trace/generated-helpers.c
  CC      s390x-softmmu/trace/control-target.o
  CC      s390x-softmmu/gdbstub-xml.o
  CC      s390x-softmmu/trace/generated-helpers.o
  LINK    s390x-softmmu/qemu-system-s390x
=== OUTPUT END ===

Test command exited with code: 2


---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region Aravinda Prasad
@ 2017-09-29  6:17   ` David Gibson
  2017-09-29 11:52     ` [Qemu-devel] [Qemu-ppc] " Nikunj A Dadhania
  2017-10-03  5:56     ` [Qemu-devel] " Aravinda Prasad
  0 siblings, 2 replies; 27+ messages in thread
From: David Gibson @ 2017-09-29  6:17 UTC (permalink / raw)
  To: Aravinda Prasad
  Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 4370 bytes --]

On Thu, Sep 28, 2017 at 04:07:38PM +0530, Aravinda Prasad wrote:
> Receive updates from SLOF about the updated rtas-base.
> A separate patch for SLOF [1] (commit f9a60de3) adds
> functionality to invoke a private HCALL whenever OS
> issues instantiate-rtas with a new rtas-base.
> 
> This is required as QEMU needs to know the updated rtas-base
> as it allocates error reporting structure in RTAS space upon
> a machine check exception.
> 
> [1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html
> 
> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

Ao I acked this earlier, but I've now realized there might be some
connection between this and discussions taking place elsewhere about
qemu not knowing what SLOF does with the device tree.

At what point will SLOF call the UPDATE_RTAS hcall?  I'm guessing at
the time of instantiate-rtas, is that right?

Does SLOF put the RTAS blob address in its internal device tree, or
does it only pass it to the guest via the return parameters from
instantiate-rtas?

> ---
>  hw/ppc/spapr.c         |   11 +++++++++++
>  hw/ppc/spapr_hcall.c   |    8 ++++++++
>  include/hw/ppc/spapr.h |    4 +++-
>  3 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index ff87f15..5deae30 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -1675,6 +1675,16 @@ static const VMStateDescription vmstate_spapr_patb_entry = {
>      },
>  };
>  
> +static const VMStateDescription vmstate_spapr_rtas_addr = {
> +    .name = "spapr_rtas_addr",
> +    .version_id = 1,
> +    .minimum_version_id = 1,
> +    .fields = (VMStateField[]) {
> +        VMSTATE_UINT64(rtas_addr, sPAPRMachineState),
> +        VMSTATE_END_OF_LIST()
> +    },
> +};
> +
>  static const VMStateDescription vmstate_spapr = {
>      .name = "spapr",
>      .version_id = 3,
> @@ -1694,6 +1704,7 @@ static const VMStateDescription vmstate_spapr = {
>          &vmstate_spapr_ov5_cas,
>          &vmstate_spapr_patb_entry,
>          &vmstate_spapr_pending_events,
> +        &vmstate_spapr_rtas_addr,
>          NULL
>      }
>  };
> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> index 8d72bb7..c15a93c 100644
> --- a/hw/ppc/spapr_hcall.c
> +++ b/hw/ppc/spapr_hcall.c
> @@ -1088,6 +1088,13 @@ static target_ulong h_rtas(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>                             nret, rtas_r3 + 12 + 4*nargs);
>  }
>  
> +static target_ulong h_rtas_update(PowerPCCPU *cpu, sPAPRMachineState *spapr,
> +                                  target_ulong opcode, target_ulong *args)
> +{
> +    spapr->rtas_addr = args[0];
> +    return 0;
> +}
> +
>  static target_ulong h_logical_load(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>                                     target_ulong opcode, target_ulong *args)
>  {
> @@ -1750,6 +1757,7 @@ static void hypercall_register_types(void)
>  
>      /* qemu/KVM-PPC specific hcalls */
>      spapr_register_hypercall(KVMPPC_H_RTAS, h_rtas);
> +    spapr_register_hypercall(KVMPPC_H_RTAS_UPDATE, h_rtas_update);
>  
>      /* ibm,client-architecture-support support */
>      spapr_register_hypercall(KVMPPC_H_CAS, h_client_architecture_support);
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index c1b365f..b395aa7 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -90,6 +90,7 @@ struct sPAPRMachineState {
>  
>      hwaddr rma_size;
>      int vrma_adjust;
> +    hwaddr rtas_addr;
>      ssize_t rtas_size;
>      void *rtas_blob;
>      long kernel_size;
> @@ -400,7 +401,8 @@ struct sPAPRMachineState {
>  #define KVMPPC_H_LOGICAL_MEMOP  (KVMPPC_HCALL_BASE + 0x1)
>  /* Client Architecture support */
>  #define KVMPPC_H_CAS            (KVMPPC_HCALL_BASE + 0x2)
> -#define KVMPPC_HCALL_MAX        KVMPPC_H_CAS
> +#define KVMPPC_H_RTAS_UPDATE    (KVMPPC_HCALL_BASE + 0x3)
> +#define KVMPPC_HCALL_MAX        KVMPPC_H_RTAS_UPDATE
>  
>  typedef struct sPAPRDeviceTreeUpdateHeader {
>      uint32_t version_id;
> 

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 2/6] ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls
  2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 2/6] ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls Aravinda Prasad
@ 2017-09-29  6:49   ` David Gibson
  2017-10-03  5:51     ` Aravinda Prasad
  0 siblings, 1 reply; 27+ messages in thread
From: David Gibson @ 2017-09-29  6:49 UTC (permalink / raw)
  To: Aravinda Prasad
  Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 6699 bytes --]

I don't suppose there's a way to stop your mailer from inserting
spaces after the commas in the subject line,


On Thu, Sep 28, 2017 at 04:07:48PM +0530, Aravinda Prasad wrote:
> This patch adds support in QEMU to handle "ibm,nmi-register"
> and "ibm,nmi-interlock" RTAS calls.
> 
> The machine check notification address is saved when the
> OS issues "ibm,nmi-register" RTAS call.
> 
> This patch also handles the case when multiple processors
> experience machine check at or about the same time by
> handling "ibm,nmi-interlock" call. In such cases, as per
> PAPR, subsequent processors serialize waiting for the first
> processor to issue the "ibm,nmi-interlock" call. The second
> processor waits till the first processor, which also
> received a machine check error, is done reading the error
> log. The first processor issues "ibm,nmi-interlock" call
> when the error log is consumed. This patch implements the
> releasing part of the error-log while subsequent patch
> (which builds error log) handles the locking part.
> 
> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> ---
>  hw/ppc/spapr.c         |    8 ++++++++
>  hw/ppc/spapr_rtas.c    |   35 +++++++++++++++++++++++++++++++++++
>  include/hw/ppc/spapr.h |   11 ++++++++++-
>  3 files changed, 53 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 5deae30..d568ea6 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -1477,6 +1477,11 @@ static void ppc_spapr_reset(void)
>      first_ppc_cpu->env.nip = SPAPR_ENTRY_POINT;
>  
>      spapr->cas_reboot = false;
> +
> +    spapr->mc_status = -1;
> +    spapr->guest_machine_check_addr = 0;

You should probably use -1 as the default for this - strictly speaking
the guest could legitimately choose to have it's machine check
processing code at 0, though it would be a strange choice.

> +    qemu_cond_destroy(&spapr->mc_delivery_cond);
> +    qemu_cond_init(&spapr->mc_delivery_cond);

What will this do if one of the vcpus is waiting on the condition
variable right now?  I suspect you're going to need to first wake up
the queue, and marshal any blocked vcpus back into dead mode instead
of this.

>  }
>  
>  static void spapr_create_nvram(sPAPRMachineState *spapr)
> @@ -2598,6 +2603,9 @@ static void ppc_spapr_init(MachineState *machine)
>  
>          kvmppc_spapr_enable_inkernel_multitce();
>      }
> +
> +    spapr->mc_status = -1;
> +    qemu_cond_init(&spapr->mc_delivery_cond);
>  }
>  
>  static int spapr_kvm_type(const char *vm_type)
> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
> index cdf0b60..08e9a5e 100644
> --- a/hw/ppc/spapr_rtas.c
> +++ b/hw/ppc/spapr_rtas.c
> @@ -348,6 +348,37 @@ static void rtas_get_power_level(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>      rtas_st(rets, 1, 100);
>  }
>  
> +static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
> +                                  sPAPRMachineState *spapr,
> +                                  uint32_t token, uint32_t nargs,
> +                                  target_ulong args,
> +                                  uint32_t nret, target_ulong rets)
> +{
> +    spapr->guest_machine_check_addr = rtas_ld(args, 1);
> +    rtas_st(rets, 0, RTAS_OUT_SUCCESS);
> +}
> +
> +static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu,
> +                                   sPAPRMachineState *spapr,
> +                                   uint32_t token, uint32_t nargs,
> +                                   target_ulong args,
> +                                   uint32_t nret, target_ulong rets)
> +{
> +    if (!spapr->guest_machine_check_addr) {
> +        /* NMI register not called */
> +        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
> +    } else {
> +        /*
> +         * VCPU issuing "ibm,nmi-interlock" is done with NMI handling,
> +         * hence unset mc_status.
> +         */
> +        spapr->mc_status = -1;
> +        qemu_cond_signal(&spapr->mc_delivery_cond);
> +        rtas_st(rets, 0, RTAS_OUT_SUCCESS);
> +    }
> +}
> +
> +
>  static struct rtas_call {
>      const char *name;
>      spapr_rtas_fn fn;
> @@ -489,6 +520,10 @@ static void core_rtas_register_types(void)
>                          rtas_set_power_level);
>      spapr_rtas_register(RTAS_GET_POWER_LEVEL, "get-power-level",
>                          rtas_get_power_level);
> +    spapr_rtas_register(RTAS_IBM_NMI_REGISTER, "ibm,nmi-register",
> +                        rtas_ibm_nmi_register);
> +    spapr_rtas_register(RTAS_IBM_NMI_INTERLOCK, "ibm,nmi-interlock",
> +                        rtas_ibm_nmi_interlock);
>  }
>  
>  type_init(core_rtas_register_types)
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index b395aa7..28b6e2e 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -124,6 +124,13 @@ struct sPAPRMachineState {
>       * occurs during the unplug process. */
>      QTAILQ_HEAD(, sPAPRDIMMState) pending_dimm_unplugs;
>  
> +    /* State related to "ibm,nmi-register" and "ibm,nmi-interlock" calls */
> +    target_ulong guest_machine_check_addr;

You need to migrate this.  This is separate and simpler from the
problems of migrating during machine check handling - at the moment if
the guest calls nmi-register, then you migrate, then a machine check
is triggered you will have lost the information on how to handle it
properly.


> +    /* mc_status is set to -1 if mc is not in progress, else is set to the CPU
> +     * handling the mc. */
> +    int mc_status;
> +    QemuCond mc_delivery_cond;
> +
>      /*< public >*/
>      char *kvm_type;
>      MemoryHotplugState hotplug_memory;
> @@ -520,8 +527,10 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
>  #define RTAS_IBM_CREATE_PE_DMA_WINDOW           (RTAS_TOKEN_BASE + 0x27)
>  #define RTAS_IBM_REMOVE_PE_DMA_WINDOW           (RTAS_TOKEN_BASE + 0x28)
>  #define RTAS_IBM_RESET_PE_DMA_WINDOW            (RTAS_TOKEN_BASE + 0x29)
> +#define RTAS_IBM_NMI_REGISTER                   (RTAS_TOKEN_BASE + 0x2A)
> +#define RTAS_IBM_NMI_INTERLOCK                  (RTAS_TOKEN_BASE + 0x2B)
>  
> -#define RTAS_TOKEN_MAX                          (RTAS_TOKEN_BASE + 0x2A)
> +#define RTAS_TOKEN_MAX                          (RTAS_TOKEN_BASE + 0x2C)
>  
>  /* RTAS ibm,get-system-parameter token values */
>  #define RTAS_SYSPARM_SPLPAR_CHARACTERISTICS      20
> 

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-09-29  6:17   ` David Gibson
@ 2017-09-29 11:52     ` Nikunj A Dadhania
  2017-10-02  3:02       ` Alexey Kardashevskiy
  2017-10-03  5:56     ` [Qemu-devel] " Aravinda Prasad
  1 sibling, 1 reply; 27+ messages in thread
From: Nikunj A Dadhania @ 2017-09-29 11:52 UTC (permalink / raw)
  To: David Gibson, Aravinda Prasad
  Cc: benh, mahesh, qemu-devel, qemu-ppc, paulus, sam.bobroff

David Gibson <david@gibson.dropbear.id.au> writes:

> On Thu, Sep 28, 2017 at 04:07:38PM +0530, Aravinda Prasad wrote:
>> Receive updates from SLOF about the updated rtas-base.
>> A separate patch for SLOF [1] (commit f9a60de3) adds
>> functionality to invoke a private HCALL whenever OS
>> issues instantiate-rtas with a new rtas-base.
>> 
>> This is required as QEMU needs to know the updated rtas-base
>> as it allocates error reporting structure in RTAS space upon
>> a machine check exception.
>> 
>> [1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html
>> 
>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>
> Ao I acked this earlier, but I've now realized there might be some
> connection between this and discussions taking place elsewhere about
> qemu not knowing what SLOF does with the device tree.
>
> At what point will SLOF call the UPDATE_RTAS hcall?  I'm guessing at
> the time of instantiate-rtas, is that right?

The call happens from
arch/powerpc/kernel/prom_init.c:prom_instantiate_rtas() and after that
linux kernel makes two entries in the DT

....
       if (call_prom_ret("call-method", 3, 2, &entry,
                          ADDR("instantiate-rtas"),
                          rtas_inst, base) != 0
            || entry == 0) {
                prom_printf(" failed\n");
                return;
        }
        prom_printf(" done\n");

        reserve_mem(base, size);

        val = cpu_to_be32(base);
        prom_setprop(rtas_node, "/rtas", "linux,rtas-base",
                     &val, sizeof(val));
        val = cpu_to_be32(entry);
        prom_setprop(rtas_node, "/rtas", "linux,rtas-entry",
                     &val, sizeof(val));
....

Quiesce is called after this. 

> Does SLOF put the RTAS blob address in its internal device tree, or
> does it only pass it to the guest via the return parameters from
> instantiate-rtas?

Entry was made to the DT by linux kernel prom_init code, will this be
visible to QEMU?

Regards,
Nikunj

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-09-29 11:52     ` [Qemu-devel] [Qemu-ppc] " Nikunj A Dadhania
@ 2017-10-02  3:02       ` Alexey Kardashevskiy
  2017-10-03  6:07         ` David Gibson
  0 siblings, 1 reply; 27+ messages in thread
From: Alexey Kardashevskiy @ 2017-10-02  3:02 UTC (permalink / raw)
  To: Nikunj A Dadhania, David Gibson, Aravinda Prasad
  Cc: benh, mahesh, qemu-devel, qemu-ppc, paulus, sam.bobroff

On 29/09/17 21:52, Nikunj A Dadhania wrote:
> David Gibson <david@gibson.dropbear.id.au> writes:
> 
>> On Thu, Sep 28, 2017 at 04:07:38PM +0530, Aravinda Prasad wrote:
>>> Receive updates from SLOF about the updated rtas-base.
>>> A separate patch for SLOF [1] (commit f9a60de3) adds
>>> functionality to invoke a private HCALL whenever OS
>>> issues instantiate-rtas with a new rtas-base.
>>>
>>> This is required as QEMU needs to know the updated rtas-base
>>> as it allocates error reporting structure in RTAS space upon
>>> a machine check exception.
>>>
>>> [1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html
>>>
>>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>>
>> Ao I acked this earlier, but I've now realized there might be some
>> connection between this and discussions taking place elsewhere about
>> qemu not knowing what SLOF does with the device tree.
>>
>> At what point will SLOF call the UPDATE_RTAS hcall?  I'm guessing at
>> the time of instantiate-rtas, is that right?
> 
> The call happens from
> arch/powerpc/kernel/prom_init.c:prom_instantiate_rtas() and after that
> linux kernel makes two entries in the DT
> 
> ....
>        if (call_prom_ret("call-method", 3, 2, &entry,
>                           ADDR("instantiate-rtas"),
>                           rtas_inst, base) != 0
>             || entry == 0) {
>                 prom_printf(" failed\n");
>                 return;
>         }
>         prom_printf(" done\n");
> 
>         reserve_mem(base, size);
> 
>         val = cpu_to_be32(base);
>         prom_setprop(rtas_node, "/rtas", "linux,rtas-base",
>                      &val, sizeof(val));
>         val = cpu_to_be32(entry);
>         prom_setprop(rtas_node, "/rtas", "linux,rtas-entry",
>                      &val, sizeof(val));
> ....
> 
> Quiesce is called after this. 
> 
>> Does SLOF put the RTAS blob address in its internal device tree, or
>> does it only pass it to the guest via the return parameters from
>> instantiate-rtas?
> 
> Entry was made to the DT by linux kernel prom_init code, will this be
> visible to QEMU?

With my recent SLOF FDT patch - yes:

aik@fstn1-p1:~$ grep rtas dbg.dts
	rtas {
		linux,rtas-entry = <0x2fff0000>;
		linux,rtas-base = <0x2fff0000>;
[...]


-- 
Alexey

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 2/6] ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls
  2017-09-29  6:49   ` David Gibson
@ 2017-10-03  5:51     ` Aravinda Prasad
  2017-10-03  6:09       ` David Gibson
  0 siblings, 1 reply; 27+ messages in thread
From: Aravinda Prasad @ 2017-10-03  5:51 UTC (permalink / raw)
  To: David Gibson; +Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff



On Friday 29 September 2017 12:19 PM, David Gibson wrote:
> I don't suppose there's a way to stop your mailer from inserting
> spaces after the commas in the subject line,

Not sure how to stop the mailer from doing this as I don't have any
spaces in the subject line of my actual patch.

> 
> 
> On Thu, Sep 28, 2017 at 04:07:48PM +0530, Aravinda Prasad wrote:
>> This patch adds support in QEMU to handle "ibm,nmi-register"
>> and "ibm,nmi-interlock" RTAS calls.
>>
>> The machine check notification address is saved when the
>> OS issues "ibm,nmi-register" RTAS call.
>>
>> This patch also handles the case when multiple processors
>> experience machine check at or about the same time by
>> handling "ibm,nmi-interlock" call. In such cases, as per
>> PAPR, subsequent processors serialize waiting for the first
>> processor to issue the "ibm,nmi-interlock" call. The second
>> processor waits till the first processor, which also
>> received a machine check error, is done reading the error
>> log. The first processor issues "ibm,nmi-interlock" call
>> when the error log is consumed. This patch implements the
>> releasing part of the error-log while subsequent patch
>> (which builds error log) handles the locking part.
>>
>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>> ---
>>  hw/ppc/spapr.c         |    8 ++++++++
>>  hw/ppc/spapr_rtas.c    |   35 +++++++++++++++++++++++++++++++++++
>>  include/hw/ppc/spapr.h |   11 ++++++++++-
>>  3 files changed, 53 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
>> index 5deae30..d568ea6 100644
>> --- a/hw/ppc/spapr.c
>> +++ b/hw/ppc/spapr.c
>> @@ -1477,6 +1477,11 @@ static void ppc_spapr_reset(void)
>>      first_ppc_cpu->env.nip = SPAPR_ENTRY_POINT;
>>  
>>      spapr->cas_reboot = false;
>> +
>> +    spapr->mc_status = -1;
>> +    spapr->guest_machine_check_addr = 0;
> 
> You should probably use -1 as the default for this - strictly speaking
> the guest could legitimately choose to have it's machine check
> processing code at 0, though it would be a strange choice.

Sure.

> 
>> +    qemu_cond_destroy(&spapr->mc_delivery_cond);
>> +    qemu_cond_init(&spapr->mc_delivery_cond);
> 
> What will this do if one of the vcpus is waiting on the condition
> variable right now?  I suspect you're going to need to first wake up
> the queue, and marshal any blocked vcpus back into dead mode instead
> of this.

Do we need to wake-up the queue as the system, anyway, is being reset?

> 
>>  }
>>  
>>  static void spapr_create_nvram(sPAPRMachineState *spapr)
>> @@ -2598,6 +2603,9 @@ static void ppc_spapr_init(MachineState *machine)
>>  
>>          kvmppc_spapr_enable_inkernel_multitce();
>>      }
>> +
>> +    spapr->mc_status = -1;
>> +    qemu_cond_init(&spapr->mc_delivery_cond);
>>  }
>>  
>>  static int spapr_kvm_type(const char *vm_type)
>> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
>> index cdf0b60..08e9a5e 100644
>> --- a/hw/ppc/spapr_rtas.c
>> +++ b/hw/ppc/spapr_rtas.c
>> @@ -348,6 +348,37 @@ static void rtas_get_power_level(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>>      rtas_st(rets, 1, 100);
>>  }
>>  
>> +static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
>> +                                  sPAPRMachineState *spapr,
>> +                                  uint32_t token, uint32_t nargs,
>> +                                  target_ulong args,
>> +                                  uint32_t nret, target_ulong rets)
>> +{
>> +    spapr->guest_machine_check_addr = rtas_ld(args, 1);
>> +    rtas_st(rets, 0, RTAS_OUT_SUCCESS);
>> +}
>> +
>> +static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu,
>> +                                   sPAPRMachineState *spapr,
>> +                                   uint32_t token, uint32_t nargs,
>> +                                   target_ulong args,
>> +                                   uint32_t nret, target_ulong rets)
>> +{
>> +    if (!spapr->guest_machine_check_addr) {
>> +        /* NMI register not called */
>> +        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
>> +    } else {
>> +        /*
>> +         * VCPU issuing "ibm,nmi-interlock" is done with NMI handling,
>> +         * hence unset mc_status.
>> +         */
>> +        spapr->mc_status = -1;
>> +        qemu_cond_signal(&spapr->mc_delivery_cond);
>> +        rtas_st(rets, 0, RTAS_OUT_SUCCESS);
>> +    }
>> +}
>> +
>> +
>>  static struct rtas_call {
>>      const char *name;
>>      spapr_rtas_fn fn;
>> @@ -489,6 +520,10 @@ static void core_rtas_register_types(void)
>>                          rtas_set_power_level);
>>      spapr_rtas_register(RTAS_GET_POWER_LEVEL, "get-power-level",
>>                          rtas_get_power_level);
>> +    spapr_rtas_register(RTAS_IBM_NMI_REGISTER, "ibm,nmi-register",
>> +                        rtas_ibm_nmi_register);
>> +    spapr_rtas_register(RTAS_IBM_NMI_INTERLOCK, "ibm,nmi-interlock",
>> +                        rtas_ibm_nmi_interlock);
>>  }
>>  
>>  type_init(core_rtas_register_types)
>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>> index b395aa7..28b6e2e 100644
>> --- a/include/hw/ppc/spapr.h
>> +++ b/include/hw/ppc/spapr.h
>> @@ -124,6 +124,13 @@ struct sPAPRMachineState {
>>       * occurs during the unplug process. */
>>      QTAILQ_HEAD(, sPAPRDIMMState) pending_dimm_unplugs;
>>  
>> +    /* State related to "ibm,nmi-register" and "ibm,nmi-interlock" calls */
>> +    target_ulong guest_machine_check_addr;
> 
> You need to migrate this.  This is separate and simpler from the
> problems of migrating during machine check handling - at the moment if
> the guest calls nmi-register, then you migrate, then a machine check
> is triggered you will have lost the information on how to handle it
> properly.

I missed it. Will include.

Regards,
Aravinda

> 
> 
>> +    /* mc_status is set to -1 if mc is not in progress, else is set to the CPU
>> +     * handling the mc. */
>> +    int mc_status;
>> +    QemuCond mc_delivery_cond;
>> +
>>      /*< public >*/
>>      char *kvm_type;
>>      MemoryHotplugState hotplug_memory;
>> @@ -520,8 +527,10 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
>>  #define RTAS_IBM_CREATE_PE_DMA_WINDOW           (RTAS_TOKEN_BASE + 0x27)
>>  #define RTAS_IBM_REMOVE_PE_DMA_WINDOW           (RTAS_TOKEN_BASE + 0x28)
>>  #define RTAS_IBM_RESET_PE_DMA_WINDOW            (RTAS_TOKEN_BASE + 0x29)
>> +#define RTAS_IBM_NMI_REGISTER                   (RTAS_TOKEN_BASE + 0x2A)
>> +#define RTAS_IBM_NMI_INTERLOCK                  (RTAS_TOKEN_BASE + 0x2B)
>>  
>> -#define RTAS_TOKEN_MAX                          (RTAS_TOKEN_BASE + 0x2A)
>> +#define RTAS_TOKEN_MAX                          (RTAS_TOKEN_BASE + 0x2C)
>>  
>>  /* RTAS ibm,get-system-parameter token values */
>>  #define RTAS_SYSPARM_SPLPAR_CHARACTERISTICS      20
>>
> 

-- 
Regards,
Aravinda

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-09-29  6:17   ` David Gibson
  2017-09-29 11:52     ` [Qemu-devel] [Qemu-ppc] " Nikunj A Dadhania
@ 2017-10-03  5:56     ` Aravinda Prasad
  1 sibling, 0 replies; 27+ messages in thread
From: Aravinda Prasad @ 2017-10-03  5:56 UTC (permalink / raw)
  To: David Gibson; +Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff



On Friday 29 September 2017 11:47 AM, David Gibson wrote:
> On Thu, Sep 28, 2017 at 04:07:38PM +0530, Aravinda Prasad wrote:
>> Receive updates from SLOF about the updated rtas-base.
>> A separate patch for SLOF [1] (commit f9a60de3) adds
>> functionality to invoke a private HCALL whenever OS
>> issues instantiate-rtas with a new rtas-base.
>>
>> This is required as QEMU needs to know the updated rtas-base
>> as it allocates error reporting structure in RTAS space upon
>> a machine check exception.
>>
>> [1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html
>>
>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> 
> Ao I acked this earlier, but I've now realized there might be some
> connection between this and discussions taking place elsewhere about
> qemu not knowing what SLOF does with the device tree.
> 
> At what point will SLOF call the UPDATE_RTAS hcall?  I'm guessing at
> the time of instantiate-rtas, is that right?
> 
> Does SLOF put the RTAS blob address in its internal device tree, or
> does it only pass it to the guest via the return parameters from
> instantiate-rtas?

The new set of patches posted by Alexey exports RTAS address via device
tree to QEMU. Once this is in, I will remove this patch and rebase the
rest of the patches.

Regards,
Aravinda

> 
>> ---
>>  hw/ppc/spapr.c         |   11 +++++++++++
>>  hw/ppc/spapr_hcall.c   |    8 ++++++++
>>  include/hw/ppc/spapr.h |    4 +++-
>>  3 files changed, 22 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
>> index ff87f15..5deae30 100644
>> --- a/hw/ppc/spapr.c
>> +++ b/hw/ppc/spapr.c
>> @@ -1675,6 +1675,16 @@ static const VMStateDescription vmstate_spapr_patb_entry = {
>>      },
>>  };
>>  
>> +static const VMStateDescription vmstate_spapr_rtas_addr = {
>> +    .name = "spapr_rtas_addr",
>> +    .version_id = 1,
>> +    .minimum_version_id = 1,
>> +    .fields = (VMStateField[]) {
>> +        VMSTATE_UINT64(rtas_addr, sPAPRMachineState),
>> +        VMSTATE_END_OF_LIST()
>> +    },
>> +};
>> +
>>  static const VMStateDescription vmstate_spapr = {
>>      .name = "spapr",
>>      .version_id = 3,
>> @@ -1694,6 +1704,7 @@ static const VMStateDescription vmstate_spapr = {
>>          &vmstate_spapr_ov5_cas,
>>          &vmstate_spapr_patb_entry,
>>          &vmstate_spapr_pending_events,
>> +        &vmstate_spapr_rtas_addr,
>>          NULL
>>      }
>>  };
>> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
>> index 8d72bb7..c15a93c 100644
>> --- a/hw/ppc/spapr_hcall.c
>> +++ b/hw/ppc/spapr_hcall.c
>> @@ -1088,6 +1088,13 @@ static target_ulong h_rtas(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>>                             nret, rtas_r3 + 12 + 4*nargs);
>>  }
>>  
>> +static target_ulong h_rtas_update(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>> +                                  target_ulong opcode, target_ulong *args)
>> +{
>> +    spapr->rtas_addr = args[0];
>> +    return 0;
>> +}
>> +
>>  static target_ulong h_logical_load(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>>                                     target_ulong opcode, target_ulong *args)
>>  {
>> @@ -1750,6 +1757,7 @@ static void hypercall_register_types(void)
>>  
>>      /* qemu/KVM-PPC specific hcalls */
>>      spapr_register_hypercall(KVMPPC_H_RTAS, h_rtas);
>> +    spapr_register_hypercall(KVMPPC_H_RTAS_UPDATE, h_rtas_update);
>>  
>>      /* ibm,client-architecture-support support */
>>      spapr_register_hypercall(KVMPPC_H_CAS, h_client_architecture_support);
>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>> index c1b365f..b395aa7 100644
>> --- a/include/hw/ppc/spapr.h
>> +++ b/include/hw/ppc/spapr.h
>> @@ -90,6 +90,7 @@ struct sPAPRMachineState {
>>  
>>      hwaddr rma_size;
>>      int vrma_adjust;
>> +    hwaddr rtas_addr;
>>      ssize_t rtas_size;
>>      void *rtas_blob;
>>      long kernel_size;
>> @@ -400,7 +401,8 @@ struct sPAPRMachineState {
>>  #define KVMPPC_H_LOGICAL_MEMOP  (KVMPPC_HCALL_BASE + 0x1)
>>  /* Client Architecture support */
>>  #define KVMPPC_H_CAS            (KVMPPC_HCALL_BASE + 0x2)
>> -#define KVMPPC_HCALL_MAX        KVMPPC_H_CAS
>> +#define KVMPPC_H_RTAS_UPDATE    (KVMPPC_HCALL_BASE + 0x3)
>> +#define KVMPPC_HCALL_MAX        KVMPPC_H_RTAS_UPDATE
>>  
>>  typedef struct sPAPRDeviceTreeUpdateHeader {
>>      uint32_t version_id;
>>
> 

-- 
Regards,
Aravinda

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-10-02  3:02       ` Alexey Kardashevskiy
@ 2017-10-03  6:07         ` David Gibson
  2017-10-03  9:12           ` Alexey Kardashevskiy
  0 siblings, 1 reply; 27+ messages in thread
From: David Gibson @ 2017-10-03  6:07 UTC (permalink / raw)
  To: Alexey Kardashevskiy
  Cc: Nikunj A Dadhania, Aravinda Prasad, benh, mahesh, qemu-devel,
	qemu-ppc, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 3343 bytes --]

On Mon, Oct 02, 2017 at 02:02:19PM +1100, Alexey Kardashevskiy wrote:
> On 29/09/17 21:52, Nikunj A Dadhania wrote:
> > David Gibson <david@gibson.dropbear.id.au> writes:
> > 
> >> On Thu, Sep 28, 2017 at 04:07:38PM +0530, Aravinda Prasad wrote:
> >>> Receive updates from SLOF about the updated rtas-base.
> >>> A separate patch for SLOF [1] (commit f9a60de3) adds
> >>> functionality to invoke a private HCALL whenever OS
> >>> issues instantiate-rtas with a new rtas-base.
> >>>
> >>> This is required as QEMU needs to know the updated rtas-base
> >>> as it allocates error reporting structure in RTAS space upon
> >>> a machine check exception.
> >>>
> >>> [1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html
> >>>
> >>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> >>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> >>
> >> Ao I acked this earlier, but I've now realized there might be some
> >> connection between this and discussions taking place elsewhere about
> >> qemu not knowing what SLOF does with the device tree.
> >>
> >> At what point will SLOF call the UPDATE_RTAS hcall?  I'm guessing at
> >> the time of instantiate-rtas, is that right?
> > 
> > The call happens from
> > arch/powerpc/kernel/prom_init.c:prom_instantiate_rtas() and after that
> > linux kernel makes two entries in the DT
> > 
> > ....
> >        if (call_prom_ret("call-method", 3, 2, &entry,
> >                           ADDR("instantiate-rtas"),
> >                           rtas_inst, base) != 0
> >             || entry == 0) {
> >                 prom_printf(" failed\n");
> >                 return;
> >         }
> >         prom_printf(" done\n");
> > 
> >         reserve_mem(base, size);
> > 
> >         val = cpu_to_be32(base);
> >         prom_setprop(rtas_node, "/rtas", "linux,rtas-base",
> >                      &val, sizeof(val));
> >         val = cpu_to_be32(entry);
> >         prom_setprop(rtas_node, "/rtas", "linux,rtas-entry",
> >                      &val, sizeof(val));
> > ....
> > 
> > Quiesce is called after this. 
> > 
> >> Does SLOF put the RTAS blob address in its internal device tree, or
> >> does it only pass it to the guest via the return parameters from
> >> instantiate-rtas?
> > 
> > Entry was made to the DT by linux kernel prom_init code, will this be
> > visible to QEMU?
> 
> With my recent SLOF FDT patch - yes:
> 
> aik@fstn1-p1:~$ grep rtas dbg.dts
> 	rtas {
> 		linux,rtas-entry = <0x2fff0000>;
> 		linux,rtas-base = <0x2fff0000>;
> [...]

Ah.. except.. isn't that relying on the kernel putting the RTAS
address into the device tree before it calls quiesce and kills SLOF?

The SLOF image is bundled in with qemu, so it's ok for us to rely on
its behaviour up to a point.  It's not really ok for us to rely on the
kernel's behaviour here, unless that behaviour is mandated by PAPR,
which this isn't.

So, I think we either need to have *SLOF* update the device tree with
that address at instantiate-rtas time, or we'll need to resurrect
Aravinda's original UPDATE_RTAS hcall.

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 2/6] ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls
  2017-10-03  5:51     ` Aravinda Prasad
@ 2017-10-03  6:09       ` David Gibson
  0 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2017-10-03  6:09 UTC (permalink / raw)
  To: Aravinda Prasad
  Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 7858 bytes --]

On Tue, Oct 03, 2017 at 11:21:27AM +0530, Aravinda Prasad wrote:
> 
> 
> On Friday 29 September 2017 12:19 PM, David Gibson wrote:
> > I don't suppose there's a way to stop your mailer from inserting
> > spaces after the commas in the subject line,
> 
> Not sure how to stop the mailer from doing this as I don't have any
> spaces in the subject line of my actual patch.
> 
> > 
> > 
> > On Thu, Sep 28, 2017 at 04:07:48PM +0530, Aravinda Prasad wrote:
> >> This patch adds support in QEMU to handle "ibm,nmi-register"
> >> and "ibm,nmi-interlock" RTAS calls.
> >>
> >> The machine check notification address is saved when the
> >> OS issues "ibm,nmi-register" RTAS call.
> >>
> >> This patch also handles the case when multiple processors
> >> experience machine check at or about the same time by
> >> handling "ibm,nmi-interlock" call. In such cases, as per
> >> PAPR, subsequent processors serialize waiting for the first
> >> processor to issue the "ibm,nmi-interlock" call. The second
> >> processor waits till the first processor, which also
> >> received a machine check error, is done reading the error
> >> log. The first processor issues "ibm,nmi-interlock" call
> >> when the error log is consumed. This patch implements the
> >> releasing part of the error-log while subsequent patch
> >> (which builds error log) handles the locking part.
> >>
> >> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> >> ---
> >>  hw/ppc/spapr.c         |    8 ++++++++
> >>  hw/ppc/spapr_rtas.c    |   35 +++++++++++++++++++++++++++++++++++
> >>  include/hw/ppc/spapr.h |   11 ++++++++++-
> >>  3 files changed, 53 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> >> index 5deae30..d568ea6 100644
> >> --- a/hw/ppc/spapr.c
> >> +++ b/hw/ppc/spapr.c
> >> @@ -1477,6 +1477,11 @@ static void ppc_spapr_reset(void)
> >>      first_ppc_cpu->env.nip = SPAPR_ENTRY_POINT;
> >>  
> >>      spapr->cas_reboot = false;
> >> +
> >> +    spapr->mc_status = -1;
> >> +    spapr->guest_machine_check_addr = 0;
> > 
> > You should probably use -1 as the default for this - strictly speaking
> > the guest could legitimately choose to have it's machine check
> > processing code at 0, though it would be a strange choice.
> 
> Sure.
> 
> > 
> >> +    qemu_cond_destroy(&spapr->mc_delivery_cond);
> >> +    qemu_cond_init(&spapr->mc_delivery_cond);
> > 
> > What will this do if one of the vcpus is waiting on the condition
> > variable right now?  I suspect you're going to need to first wake up
> > the queue, and marshal any blocked vcpus back into dead mode instead
> > of this.
> 
> Do we need to wake-up the queue as the system, anyway, is being
> reset?

The _virtual_ system is being reset.  These wait queues are in the
qemu process and exist outside the virtual system.  They won't be
reset with the virtual system unless we write the code to make them be
reset.


> 
> > 
> >>  }
> >>  
> >>  static void spapr_create_nvram(sPAPRMachineState *spapr)
> >> @@ -2598,6 +2603,9 @@ static void ppc_spapr_init(MachineState *machine)
> >>  
> >>          kvmppc_spapr_enable_inkernel_multitce();
> >>      }
> >> +
> >> +    spapr->mc_status = -1;
> >> +    qemu_cond_init(&spapr->mc_delivery_cond);
> >>  }
> >>  
> >>  static int spapr_kvm_type(const char *vm_type)
> >> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
> >> index cdf0b60..08e9a5e 100644
> >> --- a/hw/ppc/spapr_rtas.c
> >> +++ b/hw/ppc/spapr_rtas.c
> >> @@ -348,6 +348,37 @@ static void rtas_get_power_level(PowerPCCPU *cpu, sPAPRMachineState *spapr,
> >>      rtas_st(rets, 1, 100);
> >>  }
> >>  
> >> +static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
> >> +                                  sPAPRMachineState *spapr,
> >> +                                  uint32_t token, uint32_t nargs,
> >> +                                  target_ulong args,
> >> +                                  uint32_t nret, target_ulong rets)
> >> +{
> >> +    spapr->guest_machine_check_addr = rtas_ld(args, 1);
> >> +    rtas_st(rets, 0, RTAS_OUT_SUCCESS);
> >> +}
> >> +
> >> +static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu,
> >> +                                   sPAPRMachineState *spapr,
> >> +                                   uint32_t token, uint32_t nargs,
> >> +                                   target_ulong args,
> >> +                                   uint32_t nret, target_ulong rets)
> >> +{
> >> +    if (!spapr->guest_machine_check_addr) {
> >> +        /* NMI register not called */
> >> +        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
> >> +    } else {
> >> +        /*
> >> +         * VCPU issuing "ibm,nmi-interlock" is done with NMI handling,
> >> +         * hence unset mc_status.
> >> +         */
> >> +        spapr->mc_status = -1;
> >> +        qemu_cond_signal(&spapr->mc_delivery_cond);
> >> +        rtas_st(rets, 0, RTAS_OUT_SUCCESS);
> >> +    }
> >> +}
> >> +
> >> +
> >>  static struct rtas_call {
> >>      const char *name;
> >>      spapr_rtas_fn fn;
> >> @@ -489,6 +520,10 @@ static void core_rtas_register_types(void)
> >>                          rtas_set_power_level);
> >>      spapr_rtas_register(RTAS_GET_POWER_LEVEL, "get-power-level",
> >>                          rtas_get_power_level);
> >> +    spapr_rtas_register(RTAS_IBM_NMI_REGISTER, "ibm,nmi-register",
> >> +                        rtas_ibm_nmi_register);
> >> +    spapr_rtas_register(RTAS_IBM_NMI_INTERLOCK, "ibm,nmi-interlock",
> >> +                        rtas_ibm_nmi_interlock);
> >>  }
> >>  
> >>  type_init(core_rtas_register_types)
> >> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> >> index b395aa7..28b6e2e 100644
> >> --- a/include/hw/ppc/spapr.h
> >> +++ b/include/hw/ppc/spapr.h
> >> @@ -124,6 +124,13 @@ struct sPAPRMachineState {
> >>       * occurs during the unplug process. */
> >>      QTAILQ_HEAD(, sPAPRDIMMState) pending_dimm_unplugs;
> >>  
> >> +    /* State related to "ibm,nmi-register" and "ibm,nmi-interlock" calls */
> >> +    target_ulong guest_machine_check_addr;
> > 
> > You need to migrate this.  This is separate and simpler from the
> > problems of migrating during machine check handling - at the moment if
> > the guest calls nmi-register, then you migrate, then a machine check
> > is triggered you will have lost the information on how to handle it
> > properly.
> 
> I missed it. Will include.
> 
> Regards,
> Aravinda
> 
> > 
> > 
> >> +    /* mc_status is set to -1 if mc is not in progress, else is set to the CPU
> >> +     * handling the mc. */
> >> +    int mc_status;
> >> +    QemuCond mc_delivery_cond;
> >> +
> >>      /*< public >*/
> >>      char *kvm_type;
> >>      MemoryHotplugState hotplug_memory;
> >> @@ -520,8 +527,10 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
> >>  #define RTAS_IBM_CREATE_PE_DMA_WINDOW           (RTAS_TOKEN_BASE + 0x27)
> >>  #define RTAS_IBM_REMOVE_PE_DMA_WINDOW           (RTAS_TOKEN_BASE + 0x28)
> >>  #define RTAS_IBM_RESET_PE_DMA_WINDOW            (RTAS_TOKEN_BASE + 0x29)
> >> +#define RTAS_IBM_NMI_REGISTER                   (RTAS_TOKEN_BASE + 0x2A)
> >> +#define RTAS_IBM_NMI_INTERLOCK                  (RTAS_TOKEN_BASE + 0x2B)
> >>  
> >> -#define RTAS_TOKEN_MAX                          (RTAS_TOKEN_BASE + 0x2A)
> >> +#define RTAS_TOKEN_MAX                          (RTAS_TOKEN_BASE + 0x2C)
> >>  
> >>  /* RTAS ibm,get-system-parameter token values */
> >>  #define RTAS_SYSPARM_SPLPAR_CHARACTERISTICS      20
> >>
> > 
> 

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-10-03  6:07         ` David Gibson
@ 2017-10-03  9:12           ` Alexey Kardashevskiy
  2017-10-04  3:32             ` Alexey Kardashevskiy
  0 siblings, 1 reply; 27+ messages in thread
From: Alexey Kardashevskiy @ 2017-10-03  9:12 UTC (permalink / raw)
  To: David Gibson
  Cc: Nikunj A Dadhania, Aravinda Prasad, benh, mahesh, qemu-devel,
	qemu-ppc, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 3294 bytes --]

On 03/10/17 17:07, David Gibson wrote:
> On Mon, Oct 02, 2017 at 02:02:19PM +1100, Alexey Kardashevskiy wrote:
>> On 29/09/17 21:52, Nikunj A Dadhania wrote:
>>> David Gibson <david@gibson.dropbear.id.au> writes:
>>>
>>>> On Thu, Sep 28, 2017 at 04:07:38PM +0530, Aravinda Prasad wrote:
>>>>> Receive updates from SLOF about the updated rtas-base.
>>>>> A separate patch for SLOF [1] (commit f9a60de3) adds
>>>>> functionality to invoke a private HCALL whenever OS
>>>>> issues instantiate-rtas with a new rtas-base.
>>>>>
>>>>> This is required as QEMU needs to know the updated rtas-base
>>>>> as it allocates error reporting structure in RTAS space upon
>>>>> a machine check exception.
>>>>>
>>>>> [1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html
>>>>>
>>>>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>>>>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>>>>
>>>> Ao I acked this earlier, but I've now realized there might be some
>>>> connection between this and discussions taking place elsewhere about
>>>> qemu not knowing what SLOF does with the device tree.
>>>>
>>>> At what point will SLOF call the UPDATE_RTAS hcall?  I'm guessing at
>>>> the time of instantiate-rtas, is that right?
>>>
>>> The call happens from
>>> arch/powerpc/kernel/prom_init.c:prom_instantiate_rtas() and after that
>>> linux kernel makes two entries in the DT
>>>
>>> ....
>>>        if (call_prom_ret("call-method", 3, 2, &entry,
>>>                           ADDR("instantiate-rtas"),
>>>                           rtas_inst, base) != 0
>>>             || entry == 0) {
>>>                 prom_printf(" failed\n");
>>>                 return;
>>>         }
>>>         prom_printf(" done\n");
>>>
>>>         reserve_mem(base, size);
>>>
>>>         val = cpu_to_be32(base);
>>>         prom_setprop(rtas_node, "/rtas", "linux,rtas-base",
>>>                      &val, sizeof(val));
>>>         val = cpu_to_be32(entry);
>>>         prom_setprop(rtas_node, "/rtas", "linux,rtas-entry",
>>>                      &val, sizeof(val));
>>> ....
>>>
>>> Quiesce is called after this. 
>>>
>>>> Does SLOF put the RTAS blob address in its internal device tree, or
>>>> does it only pass it to the guest via the return parameters from
>>>> instantiate-rtas?
>>>
>>> Entry was made to the DT by linux kernel prom_init code, will this be
>>> visible to QEMU?
>>
>> With my recent SLOF FDT patch - yes:
>>
>> aik@fstn1-p1:~$ grep rtas dbg.dts
>> 	rtas {
>> 		linux,rtas-entry = <0x2fff0000>;
>> 		linux,rtas-base = <0x2fff0000>;
>> [...]
> 
> Ah.. except.. isn't that relying on the kernel putting the RTAS
> address into the device tree before it calls quiesce and kills SLOF?
> 
> The SLOF image is bundled in with qemu, so it's ok for us to rely on
> its behaviour up to a point.  It's not really ok for us to rely on the
> kernel's behaviour here, unless that behaviour is mandated by PAPR,
> which this isn't.

Fair point.

> So, I think we either need to have *SLOF* update the device tree with
> that address at instantiate-rtas time,

I can do that, in a separate patch.

> or we'll need to resurrect
> Aravinda's original UPDATE_RTAS hcall.





-- 
Alexey


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 839 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 4/6] target/ppc: Handle NMI guest exit
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 4/6] target/ppc: Handle NMI guest exit Aravinda Prasad
@ 2017-10-04  1:29   ` David Gibson
  2017-10-08  8:59     ` Aravinda Prasad
  0 siblings, 1 reply; 27+ messages in thread
From: David Gibson @ 2017-10-04  1:29 UTC (permalink / raw)
  To: Aravinda Prasad
  Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 11722 bytes --]

On Thu, Sep 28, 2017 at 04:08:10PM +0530, Aravinda Prasad wrote:
> Memory error such as bit flips that cannot be corrected
> by hardware are passed on to the kernel for handling.
> If the memory address in error belongs to guest then
> the guest kernel is responsible for taking suitable action.
> Patch [1] enhances KVM to exit guest with exit reason
> set to KVM_EXIT_NMI in such cases.
> 
> This patch handles KVM_EXIT_NMI exit. If the guest OS
> has registered the machine check handling routine by
> calling "ibm,nmi-register", then the handler builds
> the error log and invokes the registered handler else
> invokes the handler at 0x200.
> 
> Note that FWNMI handles synchronous machine check exceptions
> triggered by the hardware and hence we do not extend
> such support to the "nmi" command available in the QEMU
> monitor. Hence, "nmi" command from the monitor will
> always go through 0x200 vector.
> 
> [1] https://www.spinics.net/lists/kvm-ppc/msg12637.html
> 	(e20bbd3d and related commits)

What does happen on KVM if an asynchronous machine check exception
occurs while in the guest?  Or under PowerVM for that matter.

> 
> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
> ---
>  hw/ppc/spapr.c         |    4 +++
>  hw/ppc/spapr_events.c  |   62 ++++++++++++++++++++++++++++++++++++++++++++++++
>  include/hw/ppc/spapr.h |    6 +++++
>  target/ppc/kvm.c       |   62 ++++++++++++++++++++++++++++++++++++++++++++++++
>  target/ppc/kvm_ppc.h   |   14 +++++++++++
>  5 files changed, 148 insertions(+)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index d568ea6..7780434 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -2453,6 +2453,10 @@ static void ppc_spapr_init(MachineState *machine)
>          error_report("Could not get size of LPAR rtas '%s'", filename);
>          exit(1);
>      }
> +
> +    /* Resize blob to accommodate error log. */
> +    spapr->rtas_size = spapr_get_rtas_size();
> +
>      spapr->rtas_blob = g_malloc(spapr->rtas_size);
>      if (load_image_size(filename, spapr->rtas_blob, spapr->rtas_size) < 0) {
>          error_report("Could not load LPAR rtas '%s'", filename);
> diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
> index e377fc7..ac93a7b 100644
> --- a/hw/ppc/spapr_events.c
> +++ b/hw/ppc/spapr_events.c
> @@ -41,6 +41,7 @@
>  #include "qemu/bcd.h"
>  #include "hw/ppc/spapr_ovec.h"
>  #include <libfdt.h>
> +#include <linux/kvm.h>
>  
>  #define RTAS_LOG_VERSION_MASK                   0xff000000
>  #define   RTAS_LOG_VERSION_6                    0x06000000
> @@ -174,6 +175,22 @@ struct epow_extended_log {
>      struct rtas_event_log_v6_epow epow;
>  } QEMU_PACKED;
>  
> +/*
> + * Data format in RTAS Blob
> + *
> + * This structure contains error information related to Machine
> + * Check exception. This is filled up and copied to rtas blob
> + * upon machine check exception. The address of rtas blob is
> + * passed on to OS registered machine check notification
> + * routines upon machine check exception.
> + */
> +struct rtas_event_log_mce {
> +    target_ulong r3;
> +    struct rtas_error_log rtas_error_log;
> +    unsigned char   buffer[1];      /* Start of extended log */

I believe we allow C99 extensions in qemu, so you can use buffer[], a
C99 flexible array member, rather than the length 1 hack.

> +} QEMU_PACKED;
> +
> +
>  union drc_identifier {
>      uint32_t index;
>      uint32_t count;
> @@ -623,6 +640,51 @@ void spapr_hotplug_req_remove_by_count_indexed(sPAPRDRConnectorType drc_type,
>                              RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, &drc_id);
>  }
>  
> +ssize_t spapr_get_rtas_size(void)
> +{
> +    return RTAS_ERRLOG_OFFSET + sizeof(struct rtas_event_log_mce);

Erm.. because of the definition of rtas_event_log_mce, this only
allows for 1 byte of extended log buffer.  That doesn't seem right.

> +}
> +
> +target_ulong spapr_mce_req_event(target_ulong r3, hwaddr rtas_addr,
> +                                 uint16_t flags, bool err_type, bool le)

err_tpe isn't a very informative name for a boolean.  'uncorrectable'
would be better.  Although, didn't you say only uncorrectable errors
are directed to the guest, so does this have any purpose anyway?

> +{
> +    struct rtas_event_log_mce mc_log;
> +    uint32_t summary;
> +
> +    /* Set error log fields */
> +    mc_log.r3 = r3;
> +
> +    summary = RTAS_LOG_SEVERITY_ERROR_SYNC;
> +
> +    if (flags & KVM_RUN_PPC_NMI_DISP_FULLY_RECOV) {

KVM specific flags shouldn't be here, this translation should happen
in the caller.

> +        summary |= RTAS_LOG_DISPOSITION_FULLY_RECOVERED;
> +    } else {
> +        summary |= RTAS_LOG_DISPOSITION_NOT_RECOVERED;
> +    }
> +
> +    summary |= (RTAS_LOG_INITIATOR_MEMORY | RTAS_LOG_TARGET_MEMORY);
> +
> +    if (err_type) {
> +        summary |= RTAS_LOG_TYPE_ECC_UNCORR;
> +    } else {
> +        summary |= RTAS_LOG_TYPE_ECC_CORR;
> +    }
> +
> +    mc_log.rtas_error_log.summary = cpu_to_be32(summary);
> +
> +    /* Handle all Host/Guest LE/BE combinations */

I'd prefer you do this logic immediate as you store mc_log.r3.  I
really dislike storing values into a structure in the wrong
endianness, even temporarily - it makes it harder for someone reading
the code to discern what endianness the field is supposed to be in.

> +    if (le) {
> +        mc_log.r3 = cpu_to_le64(mc_log.r3);
> +    } else {
> +        mc_log.r3 = cpu_to_be64(mc_log.r3);
> +    }
> +
> +    cpu_physical_memory_write(rtas_addr + RTAS_ERRLOG_OFFSET,
> +                              &mc_log, sizeof(mc_log));
> +
> +    return rtas_addr + RTAS_ERRLOG_OFFSET;
> +}
> +
>  static void check_exception(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>                              uint32_t token, uint32_t nargs,
>                              target_ulong args,
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index 28b6e2e..a75e9cf 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -556,6 +556,9 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
>  #define DIAGNOSTICS_RUN_MODE_IMMEDIATE 2
>  #define DIAGNOSTICS_RUN_MODE_PERIODIC  3
>  
> +/* Offset from rtas-base where error log is placed */
> +#define RTAS_ERRLOG_OFFSET       0x200

Is there any particular rationale for this offset?  Our actual RTAS
code is 20 bytes, much smaller than this.

> +
>  static inline uint64_t ppc64_phys_to_real(uint64_t addr)
>  {
>      return addr & ~0xF000000000000000ULL;
> @@ -675,6 +678,9 @@ int spapr_hpt_shift_for_ramsize(uint64_t ramsize);
>  void spapr_reallocate_hpt(sPAPRMachineState *spapr, int shift,
>                            Error **errp);
>  void spapr_clear_pending_events(sPAPRMachineState *spapr);
> +ssize_t spapr_get_rtas_size(void);
> +target_ulong spapr_mce_req_event(target_ulong r3, hwaddr rtas_addr,
> +                                 uint16_t flags, bool err_type, bool le);
>  
>  /* CPU and LMB DRC release callbacks. */
>  void spapr_core_release(DeviceState *dev);
> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> index 171d3d8..7e4ce02 100644
> --- a/target/ppc/kvm.c
> +++ b/target/ppc/kvm.c
> @@ -1798,6 +1798,11 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
>          ret = 0;
>          break;
>  
> +    case KVM_EXIT_NMI:
> +        DPRINTF("handle NMI exception\n");
> +        ret = kvm_handle_nmi(cpu, run);
> +        break;
> +
>      default:
>          fprintf(stderr, "KVM: unknown exit reason %d\n", run->exit_reason);
>          ret = -1;
> @@ -2746,6 +2751,63 @@ int kvm_arch_msi_data_to_gsi(uint32_t data)
>      return data & 0xffff;
>  }
>  
> +int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run)

Most of the logic here - everything except actually parsing the
relevant fields from kvm_run - should move to spapr_events.  We may
not have any way of generating synchronous MCEs in TCG at the moment,
but we shouldn't exclude the possibility (being able to inject
uncorrectable memory errors in TCG sounds like it could be quite a
useful debugging tool).

> +{
> +    CPUPPCState *env = &cpu->env;
> +    sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
> +    PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
> +    target_ulong msr = 0;
> +    bool type, le;
> +
> +    cpu_synchronize_state(CPU(cpu));
> +
> +    /*
> +     * Properly set bits in MSR before we invoke the handler.
> +     * SRR0/1, DAR and DSISR are properly set by KVM
> +     */
> +    if (!(*pcc->interrupts_big_endian)(cpu)) {
> +        msr |= (1ULL << MSR_LE);
> +    }
> +
> +    if (env->msr && (1ULL << MSR_SF)) {
> +        msr |= (1ULL << MSR_SF);
> +    }
> +
> +    msr |= (1ULL << MSR_ME);
> +    env->msr = msr;
> +
> +    if (!spapr->guest_machine_check_addr) {
> +        /*
> +         * If OS has not registered with "ibm,nmi-register"
> +         * jump to 0x200
> +         */
> +        env->nip = 0x200;

Sure you don't need to set some diagnostic registers in this case?

> +        return 0;
> +    }
> +
> +    while (spapr->mc_status != -1) {
> +        /*
> +         * Check whether the same CPU got machine check error
> +         * while still handling the mc error (i.e., before
> +         * that CPU called "ibm,nmi-interlock"
> +         */
> +        if (spapr->mc_status == cpu->vcpu_id) {
> +            qemu_system_guest_panicked(NULL);
> +        }

I think you need a check to break out of here if the system has been
reset.  Otherwise if you get:

   1. MC generated on CPUs 0 & 1
   2. MC delivered CPU0, CPU1 blocked here
   3. system reset

I think the CPU1 thread will still be stuck here, waiting to get back
to the main loop that would check for the reset.

> +        qemu_cond_wait_iothread(&spapr->mc_delivery_cond);
> +    }
> +
> +    spapr->mc_status = cpu->vcpu_id;
> +
> +    type = !!(env->spr[SPR_DSISR] & P7_DSISR_MC_UE);
> +    le = !!(env->msr & (1ULL << MSR_LE));
> +    env->gpr[3] = spapr_mce_req_event(env->gpr[3], spapr->rtas_addr,
> +                                      run->flags, type, le);
> +    env->nip = spapr->guest_machine_check_addr;
> +
> +    return 0;
> +}
> +
>  int kvmppc_enable_hwrng(void)
>  {
>      if (!kvm_enabled() || !kvm_check_extension(kvm_state, KVM_CAP_PPC_HWRNG)) {
> diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
> index d6be38e..0139dae 100644
> --- a/target/ppc/kvm_ppc.h
> +++ b/target/ppc/kvm_ppc.h
> @@ -71,6 +71,20 @@ bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
>  
>  bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path);
>  
> +int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run);
> +
> +/*
> + * Currently KVM only passes on the uncorrected machine
> + * check memory error to guest. Other machine check errors
> + * such as SLB multi-hit and TLB multi-hit are recovered
> + * in KVM and are not passed on to guest.
> + *
> + * DSISR Bit for uncorrected machine check error. Based
> + * on arch/powerpc/include/asm/mce.h
> + */
> +#define PPC_BIT(bit)                (0x8000000000000000ULL >> bit)
> +#define P7_DSISR_MC_UE              (PPC_BIT(48))  /* P8 too */
> +
>  #else
>  
>  static inline uint32_t kvmppc_get_tbfreq(void)
> 

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 5/6] ppc: spapr: Enable FWNMI capability
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 5/6] ppc: spapr: Enable FWNMI capability Aravinda Prasad
@ 2017-10-04  1:34   ` David Gibson
  2017-10-08  8:26     ` Aravinda Prasad
  0 siblings, 1 reply; 27+ messages in thread
From: David Gibson @ 2017-10-04  1:34 UTC (permalink / raw)
  To: Aravinda Prasad
  Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 4676 bytes --]

On Thu, Sep 28, 2017 at 04:08:21PM +0530, Aravinda Prasad wrote:
> Enable the KVM capability KVM_CAP_PPC_FWNMI so that
> the KVM causes guest exit with NMI as exit reason
> when it encounters a machine check exception on the
> address belonging to a guest. Without this capability
> enabled, KVM redirects machine check exceptions to
> guest's 0x200 vector.
> 
> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> ---
>  hw/ppc/spapr_rtas.c  |   15 +++++++++++++++
>  target/ppc/kvm.c     |   13 +++++++++++++
>  target/ppc/kvm_ppc.h |    6 ++++++
>  3 files changed, 34 insertions(+)
> 
> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
> index 08e9a5e..d017a67 100644
> --- a/hw/ppc/spapr_rtas.c
> +++ b/hw/ppc/spapr_rtas.c
> @@ -46,6 +46,7 @@
>  #include "qemu/cutils.h"
>  #include "trace.h"
>  #include "hw/ppc/fdt.h"
> +#include "kvm_ppc.h"
>  
>  static void rtas_display_character(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>                                     uint32_t token, uint32_t nargs,
> @@ -354,6 +355,20 @@ static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
>                                    target_ulong args,
>                                    uint32_t nret, target_ulong rets)
>  {
> +    int ret;
> +
> +    ret = kvmppc_fwnmi_enable(cpu);

If you're enabling it here, doesn't that mean you need to disable it
on reset?

> +    if (ret == 1) {
> +        rtas_st(rets, 0, RTAS_OUT_NOT_SUPPORTED);
> +        return;
> +    }
> +
> +    if (ret < 0) {
> +        rtas_st(rets, 0, RTAS_OUT_HW_ERROR);
> +        return;
> +    }
> +
>      spapr->guest_machine_check_addr = rtas_ld(args, 1);
>      rtas_st(rets, 0, RTAS_OUT_SUCCESS);
>  }
> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> index 7e4ce02..59b3322 100644
> --- a/target/ppc/kvm.c
> +++ b/target/ppc/kvm.c
> @@ -92,6 +92,7 @@ static int cap_mmu_radix;
>  static int cap_mmu_hash_v3;
>  static int cap_resize_hpt;
>  static int cap_ppc_pvr_compat;
> +static int cap_fwnmi;
>  
>  static uint32_t debug_inst_opcode;
>  
> @@ -150,6 +151,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
>      cap_mmu_radix = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_RADIX);
>      cap_mmu_hash_v3 = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_HASH_V3);
>      cap_resize_hpt = kvm_vm_check_extension(s, KVM_CAP_SPAPR_RESIZE_HPT);
> +    cap_fwnmi = kvm_check_extension(s, KVM_CAP_PPC_FWNMI);
>      /*
>       * Note: setting it to false because there is not such capability
>       * in KVM at this moment.
> @@ -2142,6 +2144,17 @@ void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
>      }
>  }
>  
> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
> +{
> +    CPUState *cs = CPU(cpu);
> +
> +    if (!cap_fwnmi) {
> +        return 1;
> +    }
> +
> +    return kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_FWNMI, 0);

Yeah, this is no good.  It means migration from a host that's fwnmi
capable to one that isn't will be subtly broken.  Instead you need to
make fwnmi capability a machine property.  If the property is
requested and the host kernel doesn't support it, you need to outright
fail, rather than try to fall back.

> +}
> +
>  int kvmppc_smt_threads(void)
>  {
>      return cap_ppc_smt ? cap_ppc_smt : 1;
> diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
> index 0139dae..55b6df2 100644
> --- a/target/ppc/kvm_ppc.h
> +++ b/target/ppc/kvm_ppc.h
> @@ -28,6 +28,7 @@ void kvmppc_enable_clear_ref_mod_hcalls(void);
>  void kvmppc_set_papr(PowerPCCPU *cpu);
>  int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr);
>  void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy);
> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu);
>  int kvmppc_smt_threads(void);
>  void kvmppc_hint_smt_possible(Error **errp);
>  int kvmppc_set_smt_threads(int smt);
> @@ -157,6 +158,11 @@ static inline void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
>  {
>  }
>  
> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
> +{
> +    return 1;

Likewise, this should be available, not banned, on TCG.  I think there
are existing problems with TCG<->KVM migration, but there's no
inherent reason they shouldn't work, so we don't want to introduce
extra reasons they don't.

Even if TCG will never generate fwnmis (for now), it should allow the
guest to register for them.

> +}
> +
>  static inline int kvmppc_smt_threads(void)
>  {
>      return 1;
> 

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 6/6] migration: Block migration while handling machine check
  2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 6/6] migration: Block migration while handling machine check Aravinda Prasad
@ 2017-10-04  1:39   ` David Gibson
  2017-10-08  8:07     ` Aravinda Prasad
  0 siblings, 1 reply; 27+ messages in thread
From: David Gibson @ 2017-10-04  1:39 UTC (permalink / raw)
  To: Aravinda Prasad
  Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 4157 bytes --]

On Thu, Sep 28, 2017 at 04:08:31PM +0530, Aravinda Prasad wrote:
> Block VM migration requests until the machine check
> error handling is complete as (i) these errors are
> specific to the source hardware and is irrelevant on
> the target hardware, (ii) these errors cause data
> corruption and should be handled before migration.
> 
> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> ---
>  hw/ppc/spapr_rtas.c    |    3 +++
>  include/hw/ppc/spapr.h |    2 ++
>  target/ppc/kvm.c       |   17 +++++++++++++++++
>  3 files changed, 22 insertions(+)
> 
> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
> index d017a67..17f6567 100644
> --- a/hw/ppc/spapr_rtas.c
> +++ b/hw/ppc/spapr_rtas.c
> @@ -47,6 +47,7 @@
>  #include "trace.h"
>  #include "hw/ppc/fdt.h"
>  #include "kvm_ppc.h"
> +#include "migration/blocker.h"
>  
>  static void rtas_display_character(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>                                     uint32_t token, uint32_t nargs,
> @@ -390,6 +391,8 @@ static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu,
>          spapr->mc_status = -1;
>          qemu_cond_signal(&spapr->mc_delivery_cond);
>          rtas_st(rets, 0, RTAS_OUT_SUCCESS);
> +        migrate_del_blocker(spapr->migration_blocker);
> +        error_free(spapr->migration_blocker);
>      }
>  }
>  
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index a75e9cf..0890a44 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -7,6 +7,7 @@
>  #include "hw/ppc/spapr_drc.h"
>  #include "hw/mem/pc-dimm.h"
>  #include "hw/ppc/spapr_ovec.h"
> +#include "qapi/error.h"
>  
>  struct VIOsPAPRBus;
>  struct sPAPRPHBState;
> @@ -136,6 +137,7 @@ struct sPAPRMachineState {
>      MemoryHotplugState hotplug_memory;
>  
>      const char *icp_type;
> +    Error *migration_blocker;

This isn't a good name, because it's _specifically_ the fwnmi as a
migration blocker - trying to put another migration blocker in here
would break horribly, because nmi-interlock would clear it regardless.

>  };
>  
>  #define H_SUCCESS         0
> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> index 59b3322..58de7ea 100644
> --- a/target/ppc/kvm.c
> +++ b/target/ppc/kvm.c
> @@ -52,6 +52,7 @@
>  #endif
>  #include "elf.h"
>  #include "sysemu/kvm_int.h"
> +#include "migration/blocker.h"
>  
>  //#define DEBUG_KVM
>  
> @@ -2770,10 +2771,26 @@ int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run)
>      sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
>      PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
>      target_ulong msr = 0;
> +    Error *local_err = NULL;
> +    int ret;
>      bool type, le;
>  
>      cpu_synchronize_state(CPU(cpu));
>  
> +    error_setg(&spapr->migration_blocker,
> +            "Live migration not supported during machine check error handling");

In fact, there's no real reason to generate the error here.  The
error's always the same so you could just create it at startup as a
global and just add/remove it to the block list.

> +    ret = migrate_add_blocker(spapr->migration_blocker, &local_err);
> +    if (ret < 0) {
> +        /*
> +         * We don't want to abort and let the migration to continue. In a
> +         * rare case, the machine check handler will run on the target
> +         * hardware. Though this is not preferable, it is better than aborting

Why is it not preferable?  I mean it's an edge case, but AFAICT it's
still the correct behaviour.

> +         * the migration or killing the VM.
> +         */
> +        error_free(spapr->migration_blocker);
> +        fprintf(stderr, "Warning: Machine check during VM migration\n");

Use error_report(), not fprintf().

> +    }
> +
>      /*
>       * Properly set bits in MSR before we invoke the handler.
>       * SRR0/1, DAR and DSISR are properly set by KVM
> 

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-10-03  9:12           ` Alexey Kardashevskiy
@ 2017-10-04  3:32             ` Alexey Kardashevskiy
  2017-10-04  5:55               ` David Gibson
  0 siblings, 1 reply; 27+ messages in thread
From: Alexey Kardashevskiy @ 2017-10-04  3:32 UTC (permalink / raw)
  To: David Gibson
  Cc: Nikunj A Dadhania, Aravinda Prasad, benh, mahesh, qemu-devel,
	qemu-ppc, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 3841 bytes --]

On 03/10/17 20:12, Alexey Kardashevskiy wrote:
> On 03/10/17 17:07, David Gibson wrote:
>> On Mon, Oct 02, 2017 at 02:02:19PM +1100, Alexey Kardashevskiy wrote:
>>> On 29/09/17 21:52, Nikunj A Dadhania wrote:
>>>> David Gibson <david@gibson.dropbear.id.au> writes:
>>>>
>>>>> On Thu, Sep 28, 2017 at 04:07:38PM +0530, Aravinda Prasad wrote:
>>>>>> Receive updates from SLOF about the updated rtas-base.
>>>>>> A separate patch for SLOF [1] (commit f9a60de3) adds
>>>>>> functionality to invoke a private HCALL whenever OS
>>>>>> issues instantiate-rtas with a new rtas-base.
>>>>>>
>>>>>> This is required as QEMU needs to know the updated rtas-base
>>>>>> as it allocates error reporting structure in RTAS space upon
>>>>>> a machine check exception.
>>>>>>
>>>>>> [1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html
>>>>>>
>>>>>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>>>>>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>>>>>
>>>>> Ao I acked this earlier, but I've now realized there might be some
>>>>> connection between this and discussions taking place elsewhere about
>>>>> qemu not knowing what SLOF does with the device tree.
>>>>>
>>>>> At what point will SLOF call the UPDATE_RTAS hcall?  I'm guessing at
>>>>> the time of instantiate-rtas, is that right?
>>>>
>>>> The call happens from
>>>> arch/powerpc/kernel/prom_init.c:prom_instantiate_rtas() and after that
>>>> linux kernel makes two entries in the DT
>>>>
>>>> ....
>>>>        if (call_prom_ret("call-method", 3, 2, &entry,
>>>>                           ADDR("instantiate-rtas"),
>>>>                           rtas_inst, base) != 0
>>>>             || entry == 0) {
>>>>                 prom_printf(" failed\n");
>>>>                 return;
>>>>         }
>>>>         prom_printf(" done\n");
>>>>
>>>>         reserve_mem(base, size);
>>>>
>>>>         val = cpu_to_be32(base);
>>>>         prom_setprop(rtas_node, "/rtas", "linux,rtas-base",
>>>>                      &val, sizeof(val));
>>>>         val = cpu_to_be32(entry);
>>>>         prom_setprop(rtas_node, "/rtas", "linux,rtas-entry",
>>>>                      &val, sizeof(val));
>>>> ....
>>>>
>>>> Quiesce is called after this. 
>>>>
>>>>> Does SLOF put the RTAS blob address in its internal device tree, or
>>>>> does it only pass it to the guest via the return parameters from
>>>>> instantiate-rtas?
>>>>
>>>> Entry was made to the DT by linux kernel prom_init code, will this be
>>>> visible to QEMU?
>>>
>>> With my recent SLOF FDT patch - yes:
>>>
>>> aik@fstn1-p1:~$ grep rtas dbg.dts
>>> 	rtas {
>>> 		linux,rtas-entry = <0x2fff0000>;
>>> 		linux,rtas-base = <0x2fff0000>;
>>> [...]
>>
>> Ah.. except.. isn't that relying on the kernel putting the RTAS
>> address into the device tree before it calls quiesce and kills SLOF?
>>
>> The SLOF image is bundled in with qemu, so it's ok for us to rely on
>> its behaviour up to a point.  It's not really ok for us to rely on the
>> kernel's behaviour here, unless that behaviour is mandated by PAPR,
>> which this isn't.
> 
> Fair point.
> 
>> So, I think we either need to have *SLOF* update the device tree with
>> that address at instantiate-rtas time,
> 
> I can do that, in a separate patch.


One comment though - if I create the properties in SLOF, I have to name
them different, like rtas-entry/rtas-base or slof,rtas-entry/slof,rtas-base
to avoid colliding with the ones create by the guest kernel.

So what do I name them? And do we need 2 copies of the same thing, do we
ever expect rtas-entry!=rtas-base? The guest can potentially get them
different (under powervm) but not with SLOF.


> 
>> or we'll need to resurrect
>> Aravinda's original UPDATE_RTAS hcall.



-- 
Alexey


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 839 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region
  2017-10-04  3:32             ` Alexey Kardashevskiy
@ 2017-10-04  5:55               ` David Gibson
  0 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2017-10-04  5:55 UTC (permalink / raw)
  To: Alexey Kardashevskiy
  Cc: Nikunj A Dadhania, Aravinda Prasad, benh, mahesh, qemu-devel,
	qemu-ppc, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 4648 bytes --]

On Wed, Oct 04, 2017 at 02:32:11PM +1100, Alexey Kardashevskiy wrote:
> On 03/10/17 20:12, Alexey Kardashevskiy wrote:
> > On 03/10/17 17:07, David Gibson wrote:
> >> On Mon, Oct 02, 2017 at 02:02:19PM +1100, Alexey Kardashevskiy wrote:
> >>> On 29/09/17 21:52, Nikunj A Dadhania wrote:
> >>>> David Gibson <david@gibson.dropbear.id.au> writes:
> >>>>
> >>>>> On Thu, Sep 28, 2017 at 04:07:38PM +0530, Aravinda Prasad wrote:
> >>>>>> Receive updates from SLOF about the updated rtas-base.
> >>>>>> A separate patch for SLOF [1] (commit f9a60de3) adds
> >>>>>> functionality to invoke a private HCALL whenever OS
> >>>>>> issues instantiate-rtas with a new rtas-base.
> >>>>>>
> >>>>>> This is required as QEMU needs to know the updated rtas-base
> >>>>>> as it allocates error reporting structure in RTAS space upon
> >>>>>> a machine check exception.
> >>>>>>
> >>>>>> [1] https://lists.ozlabs.org/pipermail/linuxppc-dev/2014-August/120386.html
> >>>>>>
> >>>>>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> >>>>>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> >>>>>
> >>>>> Ao I acked this earlier, but I've now realized there might be some
> >>>>> connection between this and discussions taking place elsewhere about
> >>>>> qemu not knowing what SLOF does with the device tree.
> >>>>>
> >>>>> At what point will SLOF call the UPDATE_RTAS hcall?  I'm guessing at
> >>>>> the time of instantiate-rtas, is that right?
> >>>>
> >>>> The call happens from
> >>>> arch/powerpc/kernel/prom_init.c:prom_instantiate_rtas() and after that
> >>>> linux kernel makes two entries in the DT
> >>>>
> >>>> ....
> >>>>        if (call_prom_ret("call-method", 3, 2, &entry,
> >>>>                           ADDR("instantiate-rtas"),
> >>>>                           rtas_inst, base) != 0
> >>>>             || entry == 0) {
> >>>>                 prom_printf(" failed\n");
> >>>>                 return;
> >>>>         }
> >>>>         prom_printf(" done\n");
> >>>>
> >>>>         reserve_mem(base, size);
> >>>>
> >>>>         val = cpu_to_be32(base);
> >>>>         prom_setprop(rtas_node, "/rtas", "linux,rtas-base",
> >>>>                      &val, sizeof(val));
> >>>>         val = cpu_to_be32(entry);
> >>>>         prom_setprop(rtas_node, "/rtas", "linux,rtas-entry",
> >>>>                      &val, sizeof(val));
> >>>> ....
> >>>>
> >>>> Quiesce is called after this. 
> >>>>
> >>>>> Does SLOF put the RTAS blob address in its internal device tree, or
> >>>>> does it only pass it to the guest via the return parameters from
> >>>>> instantiate-rtas?
> >>>>
> >>>> Entry was made to the DT by linux kernel prom_init code, will this be
> >>>> visible to QEMU?
> >>>
> >>> With my recent SLOF FDT patch - yes:
> >>>
> >>> aik@fstn1-p1:~$ grep rtas dbg.dts
> >>> 	rtas {
> >>> 		linux,rtas-entry = <0x2fff0000>;
> >>> 		linux,rtas-base = <0x2fff0000>;
> >>> [...]
> >>
> >> Ah.. except.. isn't that relying on the kernel putting the RTAS
> >> address into the device tree before it calls quiesce and kills SLOF?
> >>
> >> The SLOF image is bundled in with qemu, so it's ok for us to rely on
> >> its behaviour up to a point.  It's not really ok for us to rely on the
> >> kernel's behaviour here, unless that behaviour is mandated by PAPR,
> >> which this isn't.
> > 
> > Fair point.
> > 
> >> So, I think we either need to have *SLOF* update the device tree with
> >> that address at instantiate-rtas time,
> > 
> > I can do that, in a separate patch.
> 
> 
> One comment though - if I create the properties in SLOF, I have to name
> them different, like rtas-entry/rtas-base or slof,rtas-entry/slof,rtas-base
> to avoid colliding with the ones create by the guest kernel.

That's fine.  I don't know if the kernel will error if the properties
are already there or just overwrite them, but using new names might be
safer.

> So what do I name them? And do we need 2 copies of the same thing,

Need, no, but if having 2 copies is the simpler approach that's fine.

> do we
> ever expect rtas-entry!=rtas-base? The guest can potentially get them
> different (under powervm) but not with SLOF.

More to the point, qemu doesn't actually need to know the entry point
for the fwnmi stuff, only the base address.

> 
> 
> > 
> >> or we'll need to resurrect
> >> Aravinda's original UPDATE_RTAS hcall.
> 
> 
> 




-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 6/6] migration: Block migration while handling machine check
  2017-10-04  1:39   ` David Gibson
@ 2017-10-08  8:07     ` Aravinda Prasad
  0 siblings, 0 replies; 27+ messages in thread
From: Aravinda Prasad @ 2017-10-08  8:07 UTC (permalink / raw)
  To: David Gibson; +Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff



On Wednesday 04 October 2017 07:09 AM, David Gibson wrote:
> On Thu, Sep 28, 2017 at 04:08:31PM +0530, Aravinda Prasad wrote:
>> Block VM migration requests until the machine check
>> error handling is complete as (i) these errors are
>> specific to the source hardware and is irrelevant on
>> the target hardware, (ii) these errors cause data
>> corruption and should be handled before migration.
>>
>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>> ---
>>  hw/ppc/spapr_rtas.c    |    3 +++
>>  include/hw/ppc/spapr.h |    2 ++
>>  target/ppc/kvm.c       |   17 +++++++++++++++++
>>  3 files changed, 22 insertions(+)
>>
>> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
>> index d017a67..17f6567 100644
>> --- a/hw/ppc/spapr_rtas.c
>> +++ b/hw/ppc/spapr_rtas.c
>> @@ -47,6 +47,7 @@
>>  #include "trace.h"
>>  #include "hw/ppc/fdt.h"
>>  #include "kvm_ppc.h"
>> +#include "migration/blocker.h"
>>  
>>  static void rtas_display_character(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>>                                     uint32_t token, uint32_t nargs,
>> @@ -390,6 +391,8 @@ static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu,
>>          spapr->mc_status = -1;
>>          qemu_cond_signal(&spapr->mc_delivery_cond);
>>          rtas_st(rets, 0, RTAS_OUT_SUCCESS);
>> +        migrate_del_blocker(spapr->migration_blocker);
>> +        error_free(spapr->migration_blocker);
>>      }
>>  }
>>  
>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>> index a75e9cf..0890a44 100644
>> --- a/include/hw/ppc/spapr.h
>> +++ b/include/hw/ppc/spapr.h
>> @@ -7,6 +7,7 @@
>>  #include "hw/ppc/spapr_drc.h"
>>  #include "hw/mem/pc-dimm.h"
>>  #include "hw/ppc/spapr_ovec.h"
>> +#include "qapi/error.h"
>>  
>>  struct VIOsPAPRBus;
>>  struct sPAPRPHBState;
>> @@ -136,6 +137,7 @@ struct sPAPRMachineState {
>>      MemoryHotplugState hotplug_memory;
>>  
>>      const char *icp_type;
>> +    Error *migration_blocker;
> 
> This isn't a good name, because it's _specifically_ the fwnmi as a
> migration blocker - trying to put another migration blocker in here
> would break horribly, because nmi-interlock would clear it regardless.

Will rename it.

> 
>>  };
>>  
>>  #define H_SUCCESS         0
>> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
>> index 59b3322..58de7ea 100644
>> --- a/target/ppc/kvm.c
>> +++ b/target/ppc/kvm.c
>> @@ -52,6 +52,7 @@
>>  #endif
>>  #include "elf.h"
>>  #include "sysemu/kvm_int.h"
>> +#include "migration/blocker.h"
>>  
>>  //#define DEBUG_KVM
>>  
>> @@ -2770,10 +2771,26 @@ int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run)
>>      sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
>>      PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
>>      target_ulong msr = 0;
>> +    Error *local_err = NULL;
>> +    int ret;
>>      bool type, le;
>>  
>>      cpu_synchronize_state(CPU(cpu));
>>  
>> +    error_setg(&spapr->migration_blocker,
>> +            "Live migration not supported during machine check error handling");
> 
> In fact, there's no real reason to generate the error here.  The
> error's always the same so you could just create it at startup as a
> global and just add/remove it to the block list.

ok.

> 
>> +    ret = migrate_add_blocker(spapr->migration_blocker, &local_err);
>> +    if (ret < 0) {
>> +        /*
>> +         * We don't want to abort and let the migration to continue. In a
>> +         * rare case, the machine check handler will run on the target
>> +         * hardware. Though this is not preferable, it is better than aborting
> 
> Why is it not preferable?  I mean it's an edge case, but AFAICT it's
> still the correct behaviour.

Will remove that line in the comment.

> 
>> +         * the migration or killing the VM.
>> +         */
>> +        error_free(spapr->migration_blocker);
>> +        fprintf(stderr, "Warning: Machine check during VM migration\n");
> 
> Use error_report(), not fprintf().

ok.

Regards,
Aravinda

> 
>> +    }
>> +
>>      /*
>>       * Properly set bits in MSR before we invoke the handler.
>>       * SRR0/1, DAR and DSISR are properly set by KVM
>>
> 

-- 
Regards,
Aravinda

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 5/6] ppc: spapr: Enable FWNMI capability
  2017-10-04  1:34   ` David Gibson
@ 2017-10-08  8:26     ` Aravinda Prasad
  2017-10-08 23:43       ` David Gibson
  0 siblings, 1 reply; 27+ messages in thread
From: Aravinda Prasad @ 2017-10-08  8:26 UTC (permalink / raw)
  To: David Gibson; +Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff



On Wednesday 04 October 2017 07:04 AM, David Gibson wrote:
> On Thu, Sep 28, 2017 at 04:08:21PM +0530, Aravinda Prasad wrote:
>> Enable the KVM capability KVM_CAP_PPC_FWNMI so that
>> the KVM causes guest exit with NMI as exit reason
>> when it encounters a machine check exception on the
>> address belonging to a guest. Without this capability
>> enabled, KVM redirects machine check exceptions to
>> guest's 0x200 vector.
>>
>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>> ---
>>  hw/ppc/spapr_rtas.c  |   15 +++++++++++++++
>>  target/ppc/kvm.c     |   13 +++++++++++++
>>  target/ppc/kvm_ppc.h |    6 ++++++
>>  3 files changed, 34 insertions(+)
>>
>> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
>> index 08e9a5e..d017a67 100644
>> --- a/hw/ppc/spapr_rtas.c
>> +++ b/hw/ppc/spapr_rtas.c
>> @@ -46,6 +46,7 @@
>>  #include "qemu/cutils.h"
>>  #include "trace.h"
>>  #include "hw/ppc/fdt.h"
>> +#include "kvm_ppc.h"
>>  
>>  static void rtas_display_character(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>>                                     uint32_t token, uint32_t nargs,
>> @@ -354,6 +355,20 @@ static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
>>                                    target_ulong args,
>>                                    uint32_t nret, target_ulong rets)
>>  {
>> +    int ret;
>> +
>> +    ret = kvmppc_fwnmi_enable(cpu);
> 
> If you're enabling it here, doesn't that mean you need to disable it
> on reset?

We don't have a way in KVM to disable it once enabled.

> 
>> +    if (ret == 1) {
>> +        rtas_st(rets, 0, RTAS_OUT_NOT_SUPPORTED);
>> +        return;
>> +    }
>> +
>> +    if (ret < 0) {
>> +        rtas_st(rets, 0, RTAS_OUT_HW_ERROR);
>> +        return;
>> +    }
>> +
>>      spapr->guest_machine_check_addr = rtas_ld(args, 1);
>>      rtas_st(rets, 0, RTAS_OUT_SUCCESS);
>>  }
>> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
>> index 7e4ce02..59b3322 100644
>> --- a/target/ppc/kvm.c
>> +++ b/target/ppc/kvm.c
>> @@ -92,6 +92,7 @@ static int cap_mmu_radix;
>>  static int cap_mmu_hash_v3;
>>  static int cap_resize_hpt;
>>  static int cap_ppc_pvr_compat;
>> +static int cap_fwnmi;
>>  
>>  static uint32_t debug_inst_opcode;
>>  
>> @@ -150,6 +151,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
>>      cap_mmu_radix = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_RADIX);
>>      cap_mmu_hash_v3 = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_HASH_V3);
>>      cap_resize_hpt = kvm_vm_check_extension(s, KVM_CAP_SPAPR_RESIZE_HPT);
>> +    cap_fwnmi = kvm_check_extension(s, KVM_CAP_PPC_FWNMI);
>>      /*
>>       * Note: setting it to false because there is not such capability
>>       * in KVM at this moment.
>> @@ -2142,6 +2144,17 @@ void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
>>      }
>>  }
>>  
>> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
>> +{
>> +    CPUState *cs = CPU(cpu);
>> +
>> +    if (!cap_fwnmi) {
>> +        return 1;
>> +    }
>> +
>> +    return kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_FWNMI, 0);
> 
> Yeah, this is no good.  It means migration from a host that's fwnmi
> capable to one that isn't will be subtly broken.  Instead you need to
> make fwnmi capability a machine property.  If the property is
> requested and the host kernel doesn't support it, you need to outright
> fail, rather than try to fall back.

Sure.

> 
>> +}
>> +
>>  int kvmppc_smt_threads(void)
>>  {
>>      return cap_ppc_smt ? cap_ppc_smt : 1;
>> diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
>> index 0139dae..55b6df2 100644
>> --- a/target/ppc/kvm_ppc.h
>> +++ b/target/ppc/kvm_ppc.h
>> @@ -28,6 +28,7 @@ void kvmppc_enable_clear_ref_mod_hcalls(void);
>>  void kvmppc_set_papr(PowerPCCPU *cpu);
>>  int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr);
>>  void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy);
>> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu);
>>  int kvmppc_smt_threads(void);
>>  void kvmppc_hint_smt_possible(Error **errp);
>>  int kvmppc_set_smt_threads(int smt);
>> @@ -157,6 +158,11 @@ static inline void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
>>  {
>>  }
>>  
>> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
>> +{
>> +    return 1;
> 
> Likewise, this should be available, not banned, on TCG.  I think there
> are existing problems with TCG<->KVM migration, but there's no
> inherent reason they shouldn't work, so we don't want to introduce
> extra reasons they don't.
> 
> Even if TCG will never generate fwnmis (for now), it should allow the
> guest to register for them.

Should this be then changed later only when TCG generates fwnmis?
Because we don't want to set spapr->guest_machine_check_addr for TCG in
rtas_ibm_nmi_register(). If set then all machine checks are redirected
to this address which is not desirable for TCG as we still want machine
checks to be passed via 0x200.

Regards,
Aravinda

> 
>> +}
>> +
>>  static inline int kvmppc_smt_threads(void)
>>  {
>>      return 1;
>>
> 

-- 
Regards,
Aravinda

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 4/6] target/ppc: Handle NMI guest exit
  2017-10-04  1:29   ` David Gibson
@ 2017-10-08  8:59     ` Aravinda Prasad
  2017-10-08 23:48       ` David Gibson
  0 siblings, 1 reply; 27+ messages in thread
From: Aravinda Prasad @ 2017-10-08  8:59 UTC (permalink / raw)
  To: David Gibson; +Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff



On Wednesday 04 October 2017 06:59 AM, David Gibson wrote:
> On Thu, Sep 28, 2017 at 04:08:10PM +0530, Aravinda Prasad wrote:
>> Memory error such as bit flips that cannot be corrected
>> by hardware are passed on to the kernel for handling.
>> If the memory address in error belongs to guest then
>> the guest kernel is responsible for taking suitable action.
>> Patch [1] enhances KVM to exit guest with exit reason
>> set to KVM_EXIT_NMI in such cases.
>>
>> This patch handles KVM_EXIT_NMI exit. If the guest OS
>> has registered the machine check handling routine by
>> calling "ibm,nmi-register", then the handler builds
>> the error log and invokes the registered handler else
>> invokes the handler at 0x200.
>>
>> Note that FWNMI handles synchronous machine check exceptions
>> triggered by the hardware and hence we do not extend
>> such support to the "nmi" command available in the QEMU
>> monitor. Hence, "nmi" command from the monitor will
>> always go through 0x200 vector.
>>
>> [1] https://www.spinics.net/lists/kvm-ppc/msg12637.html
>> 	(e20bbd3d and related commits)
> 
> What does happen on KVM if an asynchronous machine check exception
> occurs while in the guest?  Or under PowerVM for that matter.

AFAIK asynchronous errors take a different path in KVM as it can happen
in a different process context.

> 
>>
>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>> Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
>> ---
>>  hw/ppc/spapr.c         |    4 +++
>>  hw/ppc/spapr_events.c  |   62 ++++++++++++++++++++++++++++++++++++++++++++++++
>>  include/hw/ppc/spapr.h |    6 +++++
>>  target/ppc/kvm.c       |   62 ++++++++++++++++++++++++++++++++++++++++++++++++
>>  target/ppc/kvm_ppc.h   |   14 +++++++++++
>>  5 files changed, 148 insertions(+)
>>
>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
>> index d568ea6..7780434 100644
>> --- a/hw/ppc/spapr.c
>> +++ b/hw/ppc/spapr.c
>> @@ -2453,6 +2453,10 @@ static void ppc_spapr_init(MachineState *machine)
>>          error_report("Could not get size of LPAR rtas '%s'", filename);
>>          exit(1);
>>      }
>> +
>> +    /* Resize blob to accommodate error log. */
>> +    spapr->rtas_size = spapr_get_rtas_size();
>> +
>>      spapr->rtas_blob = g_malloc(spapr->rtas_size);
>>      if (load_image_size(filename, spapr->rtas_blob, spapr->rtas_size) < 0) {
>>          error_report("Could not load LPAR rtas '%s'", filename);
>> diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
>> index e377fc7..ac93a7b 100644
>> --- a/hw/ppc/spapr_events.c
>> +++ b/hw/ppc/spapr_events.c
>> @@ -41,6 +41,7 @@
>>  #include "qemu/bcd.h"
>>  #include "hw/ppc/spapr_ovec.h"
>>  #include <libfdt.h>
>> +#include <linux/kvm.h>
>>  
>>  #define RTAS_LOG_VERSION_MASK                   0xff000000
>>  #define   RTAS_LOG_VERSION_6                    0x06000000
>> @@ -174,6 +175,22 @@ struct epow_extended_log {
>>      struct rtas_event_log_v6_epow epow;
>>  } QEMU_PACKED;
>>  
>> +/*
>> + * Data format in RTAS Blob
>> + *
>> + * This structure contains error information related to Machine
>> + * Check exception. This is filled up and copied to rtas blob
>> + * upon machine check exception. The address of rtas blob is
>> + * passed on to OS registered machine check notification
>> + * routines upon machine check exception.
>> + */
>> +struct rtas_event_log_mce {
>> +    target_ulong r3;
>> +    struct rtas_error_log rtas_error_log;
>> +    unsigned char   buffer[1];      /* Start of extended log */
> 
> I believe we allow C99 extensions in qemu, so you can use buffer[], a
> C99 flexible array member, rather than the length 1 hack.

ok.

> 
>> +} QEMU_PACKED;
>> +
>> +
>>  union drc_identifier {
>>      uint32_t index;
>>      uint32_t count;
>> @@ -623,6 +640,51 @@ void spapr_hotplug_req_remove_by_count_indexed(sPAPRDRConnectorType drc_type,
>>                              RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, &drc_id);
>>  }
>>  
>> +ssize_t spapr_get_rtas_size(void)
>> +{
>> +    return RTAS_ERRLOG_OFFSET + sizeof(struct rtas_event_log_mce);
> 
> Erm.. because of the definition of rtas_event_log_mce, this only
> allows for 1 byte of extended log buffer.  That doesn't seem right.

This is directly taken from the kernel's RTAS log (struct rtas_error_log
in arch/powerpc/include/asm/rtas.h). I am not sure why they use 1 byte
extended log buffer.

> 
>> +}
>> +
>> +target_ulong spapr_mce_req_event(target_ulong r3, hwaddr rtas_addr,
>> +                                 uint16_t flags, bool err_type, bool le)
> 
> err_tpe isn't a very informative name for a boolean.  'uncorrectable'
> would be better.  Although, didn't you say only uncorrectable errors
> are directed to the guest, so does this have any purpose anyway?

Right now only uncorrectable errors, but can be enhanced later to pass
on correctable errors to inform the guest.

> 
>> +{
>> +    struct rtas_event_log_mce mc_log;
>> +    uint32_t summary;
>> +
>> +    /* Set error log fields */
>> +    mc_log.r3 = r3;
>> +
>> +    summary = RTAS_LOG_SEVERITY_ERROR_SYNC;
>> +
>> +    if (flags & KVM_RUN_PPC_NMI_DISP_FULLY_RECOV) {
> 
> KVM specific flags shouldn't be here, this translation should happen
> in the caller.

ok.

> 
>> +        summary |= RTAS_LOG_DISPOSITION_FULLY_RECOVERED;
>> +    } else {
>> +        summary |= RTAS_LOG_DISPOSITION_NOT_RECOVERED;
>> +    }
>> +
>> +    summary |= (RTAS_LOG_INITIATOR_MEMORY | RTAS_LOG_TARGET_MEMORY);
>> +
>> +    if (err_type) {
>> +        summary |= RTAS_LOG_TYPE_ECC_UNCORR;
>> +    } else {
>> +        summary |= RTAS_LOG_TYPE_ECC_CORR;
>> +    }
>> +
>> +    mc_log.rtas_error_log.summary = cpu_to_be32(summary);
>> +
>> +    /* Handle all Host/Guest LE/BE combinations */
> 
> I'd prefer you do this logic immediate as you store mc_log.r3.  I
> really dislike storing values into a structure in the wrong
> endianness, even temporarily - it makes it harder for someone reading
> the code to discern what endianness the field is supposed to be in.

ok.

> 
>> +    if (le) {
>> +        mc_log.r3 = cpu_to_le64(mc_log.r3);
>> +    } else {
>> +        mc_log.r3 = cpu_to_be64(mc_log.r3);
>> +    }
>> +
>> +    cpu_physical_memory_write(rtas_addr + RTAS_ERRLOG_OFFSET,
>> +                              &mc_log, sizeof(mc_log));
>> +
>> +    return rtas_addr + RTAS_ERRLOG_OFFSET;
>> +}
>> +
>>  static void check_exception(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>>                              uint32_t token, uint32_t nargs,
>>                              target_ulong args,
>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>> index 28b6e2e..a75e9cf 100644
>> --- a/include/hw/ppc/spapr.h
>> +++ b/include/hw/ppc/spapr.h
>> @@ -556,6 +556,9 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
>>  #define DIAGNOSTICS_RUN_MODE_IMMEDIATE 2
>>  #define DIAGNOSTICS_RUN_MODE_PERIODIC  3
>>  
>> +/* Offset from rtas-base where error log is placed */
>> +#define RTAS_ERRLOG_OFFSET       0x200
> 
> Is there any particular rationale for this offset?  Our actual RTAS
> code is 20 bytes, much smaller than this.

Just to ensure some space if in case RTAS code needs to be extended in
future.

> 
>> +
>>  static inline uint64_t ppc64_phys_to_real(uint64_t addr)
>>  {
>>      return addr & ~0xF000000000000000ULL;
>> @@ -675,6 +678,9 @@ int spapr_hpt_shift_for_ramsize(uint64_t ramsize);
>>  void spapr_reallocate_hpt(sPAPRMachineState *spapr, int shift,
>>                            Error **errp);
>>  void spapr_clear_pending_events(sPAPRMachineState *spapr);
>> +ssize_t spapr_get_rtas_size(void);
>> +target_ulong spapr_mce_req_event(target_ulong r3, hwaddr rtas_addr,
>> +                                 uint16_t flags, bool err_type, bool le);
>>  
>>  /* CPU and LMB DRC release callbacks. */
>>  void spapr_core_release(DeviceState *dev);
>> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
>> index 171d3d8..7e4ce02 100644
>> --- a/target/ppc/kvm.c
>> +++ b/target/ppc/kvm.c
>> @@ -1798,6 +1798,11 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
>>          ret = 0;
>>          break;
>>  
>> +    case KVM_EXIT_NMI:
>> +        DPRINTF("handle NMI exception\n");
>> +        ret = kvm_handle_nmi(cpu, run);
>> +        break;
>> +
>>      default:
>>          fprintf(stderr, "KVM: unknown exit reason %d\n", run->exit_reason);
>>          ret = -1;
>> @@ -2746,6 +2751,63 @@ int kvm_arch_msi_data_to_gsi(uint32_t data)
>>      return data & 0xffff;
>>  }
>>  
>> +int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run)
> 
> Most of the logic here - everything except actually parsing the
> relevant fields from kvm_run - should move to spapr_events.  We may
> not have any way of generating synchronous MCEs in TCG at the moment,
> but we shouldn't exclude the possibility (being able to inject
> uncorrectable memory errors in TCG sounds like it could be quite a
> useful debugging tool).

ok.

> 
>> +{
>> +    CPUPPCState *env = &cpu->env;
>> +    sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
>> +    PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
>> +    target_ulong msr = 0;
>> +    bool type, le;
>> +
>> +    cpu_synchronize_state(CPU(cpu));
>> +
>> +    /*
>> +     * Properly set bits in MSR before we invoke the handler.
>> +     * SRR0/1, DAR and DSISR are properly set by KVM
>> +     */
>> +    if (!(*pcc->interrupts_big_endian)(cpu)) {
>> +        msr |= (1ULL << MSR_LE);
>> +    }
>> +
>> +    if (env->msr && (1ULL << MSR_SF)) {
>> +        msr |= (1ULL << MSR_SF);
>> +    }
>> +
>> +    msr |= (1ULL << MSR_ME);
>> +    env->msr = msr;
>> +
>> +    if (!spapr->guest_machine_check_addr) {
>> +        /*
>> +         * If OS has not registered with "ibm,nmi-register"
>> +         * jump to 0x200
>> +         */
>> +        env->nip = 0x200;
> 
> Sure you don't need to set some diagnostic registers in this case?

Not sure. Let me check.

> 
>> +        return 0;
>> +    }
>> +
>> +    while (spapr->mc_status != -1) {
>> +        /*
>> +         * Check whether the same CPU got machine check error
>> +         * while still handling the mc error (i.e., before
>> +         * that CPU called "ibm,nmi-interlock"
>> +         */
>> +        if (spapr->mc_status == cpu->vcpu_id) {
>> +            qemu_system_guest_panicked(NULL);
>> +        }
> 
> I think you need a check to break out of here if the system has been
> reset.  Otherwise if you get:
> 
>    1. MC generated on CPUs 0 & 1
>    2. MC delivered CPU0, CPU1 blocked here
>    3. system reset
> 
> I think the CPU1 thread will still be stuck here, waiting to get back
> to the main loop that would check for the reset.

sure.

Regards,
Aravinda
> 
>> +        qemu_cond_wait_iothread(&spapr->mc_delivery_cond);
>> +    }
>> +
>> +    spapr->mc_status = cpu->vcpu_id;
>> +
>> +    type = !!(env->spr[SPR_DSISR] & P7_DSISR_MC_UE);
>> +    le = !!(env->msr & (1ULL << MSR_LE));
>> +    env->gpr[3] = spapr_mce_req_event(env->gpr[3], spapr->rtas_addr,
>> +                                      run->flags, type, le);
>> +    env->nip = spapr->guest_machine_check_addr;
>> +
>> +    return 0;
>> +}
>> +
>>  int kvmppc_enable_hwrng(void)
>>  {
>>      if (!kvm_enabled() || !kvm_check_extension(kvm_state, KVM_CAP_PPC_HWRNG)) {
>> diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
>> index d6be38e..0139dae 100644
>> --- a/target/ppc/kvm_ppc.h
>> +++ b/target/ppc/kvm_ppc.h
>> @@ -71,6 +71,20 @@ bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
>>  
>>  bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path);
>>  
>> +int kvm_handle_nmi(PowerPCCPU *cpu, struct kvm_run *run);
>> +
>> +/*
>> + * Currently KVM only passes on the uncorrected machine
>> + * check memory error to guest. Other machine check errors
>> + * such as SLB multi-hit and TLB multi-hit are recovered
>> + * in KVM and are not passed on to guest.
>> + *
>> + * DSISR Bit for uncorrected machine check error. Based
>> + * on arch/powerpc/include/asm/mce.h
>> + */
>> +#define PPC_BIT(bit)                (0x8000000000000000ULL >> bit)
>> +#define P7_DSISR_MC_UE              (PPC_BIT(48))  /* P8 too */
>> +
>>  #else
>>  
>>  static inline uint32_t kvmppc_get_tbfreq(void)
>>
> 

-- 
Regards,
Aravinda

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 5/6] ppc: spapr: Enable FWNMI capability
  2017-10-08  8:26     ` Aravinda Prasad
@ 2017-10-08 23:43       ` David Gibson
  0 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2017-10-08 23:43 UTC (permalink / raw)
  To: Aravinda Prasad
  Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 6315 bytes --]

On Sun, Oct 08, 2017 at 01:56:06PM +0530, Aravinda Prasad wrote:
> 
> 
> On Wednesday 04 October 2017 07:04 AM, David Gibson wrote:
> > On Thu, Sep 28, 2017 at 04:08:21PM +0530, Aravinda Prasad wrote:
> >> Enable the KVM capability KVM_CAP_PPC_FWNMI so that
> >> the KVM causes guest exit with NMI as exit reason
> >> when it encounters a machine check exception on the
> >> address belonging to a guest. Without this capability
> >> enabled, KVM redirects machine check exceptions to
> >> guest's 0x200 vector.
> >>
> >> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
> >> ---
> >>  hw/ppc/spapr_rtas.c  |   15 +++++++++++++++
> >>  target/ppc/kvm.c     |   13 +++++++++++++
> >>  target/ppc/kvm_ppc.h |    6 ++++++
> >>  3 files changed, 34 insertions(+)
> >>
> >> diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
> >> index 08e9a5e..d017a67 100644
> >> --- a/hw/ppc/spapr_rtas.c
> >> +++ b/hw/ppc/spapr_rtas.c
> >> @@ -46,6 +46,7 @@
> >>  #include "qemu/cutils.h"
> >>  #include "trace.h"
> >>  #include "hw/ppc/fdt.h"
> >> +#include "kvm_ppc.h"
> >>  
> >>  static void rtas_display_character(PowerPCCPU *cpu, sPAPRMachineState *spapr,
> >>                                     uint32_t token, uint32_t nargs,
> >> @@ -354,6 +355,20 @@ static void rtas_ibm_nmi_register(PowerPCCPU *cpu,
> >>                                    target_ulong args,
> >>                                    uint32_t nret, target_ulong rets)
> >>  {
> >> +    int ret;
> >> +
> >> +    ret = kvmppc_fwnmi_enable(cpu);
> > 
> > If you're enabling it here, doesn't that mean you need to disable it
> > on reset?
> 
> We don't have a way in KVM to disable it once enabled.

Hm, ok.  Is it possible to simulate "old style" handling in qemu, even
if KVM is in the new mode?  I guess you can catch the NMI exit from
KVM, but redirect it back to the 0x200 vector in the guest, yes?

If that's so, you might as well try to enable this in the kernel at
machine init time, rather than waiting until nmi-register is called.
That way the user gets an error early if the kernel can't handle it
on a VM that's supposed to support it.

> 
> > 
> >> +    if (ret == 1) {
> >> +        rtas_st(rets, 0, RTAS_OUT_NOT_SUPPORTED);
> >> +        return;
> >> +    }
> >> +
> >> +    if (ret < 0) {
> >> +        rtas_st(rets, 0, RTAS_OUT_HW_ERROR);
> >> +        return;
> >> +    }
> >> +
> >>      spapr->guest_machine_check_addr = rtas_ld(args, 1);
> >>      rtas_st(rets, 0, RTAS_OUT_SUCCESS);
> >>  }
> >> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
> >> index 7e4ce02..59b3322 100644
> >> --- a/target/ppc/kvm.c
> >> +++ b/target/ppc/kvm.c
> >> @@ -92,6 +92,7 @@ static int cap_mmu_radix;
> >>  static int cap_mmu_hash_v3;
> >>  static int cap_resize_hpt;
> >>  static int cap_ppc_pvr_compat;
> >> +static int cap_fwnmi;
> >>  
> >>  static uint32_t debug_inst_opcode;
> >>  
> >> @@ -150,6 +151,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
> >>      cap_mmu_radix = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_RADIX);
> >>      cap_mmu_hash_v3 = kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_HASH_V3);
> >>      cap_resize_hpt = kvm_vm_check_extension(s, KVM_CAP_SPAPR_RESIZE_HPT);
> >> +    cap_fwnmi = kvm_check_extension(s, KVM_CAP_PPC_FWNMI);
> >>      /*
> >>       * Note: setting it to false because there is not such capability
> >>       * in KVM at this moment.
> >> @@ -2142,6 +2144,17 @@ void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
> >>      }
> >>  }
> >>  
> >> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
> >> +{
> >> +    CPUState *cs = CPU(cpu);
> >> +
> >> +    if (!cap_fwnmi) {
> >> +        return 1;
> >> +    }
> >> +
> >> +    return kvm_vcpu_enable_cap(cs, KVM_CAP_PPC_FWNMI, 0);
> > 
> > Yeah, this is no good.  It means migration from a host that's fwnmi
> > capable to one that isn't will be subtly broken.  Instead you need to
> > make fwnmi capability a machine property.  If the property is
> > requested and the host kernel doesn't support it, you need to outright
> > fail, rather than try to fall back.
> 
> Sure.
> 
> > 
> >> +}
> >> +
> >>  int kvmppc_smt_threads(void)
> >>  {
> >>      return cap_ppc_smt ? cap_ppc_smt : 1;
> >> diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
> >> index 0139dae..55b6df2 100644
> >> --- a/target/ppc/kvm_ppc.h
> >> +++ b/target/ppc/kvm_ppc.h
> >> @@ -28,6 +28,7 @@ void kvmppc_enable_clear_ref_mod_hcalls(void);
> >>  void kvmppc_set_papr(PowerPCCPU *cpu);
> >>  int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr);
> >>  void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy);
> >> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu);
> >>  int kvmppc_smt_threads(void);
> >>  void kvmppc_hint_smt_possible(Error **errp);
> >>  int kvmppc_set_smt_threads(int smt);
> >> @@ -157,6 +158,11 @@ static inline void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
> >>  {
> >>  }
> >>  
> >> +int kvmppc_fwnmi_enable(PowerPCCPU *cpu)
> >> +{
> >> +    return 1;
> > 
> > Likewise, this should be available, not banned, on TCG.  I think there
> > are existing problems with TCG<->KVM migration, but there's no
> > inherent reason they shouldn't work, so we don't want to introduce
> > extra reasons they don't.
> > 
> > Even if TCG will never generate fwnmis (for now), it should allow the
> > guest to register for them.
> 
> Should this be then changed later only when TCG generates fwnmis?
> Because we don't want to set spapr->guest_machine_check_addr for TCG in
> rtas_ibm_nmi_register(). If set then all machine checks are redirected
> to this address which is not desirable for TCG as we still want machine
> checks to be passed via 0x200.

Um.. why?  The guest has asked for (synchronous) machine checks to go
to its specified address.  That's what it should get, regardless of
the accelerator it's running on.

> 
> Regards,
> Aravinda
> 
> > 
> >> +}
> >> +
> >>  static inline int kvmppc_smt_threads(void)
> >>  {
> >>      return 1;
> >>
> > 
> 

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH v5 4/6] target/ppc: Handle NMI guest exit
  2017-10-08  8:59     ` Aravinda Prasad
@ 2017-10-08 23:48       ` David Gibson
  0 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2017-10-08 23:48 UTC (permalink / raw)
  To: Aravinda Prasad
  Cc: qemu-ppc, qemu-devel, aik, mahesh, benh, paulus, sam.bobroff

[-- Attachment #1: Type: text/plain, Size: 3301 bytes --]

On Sun, Oct 08, 2017 at 02:29:26PM +0530, Aravinda Prasad wrote:
> 
> 
> On Wednesday 04 October 2017 06:59 AM, David Gibson wrote:
> > On Thu, Sep 28, 2017 at 04:08:10PM +0530, Aravinda Prasad wrote:
> >> Memory error such as bit flips that cannot be corrected
> >> by hardware are passed on to the kernel for handling.
> >> If the memory address in error belongs to guest then
> >> the guest kernel is responsible for taking suitable action.
> >> Patch [1] enhances KVM to exit guest with exit reason
> >> set to KVM_EXIT_NMI in such cases.
> >>
> >> This patch handles KVM_EXIT_NMI exit. If the guest OS
> >> has registered the machine check handling routine by
> >> calling "ibm,nmi-register", then the handler builds
> >> the error log and invokes the registered handler else
> >> invokes the handler at 0x200.
> >>
> >> Note that FWNMI handles synchronous machine check exceptions
> >> triggered by the hardware and hence we do not extend
> >> such support to the "nmi" command available in the QEMU
> >> monitor. Hence, "nmi" command from the monitor will
> >> always go through 0x200 vector.
> >>
> >> [1] https://www.spinics.net/lists/kvm-ppc/msg12637.html
> >> 	(e20bbd3d and related commits)
> > 
> > What does happen on KVM if an asynchronous machine check exception
> > occurs while in the guest?  Or under PowerVM for that matter.
> 
> AFAIK asynchronous errors take a different path in KVM as it can happen
> in a different process context.

Well, obviously, I'm wondering what impact it will have on the guest,
one way or another.

[snip]
> >> +ssize_t spapr_get_rtas_size(void)
> >> +{
> >> +    return RTAS_ERRLOG_OFFSET + sizeof(struct rtas_event_log_mce);
> > 
> > Erm.. because of the definition of rtas_event_log_mce, this only
> > allows for 1 byte of extended log buffer.  That doesn't seem right.
> 
> This is directly taken from the kernel's RTAS log (struct rtas_error_log
> in arch/powerpc/include/asm/rtas.h). I am not sure why they use 1 byte
> extended log buffer.

I think you'd better find out, then.

[snip]
> >> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> >> index 28b6e2e..a75e9cf 100644
> >> --- a/include/hw/ppc/spapr.h
> >> +++ b/include/hw/ppc/spapr.h
> >> @@ -556,6 +556,9 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
> >>  #define DIAGNOSTICS_RUN_MODE_IMMEDIATE 2
> >>  #define DIAGNOSTICS_RUN_MODE_PERIODIC  3
> >>  
> >> +/* Offset from rtas-base where error log is placed */
> >> +#define RTAS_ERRLOG_OFFSET       0x200
> > 
> > Is there any particular rationale for this offset?  Our actual RTAS
> > code is 20 bytes, much smaller than this.
> 
> Just to ensure some space if in case RTAS code needs to be extended in
> future.

Hm, but IIUC, we control both sides here.  qemu puts the log into the
RTAS buffer at a particular offset, and qemu tells the guest where to
find it at a particular offset within the RTAS buffer.

So, if we need to extend the RTAS code (unlikely) we can increase our
offset, and the guest will be none the wiser.

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2017-10-08 23:58 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-28 10:37 [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests Aravinda Prasad
2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 1/6] ppc: spapr: Register and handle HCALL to receive updated RTAS region Aravinda Prasad
2017-09-29  6:17   ` David Gibson
2017-09-29 11:52     ` [Qemu-devel] [Qemu-ppc] " Nikunj A Dadhania
2017-10-02  3:02       ` Alexey Kardashevskiy
2017-10-03  6:07         ` David Gibson
2017-10-03  9:12           ` Alexey Kardashevskiy
2017-10-04  3:32             ` Alexey Kardashevskiy
2017-10-04  5:55               ` David Gibson
2017-10-03  5:56     ` [Qemu-devel] " Aravinda Prasad
2017-09-28 10:37 ` [Qemu-devel] [PATCH v5 2/6] ppc: spapr: Handle "ibm, nmi-register" and "ibm, nmi-interlock" RTAS calls Aravinda Prasad
2017-09-29  6:49   ` David Gibson
2017-10-03  5:51     ` Aravinda Prasad
2017-10-03  6:09       ` David Gibson
2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 3/6] Wrapper function to wait on condition for the main loop mutex Aravinda Prasad
2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 4/6] target/ppc: Handle NMI guest exit Aravinda Prasad
2017-10-04  1:29   ` David Gibson
2017-10-08  8:59     ` Aravinda Prasad
2017-10-08 23:48       ` David Gibson
2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 5/6] ppc: spapr: Enable FWNMI capability Aravinda Prasad
2017-10-04  1:34   ` David Gibson
2017-10-08  8:26     ` Aravinda Prasad
2017-10-08 23:43       ` David Gibson
2017-09-28 10:38 ` [Qemu-devel] [PATCH v5 6/6] migration: Block migration while handling machine check Aravinda Prasad
2017-10-04  1:39   ` David Gibson
2017-10-08  8:07     ` Aravinda Prasad
2017-09-28 10:53 ` [Qemu-devel] [PATCH v5 0/6] target-ppc/spapr: Add FWNMI support in QEMU for PowerKVM guests no-reply

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.