[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 24/26] ppc/xics: move ics-simple post_load under
From: |
Cédric Le Goater |
Subject: |
[Qemu-devel] [PATCH v4 24/26] ppc/xics: move ics-simple post_load under the machine |
Date: |
Mon, 27 Feb 2017 15:29:31 +0100 |
The ICS object uses a post_load() handler which is implicitly relying
on the fact that the internal state of the ICS and ICP objects has
been restored but this is not guaranteed. So, let's move the code
under the post_load() handler of the machine where we know the objects
have been fully restored.
The icp_resend() handler of the XICSFabric QOM interface is also
removed as it is now obsolete.
Signed-off-by: Cédric Le Goater <address@hidden>
---
hw/intc/xics.c | 10 ----------
hw/ppc/spapr.c | 18 +++++++-----------
include/hw/ppc/xics.h | 1 -
3 files changed, 7 insertions(+), 22 deletions(-)
diff --git a/hw/intc/xics.c b/hw/intc/xics.c
index 159cd131420a..ce6e8d75b891 100644
--- a/hw/intc/xics.c
+++ b/hw/intc/xics.c
@@ -551,15 +551,6 @@ static void ics_simple_reset(DeviceState *dev)
}
}
-static int ics_simple_post_load(ICSState *ics, int version_id)
-{
- XICSFabric *xi = ics->xics;
- XICSFabricClass *xic = XICS_FABRIC_GET_CLASS(xi);
-
- xic->icp_resend(xi);
- return 0;
-}
-
static void ics_simple_dispatch_pre_save(void *opaque)
{
ICSState *ics = opaque;
@@ -647,7 +638,6 @@ static void ics_simple_class_init(ObjectClass *klass, void
*data)
dc->props = ics_simple_properties;
dc->vmsd = &vmstate_ics_simple;
dc->reset = ics_simple_reset;
- isc->post_load = ics_simple_post_load;
isc->reject = ics_simple_reject;
isc->resend = ics_simple_resend;
isc->eoi = ics_simple_eoi;
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 1d0daef5ad3e..e097ff8de1a4 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1285,6 +1285,13 @@ static int spapr_post_load(void *opaque, int version_id)
sPAPRMachineState *spapr = (sPAPRMachineState *)opaque;
int err = 0;
+ if (!object_dynamic_cast(OBJECT(spapr->ics), TYPE_ICS_KVM)) {
+ int i;
+ for (i = 0; i < spapr->nr_servers; i++) {
+ icp_resend(&spapr->icps[i]);
+ }
+ }
+
/* In earlier versions, there was no separate qdev for the PAPR
* RTC, so the RTC offset was stored directly in sPAPREnvironment.
* So when migrating from those versions, poke the incoming offset
@@ -2925,16 +2932,6 @@ static ICPState *spapr_icp_get(XICSFabric *xi, int
server)
return (server < spapr->nr_servers) ? &spapr->icps[server] : NULL;
}
-static void spapr_icp_resend(XICSFabric *xi)
-{
- sPAPRMachineState *spapr = SPAPR_MACHINE(xi);
- int i;
-
- for (i = 0; i < spapr->nr_servers; i++) {
- icp_resend(&spapr->icps[i]);
- }
-}
-
static void spapr_machine_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
@@ -2980,7 +2977,6 @@ static void spapr_machine_class_init(ObjectClass *oc,
void *data)
xic->ics_get = spapr_ics_get;
xic->ics_resend = spapr_ics_resend;
xic->icp_get = spapr_icp_get;
- xic->icp_resend = spapr_icp_resend;
}
static const TypeInfo spapr_machine_info = {
diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
index 2514cfd86ea9..007ee2f16d16 100644
--- a/include/hw/ppc/xics.h
+++ b/include/hw/ppc/xics.h
@@ -156,7 +156,6 @@ typedef struct XICSFabricClass {
ICSState *(*ics_get)(XICSFabric *xi, int irq);
void (*ics_resend)(XICSFabric *xi);
ICPState *(*icp_get)(XICSFabric *xi, int server);
- void (*icp_resend)(XICSFabric *xi);
} XICSFabricClass;
#define XICS_IRQS_SPAPR 1024
--
2.7.4
- [Qemu-devel] [PATCH v4 13/26] ppc/xics: remove the XICS list of ICS, (continued)
- [Qemu-devel] [PATCH v4 13/26] ppc/xics: remove the XICS list of ICS, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 14/26] ppc/xics: extend the QOM interface to handle ICPs, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 15/26] ppc/xics: move kernel_xics_fd out of KVMXICSState, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 16/26] ppc/xics: simplify the cpu_setup() handler, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 17/26] ppc/xics: move the cpu_setup() handler under the ICPState class, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 18/26] ppc/xics: use the QOM interface to grab an ICP, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 20/26] ppc/xics: register the reset handler of ICP objects, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 19/26] ppc/xics: simplify spapr_dt_xics() interface, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 21/26] ppc/xics: move the ICP array under the sPAPR machine, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 22/26] ppc/xics: export the XICS init routines, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 24/26] ppc/xics: move ics-simple post_load under the machine,
Cédric Le Goater <=
- [Qemu-devel] [PATCH v4 26/26] ppc/xics: rename 'ICPState *' variables to 'icp', Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 23/26] ppc/xics: remove the XICSState classes, Cédric Le Goater, 2017/02/27
- [Qemu-devel] [PATCH v4 25/26] ppc/xics: move InterruptStatsProvider to the sPAPR machine, Cédric Le Goater, 2017/02/27
- Re: [Qemu-devel] [PATCH v4 00/26] ppc/xics: simplify ICS and ICP creation, David Gibson, 2017/02/27