Thread (22 messages) flat view 22 messages, 3 authors, 2021-03-02

Re: [PATCH] mm, kasan: don't poison boot memory

From: Mike Rapoport <hidden>
Date: 2021-03-02 10:11:15
Also in: linux-acpi, linux-mm, lkml

Possibly related (same subject, not in this thread)

Hi George,

On Mon, Mar 01, 2021 at 08:20:45PM -0500, George Kennedy wrote:
quoted
quoted
quoted
quoted
There should be no harm in doing the memblock_reserve() for all
the standard
tables, right?
It should be ok to memblock_reserve() all the tables very early as
long as
we don't run out of static entries in memblock.reserved.

We just need to make sure the tables are reserved before memblock
allocations are possible, so we'd still need to move
acpi_table_init() in
x86::setup_arch() before e820__memblock_setup().
Not sure how early ACPI is initialized on arm64.
Thanks Mike. Will try to move the memblock_reserves() before
e820__memblock_setup().
Hi Mike,

Moved acpi_table_init() in x86::setup_arch() before e820__memblock_setup()
as you suggested.

Ran 10 boots with the following without error.
I'd suggest to send it as a formal patch to see what x86 and ACPI folks
have to say about this.
 
quoted hunk ↗ jump to hunk
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 740f3bdb..3b1dd24 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1047,6 +1047,7 @@ void __init setup_arch(char **cmdline_p)
     cleanup_highmap();

     memblock_set_current_limit(ISA_END_ADDRESS);
+    acpi_boot_table_init();
     e820__memblock_setup();

     /*
@@ -1140,8 +1141,6 @@ void __init setup_arch(char **cmdline_p)
     /*
      * Parse the ACPI tables for possible boot-time SMP configuration.
      */
-    acpi_boot_table_init();
-
     early_acpi_boot_init();

     initmem_init();
diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c
index 0bb15ad..7830109 100644
--- a/drivers/acpi/acpica/tbinstal.c
+++ b/drivers/acpi/acpica/tbinstal.c
@@ -7,6 +7,7 @@
  *
*****************************************************************************/

+#include <linux/memblock.h>
 #include <acpi/acpi.h>
 #include "accommon.h"
 #include "actables.h"
@@ -16,6 +17,33 @@
 /*******************************************************************************
  *
+ * FUNCTION:    acpi_tb_reserve_standard_table
+ *
+ * PARAMETERS:  address             - Table physical address
+ *              header              - Table header
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: To avoid an acpi table page from being "stolen" by the
buddy
+ *              allocator run memblock_reserve() on all the standard acpi
tables.
+ *
+ ******************************************************************************/
+void
+acpi_tb_reserve_standard_table(acpi_physical_address address,
+               struct acpi_table_header *header)
+{
+    if ((ACPI_COMPARE_NAMESEG(header->signature, ACPI_SIG_FACS)) ||
+        (ACPI_VALIDATE_RSDP_SIG(header->signature)))
+        return;
+
Why these should be excluded?
+    if (header->length > PAGE_SIZE) /* same check as in acpi_map() */
+        return;
I don't think this is required, I believe acpi_map() has this check because
kmap() cannot handle multiple pages.
quoted hunk ↗ jump to hunk
+
+    memblock_reserve(address, PAGE_ALIGN(header->length));
+}
+
+/*******************************************************************************
+ *
  * FUNCTION:    acpi_tb_install_table_with_override
  *
  * PARAMETERS:  new_table_desc          - New table descriptor to install
@@ -58,6 +86,9 @@
                       new_table_desc->flags,
                       new_table_desc->pointer);

+    acpi_tb_reserve_standard_table(new_table_desc->address,
+                   new_table_desc->pointer);
+
     acpi_tb_print_table_header(new_table_desc->address,
                    new_table_desc->pointer);

George
-- 
Sincerely yours,
Mike.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help