Message ID | 20210617190739.3673064-2-jusual@redhat.com |
---|---|
State | New |
Headers | show |
Series | Use ACPI PCI hot-plug for Q35 | expand |
On Thu, Jun 17, 2021 at 10:08 PM Julia Suvorova <jusual@redhat.com> wrote: > PCI Express does not allow hot-plug on pcie.0. Check for Q35 in > acpi_pcihp_disable_root_bus() to be able to forbid hot-plug using the > 'acpi-root-pci-hotplug' flag. > > Signed-off-by: Julia Suvorova <jusual@redhat.com> > Reviewed-by: Igor Mammedov <imammedo@redhat.com> > --- > hw/acpi/pcihp.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c > index 4999277d57..09f531e941 100644 > --- a/hw/acpi/pcihp.c > +++ b/hw/acpi/pcihp.c > @@ -122,13 +122,14 @@ static void acpi_set_pci_info(void) > static void acpi_pcihp_disable_root_bus(void) > { > static bool root_hp_disabled; > + Object *host = acpi_get_i386_pci_host(); > PCIBus *bus; > > if (root_hp_disabled) { > return; > } > > - bus = find_i440fx(); > + bus = PCI_HOST_BRIDGE(host)->bus; > if (bus) { > /* setting the hotplug handler to NULL makes the bus > non-hotpluggable */ > qbus_set_hotplug_handler(BUS(bus), NULL); > -- > 2.30.2 > > Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Thanks, Marcel
On Thu, Jun 17, 2021 at 09:07:33PM +0200, Julia Suvorova wrote: > PCI Express does not allow hot-plug on pcie.0. Check for Q35 in > acpi_pcihp_disable_root_bus() to be able to forbid hot-plug using the > 'acpi-root-pci-hotplug' flag. > > Signed-off-by: Julia Suvorova <jusual@redhat.com> > Reviewed-by: Igor Mammedov <imammedo@redhat.com> > Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > --- > hw/acpi/pcihp.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c > index 4999277d57..09f531e941 100644 > --- a/hw/acpi/pcihp.c > +++ b/hw/acpi/pcihp.c > @@ -122,13 +122,14 @@ static void acpi_set_pci_info(void) > static void acpi_pcihp_disable_root_bus(void) > { > static bool root_hp_disabled; > + Object *host = acpi_get_i386_pci_host(); > PCIBus *bus; > > if (root_hp_disabled) { > return; > } > > - bus = find_i440fx(); > + bus = PCI_HOST_BRIDGE(host)->bus; > if (bus) { > /* setting the hotplug handler to NULL makes the bus non-hotpluggable */ > qbus_set_hotplug_handler(BUS(bus), NULL);
On Thu, Jun 17, 2021 at 09:07:33PM +0200, Julia Suvorova wrote: > PCI Express does not allow hot-plug on pcie.0. Check for Q35 in > acpi_pcihp_disable_root_bus() to be able to forbid hot-plug using the > 'acpi-root-pci-hotplug' flag. > > Signed-off-by: Julia Suvorova <jusual@redhat.com> > Reviewed-by: Igor Mammedov <imammedo@redhat.com> > --- > hw/acpi/pcihp.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c > index 4999277d57..09f531e941 100644 > --- a/hw/acpi/pcihp.c > +++ b/hw/acpi/pcihp.c > @@ -122,13 +122,14 @@ static void acpi_set_pci_info(void) > static void acpi_pcihp_disable_root_bus(void) > { > static bool root_hp_disabled; > + Object *host = acpi_get_i386_pci_host(); > PCIBus *bus; This breaks build for mips malta which needs piix4.c and thus uses pcihp.c Just try a full build you will see the failure. I suggest changing the API to return the actual bus. > > if (root_hp_disabled) { > return; > } > > - bus = find_i440fx(); > + bus = PCI_HOST_BRIDGE(host)->bus; > if (bus) { > /* setting the hotplug handler to NULL makes the bus non-hotpluggable */ > qbus_set_hotplug_handler(BUS(bus), NULL); > -- > 2.30.2
On Thu, Jun 17, 2021 at 09:07:33PM +0200, Julia Suvorova wrote: > PCI Express does not allow hot-plug on pcie.0. Check for Q35 in > acpi_pcihp_disable_root_bus() to be able to forbid hot-plug using the > 'acpi-root-pci-hotplug' flag. > > Signed-off-by: Julia Suvorova <jusual@redhat.com> > Reviewed-by: Igor Mammedov <imammedo@redhat.com> > --- > hw/acpi/pcihp.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c > index 4999277d57..09f531e941 100644 > --- a/hw/acpi/pcihp.c > +++ b/hw/acpi/pcihp.c > @@ -122,13 +122,14 @@ static void acpi_set_pci_info(void) > static void acpi_pcihp_disable_root_bus(void) > { > static bool root_hp_disabled; > + Object *host = acpi_get_i386_pci_host(); > PCIBus *bus; > > if (root_hp_disabled) { > return; > } > > - bus = find_i440fx(); > + bus = PCI_HOST_BRIDGE(host)->bus; > if (bus) { > /* setting the hotplug handler to NULL makes the bus non-hotpluggable */ > qbus_set_hotplug_handler(BUS(bus), NULL); ../hw/acpi/pcihp.c: In function ‘acpi_pcihp_disable_root_bus’: ../hw/acpi/pcihp.c:125:20: error: implicit declaration of function ‘acpi_get_i386_pci_host’ [-Werror=implicit-function-declaration] 125 | Object *host = acpi_get_i386_pci_host(); | ^~~~~~~~~~~~~~~~~~~~~~ ../hw/acpi/pcihp.c:125:20: error: nested extern declaration of ‘acpi_get_i386_pci_host’ [-Werror=nested-externs] ../hw/acpi/pcihp.c:125:20: error: initialization of ‘Object *’ from ‘int’ makes pointer from integer without a cast [-Werror=int-conversion] ../hw/acpi/pcihp.c:132:11: error: implicit declaration of function ‘PCI_HOST_BRIDGE’; did you mean ‘PCI_BRIDGE’? [-Werror=implicit-function-declaration] 132 | bus = PCI_HOST_BRIDGE(host)->bus; | ^~~~~~~~~~~~~~~ | PCI_BRIDGE ../hw/acpi/pcihp.c:132:11: error: nested extern declaration of ‘PCI_HOST_BRIDGE’ [-Werror=nested-externs] ../hw/acpi/pcihp.c:132:32: error: invalid type argument of ‘->’ (have ‘int’) 132 | bus = PCI_HOST_BRIDGE(host)->bus; | ^~ cc1: all warnings being treated as errors since acpi_get_i386_pci_host is not defined yet in this patch. > -- > 2.30.2
diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index 4999277d57..09f531e941 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -122,13 +122,14 @@ static void acpi_set_pci_info(void) static void acpi_pcihp_disable_root_bus(void) { static bool root_hp_disabled; + Object *host = acpi_get_i386_pci_host(); PCIBus *bus; if (root_hp_disabled) { return; } - bus = find_i440fx(); + bus = PCI_HOST_BRIDGE(host)->bus; if (bus) { /* setting the hotplug handler to NULL makes the bus non-hotpluggable */ qbus_set_hotplug_handler(BUS(bus), NULL);