On Tue, 2 Jul 2024 14:14:13 +0100
Jonathan Cameron <jonathan.came...@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 <imamm...@redhat.com>
> Signed-off-by: Jonathan Cameron <jonathan.came...@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);


Reply via email to