qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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



  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).