From: Paolo Bonzini <pbonzini@redhat.com>
To: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>,
qemu-devel@nongnu.org, imammedo@redhat.com, afaerber@suse.de,
ehabkost@redhat.com
Cc: chen.fan.fnst@cn.fujitsu.com, izumi.taku@jp.fujitsu.com
Subject: Re: [Qemu-devel] [RESEND PATCH v8 2/4] hw: add a wrapper for registering reset handler
Date: Thu, 25 Jun 2015 19:00:46 +0200 [thread overview]
Message-ID: <558C33BE.8020603@redhat.com> (raw)
In-Reply-To: <7d54c33fa2a928fd317f3a95af61f854f43ba23c.1435195913.git.zhugh.fnst@cn.fujitsu.com>
On 25/06/2015 04:17, Zhu Guihua wrote:
> Add a wrapper to specify reset order when registering reset handler,
> instead of non-obvious initiazation code ordering.
>
> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
I'm sorry, this is not really acceptable. The initialization code
ordering is good because it should be okay to run reset handlers in the
same order as code is run. If there are dependencies between reset
handlers, a random integer is not a maintainable way to maintain them.
Instead, you should have a single reset handler that calls the reset
handlers in the right order; for example a qdev bus such as icc_bus
always resets children before parents.
Are you sure that you want to remove the icc_bus?... What are you
gaining exactly by doing so?
Paolo
> ---
> 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 69ad90c..b205a9b 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -1589,6 +1589,7 @@ typedef struct QEMUResetEntry {
> QTAILQ_ENTRY(QEMUResetEntry) entry;
> QEMUResetHandler *func;
> void *opaque;
> + QEMUResetOrder reset_order;
> } QEMUResetEntry;
>
> static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
> @@ -1672,15 +1673,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;
>
next prev parent reply other threads:[~2015-06-25 17:01 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-25 2:17 [Qemu-devel] [RESEND PATCH v8 0/4] remove icc bus/bridge Zhu Guihua
2015-06-25 2:17 ` [Qemu-devel] [RESEND PATCH v8 1/4] apic: map APIC's MMIO region at each CPU's address space Zhu Guihua
2015-06-25 16:00 ` Andreas Färber
2015-06-25 16:02 ` Paolo Bonzini
2015-06-25 16:10 ` Andreas Färber
2015-06-25 17:02 ` Paolo Bonzini
2015-06-25 17:08 ` Andreas Färber
2015-06-25 17:27 ` Paolo Bonzini
2015-06-25 17:32 ` Peter Maydell
2015-06-25 17:39 ` Paolo Bonzini
2015-06-26 9:01 ` Igor Mammedov
2015-06-26 9:05 ` Paolo Bonzini
2015-06-25 2:17 ` [Qemu-devel] [RESEND PATCH v8 2/4] hw: add a wrapper for registering reset handler Zhu Guihua
2015-06-25 16:57 ` Andreas Färber
2015-06-25 17:00 ` Paolo Bonzini [this message]
2015-06-25 17:28 ` Andreas Färber
2015-06-26 9:19 ` Igor Mammedov
2015-06-26 10:05 ` Paolo Bonzini
2015-06-30 6:31 ` Zhu Guihua
2015-06-30 9:21 ` Igor Mammedov
2015-06-30 10:50 ` Zhu Guihua
2015-06-30 10:55 ` Peter Maydell
2015-06-30 18:38 ` Eduardo Habkost
2015-06-30 10:24 ` Andreas Färber
2015-06-30 18:30 ` Eduardo Habkost
2015-06-25 2:17 ` [Qemu-devel] [RESEND PATCH v8 3/4] cpu/apic: drop icc bus/bridge Zhu Guihua
2015-06-25 16:44 ` Andreas Färber
2015-06-25 2:17 ` [Qemu-devel] [RESEND PATCH v8 4/4] icc_bus: drop the unused files Zhu Guihua
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=558C33BE.8020603@redhat.com \
--to=pbonzini@redhat.com \
--cc=afaerber@suse.de \
--cc=chen.fan.fnst@cn.fujitsu.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=qemu-devel@nongnu.org \
--cc=zhugh.fnst@cn.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).