From: Paolo Bonzini <pbonzini@redhat.com>
To: "Claudio Fontana" <cfontana@suse.de>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>
Subject: Re: all class init functions for all types in QEMU are called in select_machine(). Expected?
Date: Fri, 12 Mar 2021 18:04:15 +0100 [thread overview]
Message-ID: <6f2e5a50-c548-28c5-1ce0-e583bf90eaf1@redhat.com> (raw)
In-Reply-To: <8ca3a983-05ad-a0de-31e9-65b6c41a2b4c@suse.de>
On 12/03/21 14:40, Claudio Fontana wrote:
> /*
> * double dispatch. The first callback allows the accel cpu
> * to run initializations for the CPU,
> * the second one allows the CPU to customize the accel cpu
> * behavior according to the CPU.
> *
> * The second is currently only used by TCG, to specialize the
> * TCGCPUOps depending on the CPU type.
> */
> cc->accel_cpu = accel_cpu;
> if (accel_cpu->cpu_class_init) {
> accel_cpu->cpu_class_init(cc);
> }
> if (cc->init_accel_cpu) {
> cc->init_accel_cpu(accel_cpu, cc);
> }
> }
>
> .. but maybe this is premature, and should wait for actual users of this beyond TCG on ARM?
I prefer to single out TCG and have the call in cpu_class_init. The
idea of double dispatch (as opposed to an if/else chain with checks on
the class of the argument) is that the first caller uses different
"method names" to tell its type name to the target.
See for example
https://en.wikipedia.org/wiki/Double_dispatch#Example_in_Ruby.
Paolo
next prev parent reply other threads:[~2021-03-12 17:08 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-12 9:31 all class init functions for all types in QEMU are called in select_machine(). Expected? Claudio Fontana
2021-03-12 9:45 ` Philippe Mathieu-Daudé
2021-03-12 9:58 ` Claudio Fontana
2021-03-12 10:07 ` Paolo Bonzini
2021-03-12 10:25 ` Claudio Fontana
2021-03-12 10:39 ` Paolo Bonzini
2021-03-12 11:51 ` Claudio Fontana
2021-03-12 12:02 ` Paolo Bonzini
2021-03-12 13:40 ` Claudio Fontana
2021-03-12 14:00 ` Claudio Fontana
2021-03-12 17:04 ` Paolo Bonzini [this message]
2021-03-12 17:24 ` Claudio Fontana
2021-03-12 17:30 ` Paolo Bonzini
2021-03-12 9:46 ` Paolo Bonzini
2021-03-12 9:49 ` Claudio Fontana
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=6f2e5a50-c548-28c5-1ce0-e583bf90eaf1@redhat.com \
--to=pbonzini@redhat.com \
--cc=cfontana@suse.de \
--cc=ehabkost@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).