LKML Archive on lore.kernel.org help / color / mirror / Atom feed
* [PATCH v4 0/2] arm64: Get rid of __early_init_dt_declare_initrd() @ 2018-10-26 22:39 Florian Fainelli 2018-10-26 22:39 ` [PATCH v4 1/2] " Florian Fainelli 2018-10-26 22:39 ` [PATCH v4 2/2] of/fdt: Remove definition check for __early_init_dt_declare_initrd() Florian Fainelli 0 siblings, 2 replies; 5+ messages in thread From: Florian Fainelli @ 2018-10-26 22:39 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Rob Herring, Frank Rowand, Andrew Morton, Marc Zyngier, Russell King, Andrey Ryabinin, Andrey Konovalov, Masahiro Yamada, Robin Murphy, Laura Abbott, Stefan Agner, Johannes Weiner, Greg Hackmann, Kristina Martsenko, CHANDAN VN, moderated list:ARM64 PORT (AARCH64 ARCHITECTURE), open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, rppt, linux Hi all, I numbered this v4 because this is still revolving around the same initial desire to cut the build time of an ARM64 kernel when toggling CONFIG_BLK_DEV_INITRD. This 4th version is basically the 3rd possible way to just get rid of __early_init_dt_declare_initrd() for ARM64. I previously mentioned that I was working on making phys_initrd_start/phys_initrd_size generic across architectures that make use of it, which would cover ARM (32-bit), unicore32 and possibly arm64, but upon second glance, this does not necessarily help, or rather this patch series actually helps make a smoother conversion in the future. Comments welcome, sorry for making so many iterations, it's Friday. Previous discussions/submissions list here: v3: https://www.spinics.net/lists/arm-kernel/msg683566.html v2: https://lkml.org/lkml/2018/10/25/4 Changes in v4: - perform the physical to virtual initrd conversion straight within arm64_memblock_init() to get the correct memblock reservation to occur Changes in v3: - attempt to change drivers/of/fdt.c to absorb ARM64's specific behavior Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arm64: Get rid of __early_init_dt_declare_initrd() of/fdt: Remove definition check for __early_init_dt_declare_initrd() arch/arm64/include/asm/memory.h | 8 -------- arch/arm64/mm/init.c | 26 ++++++++++++++++---------- drivers/of/fdt.c | 2 -- 3 files changed, 16 insertions(+), 20 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v4 1/2] arm64: Get rid of __early_init_dt_declare_initrd() 2018-10-26 22:39 [PATCH v4 0/2] arm64: Get rid of __early_init_dt_declare_initrd() Florian Fainelli @ 2018-10-26 22:39 ` Florian Fainelli 2018-10-27 9:13 ` Mike Rapoport 2018-10-26 22:39 ` [PATCH v4 2/2] of/fdt: Remove definition check for __early_init_dt_declare_initrd() Florian Fainelli 1 sibling, 1 reply; 5+ messages in thread From: Florian Fainelli @ 2018-10-26 22:39 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Rob Herring, Frank Rowand, Andrew Morton, Marc Zyngier, Russell King, Andrey Ryabinin, Andrey Konovalov, Masahiro Yamada, Robin Murphy, Laura Abbott, Stefan Agner, Johannes Weiner, Greg Hackmann, Kristina Martsenko, CHANDAN VN, moderated list:ARM64 PORT (AARCH64 ARCHITECTURE), open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, rppt, linux ARM64 is the only architecture that re-defines __early_init_dt_declare_initrd() in order for that function to populate initrd_start/initrd_end with physical addresses instead of virtual addresses. Instead of having an override, just get rid of that implementation and perform the virtual to physical conversion of these addresses in arm64_memblock_init() where relevant. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/memory.h | 8 -------- arch/arm64/mm/init.c | 26 ++++++++++++++++---------- 2 files changed, 16 insertions(+), 18 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/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 3cf87341859f..98ff0f7a0f7a 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -364,6 +364,9 @@ static void __init fdt_enforce_memory_region(void) void __init arm64_memblock_init(void) { const s64 linear_region_size = -(s64)PAGE_OFFSET; + unsigned long __maybe_unused phys_initrd_size; + u64 __maybe_unused phys_initrd_start; + u64 __maybe_unused base, size; /* Handle linux,usable-memory-range property */ fdt_enforce_memory_region(); @@ -414,8 +417,11 @@ void __init arm64_memblock_init(void) * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + phys_initrd_start = __pa(initrd_start); + phys_initrd_size = __pa(initrd_end) - phys_initrd_start; + + base = phys_initrd_start & PAGE_MASK; + size = PAGE_ALIGN(phys_initrd_size); /* * We can only add back the initrd memory if we don't end up @@ -459,15 +465,15 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD - if (initrd_start) { - memblock_reserve(initrd_start, initrd_end - initrd_start); - - /* the generic initrd code expects virtual addresses */ - initrd_start = __phys_to_virt(initrd_start); - initrd_end = __phys_to_virt(initrd_end); + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + memblock_reserve(phys_initrd_start, phys_initrd_size); + /* + * initrd_below_start_ok can be changed by + * __early_init_dt_declare_initrd(), set it back to what + * we want here. + */ + initrd_below_start_ok = 0; } -#endif early_init_fdt_scan_reserved_mem(); -- 2.17.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 1/2] arm64: Get rid of __early_init_dt_declare_initrd() 2018-10-26 22:39 ` [PATCH v4 1/2] " Florian Fainelli @ 2018-10-27 9:13 ` Mike Rapoport 2018-10-29 16:51 ` Florian Fainelli 0 siblings, 1 reply; 5+ messages in thread From: Mike Rapoport @ 2018-10-27 9:13 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Rob Herring, Frank Rowand, Andrew Morton, Marc Zyngier, Russell King, Andrey Ryabinin, Andrey Konovalov, Masahiro Yamada, Robin Murphy, Laura Abbott, Stefan Agner, Johannes Weiner, Greg Hackmann, Kristina Martsenko, CHANDAN VN, moderated list:ARM64 PORT (AARCH64 ARCHITECTURE), open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, linux Hi Florian, On Fri, Oct 26, 2018 at 03:39:50PM -0700, Florian Fainelli wrote: > ARM64 is the only architecture that re-defines > __early_init_dt_declare_initrd() in order for that function to populate > initrd_start/initrd_end with physical addresses instead of virtual > addresses. Instead of having an override, just get rid of that > implementation and perform the virtual to physical conversion of these > addresses in arm64_memblock_init() where relevant. > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- > arch/arm64/include/asm/memory.h | 8 -------- > arch/arm64/mm/init.c | 26 ++++++++++++++++---------- > 2 files changed, 16 insertions(+), 18 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/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 3cf87341859f..98ff0f7a0f7a 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -364,6 +364,9 @@ static void __init fdt_enforce_memory_region(void) > void __init arm64_memblock_init(void) > { > const s64 linear_region_size = -(s64)PAGE_OFFSET; > + unsigned long __maybe_unused phys_initrd_size; > + u64 __maybe_unused phys_initrd_start; > + u64 __maybe_unused base, size; > > /* Handle linux,usable-memory-range property */ > fdt_enforce_memory_region(); > @@ -414,8 +417,11 @@ void __init arm64_memblock_init(void) > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + phys_initrd_start = __pa(initrd_start); > + phys_initrd_size = __pa(initrd_end) - phys_initrd_start; If initrd_{start,end} are defined by the command line they already would be physical addresses. > + > + base = phys_initrd_start & PAGE_MASK; > + size = PAGE_ALIGN(phys_initrd_size); > > /* > * We can only add back the initrd memory if we don't end up > @@ -459,15 +465,15 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > - if (initrd_start) { > - memblock_reserve(initrd_start, initrd_end - initrd_start); > - > - /* the generic initrd code expects virtual addresses */ > - initrd_start = __phys_to_virt(initrd_start); > - initrd_end = __phys_to_virt(initrd_end); > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + memblock_reserve(phys_initrd_start, phys_initrd_size); this is not needed, as we do memblock_reserve() for the same area earlier. What do you think of my version (below)? > + /* > + * initrd_below_start_ok can be changed by > + * __early_init_dt_declare_initrd(), set it back to what > + * we want here. > + */ > + initrd_below_start_ok = 0; > } > -#endif > > early_init_fdt_scan_reserved_mem(); > > -- > 2.17.1 > From 0e5661c6f1ac2d4b08a55d38c6bc224c187af14f Mon Sep 17 00:00:00 2001 From: Florian Fainelli <f.fainelli@gmail.com> Date: Sat, 27 Oct 2018 12:04:58 +0300 Subject: [PATCH] arm64: Get rid of __early_init_dt_declare_initrd() ARM64 is the only architecture that re-defines __early_init_dt_declare_initrd() in order for that function to populate initrd_start/initrd_end with physical addresses instead of virtual addresses. Instead of having an override, just get rid of that implementation and perform the virtual to physical conversion of these addresses in arm64_memblock_init() where relevant. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> --- arch/arm64/include/asm/memory.h | 8 -------- arch/arm64/mm/init.c | 40 +++++++++++++++++++++++++--------------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b9644296..dc3ca21 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/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..dd665be3 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -61,6 +61,8 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; +static phys_addr_t phys_initrd_start, phys_initrd_end; + #ifdef CONFIG_BLK_DEV_INITRD static int __init early_initrd(char *p) { @@ -71,8 +73,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + phys_initrd_start = start; + phys_initrd_end = start + size; } return 0; } @@ -363,6 +365,7 @@ static void __init fdt_enforce_memory_region(void) void __init arm64_memblock_init(void) { const s64 linear_region_size = -(s64)PAGE_OFFSET; + u64 __maybe_unused base, size; /* Handle linux,usable-memory-range property */ fdt_enforce_memory_region(); @@ -407,14 +410,23 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || phys_initrd_start)) { /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + if (phys_initrd_start) { + initrd_start = __phys_to_virt(phys_initrd_start); + initrd_end = __phys_to_virt(phys_initrd_end); + } else if (initrd_start) { + phys_initrd_start = __pa(initrd_start); + phys_initrd_end = __pa(initrd_end); + } + + base = phys_initrd_start & PAGE_MASK; + size = PAGE_ALIGN(phys_initrd_end - phys_initrd_start); /* * We can only add back the initrd memory if we don't end up @@ -433,6 +445,13 @@ void __init arm64_memblock_init(void) memblock_remove(base, size); /* clear MEMBLOCK_ flags */ memblock_add(base, size); memblock_reserve(base, size); + + /* + * initrd_below_start_ok can be changed by + * __early_init_dt_declare_initrd(), set it back to what + * we want here. + */ + initrd_below_start_ok = 0; } } @@ -454,19 +473,10 @@ void __init arm64_memblock_init(void) } /* - * Register the kernel text, kernel data, initrd, and initial + * Register the kernel text, kernel data and initial * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD - if (initrd_start) { - memblock_reserve(initrd_start, initrd_end - initrd_start); - - /* the generic initrd code expects virtual addresses */ - initrd_start = __phys_to_virt(initrd_start); - initrd_end = __phys_to_virt(initrd_end); - } -#endif early_init_fdt_scan_reserved_mem(); -- 2.7.4 -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 1/2] arm64: Get rid of __early_init_dt_declare_initrd() 2018-10-27 9:13 ` Mike Rapoport @ 2018-10-29 16:51 ` Florian Fainelli 0 siblings, 0 replies; 5+ messages in thread From: Florian Fainelli @ 2018-10-29 16:51 UTC (permalink / raw) To: Mike Rapoport Cc: linux-kernel, Catalin Marinas, Will Deacon, Rob Herring, Frank Rowand, Andrew Morton, Marc Zyngier, Russell King, Andrey Ryabinin, Andrey Konovalov, Masahiro Yamada, Robin Murphy, Laura Abbott, Stefan Agner, Johannes Weiner, Greg Hackmann, Kristina Martsenko, CHANDAN VN, moderated list:ARM64 PORT (AARCH64 ARCHITECTURE), open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, linux Hi Mike, On 10/27/18 2:13 AM, Mike Rapoport wrote: > Hi Florian, > > On Fri, Oct 26, 2018 at 03:39:50PM -0700, Florian Fainelli wrote: >> ARM64 is the only architecture that re-defines >> __early_init_dt_declare_initrd() in order for that function to populate >> initrd_start/initrd_end with physical addresses instead of virtual >> addresses. Instead of having an override, just get rid of that >> implementation and perform the virtual to physical conversion of these >> addresses in arm64_memblock_init() where relevant. >> >> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> >> --- >> arch/arm64/include/asm/memory.h | 8 -------- >> arch/arm64/mm/init.c | 26 ++++++++++++++++---------- >> 2 files changed, 16 insertions(+), 18 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/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >> index 3cf87341859f..98ff0f7a0f7a 100644 >> --- a/arch/arm64/mm/init.c >> +++ b/arch/arm64/mm/init.c >> @@ -364,6 +364,9 @@ static void __init fdt_enforce_memory_region(void) >> void __init arm64_memblock_init(void) >> { >> const s64 linear_region_size = -(s64)PAGE_OFFSET; >> + unsigned long __maybe_unused phys_initrd_size; >> + u64 __maybe_unused phys_initrd_start; >> + u64 __maybe_unused base, size; >> >> /* Handle linux,usable-memory-range property */ >> fdt_enforce_memory_region(); >> @@ -414,8 +417,11 @@ void __init arm64_memblock_init(void) >> * initrd to become inaccessible via the linear mapping. >> * Otherwise, this is a no-op >> */ >> - u64 base = initrd_start & PAGE_MASK; >> - u64 size = PAGE_ALIGN(initrd_end) - base; >> + phys_initrd_start = __pa(initrd_start); >> + phys_initrd_size = __pa(initrd_end) - phys_initrd_start; > > If initrd_{start,end} are defined by the command line they already would be > physical addresses. Yes indeed. > >> + >> + base = phys_initrd_start & PAGE_MASK; >> + size = PAGE_ALIGN(phys_initrd_size); >> >> /* >> * We can only add back the initrd memory if we don't end up >> @@ -459,15 +465,15 @@ void __init arm64_memblock_init(void) >> * pagetables with memblock. >> */ >> memblock_reserve(__pa_symbol(_text), _end - _text); >> -#ifdef CONFIG_BLK_DEV_INITRD >> - if (initrd_start) { >> - memblock_reserve(initrd_start, initrd_end - initrd_start); >> - >> - /* the generic initrd code expects virtual addresses */ >> - initrd_start = __phys_to_virt(initrd_start); >> - initrd_end = __phys_to_virt(initrd_end); >> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >> + memblock_reserve(phys_initrd_start, phys_initrd_size); > > this is not needed, as we do memblock_reserve() for the same area earlier. Humm, yes, actually we made sure before that we called memblock_reserve() against a properly page aligned region, unlike the one below. > > What do you think of my version (below)? Looks good to me, thanks for making those fixes, I will send that shortly along with patch #2 if that sounds reasonable to you. > >> + /* >> + * initrd_below_start_ok can be changed by >> + * __early_init_dt_declare_initrd(), set it back to what >> + * we want here. >> + */ >> + initrd_below_start_ok = 0; >> } >> -#endif >> >> early_init_fdt_scan_reserved_mem(); >> >> -- >> 2.17.1 >> > > From 0e5661c6f1ac2d4b08a55d38c6bc224c187af14f Mon Sep 17 00:00:00 2001 > From: Florian Fainelli <f.fainelli@gmail.com> > Date: Sat, 27 Oct 2018 12:04:58 +0300 > Subject: [PATCH] arm64: Get rid of __early_init_dt_declare_initrd() > > ARM64 is the only architecture that re-defines > __early_init_dt_declare_initrd() in order for that function to populate > initrd_start/initrd_end with physical addresses instead of virtual > addresses. Instead of having an override, just get rid of that > implementation and perform the virtual to physical conversion of these > addresses in arm64_memblock_init() where relevant. > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> > --- > arch/arm64/include/asm/memory.h | 8 -------- > arch/arm64/mm/init.c | 40 +++++++++++++++++++++++++--------------- > 2 files changed, 25 insertions(+), 23 deletions(-) > > diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h > index b9644296..dc3ca21 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/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..dd665be3 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -61,6 +61,8 @@ > s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > +static phys_addr_t phys_initrd_start, phys_initrd_end; > + > #ifdef CONFIG_BLK_DEV_INITRD > static int __init early_initrd(char *p) > { > @@ -71,8 +73,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + phys_initrd_start = start; > + phys_initrd_end = start + size; > } > return 0; > } > @@ -363,6 +365,7 @@ static void __init fdt_enforce_memory_region(void) > void __init arm64_memblock_init(void) > { > const s64 linear_region_size = -(s64)PAGE_OFFSET; > + u64 __maybe_unused base, size; > > /* Handle linux,usable-memory-range property */ > fdt_enforce_memory_region(); > @@ -407,14 +410,23 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || phys_initrd_start)) { > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + if (phys_initrd_start) { > + initrd_start = __phys_to_virt(phys_initrd_start); > + initrd_end = __phys_to_virt(phys_initrd_end); > + } else if (initrd_start) { > + phys_initrd_start = __pa(initrd_start); > + phys_initrd_end = __pa(initrd_end); > + } > + > + base = phys_initrd_start & PAGE_MASK; > + size = PAGE_ALIGN(phys_initrd_end - phys_initrd_start); > > /* > * We can only add back the initrd memory if we don't end up > @@ -433,6 +445,13 @@ void __init arm64_memblock_init(void) > memblock_remove(base, size); /* clear MEMBLOCK_ flags */ > memblock_add(base, size); > memblock_reserve(base, size); > + > + /* > + * initrd_below_start_ok can be changed by > + * __early_init_dt_declare_initrd(), set it back to what > + * we want here. > + */ > + initrd_below_start_ok = 0; > } > } > > @@ -454,19 +473,10 @@ void __init arm64_memblock_init(void) > } > > /* > - * Register the kernel text, kernel data, initrd, and initial > + * Register the kernel text, kernel data and initial > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > - if (initrd_start) { > - memblock_reserve(initrd_start, initrd_end - initrd_start); > - > - /* the generic initrd code expects virtual addresses */ > - initrd_start = __phys_to_virt(initrd_start); > - initrd_end = __phys_to_virt(initrd_end); > - } > -#endif > > early_init_fdt_scan_reserved_mem(); > > -- Florian ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v4 2/2] of/fdt: Remove definition check for __early_init_dt_declare_initrd() 2018-10-26 22:39 [PATCH v4 0/2] arm64: Get rid of __early_init_dt_declare_initrd() Florian Fainelli 2018-10-26 22:39 ` [PATCH v4 1/2] " Florian Fainelli @ 2018-10-26 22:39 ` Florian Fainelli 1 sibling, 0 replies; 5+ messages in thread From: Florian Fainelli @ 2018-10-26 22:39 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Rob Herring, Frank Rowand, Andrew Morton, Marc Zyngier, Russell King, Andrey Ryabinin, Andrey Konovalov, Masahiro Yamada, Robin Murphy, Laura Abbott, Stefan Agner, Johannes Weiner, Greg Hackmann, Kristina Martsenko, CHANDAN VN, moderated list:ARM64 PORT (AARCH64 ARCHITECTURE), open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, rppt, linux With the one and only architecture (ARM64) no longer defining a custom __early_init_dt_declare_initrd() function, just get rid of the check for that function being already defined. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- drivers/of/fdt.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..797c9e2d6d57 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -892,7 +892,6 @@ 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) { @@ -900,7 +899,6 @@ static void __early_init_dt_declare_initrd(unsigned long 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-10-29 16:51 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-10-26 22:39 [PATCH v4 0/2] arm64: Get rid of __early_init_dt_declare_initrd() Florian Fainelli 2018-10-26 22:39 ` [PATCH v4 1/2] " Florian Fainelli 2018-10-27 9:13 ` Mike Rapoport 2018-10-29 16:51 ` Florian Fainelli 2018-10-26 22:39 ` [PATCH v4 2/2] of/fdt: Remove definition check for __early_init_dt_declare_initrd() Florian Fainelli
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).