From: David Gibson <david@gibson.dropbear.id.au>
To: Greg Kurz <groug@kaod.org>
Cc: "Philippe Mathieu-Daudé" <philmd@redhat.com>,
qemu-ppc@nongnu.org, "Cédric Le Goater" <clg@kaod.org>,
qemu-devel@nongnu.org
Subject: Re: [PATCH v5 4/7] ppc/pnv: Add a PnvChip pointer to PnvCore
Date: Sun, 27 Oct 2019 17:54:03 +0100 [thread overview]
Message-ID: <20191027165403.GC3552@umbus.metropole.lan> (raw)
In-Reply-To: <20191024184823.522c02e6@bahia.lan>
[-- Attachment #1: Type: text/plain, Size: 6801 bytes --]
On Thu, Oct 24, 2019 at 06:48:23PM +0200, Greg Kurz wrote:
> On Thu, 24 Oct 2019 11:57:05 +0200
> Cédric Le Goater <clg@kaod.org> wrote:
>
> > On 24/10/2019 04:38, David Gibson wrote:
> > > On Tue, Oct 22, 2019 at 06:38:09PM +0200, Cédric Le Goater wrote:
> > >> We will use it to reset the interrupt presenter from the CPU reset
> > >> handler.
> > >>
> > >> Signed-off-by: Cédric Le Goater <clg@kaod.org>
> > >> Reviewed-by: Greg Kurz <groug@kaod.org>
> > >> ---
> > >> include/hw/ppc/pnv_core.h | 3 +++
> > >> hw/ppc/pnv_core.c | 3 ++-
> > >> 2 files changed, 5 insertions(+), 1 deletion(-)
> > >>
> > >> diff --git a/include/hw/ppc/pnv_core.h b/include/hw/ppc/pnv_core.h
> > >> index bfbd2ec42aa6..55eee95104da 100644
> > >> --- a/include/hw/ppc/pnv_core.h
> > >> +++ b/include/hw/ppc/pnv_core.h
> > >> @@ -31,6 +31,8 @@
> > >> #define PNV_CORE_GET_CLASS(obj) \
> > >> OBJECT_GET_CLASS(PnvCoreClass, (obj), TYPE_PNV_CORE)
> > >>
> > >> +typedef struct PnvChip PnvChip;
> > >> +
> > >> typedef struct PnvCore {
> > >> /*< private >*/
> > >> CPUCore parent_obj;
> > >> @@ -38,6 +40,7 @@ typedef struct PnvCore {
> > >> /*< public >*/
> > >> PowerPCCPU **threads;
> > >> uint32_t pir;
> > >> + PnvChip *chip;
> > >
> > > I don't love having this as a redundant encoding of the information
> > > already in the property, since it raises the possibility of confusing
> > > bugs if they ever got out of sync.
> >
> > Indeed.
> >
> > > It's not a huge deal, but it would be nice to at least to at least
> > > consider either a) grabbing the property everywhere you need it (if
> > > there aren't too many places)
> >
> > We need the chip at core creation and core reset to call the
> > interrupt chip handlers. These are not hot path but the pointer
> > seemed practical.
> >
>
> FWIW this is also used at core destruction in this patch:
>
> [1/3] ppc: Add intc_destroy() handlers to SpaprInterruptController/PnvChip
> https://patchwork.ozlabs.org/patch/1183158/
>
> > > or b) customizing the property
> > > definition so it's written directly into that field.
> >
> > OK. That is better than just a link.
> >
>
> I think David is suggesting to use object_property_add_link()
> instead of object_property_add_const_link() actually. Something
> like that:
TBH, I hadn't looked into the mechanics of how to do this that
closely. Change below looks pretty reasonable, though.
>
> diff --git a/include/hw/ppc/pnv_core.h b/include/hw/ppc/pnv_core.h
> index 55eee95104da..fce6d8d9b31b 100644
> --- a/include/hw/ppc/pnv_core.h
> +++ b/include/hw/ppc/pnv_core.h
> @@ -36,11 +36,11 @@ typedef struct PnvChip PnvChip;
> typedef struct PnvCore {
> /*< private >*/
> CPUCore parent_obj;
> + PnvChip *chip;
>
> /*< public >*/
> PowerPCCPU **threads;
> uint32_t pir;
> - PnvChip *chip;
>
> MemoryRegion xscom_regs;
> } PnvCore;
> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
> index 68cc3c81aa75..90449d33e422 100644
> --- a/hw/ppc/pnv.c
> +++ b/hw/ppc/pnv.c
> @@ -1312,8 +1312,8 @@ static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
> object_property_set_int(OBJECT(pnv_core),
> pcc->core_pir(chip, core_hwid),
> "pir", &error_fatal);
> - object_property_add_const_link(OBJECT(pnv_core), "chip",
> - OBJECT(chip), &error_fatal);
> + object_property_set_link(OBJECT(pnv_core), OBJECT(chip), "chip",
> + &error_abort);
> object_property_set_bool(OBJECT(pnv_core), true, "realized",
> &error_fatal);
>
> diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
> index 61b3d3ce2250..8562a9961845 100644
> --- a/hw/ppc/pnv_core.c
> +++ b/hw/ppc/pnv_core.c
> @@ -217,15 +217,6 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
> void *obj;
> int i, j;
> char name[32];
> - Object *chip;
> -
> - chip = object_property_get_link(OBJECT(dev), "chip", &local_err);
> - if (!chip) {
> - error_propagate_prepend(errp, local_err,
> - "required link 'chip' not found: ");
> - return;
> - }
> - pc->chip = PNV_CHIP(chip);
>
> pc->threads = g_new(PowerPCCPU *, cc->nr_threads);
> for (i = 0; i < cc->nr_threads; i++) {
> @@ -323,6 +314,14 @@ static void pnv_core_class_init(ObjectClass *oc, void *data)
> dc->props = pnv_core_properties;
> }
>
> +static void pnv_core_instance_init(Object *obj)
> +{
> + object_property_add_link(obj, "chip", TYPE_PNV_CHIP,
> + (Object **) &PNV_CORE(obj)->chip,
> + qdev_prop_allow_set_link_before_realize,
> + 0, &error_abort);
> +}
> +
> #define DEFINE_PNV_CORE_TYPE(family, cpu_model) \
> { \
> .parent = TYPE_PNV_CORE, \
> @@ -335,6 +334,7 @@ static const TypeInfo pnv_core_infos[] = {
> .name = TYPE_PNV_CORE,
> .parent = TYPE_CPU_CORE,
> .instance_size = sizeof(PnvCore),
> + .instance_init = pnv_core_instance_init,
> .class_size = sizeof(PnvCoreClass),
> .class_init = pnv_core_class_init,
> .abstract = true,
> ----
>
> > C.
> >
> > >
> > >>
> > >> MemoryRegion xscom_regs;
> > >> } PnvCore;
> > >> diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
> > >> index 9f981a4940e6..cc17bbfed829 100644
> > >> --- a/hw/ppc/pnv_core.c
> > >> +++ b/hw/ppc/pnv_core.c
> > >> @@ -222,6 +222,7 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
> > >> "required link 'chip' not found: ");
> > >> return;
> > >> }
> > >> + pc->chip = PNV_CHIP(chip);
> > >>
> > >> pc->threads = g_new(PowerPCCPU *, cc->nr_threads);
> > >> for (i = 0; i < cc->nr_threads; i++) {
> > >> @@ -243,7 +244,7 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
> > >> }
> > >>
> > >> for (j = 0; j < cc->nr_threads; j++) {
> > >> - pnv_realize_vcpu(pc->threads[j], PNV_CHIP(chip), &local_err);
> > >> + pnv_realize_vcpu(pc->threads[j], pc->chip, &local_err);
> > >> if (local_err) {
> > >> goto err;
> > >> }
> > >
> >
>
--
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: 833 bytes --]
next prev parent reply other threads:[~2019-10-27 17:30 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-22 16:38 [PATCH v5 0/7] ppc: reset the interrupt presenter from the CPU reset handler Cédric Le Goater
2019-10-22 16:38 ` [PATCH v5 1/7] spapr: move CPU reset after presenter creation Cédric Le Goater
2019-10-22 16:38 ` [PATCH v5 2/7] spapr_cpu_core: Implement DeviceClass::reset Cédric Le Goater
2019-10-22 16:38 ` [PATCH v5 3/7] ppc/pnv: Introduce a PnvCore reset handler Cédric Le Goater
2019-10-23 11:18 ` Philippe Mathieu-Daudé
2019-10-24 2:33 ` David Gibson
2019-10-22 16:38 ` [PATCH v5 4/7] ppc/pnv: Add a PnvChip pointer to PnvCore Cédric Le Goater
2019-10-23 11:19 ` Philippe Mathieu-Daudé
2019-10-24 2:38 ` David Gibson
2019-10-24 9:57 ` Cédric Le Goater
2019-10-24 16:48 ` Greg Kurz
2019-10-27 16:54 ` David Gibson [this message]
2019-10-27 16:52 ` David Gibson
2019-10-24 17:30 ` Greg Kurz
2019-10-27 16:54 ` David Gibson
2019-10-22 16:38 ` [PATCH v5 5/7] ppc: Reset the interrupt presenter from the CPU reset handler Cédric Le Goater
2019-10-22 20:26 ` Greg Kurz
2019-10-23 11:25 ` Philippe Mathieu-Daudé
2019-10-24 2:40 ` David Gibson
2019-10-22 16:38 ` [PATCH v5 6/7] ppc/pnv: Fix naming of routines realizing the CPUs Cédric Le Goater
2019-10-23 11:26 ` Philippe Mathieu-Daudé
2019-10-22 16:38 ` [PATCH v5 7/7] spapr/xive: Set the OS CAM line at reset Cédric Le Goater
2019-10-24 2:41 ` David Gibson
2019-10-24 2:35 ` [PATCH v5 0/7] ppc: reset the interrupt presenter from the CPU reset handler David Gibson
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=20191027165403.GC3552@umbus.metropole.lan \
--to=david@gibson.dropbear.id.au \
--cc=clg@kaod.org \
--cc=groug@kaod.org \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@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).