On Fri, 29 Nov 2019 18:41:26 +0000 Peter Maydell <peter.mayd...@linaro.org> wrote:
> On Fri, 18 Oct 2019 at 16:07, Damien Hedde <damien.he...@greensocs.com> wrote: > > > > In qdev_set_parent_bus(), when changing the parent bus of a > > realized device, if the source and destination buses are not in the > > same reset state, some adaptation are required. This patch adds > > "adaptations" > > > needed call to resettable_change_parent() to make sure a device reset > > state stays coherent with its parent bus. > > > > The addition is a no-op if: > > 1. the device being parented is not realized. > > 2. the device is realized, but both buses are not under reset. > > > > Case 2 means that as long as qdev_set_parent_bus() is called > > during the machine realization procedure (which is before the > > machine reset so nothing is in reset), it is a no op. > > > > There are 49 call sites of qdev_set_parent_bus(). All but one fall > > into the no-op case: > > + 28 calls related to virtio (in hw/{s390x,display,virtio}/ > > {vhost,virtio}-xxx.c) to set a _vdev_/_vgpu_ composing device > > parent bus just before realizing the _vdev_/_vgpu_. > > + hw/qdev.c: when creating a device in qdev_try_create() > > + hw/sysbus.c: when initializing a device in the sysbus > > + hw/display/virtio-gpu-pci.c: before realizing VirtIOGPUPCIBase/vgpu > > + hw/display/virtio-vga.c: before realizing VirtIOVGABase/vgpu > > + hw/i386/amd_iommu.c: before realizing AMDVIState/pci > > + hw/misc/auxbus.c: when creating an AUXBus > > + hw/misc/auxbus.c: when creating an AUXBus child > > + hw/misc/macio/macio.c: when initializing a MACIOState child > > + hw/misc/macio/macio.c: before realizing NewWorldMacIOState/pmu > > + hw/misc/macio/macio.c: before realizing NewWorldMacIOState/cuda > > + hw/pci-host/designware.c: before realizing DesignwarePCIEHost/root > > + hw/pci-host/gpex.c: before realizing GPEXHost/root > > + hw/pci-host/prep.c: when initializaing PREPPCIState/pci_dev > > + hw/pci-host/q35.c: before realizing Q35PCIHost/mch > > + hw/pci-host/versatile.c: when initializing PCIVPBState/pci_dev > > + hw/pci-host/xilinx-pcie.c: before realizing XilinxPCIEHost/root > > + hw/s390x/event-facility.c: when creating SCLPEventFacility/ > > TYPE_SCLP_QUIESCE > > + hw/s390x/event-facility.c: ditto with SCLPEventFacility/ > > TYPE_SCLP_CPU_HOTPLUG > > + hw/s390x/sclp.c: Not trivial because it is called on a SLCPDevice > > just after realizing it. Ok because at this point the destination > > bus (sysbus) is not in reset; the realize step is before the > > machine reset. > > + hw/sd/core.c: Not OK. Used in sdbus_reparent_card(). See below. > > + hw/ssi/ssi.c: Used to put spi slave on spi bus and connect the cs > > line in ssi_auto_connect_slave(). Ok because this function is only > > used in realize step in hw/ssi/aspeed_smc.ci, hw/ssi/imx_spi.c, > > hw/ssi/mss-spi.c, hw/ssi/xilinx_spi.c and hw/ssi/xilinx_spips.c. > > + hw/xen/xen-legacy-backend.c: when creating a XenLegacyDevice device > > + qdev-monitor.c: in device hotplug creation procedure before realize > > This is a really useful analysis to have in the commit message; > thanks! > > (Side note: I wonder if the sclp.c case could be reordered so > it realizes the device after parenting it? Anyway, not something > to worry about now.) As far as I can see, that should work. This code is a bit weird anyway; the problem is that we need the sysbus somewhere in there... I'm wondering if that can be handled in a different way. But agreed, that is something we can revisit later. > > > Note that this commit alone will have no effect, right now there is no > > use of resettable API to reset anything. So a bus will never be tagged > > as in-reset by this same API. > > > > The one place where side-effect will occurs is in hw/sd/core.c in > > sdbus_reparent_card(). This function is only used in the raspi machines, > > including during the sysbus reset procedure. This case will be fixed by > > a following commit before globally enabling resettable API for sysbus > > reset. > > > > Signed-off-by: Damien Hedde <damien.he...@greensocs.com> > > Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> > > thanks > -- PMM >