summaryrefslogtreecommitdiffstats
path: root/src/interface/linux
diff options
context:
space:
mode:
authorMichael Brown2021-03-03 00:56:11 +0100
committerMichael Brown2021-03-03 00:59:27 +0100
commit976839ae4c01530a6a931be7b2386a3abee328b9 (patch)
tree935faa1757f96a0dcf70e87dfa9a2ca0718e77d8 /src/interface/linux
parent[dns] Reduce debug verbosity for DNS server list (diff)
downloadipxe-976839ae4c01530a6a931be7b2386a3abee328b9.tar.gz
ipxe-976839ae4c01530a6a931be7b2386a3abee328b9.tar.xz
ipxe-976839ae4c01530a6a931be7b2386a3abee328b9.zip
[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>
Diffstat (limited to 'src/interface/linux')
-rw-r--r--src/interface/linux/linux_acpi.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/interface/linux/linux_acpi.c b/src/interface/linux/linux_acpi.c
index 0f369bda..08833d61 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 );