Message ID | 20240702131428.664859-9-Jonathan.Cameron@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | acpi: NUMA nodes for CXL HB as GP + complex NUMA test | expand |
On Tue, 2 Jul 2024 14:14:13 +0100 Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote: > Rather than relying on PCI internals, use the new acpi_property > to obtain the ACPI _UID values. These are still the same > as the PCI Bus numbers so no functional change. > > Suggested-by: Igor Mammedov <imammedo@redhat.com> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > v4: New patch. > --- > hw/i386/acpi-build.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index ee92783836..cc32f1e6d4 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -1550,6 +1550,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, > QLIST_FOREACH(bus, &bus->child, sibling) { > uint8_t bus_num = pci_bus_num(bus); > uint8_t numa_node = pci_bus_numa_node(bus); > + uint8_t uid; > > /* look only for expander root buses */ > if (!pci_bus_is_root(bus)) { > @@ -1560,14 +1561,16 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, > root_bus_limit = bus_num - 1; > } > > + uid = object_property_get_uint(OBJECT(bus), "acpi_uid", > + &error_fatal); theoretically acpi_uid is 32bit, so if we are expecting only 256 buses here, then having and assert to catch truncation would be good. alternatively if this UID can't ever be more than 8bit, I'd use visit_type_uint8() in previous patch to make sure too large value won't be silently ignored. > scope = aml_scope("\\_SB"); > > if (pci_bus_is_cxl(bus)) { > - dev = aml_device("CL%.02X", bus_num); > + dev = aml_device("CL%.02X", uid); > } else { > - dev = aml_device("PC%.02X", bus_num); > + dev = aml_device("PC%.02X", uid); > } > - aml_append(dev, aml_name_decl("_UID", aml_int(bus_num))); > + aml_append(dev, aml_name_decl("_UID", aml_int(uid))); > aml_append(dev, aml_name_decl("_BBN", aml_int(bus_num))); > if (pci_bus_is_cxl(bus)) { > struct Aml *aml_pkg = aml_package(2);
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index ee92783836..cc32f1e6d4 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -1550,6 +1550,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, QLIST_FOREACH(bus, &bus->child, sibling) { uint8_t bus_num = pci_bus_num(bus); uint8_t numa_node = pci_bus_numa_node(bus); + uint8_t uid; /* look only for expander root buses */ if (!pci_bus_is_root(bus)) { @@ -1560,14 +1561,16 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, root_bus_limit = bus_num - 1; } + uid = object_property_get_uint(OBJECT(bus), "acpi_uid", + &error_fatal); scope = aml_scope("\\_SB"); if (pci_bus_is_cxl(bus)) { - dev = aml_device("CL%.02X", bus_num); + dev = aml_device("CL%.02X", uid); } else { - dev = aml_device("PC%.02X", bus_num); + dev = aml_device("PC%.02X", uid); } - aml_append(dev, aml_name_decl("_UID", aml_int(bus_num))); + aml_append(dev, aml_name_decl("_UID", aml_int(uid))); aml_append(dev, aml_name_decl("_BBN", aml_int(bus_num))); if (pci_bus_is_cxl(bus)) { struct Aml *aml_pkg = aml_package(2);
Rather than relying on PCI internals, use the new acpi_property to obtain the ACPI _UID values. These are still the same as the PCI Bus numbers so no functional change. Suggested-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> --- v4: New patch. --- hw/i386/acpi-build.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)