[SeaBIOS] [PATCHv2] acpi: make default DSDT optional
Michael S. Tsirkin
mst at redhat.com
Mon Mar 18 11:45:57 CET 2013
On Mon, Mar 18, 2013 at 11:41:44AM +0100, Laszlo Ersek wrote:
> comments in-line
>
> On 03/18/13 11:12, Michael S. Tsirkin wrote:
> > QEMU now loads its own copy of DSDT, so let's not build in PIIX.
> > This leaves building in the DSDT an option, default to off.
> > If no one complains for a while, we'll be able to
> > remove this altogether.
> >
> > Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
> > ---
> >
> > Changes from v1:
> > - default the new option to y to reduce
> > disruption to existing users
> >
> > src/Kconfig | 6 ++++++
> > src/acpi.c | 7 ++++++-
> > 2 files changed, 12 insertions(+), 1 deletion(-)
>
> The acpi_setup() function already picks the qemu-exported DSDT if there
> is one: fill_dsdt() links it into the FADT, and then we won't
> malloc_high() an area for our own copy.
>
> What is the purpose of this patch? Is it to save space? I assume the
> static AmlCode array from "acpi-dsdt.hex" only occupies RAM as long as
> we don't start the boot loader / OS, so it is not important for runtime.
> Do we want to save space in the binary?
Yes. Waste not, need not.
With default = y
Total size: 127348 Fixed: 58892 Free: 3724 (used 97.2% of 128KiB rom)
With default = n
Total size: 122844 Fixed: 58884 Free: 8228 (used 93.7% of 128KiB rom)
So we get some breathing space here. Increasing rom size is
problematic, is affects things like migration.
Also, in qemu I don't think we want to carry around code we never use.
It just results in confusion. At least, it confuses me.
> > diff --git a/src/Kconfig b/src/Kconfig
> > index 3141069..655ab1c 100644
> > --- a/src/Kconfig
> > +++ b/src/Kconfig
> > @@ -387,6 +387,12 @@ menu "BIOS Tables"
> > default y
> > help
> > Support generation of ACPI tables.
> > + config ACPI_DSDT
> > + bool "Include default ACPI DSDT"
> > + default y
> > + depends on ACPI
> > + help
> > + Include default DSDT ACPI table in BIOS.
> > endmenu
> >
> > source vgasrc/Kconfig
>
> I think if ACPI_DSDT is off, then the Makefile could elect not to build
> "acpi-dsdt.hex" at all. (The "$(OUT)acpi.o" target should not depend on
> "acpi-dsdt.hex" in that case.) Anyway extra work is not a bug of course.
> (Plus I'm not sure how we could pass in the config value for ifeq.)
>
> > diff --git a/src/acpi.c b/src/acpi.c
> > index 119d1c1..69dd3aa 100644
> > --- a/src/acpi.c
> > +++ b/src/acpi.c
> > @@ -202,7 +202,11 @@ struct srat_memory_affinity
> > u32 reserved3[2];
> > } PACKED;
> >
> > +#ifdef CONFIG_ACPI_DSDT
>
> The macro CONFIG_ACPI_DSDT is always defined (you use it just below in a
> controlling expression); its value is what varies.
>
> > #include "acpi-dsdt.hex"
> > +#else
> > +static u8 AmlCode[1];
> > +#endif
> >
> > static void
> > build_header(struct acpi_table_header *h, u32 sig, int len, u8 rev)
> > @@ -826,7 +830,8 @@ acpi_setup(void)
> > break;
> > }
> > }
> > - if (fadt && !fadt->dsdt) {
> > +
> > + if (fadt && !fadt->dsdt && CONFIG_ACPI_DSDT) {
> > /* default DSDT */
> > void *dsdt = malloc_high(sizeof(AmlCode));
> > if (!dsdt) {
> >
>
> For short-circuiting hygiene I'd put the config option first.
>
> Laszlo
More information about the SeaBIOS
mailing list