[SeaBIOS] [PATCHv3] acpi: make default DSDT optional
Laszlo Ersek
lersek at redhat.com
Mon Mar 18 14:03:42 CET 2013
On 03/18/13 12:00, Michael S. Tsirkin wrote:
> Since commit f7e4dd6c18ccfbaf6cd2f5eaaed2b77cabc8a406 QEMU loads its
> own copy of DSDT, so let's not build in PIIX. This makes building in
> the DSDT an option, default to on (built-in).
> For the builds bundled with qemu (where we _know_ qemu is
> new enougth that it actually works) we can flip the switch to 'n' (via
> roms/config.seabios). This way we save some space in the rom file and make
> it easy to avoid shipping dead code in qemu. At some point we might
> be able to switch it off by default and then maybe remove altogether.
>
> With CONFIG_ACPI_DSDT = y
> Total size: 127348 Fixed: 58892 Free: 3724 (used 97.2% of 128KiB rom)
> With CONFIG_ACPI_DSDT = n
> Total size: 122844 Fixed: 58884 Free: 8228 (used 93.7% of 128KiB rom)
>
> Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
> ---
>
> Changes from v2:
> - fixed and extended the commit log addressing comments by Gerd,
> Laszlo, Paul. No functional changes.
Did you ignore my v2 comment below on purpose, or just miss it?
> 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
> #include "acpi-dsdt.hex"
> +#else
> +static u8 AmlCode[1];
> +#endif
On 03/18/13 11:41, Laszlo Ersek wrote:
> The macro CONFIG_ACPI_DSDT is always defined (you use it just below
> in a controlling expression); its value is what varies.
In other words, "#ifdef CONFIG_ACPI_DSDT" always evaluates to true,
independently of how the new config option is set. The space is probably
saved only because gcc sees (with -fwhole-program) that there are no
accesses to AmlCode[]. Ultimately the effect matches your high-level
intent, but the above #ifdef code doesn't do what you expect it to do.
I think you should write
#if CONFIG_ACPI_DSDT == 1
CONFIG_XXXX macros are not used in preprocessing directives very
frequently, but see
$ git grep CONFIG_ | grep '# *if'
[...]
src/pirtable.c:#if CONFIG_PIRTABLE
src/pmm.c:#if CONFIG_PMM
src/pnpbios.c:#if CONFIG_PNPBIOS
src/romlayout.S:#if CONFIG_DISABLE_A20
src/romlayout.S:#if CONFIG_PCIBIOS
src/romlayout.S:#if CONFIG_ENTRY_EXTRASTACK
[...]
vgasrc/vgaentry.S:#if CONFIG_VGA_PCI == 1
"#if" and "#ifdef" are different.
Laszlo
More information about the SeaBIOS
mailing list