[RFC PATCH 4/5] hw/nmi: Simplify nmi_monitor_handle() and do_nmi()

Philippe Mathieu-Daudé posted 5 patches 2 years, 11 months ago
Maintainers: "Marc-André Lureau" <marcandre.lureau@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, "Alex Bennée" <alex.bennee@linaro.org>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, "Michael S. Tsirkin" <mst@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Ani Sinha <ani@anisinha.ca>, Jean-Philippe Brucker <jean-philippe@linaro.org>, Peter Maydell <peter.maydell@linaro.org>, Shannon Zhao <shannon.zhaosl@gmail.com>, Eduardo Habkost <eduardo@habkost.net>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Yanan Wang <wangyanan55@huawei.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, Helge Deller <deller@gmx.de>, Peter Xu <peterx@redhat.com>, Jason Wang <jasowang@redhat.com>, Laurent Vivier <laurent@vivier.eu>, David Hildenbrand <david@redhat.com>, Xiao Guangrong <xiaoguangrong.eric@gmail.com>, Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>, "Cédric Le Goater" <clg@kaod.org>, Daniel Henrique Barboza <danielhb413@gmail.com>, David Gibson <david@gibson.dropbear.id.au>, Greg Kurz <groug@kaod.org>, Yuval Shaia <yuval.shaia.ml@gmail.com>, Thomas Huth <thuth@redhat.com>, Ilya Leoshkevich <iii@linux.ibm.com>, Halil Pasic <pasic@linux.ibm.com>, Christian Borntraeger <borntraeger@linux.ibm.com>, Eric Farman <farman@linux.ibm.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Fam Zheng <fam@euphon.net>, Alexander Bulekov <alxndr@bu.edu>, Bandan Das <bsd@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>, Darren Kenny <darren.kenny@oracle.com>, Qiuhao Li <Qiuhao.Li@outlook.com>
[RFC PATCH 4/5] hw/nmi: Simplify nmi_monitor_handle() and do_nmi()
Posted by Philippe Mathieu-Daudé 2 years, 11 months ago
Since the previous commit, object_child_foreach_recursive()'s
handler takes an Error* argument and return a boolean. We can
remove these fields from the do_nmi_s structure, which then
only contains the 'int cpu_index' field.
Directly pass 'cpu_index' as context, removing 'struct do_nmi_s'.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
RFC: please double-check...

 hw/core/nmi.c | 41 ++++++-----------------------------------
 1 file changed, 6 insertions(+), 35 deletions(-)

diff --git a/hw/core/nmi.c b/hw/core/nmi.c
index fa74c405f7..f5a6483e89 100644
--- a/hw/core/nmi.c
+++ b/hw/core/nmi.c
@@ -26,51 +26,22 @@
 #include "qemu/module.h"
 #include "monitor/monitor.h"
 
-struct do_nmi_s {
-    int cpu_index;
-    Error *err;
-    bool handled;
-};
-
-static void nmi_children(Object *o, struct do_nmi_s *ns);
-
 static bool do_nmi(Object *o, void *opaque, Error **errp)
 {
-    struct do_nmi_s *ns = opaque;
+    int *cpu_index = opaque;
     NMIState *n = (NMIState *) object_dynamic_cast(o, TYPE_NMI);
 
-    if (n) {
-        NMIClass *nc = NMI_GET_CLASS(n);
-
-        ns->handled = true;
-        if (!nc->nmi_monitor_handler(n, ns->cpu_index, &ns->err)) {
-            return false;
-        }
+    if (!n) {
+        error_setg(errp, QERR_UNSUPPORTED);
+        return false;
     }
-    nmi_children(o, ns);
 
-    return true;
-}
-
-static void nmi_children(Object *o, struct do_nmi_s *ns)
-{
-    object_child_foreach(o, do_nmi, ns, NULL);
+    return NMI_GET_CLASS(n)->nmi_monitor_handler(n, *cpu_index, errp);
 }
 
 void nmi_monitor_handle(int cpu_index, Error **errp)
 {
-    struct do_nmi_s ns = {
-        .cpu_index = cpu_index,
-        .err = NULL,
-        .handled = false
-    };
-
-    nmi_children(object_get_root(), &ns);
-    if (ns.handled) {
-        error_propagate(errp, ns.err);
-    } else {
-        error_setg(errp, QERR_UNSUPPORTED);
-    }
+    object_child_foreach_recursive(object_get_root(), do_nmi, &cpu_index, errp);
 }
 
 static const TypeInfo nmi_info = {
-- 
2.38.1