Message ID | 1625080041-29010-9-git-send-email-eric.devolder@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | acpi: Error Record Serialization Table, ERST, support for QEMU | expand |
On Wed, 30 Jun 2021 15:07:19 -0400 Eric DeVolder <eric.devolder@oracle.com> wrote: > This change exposes ACPI ERST support for x86 guests. > > Signed-off-by: Eric DeVolder <eric.devolder@oracle.com> looks good to me, maybe move find_erst_dev() impl. here as well if it's the patch it's first used. > --- > hw/i386/acpi-build.c | 9 +++++++++ > hw/i386/acpi-microvm.c | 9 +++++++++ > 2 files changed, 18 insertions(+) > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index de98750..d2026cc 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -43,6 +43,7 @@ > #include "sysemu/tpm.h" > #include "hw/acpi/tpm.h" > #include "hw/acpi/vmgenid.h" > +#include "hw/acpi/erst.h" > #include "hw/boards.h" > #include "sysemu/tpm_backend.h" > #include "hw/rtc/mc146818rtc_regs.h" > @@ -2327,6 +2328,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) > GArray *tables_blob = tables->table_data; > AcpiSlicOem slic_oem = { .id = NULL, .table_id = NULL }; > Object *vmgenid_dev; > + Object *erst_dev; > char *oem_id; > char *oem_table_id; > > @@ -2388,6 +2390,13 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) > ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, > x86ms->oem_table_id); > > + erst_dev = find_erst_dev(); > + if (erst_dev) { > + acpi_add_table(table_offsets, tables_blob); > + build_erst(tables_blob, tables->linker, erst_dev, > + x86ms->oem_id, x86ms->oem_table_id); > + } > + > vmgenid_dev = find_vmgenid_dev(); > if (vmgenid_dev) { > acpi_add_table(table_offsets, tables_blob); > diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c > index ccd3303..0099b13 100644 > --- a/hw/i386/acpi-microvm.c > +++ b/hw/i386/acpi-microvm.c > @@ -30,6 +30,7 @@ > #include "hw/acpi/bios-linker-loader.h" > #include "hw/acpi/generic_event_device.h" > #include "hw/acpi/utils.h" > +#include "hw/acpi/erst.h" > #include "hw/boards.h" > #include "hw/i386/fw_cfg.h" > #include "hw/i386/microvm.h" > @@ -160,6 +161,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, > X86MachineState *x86ms = X86_MACHINE(mms); > GArray *table_offsets; > GArray *tables_blob = tables->table_data; > + Object *erst_dev; > unsigned dsdt, xsdt; > AcpiFadtData pmfadt = { > /* ACPI 5.0: 4.1 Hardware-Reduced ACPI */ > @@ -209,6 +211,13 @@ static void acpi_build_microvm(AcpiBuildTables *tables, > ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, > x86ms->oem_table_id); > > + erst_dev = find_erst_dev(); > + if (erst_dev) { > + acpi_add_table(table_offsets, tables_blob); > + build_erst(tables_blob, tables->linker, erst_dev, > + x86ms->oem_id, x86ms->oem_table_id); > + } > + > xsdt = tables_blob->len; > build_xsdt(tables_blob, tables->linker, table_offsets, x86ms->oem_id, > x86ms->oem_table_id);
On 7/20/21 8:19 AM, Igor Mammedov wrote: > On Wed, 30 Jun 2021 15:07:19 -0400 > Eric DeVolder <eric.devolder@oracle.com> wrote: > >> This change exposes ACPI ERST support for x86 guests. >> >> Signed-off-by: Eric DeVolder <eric.devolder@oracle.com> > looks good to me, maybe move find_erst_dev() impl. here as well > if it's the patch it's first used. I've followed your previous suggestion of mimicking find_vmgenid_dev(), which declares it in its header file. I've done the same, find_erst_dev() is declared in its header file and used in these files. > >> --- >> hw/i386/acpi-build.c | 9 +++++++++ >> hw/i386/acpi-microvm.c | 9 +++++++++ >> 2 files changed, 18 insertions(+) >> >> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c >> index de98750..d2026cc 100644 >> --- a/hw/i386/acpi-build.c >> +++ b/hw/i386/acpi-build.c >> @@ -43,6 +43,7 @@ >> #include "sysemu/tpm.h" >> #include "hw/acpi/tpm.h" >> #include "hw/acpi/vmgenid.h" >> +#include "hw/acpi/erst.h" >> #include "hw/boards.h" >> #include "sysemu/tpm_backend.h" >> #include "hw/rtc/mc146818rtc_regs.h" >> @@ -2327,6 +2328,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) >> GArray *tables_blob = tables->table_data; >> AcpiSlicOem slic_oem = { .id = NULL, .table_id = NULL }; >> Object *vmgenid_dev; >> + Object *erst_dev; >> char *oem_id; >> char *oem_table_id; >> >> @@ -2388,6 +2390,13 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) >> ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, >> x86ms->oem_table_id); >> >> + erst_dev = find_erst_dev(); >> + if (erst_dev) { >> + acpi_add_table(table_offsets, tables_blob); >> + build_erst(tables_blob, tables->linker, erst_dev, >> + x86ms->oem_id, x86ms->oem_table_id); >> + } >> + >> vmgenid_dev = find_vmgenid_dev(); >> if (vmgenid_dev) { >> acpi_add_table(table_offsets, tables_blob); >> diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c >> index ccd3303..0099b13 100644 >> --- a/hw/i386/acpi-microvm.c >> +++ b/hw/i386/acpi-microvm.c >> @@ -30,6 +30,7 @@ >> #include "hw/acpi/bios-linker-loader.h" >> #include "hw/acpi/generic_event_device.h" >> #include "hw/acpi/utils.h" >> +#include "hw/acpi/erst.h" >> #include "hw/boards.h" >> #include "hw/i386/fw_cfg.h" >> #include "hw/i386/microvm.h" >> @@ -160,6 +161,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, >> X86MachineState *x86ms = X86_MACHINE(mms); >> GArray *table_offsets; >> GArray *tables_blob = tables->table_data; >> + Object *erst_dev; >> unsigned dsdt, xsdt; >> AcpiFadtData pmfadt = { >> /* ACPI 5.0: 4.1 Hardware-Reduced ACPI */ >> @@ -209,6 +211,13 @@ static void acpi_build_microvm(AcpiBuildTables *tables, >> ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, >> x86ms->oem_table_id); >> >> + erst_dev = find_erst_dev(); >> + if (erst_dev) { >> + acpi_add_table(table_offsets, tables_blob); >> + build_erst(tables_blob, tables->linker, erst_dev, >> + x86ms->oem_id, x86ms->oem_table_id); >> + } >> + >> xsdt = tables_blob->len; >> build_xsdt(tables_blob, tables->linker, table_offsets, x86ms->oem_id, >> x86ms->oem_table_id); >
On Wed, 21 Jul 2021 11:16:42 -0500 Eric DeVolder <eric.devolder@oracle.com> wrote: > On 7/20/21 8:19 AM, Igor Mammedov wrote: > > On Wed, 30 Jun 2021 15:07:19 -0400 > > Eric DeVolder <eric.devolder@oracle.com> wrote: > > > >> This change exposes ACPI ERST support for x86 guests. > >> > >> Signed-off-by: Eric DeVolder <eric.devolder@oracle.com> > > looks good to me, maybe move find_erst_dev() impl. here as well > > if it's the patch it's first used. > > I've followed your previous suggestion of mimicking find_vmgenid_dev(), which > declares it in its header file. I've done the same, find_erst_dev() is > declared in its header file and used in these files. it's fine doing like this but it would be easier to follow if this were part of [6/10], so that function is introduced and used in the same patch. > > > >> --- > >> hw/i386/acpi-build.c | 9 +++++++++ > >> hw/i386/acpi-microvm.c | 9 +++++++++ > >> 2 files changed, 18 insertions(+) > >> > >> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > >> index de98750..d2026cc 100644 > >> --- a/hw/i386/acpi-build.c > >> +++ b/hw/i386/acpi-build.c > >> @@ -43,6 +43,7 @@ > >> #include "sysemu/tpm.h" > >> #include "hw/acpi/tpm.h" > >> #include "hw/acpi/vmgenid.h" > >> +#include "hw/acpi/erst.h" > >> #include "hw/boards.h" > >> #include "sysemu/tpm_backend.h" > >> #include "hw/rtc/mc146818rtc_regs.h" > >> @@ -2327,6 +2328,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) > >> GArray *tables_blob = tables->table_data; > >> AcpiSlicOem slic_oem = { .id = NULL, .table_id = NULL }; > >> Object *vmgenid_dev; > >> + Object *erst_dev; > >> char *oem_id; > >> char *oem_table_id; > >> > >> @@ -2388,6 +2390,13 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) > >> ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, > >> x86ms->oem_table_id); > >> > >> + erst_dev = find_erst_dev(); > >> + if (erst_dev) { > >> + acpi_add_table(table_offsets, tables_blob); > >> + build_erst(tables_blob, tables->linker, erst_dev, > >> + x86ms->oem_id, x86ms->oem_table_id); > >> + } > >> + > >> vmgenid_dev = find_vmgenid_dev(); > >> if (vmgenid_dev) { > >> acpi_add_table(table_offsets, tables_blob); > >> diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c > >> index ccd3303..0099b13 100644 > >> --- a/hw/i386/acpi-microvm.c > >> +++ b/hw/i386/acpi-microvm.c > >> @@ -30,6 +30,7 @@ > >> #include "hw/acpi/bios-linker-loader.h" > >> #include "hw/acpi/generic_event_device.h" > >> #include "hw/acpi/utils.h" > >> +#include "hw/acpi/erst.h" > >> #include "hw/boards.h" > >> #include "hw/i386/fw_cfg.h" > >> #include "hw/i386/microvm.h" > >> @@ -160,6 +161,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, > >> X86MachineState *x86ms = X86_MACHINE(mms); > >> GArray *table_offsets; > >> GArray *tables_blob = tables->table_data; > >> + Object *erst_dev; > >> unsigned dsdt, xsdt; > >> AcpiFadtData pmfadt = { > >> /* ACPI 5.0: 4.1 Hardware-Reduced ACPI */ > >> @@ -209,6 +211,13 @@ static void acpi_build_microvm(AcpiBuildTables *tables, > >> ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, > >> x86ms->oem_table_id); > >> > >> + erst_dev = find_erst_dev(); > >> + if (erst_dev) { > >> + acpi_add_table(table_offsets, tables_blob); > >> + build_erst(tables_blob, tables->linker, erst_dev, > >> + x86ms->oem_id, x86ms->oem_table_id); > >> + } > >> + > >> xsdt = tables_blob->len; > >> build_xsdt(tables_blob, tables->linker, table_offsets, x86ms->oem_id, > >> x86ms->oem_table_id); > > >
On 7/26/21 6:30 AM, Igor Mammedov wrote: > On Wed, 21 Jul 2021 11:16:42 -0500 > Eric DeVolder <eric.devolder@oracle.com> wrote: > >> On 7/20/21 8:19 AM, Igor Mammedov wrote: >>> On Wed, 30 Jun 2021 15:07:19 -0400 >>> Eric DeVolder <eric.devolder@oracle.com> wrote: >>> >>>> This change exposes ACPI ERST support for x86 guests. >>>> >>>> Signed-off-by: Eric DeVolder <eric.devolder@oracle.com> >>> looks good to me, maybe move find_erst_dev() impl. here as well >>> if it's the patch it's first used. >> >> I've followed your previous suggestion of mimicking find_vmgenid_dev(), which >> declares it in its header file. I've done the same, find_erst_dev() is >> declared in its header file and used in these files. > > it's fine doing like this but > it would be easier to follow if this were part of [6/10], > so that function is introduced and used in the same patch. Done > > >>> >>>> --- >>>> hw/i386/acpi-build.c | 9 +++++++++ >>>> hw/i386/acpi-microvm.c | 9 +++++++++ >>>> 2 files changed, 18 insertions(+) >>>> >>>> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c >>>> index de98750..d2026cc 100644 >>>> --- a/hw/i386/acpi-build.c >>>> +++ b/hw/i386/acpi-build.c >>>> @@ -43,6 +43,7 @@ >>>> #include "sysemu/tpm.h" >>>> #include "hw/acpi/tpm.h" >>>> #include "hw/acpi/vmgenid.h" >>>> +#include "hw/acpi/erst.h" >>>> #include "hw/boards.h" >>>> #include "sysemu/tpm_backend.h" >>>> #include "hw/rtc/mc146818rtc_regs.h" >>>> @@ -2327,6 +2328,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) >>>> GArray *tables_blob = tables->table_data; >>>> AcpiSlicOem slic_oem = { .id = NULL, .table_id = NULL }; >>>> Object *vmgenid_dev; >>>> + Object *erst_dev; >>>> char *oem_id; >>>> char *oem_table_id; >>>> >>>> @@ -2388,6 +2390,13 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) >>>> ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, >>>> x86ms->oem_table_id); >>>> >>>> + erst_dev = find_erst_dev(); >>>> + if (erst_dev) { >>>> + acpi_add_table(table_offsets, tables_blob); >>>> + build_erst(tables_blob, tables->linker, erst_dev, >>>> + x86ms->oem_id, x86ms->oem_table_id); >>>> + } >>>> + >>>> vmgenid_dev = find_vmgenid_dev(); >>>> if (vmgenid_dev) { >>>> acpi_add_table(table_offsets, tables_blob); >>>> diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c >>>> index ccd3303..0099b13 100644 >>>> --- a/hw/i386/acpi-microvm.c >>>> +++ b/hw/i386/acpi-microvm.c >>>> @@ -30,6 +30,7 @@ >>>> #include "hw/acpi/bios-linker-loader.h" >>>> #include "hw/acpi/generic_event_device.h" >>>> #include "hw/acpi/utils.h" >>>> +#include "hw/acpi/erst.h" >>>> #include "hw/boards.h" >>>> #include "hw/i386/fw_cfg.h" >>>> #include "hw/i386/microvm.h" >>>> @@ -160,6 +161,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, >>>> X86MachineState *x86ms = X86_MACHINE(mms); >>>> GArray *table_offsets; >>>> GArray *tables_blob = tables->table_data; >>>> + Object *erst_dev; >>>> unsigned dsdt, xsdt; >>>> AcpiFadtData pmfadt = { >>>> /* ACPI 5.0: 4.1 Hardware-Reduced ACPI */ >>>> @@ -209,6 +211,13 @@ static void acpi_build_microvm(AcpiBuildTables *tables, >>>> ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, >>>> x86ms->oem_table_id); >>>> >>>> + erst_dev = find_erst_dev(); >>>> + if (erst_dev) { >>>> + acpi_add_table(table_offsets, tables_blob); >>>> + build_erst(tables_blob, tables->linker, erst_dev, >>>> + x86ms->oem_id, x86ms->oem_table_id); >>>> + } >>>> + >>>> xsdt = tables_blob->len; >>>> build_xsdt(tables_blob, tables->linker, table_offsets, x86ms->oem_id, >>>> x86ms->oem_table_id); >>> >> >
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index de98750..d2026cc 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -43,6 +43,7 @@ #include "sysemu/tpm.h" #include "hw/acpi/tpm.h" #include "hw/acpi/vmgenid.h" +#include "hw/acpi/erst.h" #include "hw/boards.h" #include "sysemu/tpm_backend.h" #include "hw/rtc/mc146818rtc_regs.h" @@ -2327,6 +2328,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) GArray *tables_blob = tables->table_data; AcpiSlicOem slic_oem = { .id = NULL, .table_id = NULL }; Object *vmgenid_dev; + Object *erst_dev; char *oem_id; char *oem_table_id; @@ -2388,6 +2390,13 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, x86ms->oem_table_id); + erst_dev = find_erst_dev(); + if (erst_dev) { + acpi_add_table(table_offsets, tables_blob); + build_erst(tables_blob, tables->linker, erst_dev, + x86ms->oem_id, x86ms->oem_table_id); + } + vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { acpi_add_table(table_offsets, tables_blob); diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c index ccd3303..0099b13 100644 --- a/hw/i386/acpi-microvm.c +++ b/hw/i386/acpi-microvm.c @@ -30,6 +30,7 @@ #include "hw/acpi/bios-linker-loader.h" #include "hw/acpi/generic_event_device.h" #include "hw/acpi/utils.h" +#include "hw/acpi/erst.h" #include "hw/boards.h" #include "hw/i386/fw_cfg.h" #include "hw/i386/microvm.h" @@ -160,6 +161,7 @@ static void acpi_build_microvm(AcpiBuildTables *tables, X86MachineState *x86ms = X86_MACHINE(mms); GArray *table_offsets; GArray *tables_blob = tables->table_data; + Object *erst_dev; unsigned dsdt, xsdt; AcpiFadtData pmfadt = { /* ACPI 5.0: 4.1 Hardware-Reduced ACPI */ @@ -209,6 +211,13 @@ static void acpi_build_microvm(AcpiBuildTables *tables, ACPI_DEVICE_IF(x86ms->acpi_dev), x86ms->oem_id, x86ms->oem_table_id); + erst_dev = find_erst_dev(); + if (erst_dev) { + acpi_add_table(table_offsets, tables_blob); + build_erst(tables_blob, tables->linker, erst_dev, + x86ms->oem_id, x86ms->oem_table_id); + } + xsdt = tables_blob->len; build_xsdt(tables_blob, tables->linker, table_offsets, x86ms->oem_id, x86ms->oem_table_id);
This change exposes ACPI ERST support for x86 guests. Signed-off-by: Eric DeVolder <eric.devolder@oracle.com> --- hw/i386/acpi-build.c | 9 +++++++++ hw/i386/acpi-microvm.c | 9 +++++++++ 2 files changed, 18 insertions(+)