|
|
9bac43 |
From 32a2cf9dfe251696b1d26b70723c5014e7ecbf45 Mon Sep 17 00:00:00 2001
|
|
|
9bac43 |
From: David Gibson <dgibson@redhat.com>
|
|
|
9bac43 |
Date: Wed, 4 Oct 2017 05:40:12 +0200
|
|
|
9bac43 |
Subject: [PATCH 05/34] hw/ppc: clear pending_events on machine reset
|
|
|
9bac43 |
|
|
|
9bac43 |
RH-Author: David Gibson <dgibson@redhat.com>
|
|
|
9bac43 |
Message-id: <20171004054014.14159-3-dgibson@redhat.com>
|
|
|
9bac43 |
Patchwork-id: 76803
|
|
|
9bac43 |
O-Subject: [RHEL-7.5 qemu-kvm-rhev PATCH 2/4] hw/ppc: clear pending_events on machine reset
|
|
|
9bac43 |
Bugzilla: 1448344
|
|
|
9bac43 |
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
From: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
The sPAPR machine isn't clearing up the pending events QTAILQ on
|
|
|
9bac43 |
machine reboot. This allows for unprocessed hotplug/epow events
|
|
|
9bac43 |
to persist in the queue after reset and, when reasserting the IRQs in
|
|
|
9bac43 |
check_exception later on, these will be being processed by the OS.
|
|
|
9bac43 |
|
|
|
9bac43 |
This patch implements a new function called 'spapr_clear_pending_events'
|
|
|
9bac43 |
that clears up the pending_events QTAILQ. This helper is then called
|
|
|
9bac43 |
inside ppc_spapr_reset to clear up the events queue, preventing
|
|
|
9bac43 |
old/deprecated events from persisting after a reset.
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com>
|
|
|
9bac43 |
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
|
|
|
9bac43 |
(cherry picked from commit 56258174238eb25df629a53a96e1ac16a32dc7d4)
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: David Gibson <dgibson@redhat.com>
|
|
|
9bac43 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
---
|
|
|
9bac43 |
hw/ppc/spapr.c | 1 +
|
|
|
9bac43 |
hw/ppc/spapr_events.c | 11 +++++++++++
|
|
|
9bac43 |
include/hw/ppc/spapr.h | 1 +
|
|
|
9bac43 |
3 files changed, 13 insertions(+)
|
|
|
9bac43 |
|
|
|
9bac43 |
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
|
|
|
9bac43 |
index 8d1cfcf..a419aa7 100644
|
|
|
9bac43 |
--- a/hw/ppc/spapr.c
|
|
|
9bac43 |
+++ b/hw/ppc/spapr.c
|
|
|
9bac43 |
@@ -1393,6 +1393,7 @@ static void ppc_spapr_reset(void)
|
|
|
9bac43 |
}
|
|
|
9bac43 |
|
|
|
9bac43 |
qemu_devices_reset();
|
|
|
9bac43 |
+ spapr_clear_pending_events(spapr);
|
|
|
9bac43 |
|
|
|
9bac43 |
/*
|
|
|
9bac43 |
* We place the device tree and RTAS just below either the top of the RMA,
|
|
|
9bac43 |
diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
|
|
|
9bac43 |
index f952b78..66b8164 100644
|
|
|
9bac43 |
--- a/hw/ppc/spapr_events.c
|
|
|
9bac43 |
+++ b/hw/ppc/spapr_events.c
|
|
|
9bac43 |
@@ -700,6 +700,17 @@ static void event_scan(PowerPCCPU *cpu, sPAPRMachineState *spapr,
|
|
|
9bac43 |
rtas_st(rets, 0, RTAS_OUT_NO_ERRORS_FOUND);
|
|
|
9bac43 |
}
|
|
|
9bac43 |
|
|
|
9bac43 |
+void spapr_clear_pending_events(sPAPRMachineState *spapr)
|
|
|
9bac43 |
+{
|
|
|
9bac43 |
+ sPAPREventLogEntry *entry = NULL;
|
|
|
9bac43 |
+
|
|
|
9bac43 |
+ QTAILQ_FOREACH(entry, &spapr->pending_events, next) {
|
|
|
9bac43 |
+ QTAILQ_REMOVE(&spapr->pending_events, entry, next);
|
|
|
9bac43 |
+ g_free(entry->extended_log);
|
|
|
9bac43 |
+ g_free(entry);
|
|
|
9bac43 |
+ }
|
|
|
9bac43 |
+}
|
|
|
9bac43 |
+
|
|
|
9bac43 |
void spapr_events_init(sPAPRMachineState *spapr)
|
|
|
9bac43 |
{
|
|
|
9bac43 |
QTAILQ_INIT(&spapr->pending_events);
|
|
|
9bac43 |
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
|
|
|
9bac43 |
index 2a303a7..5d161ec 100644
|
|
|
9bac43 |
--- a/include/hw/ppc/spapr.h
|
|
|
9bac43 |
+++ b/include/hw/ppc/spapr.h
|
|
|
9bac43 |
@@ -662,6 +662,7 @@ void spapr_cpu_parse_features(sPAPRMachineState *spapr);
|
|
|
9bac43 |
int spapr_hpt_shift_for_ramsize(uint64_t ramsize);
|
|
|
9bac43 |
void spapr_reallocate_hpt(sPAPRMachineState *spapr, int shift,
|
|
|
9bac43 |
Error **errp);
|
|
|
9bac43 |
+void spapr_clear_pending_events(sPAPRMachineState *spapr);
|
|
|
9bac43 |
|
|
|
9bac43 |
/* CPU and LMB DRC release callbacks. */
|
|
|
9bac43 |
void spapr_core_release(DeviceState *dev);
|
|
|
9bac43 |
--
|
|
|
9bac43 |
1.8.3.1
|
|
|
9bac43 |
|