From: David Gibson <david@gibson.dropbear.id.au>
To: Igor Mammedov <imammedo@redhat.com>
Cc: Greg Kurz <groug@kaod.org>,
Bharata B Rao <bharata@linux.vnet.ibm.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
qemu-devel@nongnu.org, Alexander Graf <agraf@suse.de>,
qemu-ppc@nongnu.org, Cedric Le Goater <clg@kaod.org>,
Scott Wood <scottwood@freescale.com>
Subject: Re: [Qemu-devel] [PATCH v2 4/7] ppc: open code cpu creation for machine types
Date: Mon, 4 Jul 2016 18:09:12 +1000 [thread overview]
Message-ID: <20160704080912.GK2919@voom.fritz.box> (raw)
In-Reply-To: <20160704093747.12ed6e8a@172-15-182-60.lightspeed.austtx.sbcglobal.net>
[-- Attachment #1: Type: text/plain, Size: 4607 bytes --]
On Mon, Jul 04, 2016 at 09:37:47AM +0200, Igor Mammedov wrote:
> On Mon, 4 Jul 2016 13:54:55 +1000
> David Gibson <david@gibson.dropbear.id.au> wrote:
>
> > On Sat, Jul 02, 2016 at 10:33:33AM +0200, Greg Kurz wrote:
> > > On Sat, 2 Jul 2016 13:36:22 +0530
> > > Bharata B Rao <bharata@linux.vnet.ibm.com> wrote:
> > >
> > > > On Sat, Jul 02, 2016 at 12:41:48AM +0200, Greg Kurz wrote:
> > > > > If we want to generate cpu_dt_id in the machine code, this must
> > > > > occur before the cpu gets realized. We must open code the cpu
> > > > > creation to be able to do this.
> > > > >
> > > > > This patch just does that. It borrows some lines from previous
> > > > > work from Bharata to handle the feature parsing.
> > > > >
> > > > > Signed-off-by: Greg Kurz <groug@kaod.org>
> > > > > ---
> > > > > hw/ppc/ppc.c | 39 ++++++++++++++++++++++++++++++++++++++-
> > > > > 1 file changed, 38 insertions(+), 1 deletion(-)
> > > > >
> > > > > diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c
> > > > > index dc3d214009c5..57f4ddd073d0 100644
> > > > > --- a/hw/ppc/ppc.c
> > > > > +++ b/hw/ppc/ppc.c
> > > > > @@ -32,6 +32,7 @@
> > > > > #include "sysemu/cpus.h"
> > > > > #include "hw/timer/m48t59.h"
> > > > > #include "qemu/log.h"
> > > > > +#include "qapi/error.h"
> > > > > #include "qemu/error-report.h"
> > > > > #include "hw/loader.h"
> > > > > #include "sysemu/kvm.h"
> > > > > @@ -1353,5 +1354,41 @@ PowerPCCPU *ppc_get_vcpu_by_dt_id(int
> > > > > cpu_dt_id)
> > > > >
> > > > > PowerPCCPU *ppc_cpu_init(const char *cpu_model)
> > > > > {
> > > > > - return POWERPC_CPU(cpu_generic_init(TYPE_POWERPC_CPU,
> > > > > cpu_model));
> > > > > + PowerPCCPU *cpu;
> > > > > + CPUClass *cc;
> > > > > + ObjectClass *oc;
> > > > > + gchar **model_pieces;
> > > > > + Error *err = NULL;
> > > > > +
> > > > > + model_pieces = g_strsplit(cpu_model, ",", 2);
> > > > > + if (!model_pieces[0]) {
> > > > > + error_report("Invalid/empty CPU model name");
> > > > > + return NULL;
> > > > > + }
> > > > > +
> > > > > + oc = cpu_class_by_name(TYPE_POWERPC_CPU, model_pieces[0]);
> > > > > + if (oc == NULL) {
> > > > > + error_report("Unable to find CPU definition: %s",
> > > > > model_pieces[0]);
> > > > > + return NULL;
> > > > > + }
> > > > > +
> > > > > + cpu = POWERPC_CPU(object_new(object_class_get_name(oc)));
> > > > > +
> > > > > + cc = CPU_CLASS(oc);
> > > > > + cc->parse_features(CPU(cpu), model_pieces[1], &err);
> > > >
> > > > Igor is working on a patchset to convert -cpu features into
> > > > global properties. IIUC, after that patchset, it is not
> > > > recommended to parse the -cpu features for every CPU but do it
> > > > only once.
> > > >
> > >
> > > cpu_generic_init() in the current code also does the parsing, and
> > > as the title says, this patch is just about open coding the
> > > creation. I don't want to change behavior yet.
> > >
> > > But yes, I agree that we should only parse features once and I'll
> > > be more than happy to fix this in a followup patch, based on Igor's
> > > work.
> > >
> > > In the meantime, maybe I can add a comment stating that the parsing
> > > should go away ?
> >
> > Right. But the thing is by open coding here, you're making two copies
> > that need to be fixed instead of one, which increases the chances of
> > error.
> this patch matches what has been done for x86 target as a pert of
> decoupling *-user mode from machine emulation.
>
> > It seems like it would be safer to change the generic code so there's
> > a new generic function which doesn't do the realize which we can use
> > on ppc (and other platforms when/if they need it).
> We've had it in x86 until recently but I've replaced it
> cpu_generic_init(), please don't go that route.
>
> There is not much to generalize here so far it's basically following
> code
> cpu = object_new(cpu-type)
> parse-features(cpu)
>
> set_properties(cpu) /* optional machine specific */
>
> cpu->realize()
>
> once parse-features refactoring is merged, there won't be anything cpu
> specific left as parse-features(cpu) could be moved to generic code
> and only very machine specific set_properties would be left which are
> not generalizable.
Ok.
Greg, belay that suggestion :).
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-07-04 8:07 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-01 22:41 [Qemu-devel] [PATCH v2 0/7] ppc: compute cpu_dt_id in the machine code Greg Kurz
2016-07-01 22:41 ` [Qemu-devel] [PATCH v2 1/7] spapr: Ensure thread0 of CPU core is always realized first Greg Kurz
2016-07-01 22:41 ` [Qemu-devel] [PATCH v2 2/7] ppc: simplify max_smt initialization in ppc_cpu_realizefn() Greg Kurz
2016-07-04 3:53 ` David Gibson
2016-07-01 22:41 ` [Qemu-devel] [PATCH v2 3/7] ppc: different creation paths for cpus in system and user mode Greg Kurz
2016-07-04 7:14 ` Igor Mammedov
2016-07-04 7:40 ` Greg Kurz
2016-07-01 22:41 ` [Qemu-devel] [PATCH v2 4/7] ppc: open code cpu creation for machine types Greg Kurz
2016-07-02 8:06 ` Bharata B Rao
2016-07-02 8:33 ` Greg Kurz
2016-07-04 3:54 ` David Gibson
2016-07-04 6:32 ` Greg Kurz
2016-07-04 8:08 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2016-07-04 7:37 ` [Qemu-devel] " Igor Mammedov
2016-07-04 8:09 ` David Gibson [this message]
2016-07-01 22:41 ` [Qemu-devel] [PATCH v2 5/7] ppc: introduce ppc_set_vcpu_dt_id() Greg Kurz
2016-07-01 22:42 ` [Qemu-devel] [PATCH v2 6/7] spapr: use ppc_set_vcpu_dt_id() in CPU hotplug code Greg Kurz
2016-07-02 8:14 ` Bharata B Rao
2016-07-02 8:35 ` Greg Kurz
2016-07-01 22:42 ` [Qemu-devel] [PATCH v2 7/7] ppc: move the cpu_dt_id logic to machine code Greg Kurz
2016-07-02 8:15 ` Bharata B Rao
2016-07-02 8:42 ` Greg Kurz
2016-07-02 9:55 ` [Qemu-devel] [PATCH v2 0/7] ppc: compute cpu_dt_id in the " Bharata B Rao
2016-07-02 10:34 ` Greg Kurz
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=20160704080912.GK2919@voom.fritz.box \
--to=david@gibson.dropbear.id.au \
--cc=agraf@suse.de \
--cc=benh@kernel.crashing.org \
--cc=bharata@linux.vnet.ibm.com \
--cc=clg@kaod.org \
--cc=groug@kaod.org \
--cc=imammedo@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=scottwood@freescale.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.