diff options
author | Michael Brown <mcb30@ipxe.org> | 2021-03-02 23:56:11 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2021-03-02 23:59:27 +0000 |
commit | 976839ae4c01530a6a931be7b2386a3abee328b9 (patch) | |
tree | 935faa1757f96a0dcf70e87dfa9a2ca0718e77d8 | |
parent | 3a58400121aa7bd5faacc681f27a449988fc452d (diff) | |
download | ipxe-976839ae4c01530a6a931be7b2386a3abee328b9.tar.gz |
[linux] Free cached ACPI tables on shutdown
Free any cached ACPI tables for the sake of neatness (and a clean
report from Valgrind).
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/interface/linux/linux_acpi.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/interface/linux/linux_acpi.c b/src/interface/linux/linux_acpi.c index 0f369bdaa..08833d61d 100644 --- a/src/interface/linux/linux_acpi.c +++ b/src/interface/linux/linux_acpi.c @@ -25,6 +25,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <ipxe/linux_api.h> #include <ipxe/linux.h> #include <ipxe/list.h> +#include <ipxe/init.h> #include <ipxe/acpi.h> /** ACPI sysfs directory */ @@ -170,4 +171,25 @@ static userptr_t linux_acpi_find ( uint32_t signature, unsigned int index ) { return UNULL; } +/** + * Free cached ACPI data + * + */ +static void linux_acpi_shutdown ( int booting __unused ) { + struct linux_acpi_table *table; + struct linux_acpi_table *tmp; + + list_for_each_entry_safe ( table, tmp, &linux_acpi_tables, list ) { + list_del ( &table->list ); + free ( table->data ); + free ( table ); + } +} + +/** ACPI shutdown function */ +struct startup_fn linux_acpi_startup_fn __startup_fn ( STARTUP_NORMAL ) = { + .name = "linux_acpi", + .shutdown = linux_acpi_shutdown, +}; + PROVIDE_ACPI ( linux, acpi_find, linux_acpi_find ); |