[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v8 2/4] hw: add a wrapper for registering reset hand
From: |
Zhu Guihua |
Subject: |
[Qemu-devel] [PATCH v8 2/4] hw: add a wrapper for registering reset handler |
Date: |
Mon, 8 Jun 2015 18:35:40 +0800 |
Add a wrapper to specify reset order when registering reset handler,
instead of non-obvious initiazation code ordering.
Signed-off-by: Zhu Guihua <address@hidden>
---
include/hw/hw.h | 4 ++++
vl.c | 18 +++++++++++++++++-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/include/hw/hw.h b/include/hw/hw.h
index c78adae..d9375e7 100644
--- a/include/hw/hw.h
+++ b/include/hw/hw.h
@@ -37,7 +37,11 @@
#endif
typedef void QEMUResetHandler(void *opaque);
+typedef uint64_t QEMUResetOrder;
+#define default_reset_order 0x0
+void qemu_register_reset_common(QEMUResetHandler *func, void *opaque,
+ QEMUResetOrder reset_order);
void qemu_register_reset(QEMUResetHandler *func, void *opaque);
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque);
diff --git a/vl.c b/vl.c
index cdd81b4..a0d3e5e 100644
--- a/vl.c
+++ b/vl.c
@@ -1492,6 +1492,7 @@ typedef struct QEMUResetEntry {
QTAILQ_ENTRY(QEMUResetEntry) entry;
QEMUResetHandler *func;
void *opaque;
+ QEMUResetOrder reset_order;
} QEMUResetEntry;
static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
@@ -1575,15 +1576,30 @@ static int qemu_debug_requested(void)
return r;
}
-void qemu_register_reset(QEMUResetHandler *func, void *opaque)
+void qemu_register_reset_common(QEMUResetHandler *func, void *opaque,
+ QEMUResetOrder reset_order)
{
+ QEMUResetEntry *item;
QEMUResetEntry *re = g_malloc0(sizeof(QEMUResetEntry));
re->func = func;
re->opaque = opaque;
+ re->reset_order = reset_order;
+
+ QTAILQ_FOREACH(item, &reset_handlers, entry) {
+ if (re->reset_order >= item->reset_order)
+ continue;
+ QTAILQ_INSERT_BEFORE(item, re, entry);
+ return;
+ }
QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
}
+void qemu_register_reset(QEMUResetHandler *func, void *opaque)
+{
+ qemu_register_reset_common(func, opaque, default_reset_order);
+}
+
void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
{
QEMUResetEntry *re;
--
1.9.3