Message ID | 20210907144814.741785-20-imammedo@redhat.com |
---|---|
State | New |
Headers | show |
Series | acpi: refactor error prone build_header() and packed structures usage in ACPI tables | expand |
On 9/7/21 4:47 PM, Igor Mammedov wrote: > it replaces error-prone pointer arithmetic for build_header() API, > with 2 calls to start and finish table creation, > which hides offsets magic from API user. > > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > --- > v3: > * s/acpi_init_table|acpi_table_composed/acpi_table_begin|acpi_table_end/ > > CC: marcel.apfelbaum@gmail.com > --- > hw/i386/acpi-build.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index 2875c4f393..45724469b0 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -2201,10 +2201,10 @@ static void > build_waet(GArray *table_data, BIOSLinker *linker, const char *oem_id, > const char *oem_table_id) > { > - int waet_start = table_data->len; > + AcpiTable table = { .sig = "WAET", .rev = 1, .oem_id = oem_id, > + .oem_table_id = oem_table_id }; > > - /* WAET header */ > - acpi_data_push(table_data, sizeof(AcpiTableHeader)); > + acpi_table_begin(&table, table_data); > /* > * Set "ACPI PM timer good" flag. > * > @@ -2213,9 +2213,7 @@ build_waet(GArray *table_data, BIOSLinker *linker, const char *oem_id, > * Which avoids costly VMExits caused by guest re-reading it unnecessarily. > */ > build_append_int_noprefix(table_data, 1 << 1 /* ACPI PM timer good */, 4); > - > - build_header(linker, table_data, (void *)(table_data->data + waet_start), > - "WAET", table_data->len - waet_start, 1, oem_id, oem_table_id); > + acpi_table_end(linker, &table); > } > > /* > an easy one Reviewed-by: Eric Auger <eric.auger@redhat.com> Eric
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 2875c4f393..45724469b0 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2201,10 +2201,10 @@ static void build_waet(GArray *table_data, BIOSLinker *linker, const char *oem_id, const char *oem_table_id) { - int waet_start = table_data->len; + AcpiTable table = { .sig = "WAET", .rev = 1, .oem_id = oem_id, + .oem_table_id = oem_table_id }; - /* WAET header */ - acpi_data_push(table_data, sizeof(AcpiTableHeader)); + acpi_table_begin(&table, table_data); /* * Set "ACPI PM timer good" flag. * @@ -2213,9 +2213,7 @@ build_waet(GArray *table_data, BIOSLinker *linker, const char *oem_id, * Which avoids costly VMExits caused by guest re-reading it unnecessarily. */ build_append_int_noprefix(table_data, 1 << 1 /* ACPI PM timer good */, 4); - - build_header(linker, table_data, (void *)(table_data->data + waet_start), - "WAET", table_data->len - waet_start, 1, oem_id, oem_table_id); + acpi_table_end(linker, &table); } /*
it replaces error-prone pointer arithmetic for build_header() API, with 2 calls to start and finish table creation, which hides offsets magic from API user. Signed-off-by: Igor Mammedov <imammedo@redhat.com> --- v3: * s/acpi_init_table|acpi_table_composed/acpi_table_begin|acpi_table_end/ CC: marcel.apfelbaum@gmail.com --- hw/i386/acpi-build.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)