Duncan Laurie has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/40880 )
Change subject: arch/x86/acpi_device: Allow empty child references ......................................................................
arch/x86/acpi_device: Allow empty child references
Currently if a child table is created and added to a property list without adding any properties to that child it will generate an empty package. For example:
struct acpi_dp *dsd = acpi_dp_new_table("_DSD"); struct acpi_dp *prop = acpi_dp_new_table("PROP"); acpi_dp_add_child(dsd, "dsd-prop", prop); acpi_dp_write(dsd);
Results in an empty PROP package:
Name (_DSD, Package (2) { ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b") Package (1) { Package (2) { "dsd-prop", "PROP" } } } Name (PROP, Package (0) { }
Empty packages don't seem to be explicitly forbidden, but they don't serve a purpose with device properties. Instead, if packages without any properties or children are skipped then this empty package is not written and the added child property can refer to another property that is already defined.
This allows creating property references to existing tables, which can save duplication and namespace collision issues with nested properties.
BUG=b:146482091
Signed-off-by: Duncan Laurie dlaurie@google.com Change-Id: I9fee2ceb8a4496b90c7210533eee8c2b186cdfff --- M src/arch/x86/acpi_device.c 1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/80/40880/1
diff --git a/src/arch/x86/acpi_device.c b/src/arch/x86/acpi_device.c index b4016ef..f3ee1e7 100644 --- a/src/arch/x86/acpi_device.c +++ b/src/arch/x86/acpi_device.c @@ -665,7 +665,7 @@ char *dp_count, *prop_count = NULL; int child_count = 0;
- if (!table || table->type != ACPI_DP_TYPE_TABLE) + if (!table || table->type != ACPI_DP_TYPE_TABLE || !table->next) return;
/* Name (name) */
Furquan Shaikh has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/40880 )
Change subject: arch/x86/acpi_device: Allow empty child references ......................................................................
Patch Set 2: Code-Review+2
Patrick Georgi has submitted this change. ( https://review.coreboot.org/c/coreboot/+/40880 )
Change subject: arch/x86/acpi_device: Allow empty child references ......................................................................
arch/x86/acpi_device: Allow empty child references
Currently if a child table is created and added to a property list without adding any properties to that child it will generate an empty package. For example:
struct acpi_dp *dsd = acpi_dp_new_table("_DSD"); struct acpi_dp *prop = acpi_dp_new_table("PROP"); acpi_dp_add_child(dsd, "dsd-prop", prop); acpi_dp_write(dsd);
Results in an empty PROP package:
Name (_DSD, Package (2) { ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b") Package (1) { Package (2) { "dsd-prop", "PROP" } } } Name (PROP, Package (0) { }
Empty packages don't seem to be explicitly forbidden, but they don't serve a purpose with device properties. Instead, if packages without any properties or children are skipped then this empty package is not written and the added child property can refer to another property that is already defined.
This allows creating property references to existing tables, which can save duplication and namespace collision issues with nested properties.
BUG=b:146482091
Signed-off-by: Duncan Laurie dlaurie@google.com Change-Id: I9fee2ceb8a4496b90c7210533eee8c2b186cdfff Reviewed-on: https://review.coreboot.org/c/coreboot/+/40880 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Furquan Shaikh furquan@google.com --- M src/arch/x86/acpi_device.c 1 file changed, 1 insertion(+), 1 deletion(-)
Approvals: build bot (Jenkins): Verified Furquan Shaikh: Looks good to me, approved
diff --git a/src/arch/x86/acpi_device.c b/src/arch/x86/acpi_device.c index b4016ef..f3ee1e7 100644 --- a/src/arch/x86/acpi_device.c +++ b/src/arch/x86/acpi_device.c @@ -665,7 +665,7 @@ char *dp_count, *prop_count = NULL; int child_count = 0;
- if (!table || table->type != ACPI_DP_TYPE_TABLE) + if (!table || table->type != ACPI_DP_TYPE_TABLE || !table->next) return;
/* Name (name) */