On Wed, 26 Jul 2017 14:29:26 +1000 Alexey Kardashevskiy <a...@ozlabs.ru> wrote:
> On 26/07/17 03:59, Greg Kurz wrote: > > This memory region should be owned by the PHB. This ensures the PHB > > cannot be finalized as long as the the region is guest visible, or > > used by a CPU or a device. > > Out of curiosity - does it really ensure this? Passing a parent to > memory_region_init_io() adds a reference to a child (i.e. "msi" region), > not to the PHB object. You're right, being owner of the MR means the PHB is parent and takes a reference on the MR. But it also means a reference on the PHB is taken/dropped each time the MR gets referenced/unreferenced (ie, "guest visible or used by a CPU or a device"). > It is probably a good thing to have an owner for > every MR anyway, I am just not sure about the commit log, what does not > work if you do not do this? > The PHB could theorically get unrealized while the MSI region is still active. But since the associated MMIO op spapr_msi_write() only uses the machine object and not the PHB, I admit I don't have a scenario where this could break something... So even if doesn't fix anything obvious, as you say, it is probably a good thing to have an owner for every MR anyway :) > > > > > Signed-off-by: Greg Kurz <gr...@kaod.org> > > --- > > hw/ppc/spapr_pci.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c > > index 3fe7f3145467..4e4165b44b9a 100644 > > --- a/hw/ppc/spapr_pci.c > > +++ b/hw/ppc/spapr_pci.c > > @@ -1703,7 +1703,7 @@ static void spapr_phb_realize(DeviceState *dev, Error > > **errp) > > } > > #endif > > > > - memory_region_init_io(&sphb->msiwindow, NULL, &spapr_msi_ops, spapr, > > + memory_region_init_io(&sphb->msiwindow, OBJECT(sphb), &spapr_msi_ops, > > spapr, > > "msi", msi_window_size); > > memory_region_add_subregion(&sphb->iommu_root, SPAPR_PCI_MSI_WINDOW, > > &sphb->msiwindow); > > > > > >
pgp1ErqSsooIN.pgp
Description: OpenPGP digital signature