On Tue, Sep 28, 2021 at 3:28 PM Ani Sinha <ani@xxxxxxxxxxx> wrote: > > > > On Tue, 28 Sep 2021, Daniel P. Berrangé wrote: > > > On Tue, Sep 28, 2021 at 02:35:47PM +0530, Ani Sinha wrote: > > > > > > > > > On Tue, 28 Sep 2021, Daniel P. Berrangé wrote: > > > > > > > On Sun, Sep 12, 2021 at 08:56:29AM +0530, Ani Sinha wrote: > > > > > This change introduces libvirt xml support for the following two pm options: > > > > > > > > > > <pm> > > > > > <acpi-hotplug-bridge enabled='no'/> > > > > > <acpi-root-hotplug enabled='yes'/> > > > > > </pm> > > > > > > > > > > > > > +``acpi-hotplug-bridge`` > > > > > + :since:`Since 7.8.0` This option enables or disables BIOS ACPI based hotplug support > > > > > + for cold plugged bridges. It is available only for x86 guests, both for q35 and pc > > > > > + machine types. For pc machines, the support is available from `QEMU 2.12`. For q35 > > > > > + machines, the support is available from `QEMU 6.1`. Examples of cold plugged bridges > > > > > + include PCI-PCI bridges for pc machine types (pci-bridge controller). For q35 machines, > > > > > + it includes PCIE root ports (pcie-root-port controller). This is a global option that > > > > > + affects all bridges. No other bridge specific option is required to be specified. > > > > > > > > Can you confirm my understanding of the situation.. > > > > > > > > - i440fx / PCI topology - hotplug always uses ACPI > > > > > > > > > > ACPI is the primary means of enabling hotplug. shpc might also have a role > > > here but I think it is disabled. Igor (cc'd) might throw some lights on > > > how shpc comes to play. > > > > Yes, I think it will be important to understand if 'shpc' becomes relevant > > when ACPI hotplug is disabled for PCI https://patchwork.kernel.org/project/qemu-devel/patch/1478099802-14188-1-git-send-email-marcel@xxxxxxxxxx has some discussions around shpc. Also "PCI devices can be hot-plugged into PCI Express to PCI and PCI-PCI Bridges. The PCI hot-plug into PCI-PCI bridge is ACPI based, whereas hot-plug into PCI Express to PCI bridges is SHPC-based. They both can work side by side with the PCI Express native hot-plug." https://android.googlesource.com/platform/external/qemu/+/emu-master-dev/docs/pcie.txt My own experiments on i440fx has shown that Windows does not seem to care about shpc. Disabling acpi hotplug on bridges disables hotplug. > > > > > > > > > - q35 / PCIe topology - hotplug historically used native PCIe hotplug, > > > > but in 6.1 switched to ACPI > > > > > > > > > > Correct. > > > > > > > Given, the name "acpi-hotplug-bridge", am I right that this option > > > > has *no* effect, if the q35 machine is using native PCIe hotplug > > > > approach ? > > > > > > Its complicated. > > > With "acpi-hotplug-bridge" ON, native hotplug is disabled in qemu. > > > With "acpi-hotplug-bridge" OFF, native hotplug is enabled in qemu. > > > > Oh, I mis-read and didn't realize this was controlling the QEMU > > "acpi-pci-hotplug-with-bridge-support" configuration. > > > > With this in mind I think the naming is somewhat misleading. Setting it > > to off would give users the impression that hotplug is disabled, which > > is not the case for Q35 at least. It is just switching to a different > > hotplug implementation. > > > > At least from Q35 pov, I think it would be better to call it > > > > hotplug-mode="acpi|pcie" > > > > so it is clear that no matter what value it is set to, hotplug > > is still available. > > > > If we also consider PIIX, then depending on the answer wrt shpc > > above, we might want one of > > > > hotplug-mode="acpi|pcie|none" > > hotplug-mode="acpi|pcie|shpc" > > > > If libvirt does not deal with shpc today I think we should not bother with > shpc at all. We should simply have a boolean mode appropriately named that > choses between acpi hotplug vs native. > > > > > > Libvirt does not allow it, but by directly using qemu commandline it is > > > possible to enable ACPI hotplug for pcie-root-ports by turning > > > "acpi-hotplug-bridge" ON _and_ enable native hotplug at the same time. In > > > that case, as Julia has mentioned in some other thread, the guest OS > > > always choses native over ACPI based hotplug. > > > > I see that is refering to pie-root-port gaining native_hotplug=bool in 6.1 > > > > You say the guest OS always chooses native over ACPI - is that reqiired > > in the spec, or is that just how some common guest OS have choosen to > > impl it today ? > > > > I am not sure but I *think* this is guest OS dependent too? Julia to > rescue here :-) > > > > > > The <target hotplug="on/off"> switch in libvirt for pcie-root-ports > > > currently does not care whether native or acpi hotplug is used. It simply > > > turns on the hotplug for that particular port. Whether ACPI or native is > > > used is controlled by this global flag that Julia has introduced in 6.1. > > > > Right so we have > > > > * PIIX4 > > > > - acpi-root-pci-hotplug=bool > > > > Whether hotplug is enabled for the root bridge or not > > > > <target hotplug="on/off"> for pci-root controller > > > > > > - acpi-pci-hotplug-with-bridge-support=bool > > > > Toggles support for ACPI based hotplug across all bridges. > > If disabled will there will be no hotplug at all for PIIX4 ? > > Or does 'shpc' come into play in that scenario ? > > > > > > PIIX combinations > > > > (1) acpi-root-pci-hotplug=yes > > acpi-pci-hotplug-with-bridge-support=yes > > > > - All bridges have hotplug > > > > (2) acpi-root-pci-hotplug=yes > > acpi-pci-hotplug-with-bridge-support=no > > > > - No bridges have hotplug > > > > (3) acpi-root-pci-hotplug=no > > acpi-pci-hotplug-with-bridge-support=yes > > > > - All bridges except root have hotplug > > > > (4) acpi-root-pci-hotplug=no > > acpi-pci-hotplug-with-bridge-support=no > > > > - No bridges have hotplug. Essentially identical to (2) > > no (4) is not identical to (2). In (4) no hotplug is enabled. In (2) pci > root bus still has hotplug enabled. > > > > > > * Q35 > > > > > > - acpi-pci-hotplug-with-bridge-support=bool > > > > Toggles support for ACPI based hotplug. If disabled native > > PCIe hotplug is activated instead > > > > > > * pcie-root-port > > > > - hotplug=bool > > > > Toggles whether hotplug is enabled on the port. Affects > > either native and ACPI based hotplug, depending on what > > acpi-pci-hotplug-with-bridge-support=bool is set to ? > > > > <target hotplug="on/off"> for pcie-root-port controller > > > > - native_hotplug=bool > > > > Can be used to also enable native hotplug, even when ACPI > > based hotplug is globally enabled. IOW only really relevant > > when acpi-pci-hotplug-with-bridge-support=true > > > > > > Q35 combinations > > > > (1) acpi-pci-hotplug-with-bridge-support=yes > > pcie-root-port.hotplug=yes > > pcie-root-port.native_hotplug=yes > > > > ports have both ACPI + native hotplug, guest prefers native > > > > > > (2) acpi-pci-hotplug-with-bridge-support=yes > > pcie-root-port.hotplug=no > > pcie-root-port.native_hotplug=yes > > > > ports have no hotplug, despite native_hotplug=yes IIUC > > > > > > (3) acpi-pci-hotplug-with-bridge-support=yes > > pcie-root-port.hotplug=yes > > pcie-root-port.native_hotplug=no > > > > ports have ACPI hotplug only > > > > > > (4) acpi-pci-hotplug-with-bridge-support=yes > > pcie-root-port.hotplug=no > > pcie-root-port.native_hotplug=no > > > > ports have no hotplug > > > > > > (5) acpi-pci-hotplug-with-bridge-support=no > > pcie-root-port.hotplug=yes > > pcie-root-port.native_hotplug=yes > > > > ports have native hotplug > > > > > > (6) acpi-pci-hotplug-with-bridge-support=no > > pcie-root-port.hotplug=no > > pcie-root-port.native_hotplug=yes > > > > ports have no hotplug, despite native_hotplug=yes IIUC > > > > > > (7) acpi-pci-hotplug-with-bridge-support=no > > pcie-root-port.hotplug=yes > > pcie-root-port.native_hotplug=no > > > > ports have no hotplug, despite hotplug=yes IIUC > > > > > > (8) acpi-pci-hotplug-with-bridge-support=no > > pcie-root-port.hotplug=no > > pcie-root-port.native_hotplug=no > > > > ports have no hotplug > > > > > > > > Regards, > > Daniel > > -- > > |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| > > |: https://libvirt.org -o- https://fstop138.berrange.com :| > > |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| > > > >