[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] hw/core: Fix data type in do_nmi()
From: |
Gavin Shan |
Subject: |
[PATCH] hw/core: Fix data type in do_nmi() |
Date: |
Fri, 6 Dec 2019 17:36:42 +1100 |
object_dynamic_cast() should return machine (or GPIO) state instad of NMI
state in do_nmi(). So it's wrong to convert it to NMI state unconditionally.
This changes the prototype of NMIClass::nmi_monitor_handler() to accept
the parent object of NMI state instead of itself. With this, he parent object
is passed to the function, to avoid potential data corruption.
Signed-off-by: Gavin Shan <address@hidden>
---
hw/core/nmi.c | 8 ++++----
hw/i386/x86.c | 2 +-
hw/misc/macio/gpio.c | 6 +++---
hw/ppc/spapr.c | 2 +-
hw/s390x/s390-virtio-ccw.c | 2 +-
include/hw/nmi.h | 2 +-
6 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/hw/core/nmi.c b/hw/core/nmi.c
index 481c4b3c7e..554708d0db 100644
--- a/hw/core/nmi.c
+++ b/hw/core/nmi.c
@@ -37,13 +37,13 @@ static void nmi_children(Object *o, struct do_nmi_s *ns);
static int do_nmi(Object *o, void *opaque)
{
struct do_nmi_s *ns = opaque;
- NMIState *n = (NMIState *) object_dynamic_cast(o, TYPE_NMI);
+ Object *parent = object_dynamic_cast(o, TYPE_NMI);
- if (n) {
- NMIClass *nc = NMI_GET_CLASS(n);
+ if (parent) {
+ NMIClass *nc = NMI_GET_CLASS(parent);
ns->handled = true;
- nc->nmi_monitor_handler(n, ns->cpu_index, &ns->err);
+ nc->nmi_monitor_handler(parent, ns->cpu_index, &ns->err);
if (ns->err) {
return -1;
}
diff --git a/hw/i386/x86.c b/hw/i386/x86.c
index 394edc2f72..b98204f104 100644
--- a/hw/i386/x86.c
+++ b/hw/i386/x86.c
@@ -190,7 +190,7 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState
*ms)
return ms->possible_cpus;
}
-static void x86_nmi(NMIState *n, int cpu_index, Error **errp)
+static void x86_nmi(Object *parent, int cpu_index, Error **errp)
{
/* cpu index isn't used */
CPUState *cs;
diff --git a/hw/misc/macio/gpio.c b/hw/misc/macio/gpio.c
index 6cca6b27d6..6b4dfcc188 100644
--- a/hw/misc/macio/gpio.c
+++ b/hw/misc/macio/gpio.c
@@ -196,10 +196,10 @@ static void macio_gpio_reset(DeviceState *dev)
macio_set_gpio(s, 1, true);
}
-static void macio_gpio_nmi(NMIState *n, int cpu_index, Error **errp)
+static void macio_gpio_nmi(Object *parent, int cpu_index, Error **errp)
{
- macio_set_gpio(MACIO_GPIO(n), 9, true);
- macio_set_gpio(MACIO_GPIO(n), 9, false);
+ macio_set_gpio(MACIO_GPIO(parent), 9, true);
+ macio_set_gpio(MACIO_GPIO(parent), 9, false);
}
static void macio_gpio_class_init(ObjectClass *oc, void *data)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index e076f6023c..3b92e4013d 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3377,7 +3377,7 @@ void spapr_do_system_reset_on_cpu(CPUState *cs,
run_on_cpu_data arg)
ppc_cpu_do_system_reset(cs);
}
-static void spapr_nmi(NMIState *n, int cpu_index, Error **errp)
+static void spapr_nmi(Object *parent, int cpu_index, Error **errp)
{
CPUState *cs;
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index d3edeef0ad..a49952a8b9 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -431,7 +431,7 @@ static void s390_hot_add_cpu(MachineState *machine,
s390x_new_cpu(object_class_get_name(oc), id, errp);
}
-static void s390_nmi(NMIState *n, int cpu_index, Error **errp)
+static void s390_nmi(Object *parent, int cpu_index, Error **errp)
{
CPUState *cs = qemu_get_cpu(cpu_index);
diff --git a/include/hw/nmi.h b/include/hw/nmi.h
index a1e128724e..75afa67790 100644
--- a/include/hw/nmi.h
+++ b/include/hw/nmi.h
@@ -38,7 +38,7 @@ typedef struct NMIState NMIState;
typedef struct NMIClass {
InterfaceClass parent_class;
- void (*nmi_monitor_handler)(NMIState *n, int cpu_index, Error **errp);
+ void (*nmi_monitor_handler)(Object *parent, int cpu_index, Error **errp);
} NMIClass;
void nmi_monitor_handle(int cpu_index, Error **errp);
--
2.23.0
- [PATCH] hw/core: Fix data type in do_nmi(),
Gavin Shan <=