Commit acfbe07619 for qemu.org
commit acfbe07619b533238a376ee1dc4cdced56cb3a95
Author: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Date: Tue Aug 11 12:24:19 2026 +0200
hw/nmi: Remove unused @errp argument from raise_nmi()
Not a single handler update @errp. The single user is
nmi_inject() filling with "machine does not provide NMIs".
Remove the unused argument from the raise_nmi() callback,
simplifying the methods in hw/core/nmi.c.
Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20260812121232.71958-7-philmd@oss.qualcomm.com>
diff --git a/hw/core/nmi.c b/hw/core/nmi.c
index a6edf4fbf0..c44b0cf892 100644
--- a/hw/core/nmi.c
+++ b/hw/core/nmi.c
@@ -23,45 +23,25 @@
#include "hw/core/nmi.h"
#include "qapi/error.h"
-struct do_nmi_s {
- Error *err;
- bool handled;
-};
-
static int do_nmi(Object *o, void *opaque)
{
- struct do_nmi_s *ns = opaque;
+ bool *handled = opaque;
NMIState *n = (NMIState *) object_dynamic_cast(o, TYPE_NMI);
if (n) {
- NMIClass *nc = NMI_GET_CLASS(n);
-
- ns->handled = true;
- nc->raise_nmi(n, &ns->err);
- if (ns->err) {
- return -1;
- }
+ *handled = true;
+ NMI_GET_CLASS(n)->raise_nmi(n);
}
return 0;
}
-static int nmi_children(Object *o, struct do_nmi_s *ns)
-{
- return object_child_foreach_recursive(o, do_nmi, ns);
-}
-
bool nmi_inject(Error **errp)
{
- struct do_nmi_s ns = {
- .err = NULL,
- .handled = false
- };
+ bool handled = false;
- if (nmi_children(object_get_root(), &ns)) {
- error_propagate(errp, ns.err);
- return false;
- } else if (!ns.handled) {
+ object_child_foreach_recursive(object_get_root(), do_nmi, &handled);
+ if (!handled) {
error_setg(errp, "machine does not provide NMIs");
return false;
}
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index 717cfde61d..98931481b2 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -829,7 +829,7 @@ static void hppa_machine_reset(MachineState *ms, ResetType type)
cpu[0]->env.cmdline_or_bootorder = 'c';
}
-static void hppa_nmi(NMIState *ns, Error **errp)
+static void hppa_nmi(NMIState *ns)
{
CPUState *cs;
diff --git a/hw/i386/x86.c b/hw/i386/x86.c
index d1414ff63d..f8ba3244e2 100644
--- a/hw/i386/x86.c
+++ b/hw/i386/x86.c
@@ -147,7 +147,7 @@ static const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms)
return ms->possible_cpus;
}
-static void x86_nmi(NMIState *ns, Error **errp)
+static void x86_nmi(NMIState *ns)
{
/* cpu index isn't used */
CPUState *cs;
diff --git a/hw/intc/m68k_irqc.c b/hw/intc/m68k_irqc.c
index 29f758dafd..47f626c0fa 100644
--- a/hw/intc/m68k_irqc.c
+++ b/hw/intc/m68k_irqc.c
@@ -70,7 +70,7 @@ static void m68k_irqc_instance_init(Object *obj)
qdev_init_gpio_in(DEVICE(obj), m68k_set_irq, M68K_IRQC_LEVEL_NUM);
}
-static void m68k_nmi(NMIState *n, Error **errp)
+static void m68k_nmi(NMIState *n)
{
m68k_set_irq(n, M68K_IRQC_LEVEL_7, 1);
}
diff --git a/hw/m68k/q800-glue.c b/hw/m68k/q800-glue.c
index 265af90a8e..223e7d9019 100644
--- a/hw/m68k/q800-glue.c
+++ b/hw/m68k/q800-glue.c
@@ -159,7 +159,7 @@ static void glue_auxmode_set_irq(void *opaque, int irq, int level)
s->auxmode = level;
}
-static void glue_nmi(NMIState *n, Error **errp)
+static void glue_nmi(NMIState *n)
{
GLUEState *s = GLUE(n);
diff --git a/hw/misc/macio/gpio.c b/hw/misc/macio/gpio.c
index db0c4ecb3c..ba001f7b20 100644
--- a/hw/misc/macio/gpio.c
+++ b/hw/misc/macio/gpio.c
@@ -188,7 +188,7 @@ static void macio_gpio_reset(DeviceState *dev)
macio_set_gpio(s, 1, true);
}
-static void macio_gpio_nmi(NMIState *n, Error **errp)
+static void macio_gpio_nmi(NMIState *n)
{
macio_set_gpio(MACIO_GPIO(n), 9, true);
macio_set_gpio(MACIO_GPIO(n), 9, false);
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index a9f7424586..f0413639f9 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -3552,7 +3552,7 @@ static void pnv_cpu_do_nmi(PnvChip *chip, PowerPCCPU *cpu, void *opaque)
async_run_on_cpu(CPU(cpu), pnv_cpu_do_nmi_on_cpu, RUN_ON_CPU_HOST_INT(0));
}
-static void pnv_nmi(NMIState *ns, Error **errp)
+static void pnv_nmi(NMIState *ns)
{
PnvMachineState *pnv = PNV_MACHINE(qdev_get_machine());
int i;
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 1bc90ceed3..20e024907b 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3550,7 +3550,7 @@ void spapr_do_system_reset_on_cpu(CPUState *cs, run_on_cpu_data arg)
}
}
-static void spapr_nmi(NMIState *ns, Error **errp)
+static void spapr_nmi(NMIState *ns)
{
CPUState *cs;
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 21d9f51ddc..06e5def909 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -725,7 +725,7 @@ static HotplugHandler *s390_get_hotplug_handler(MachineState *machine,
return NULL;
}
-static void s390_nmi(NMIState *ns, Error **errp)
+static void s390_nmi(NMIState *ns)
{
s390_cpu_restart(S390_CPU(first_cpu));
}
diff --git a/include/hw/core/nmi.h b/include/hw/core/nmi.h
index a8feac3b67..d71d92dfbb 100644
--- a/include/hw/core/nmi.h
+++ b/include/hw/core/nmi.h
@@ -40,12 +40,11 @@ struct NMIClass {
/**
* raise_nmi: Callback to handle NMI notifications.
* @ns: Class #NMIState state
- * @errp: pointer to error object
*
* Called by nmi_inject() to perform the machine-specific
* action when a NMI is requested.
*/
- void (*raise_nmi)(NMIState *ns, Error **errp);
+ void (*raise_nmi)(NMIState *ns);
};
/**