[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 32/56] pcihp: do not put empty PCNT in DSDT
From: |
Michael S. Tsirkin |
Subject: |
[PULL 32/56] pcihp: do not put empty PCNT in DSDT |
Date: |
Mon, 30 Jan 2023 15:20:28 -0500 |
From: Igor Mammedov <imammedo@redhat.com>
count number of PCNT methods that actually call Notify
and if there aren't any, drop PCNT altogether.
It mostly affects 'Q35' tests where there is no root-ports
/bridges attached and 'PC' machine when ACPI PCI hotplug is
completely disabled.
Expected ASL change:
- Method (PCNT, 0, NotSerialized)
- {
- }
...
Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE
{
- Acquire (\_SB.PCI0.BLCK, 0xFFFF)
- \_SB.PCI0.PCNT ()
- Release (\_SB.PCI0.BLCK)
}
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20230112140312.3096331-23-imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/i386/acpi-build.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index d434ad9189..6368fcefa3 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -496,12 +496,13 @@ static void build_append_pci_bus_devices(Aml
*parent_scope, PCIBus *bus,
qobject_unref(bsel);
}
-static void build_append_notfication_callback(Aml *parent_scope,
+static bool build_append_notfication_callback(Aml *parent_scope,
const PCIBus *bus)
{
Aml *method;
PCIBus *sec;
QObject *bsel;
+ int nr_notifiers = 0;
QLIST_FOREACH(sec, &bus->child, sibling) {
Aml *br_scope = aml_scope("S%.02X", sec->parent_dev->devfn);
@@ -509,7 +510,8 @@ static void build_append_notfication_callback(Aml
*parent_scope,
!object_property_find(OBJECT(sec), ACPI_PCIHP_PROP_BSEL)) {
continue;
}
- build_append_notfication_callback(br_scope, sec);
+ nr_notifiers = nr_notifiers +
+ build_append_notfication_callback(br_scope, sec);
aml_append(parent_scope, br_scope);
}
@@ -530,6 +532,7 @@ static void build_append_notfication_callback(Aml
*parent_scope,
aml_int(1))); /* Device Check */
aml_append(method, aml_call2("DVNT", aml_name("PCID"),
aml_int(3))); /* Eject Request */
+ nr_notifiers++;
}
/* Notify about child bus events in any case */
@@ -544,6 +547,7 @@ static void build_append_notfication_callback(Aml
*parent_scope,
aml_append(parent_scope, method);
qobject_unref(bsel);
+ return !!nr_notifiers;
}
static Aml *aml_pci_pdsm(void)
@@ -1742,20 +1746,26 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
aml_append(dsdt, sb_scope);
if (pm->pcihp_bridge_en || pm->pcihp_root_en) {
+ bool has_pcnt;
+
Object *pci_host = acpi_get_i386_pci_host();
PCIBus *bus = PCI_HOST_BRIDGE(pci_host)->bus;
scope = aml_scope("\\_SB.PCI0");
- build_append_notfication_callback(scope, bus);
- aml_append(dsdt, scope);
+ has_pcnt = build_append_notfication_callback(scope, bus);
+ if (has_pcnt) {
+ aml_append(dsdt, scope);
+ }
scope = aml_scope("_GPE");
{
method = aml_method("_E01", 0, AML_NOTSERIALIZED);
- aml_append(method,
- aml_acquire(aml_name("\\_SB.PCI0.BLCK"), 0xFFFF));
- aml_append(method, aml_call0("\\_SB.PCI0.PCNT"));
- aml_append(method, aml_release(aml_name("\\_SB.PCI0.BLCK")));
+ if (has_pcnt) {
+ aml_append(method,
+ aml_acquire(aml_name("\\_SB.PCI0.BLCK"), 0xFFFF));
+ aml_append(method, aml_call0("\\_SB.PCI0.PCNT"));
+ aml_append(method, aml_release(aml_name("\\_SB.PCI0.BLCK")));
+ }
aml_append(scope, method);
}
aml_append(dsdt, scope);
--
MST
- [PULL 38/56] pci: acpi: wire up AcpiDevAmlIf interface to generic bridge, (continued)
- [PULL 38/56] pci: acpi: wire up AcpiDevAmlIf interface to generic bridge, Michael S. Tsirkin, 2023/01/30
- [PULL 35/56] tests: acpi: add endpoint devices to bridges, Michael S. Tsirkin, 2023/01/30
- [PULL 26/56] tests: acpi: add reboot cycle to bridge test, Michael S. Tsirkin, 2023/01/30
- [PULL 55/56] Revert "vhost-user: Introduce nested event loop in vhost_user_read()", Michael S. Tsirkin, 2023/01/30
- [PULL 45/56] tests: acpi: whitelist DSDT blobs before removing dynamic _DSM on coldplugged bridges, Michael S. Tsirkin, 2023/01/30
- [PULL 37/56] x86: pcihp: acpi: prepare slot ignore rule to work with self describing bridges, Michael S. Tsirkin, 2023/01/30
- [PULL 46/56] pcihp: acpi: ignore coldplugged bridges when composing hotpluggable slots, Michael S. Tsirkin, 2023/01/30
- [PULL 25/56] tests: boot_sector_test(): make it multi-shot, Michael S. Tsirkin, 2023/01/30
- [PULL 43/56] pcihp: acpi: decouple hotplug and generic slots description, Michael S. Tsirkin, 2023/01/30
- [PULL 40/56] pci: make sure pci_bus_is_express() won't error out with "discards ‘const’ qualifier", Michael S. Tsirkin, 2023/01/30
- [PULL 32/56] pcihp: do not put empty PCNT in DSDT,
Michael S. Tsirkin <=
- [PULL 34/56] whitelist DSDT before adding endpoint devices to bridge testcases, Michael S. Tsirkin, 2023/01/30
- [PULL 36/56] tests: acpi: update expected blobs, Michael S. Tsirkin, 2023/01/30
- [PULL 39/56] pcihp: make bridge describe itself using AcpiDevAmlIfClass:build_dev_aml, Michael S. Tsirkin, 2023/01/30
- [PULL 53/56] tests/qtest/bios-tables-test: Make the test less verbose by default, Michael S. Tsirkin, 2023/01/30
- [PULL 47/56] tests: acpi: update expected blobs, Michael S. Tsirkin, 2023/01/30
- [PULL 49/56] pcihp: generate populated non-hotpluggble slot descriptions on non-hotplug path, Michael S. Tsirkin, 2023/01/30
- [PULL 41/56] pcihp: isolate rule whether slot should be described in DSDT, Michael S. Tsirkin, 2023/01/30
- [PULL 42/56] tests: acpi: whitelist DSDT before decoupling PCI hotplug code from basic slots description, Michael S. Tsirkin, 2023/01/30
- [PULL 51/56] vhost-user: Skip unnecessary duplicated VHOST_USER_ADD/REM_MEM_REG requests, Michael S. Tsirkin, 2023/01/30
- [PULL 48/56] tests: acpi: whitelist DSDT before moving non-hotpluggble slots description from hotplug path, Michael S. Tsirkin, 2023/01/30