[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 4/7] ppc/pnv: Simplify pnv_bmc_create()
From: |
Greg Kurz |
Subject: |
Re: [PATCH 4/7] ppc/pnv: Simplify pnv_bmc_create() |
Date: |
Thu, 28 Jan 2021 13:04:28 +0100 |
On Thu, 28 Jan 2021 08:46:01 +0100
Cédric Le Goater <clg@kaod.org> wrote:
> On 1/28/21 1:46 AM, Joel Stanley wrote:
> > On Tue, 26 Jan 2021 at 17:14, Cédric Le Goater <clg@kaod.org> wrote:
> >>
> >> and reuse pnv_bmc_set_pnor() to share the setting of the PNOR.
> >>
> >> Signed-off-by: Cédric Le Goater <clg@kaod.org>
> >> ---
> >> hw/ppc/pnv_bmc.c | 7 +------
> >> 1 file changed, 1 insertion(+), 6 deletions(-)
> >>
> >> diff --git a/hw/ppc/pnv_bmc.c b/hw/ppc/pnv_bmc.c
> >> index 67ebb16c4d5f..86d16b493539 100644
> >> --- a/hw/ppc/pnv_bmc.c
> >> +++ b/hw/ppc/pnv_bmc.c
> >> @@ -260,13 +260,8 @@ IPMIBmc *pnv_bmc_create(PnvPnor *pnor)
> >> Object *obj;
> >>
> >> obj = object_new(TYPE_IPMI_BMC_SIMULATOR);
> >> - object_ref(OBJECT(pnor));
> >> - object_property_add_const_link(obj, "pnor", OBJECT(pnor));
> >
> > I assume it's ok to move the link set to after the realise of the BMC
> > object?
>
>
> When 2 objects need to be linked, one has to be realized first.
Realize isn't a QOM concept in the first place...
> I suppose this is why it is allowed but I am not expert in that area.
>
... so no surprise object_property_add_const_link() doesn't care
about it.
> Greg ?
>
What is important though is that a property with a given name
can only be added *once* to an object during its lifetime.
Doing the contrary is a bug and QEMU aborts. So, with this
in mind, it seems to me that adding QOM properties to a
device object should only be done from some init path
that is only called once.
> That was the case already when defining a "ipmi-bmc-sim" device on the
> command line.
>
Yeah and the property is added during machine reset... which
is typically a path that can be taken several times during
the machine lifetime. The potential crash is avoided because
pnv_reset() doesn't call pnv_bmc_set_pnor() if pnv->bmc is
already set, but this is a fragile workaround...
A QOM link doesn't look like the correct way to model the BMC
accesses to the PNOR. Since the only user is hiomap_cmd(),
it seems you could reach the same result with a pointer to
the PNOR object being passed to ipmi_sim_register_netfn()
and later passed to hiomap_cmd().
> C.
>
>
> >> qdev_realize(DEVICE(obj), NULL, &error_fatal);
> >> -
> >> - /* Install the HIOMAP protocol handlers to access the PNOR */
> >> - ipmi_sim_register_netfn(IPMI_BMC_SIMULATOR(obj), IPMI_NETFN_OEM,
> >> - &hiomap_netfn);
> >> + pnv_bmc_set_pnor(IPMI_BMC(obj), pnor);
> >>
> >> return IPMI_BMC(obj);
> >> }
> >> --
> >> 2.26.2
> >>
> >>
>
Re: [PATCH 4/7] ppc/pnv: Simplify pnv_bmc_create(), David Gibson, 2021/01/27
[PATCH 5/7] ppc/pnv: Discard internal BMC initialization when BMC is external, Cédric Le Goater, 2021/01/26
Re: [PATCH 5/7] ppc/pnv: Discard internal BMC initialization when BMC is external, David Gibson, 2021/01/27