From bbdb55126c69b06dec4655613bd4aacd81437f84 Mon Sep 17 00:00:00 2001 From: Liav A Date: Sun, 12 Dec 2021 16:58:06 +0200 Subject: [PATCH] Kernel/SysFS: Don't allocate ACPISysFS components in constructors Instead defer it to a method to be called after the construction of ACPISysFSDirectory. --- Kernel/Firmware/ACPI/Parser.cpp | 21 +++++++++++++-------- Kernel/Firmware/ACPI/Parser.h | 1 + 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Kernel/Firmware/ACPI/Parser.cpp b/Kernel/Firmware/ACPI/Parser.cpp index ea3458824be..706cfa284f7 100644 --- a/Kernel/Firmware/ACPI/Parser.cpp +++ b/Kernel/Firmware/ACPI/Parser.cpp @@ -67,14 +67,7 @@ UNMAP_AFTER_INIT ACPISysFSComponent::ACPISysFSComponent(NonnullOwnPtr t { } -UNMAP_AFTER_INIT NonnullRefPtr ACPISysFSDirectory::must_create(FirmwareSysFSDirectory& firmware_directory) -{ - auto acpi_directory = MUST(adopt_nonnull_ref_or_enomem(new (nothrow) ACPISysFSDirectory(firmware_directory))); - return acpi_directory; -} - -UNMAP_AFTER_INIT ACPISysFSDirectory::ACPISysFSDirectory(FirmwareSysFSDirectory& firmware_directory) - : SysFSDirectory(firmware_directory) +UNMAP_AFTER_INIT void ACPISysFSDirectory::find_tables_and_register_them_as_components() { NonnullRefPtrVector components; size_t ssdt_count = 0; @@ -99,6 +92,18 @@ UNMAP_AFTER_INIT ACPISysFSDirectory::ACPISysFSDirectory(FirmwareSysFSDirectory& } } +UNMAP_AFTER_INIT NonnullRefPtr ACPISysFSDirectory::must_create(FirmwareSysFSDirectory& firmware_directory) +{ + auto acpi_directory = MUST(adopt_nonnull_ref_or_enomem(new (nothrow) ACPISysFSDirectory(firmware_directory))); + acpi_directory->find_tables_and_register_them_as_components(); + return acpi_directory; +} + +UNMAP_AFTER_INIT ACPISysFSDirectory::ACPISysFSDirectory(FirmwareSysFSDirectory& firmware_directory) + : SysFSDirectory(firmware_directory) +{ +} + void Parser::enumerate_static_tables(Function callback) { for (auto& p_table : m_sdt_pointers) { diff --git a/Kernel/Firmware/ACPI/Parser.h b/Kernel/Firmware/ACPI/Parser.h index b00525221eb..ee300cf9c31 100644 --- a/Kernel/Firmware/ACPI/Parser.h +++ b/Kernel/Firmware/ACPI/Parser.h @@ -26,6 +26,7 @@ public: static NonnullRefPtr must_create(FirmwareSysFSDirectory& firmware_directory); private: + void find_tables_and_register_them_as_components(); explicit ACPISysFSDirectory(FirmwareSysFSDirectory& firmware_directory); };