Thread (10 messages) 10 messages, 3 authors, 2018-10-31

[PATCH v2 5/6] of/fdt: Remove custom __early_init_dt_declare_initrd() implementation

From: robh+dt@kernel.org (Rob Herring)
Date: 2018-10-31 12:30:04
Also in: linux-devicetree, lkml

On Tue, Oct 30, 2018 at 6:07 PM Florian Fainelli [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Now that ARM64 uses phys_initrd_start/phys_initrd_size, we can get rid
of its custom __early_init_dt_declare_initrd() which causes a fair
amount of objects rebuild when changing CONFIG_BLK_DEV_INITRD. In order
to make sure ARM64 does not produce a BUG() when VM debugging is turned
on though, we must avoid early calls to __va() which is what
__early_init_dt_declare_initrd() does and wrap this around to avoid
running that code on ARM64.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
 arch/arm64/include/asm/memory.h | 8 --------
 drivers/of/fdt.c                | 9 +++++++--
 2 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
index b96442960aea..dc3ca21ba240 100644
--- a/arch/arm64/include/asm/memory.h
+++ b/arch/arm64/include/asm/memory.h
@@ -168,14 +168,6 @@
 #define IOREMAP_MAX_ORDER      (PMD_SHIFT)
 #endif

-#ifdef CONFIG_BLK_DEV_INITRD
-#define __early_init_dt_declare_initrd(__start, __end)                 \
-       do {                                                            \
-               initrd_start = (__start);                               \
-               initrd_end = (__end);                                   \
-       } while (0)
-#endif
-
 #ifndef __ASSEMBLY__

 #include <linux/bitops.h>
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index e34cb49231b5..f2b5becae96a 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -892,15 +892,20 @@ const void * __init of_flat_dt_match_machine(const void *default_match,
 }

 #ifdef CONFIG_BLK_DEV_INITRD
-#ifndef __early_init_dt_declare_initrd
 static void __early_init_dt_declare_initrd(unsigned long start,
                                           unsigned long end)
 {
+       /* ARM64 would cause a BUG to occur here when CONFIG_DEBUG_VM is
+        * enabled since __va() is called too early. ARM64 does make use
+        * of phys_initrd_start/phys_initrd_size so we can skip this
+        * conversion.
+        */
+#if (!IS_ENABLED(CONFIG_ARM64))
Use 'if' not '#if'. Use C code rather than preprocessor whenever possible.
        initrd_start = (unsigned long)__va(start);
        initrd_end = (unsigned long)__va(end);
        initrd_below_start_ok = 1;
-}
 #endif
+}

 /**
  * early_init_dt_check_for_initrd - Decode initrd location from flat tree
--
2.17.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help