stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] arm64: map FDT as RW for early_init_dt_scan()
@ 2022-08-31 20:32 Michael Bestas
  2022-09-01  9:57 ` Greg KH
  0 siblings, 1 reply; 10+ messages in thread
From: Michael Bestas @ 2022-08-31 20:32 UTC (permalink / raw)
  To: stable
  Cc: Hsin-Yi Wang, Stephen Boyd, Mike Rapoport, Will Deacon, Michael Bestas

From: Hsin-Yi Wang <hsinyi@chromium.org>

commit e112b032a72c78f15d0c803c5dc6be444c2e6c66 upstream.

Currently in arm64, FDT is mapped to RO before it's passed to
early_init_dt_scan(). However, there might be some codes
(eg. commit "fdt: add support for rng-seed") that need to modify FDT
during init. Map FDT to RO after early fixups are done.

Cc: stable@vger.kernel.org # 4.14
Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
Signed-off-by: Will Deacon <will@kernel.org>
[mkbestas: fixed trivial conflicts for 4.14 backport]
Signed-off-by: Michael Bestas <mkbestas@gmail.com>
---
 arch/arm64/include/asm/mmu.h |  2 +-
 arch/arm64/kernel/kaslr.c    |  5 +----
 arch/arm64/kernel/setup.c    |  9 ++++++++-
 arch/arm64/mm/mmu.c          | 15 +--------------
 4 files changed, 11 insertions(+), 20 deletions(-)

diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h
index 5a77dc775cc3c4..9494e35bf3a2a7 100644
--- a/arch/arm64/include/asm/mmu.h
+++ b/arch/arm64/include/asm/mmu.h
@@ -91,7 +91,7 @@ extern void init_mem_pgprot(void);
 extern void create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,
 			       unsigned long virt, phys_addr_t size,
 			       pgprot_t prot, bool page_mappings_only);
-extern void *fixmap_remap_fdt(phys_addr_t dt_phys);
+extern void *fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot);
 extern void mark_linear_text_alias_ro(void);
 
 #endif	/* !__ASSEMBLY__ */
diff --git a/arch/arm64/kernel/kaslr.c b/arch/arm64/kernel/kaslr.c
index ae727828609491..17fa1d363fff2c 100644
--- a/arch/arm64/kernel/kaslr.c
+++ b/arch/arm64/kernel/kaslr.c
@@ -65,9 +65,6 @@ static __init const u8 *kaslr_get_cmdline(void *fdt)
 	return default_cmdline;
 }
 
-extern void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size,
-				       pgprot_t prot);
-
 /*
  * This routine will be executed with the kernel mapped at its default virtual
  * address, and if it returns successfully, the kernel will be remapped, and
@@ -96,7 +93,7 @@ u64 __init kaslr_early_init(u64 dt_phys)
 	 * attempt at mapping the FDT in setup_machine()
 	 */
 	early_fixmap_init();
-	fdt = __fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
+	fdt = fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
 	if (!fdt)
 		return 0;
 
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index d4b740538ad574..01b15d9dd8d62d 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -179,9 +179,13 @@ static void __init smp_build_mpidr_hash(void)
 
 static void __init setup_machine_fdt(phys_addr_t dt_phys)
 {
-	void *dt_virt = fixmap_remap_fdt(dt_phys);
+	int size;
+	void *dt_virt = fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
 	const char *name;
 
+	if (dt_virt)
+		memblock_reserve(dt_phys, size);
+
 	if (!dt_virt || !early_init_dt_scan(dt_virt)) {
 		pr_crit("\n"
 			"Error: invalid device tree blob at physical address %pa (virtual address 0x%p)\n"
@@ -193,6 +197,9 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
 			cpu_relax();
 	}
 
+	/* Early fixups are done, map the FDT as read-only now */
+	fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL_RO);
+
 	name = of_flat_dt_get_machine_name();
 	if (!name)
 		return;
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index 4d472907194dd3..ce8c57d70e5fc7 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -836,7 +836,7 @@ void __set_fixmap(enum fixed_addresses idx,
 	}
 }
 
-void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
+void *__init fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
 {
 	const u64 dt_virt_base = __fix_to_virt(FIX_FDT);
 	int offset;
@@ -889,19 +889,6 @@ void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
 	return dt_virt;
 }
 
-void *__init fixmap_remap_fdt(phys_addr_t dt_phys)
-{
-	void *dt_virt;
-	int size;
-
-	dt_virt = __fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL_RO);
-	if (!dt_virt)
-		return NULL;
-
-	memblock_reserve(dt_phys, size);
-	return dt_virt;
-}
-
 int __init arch_ioremap_pud_supported(void)
 {
 	/*
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] arm64: map FDT as RW for early_init_dt_scan()
  2022-08-31 20:32 [PATCH] arm64: map FDT as RW for early_init_dt_scan() Michael Bestas
@ 2022-09-01  9:57 ` Greg KH
  2022-09-01 10:57   ` Michael Bestas
  0 siblings, 1 reply; 10+ messages in thread
From: Greg KH @ 2022-09-01  9:57 UTC (permalink / raw)
  To: Michael Bestas
  Cc: stable, Hsin-Yi Wang, Stephen Boyd, Mike Rapoport, Will Deacon

On Wed, Aug 31, 2022 at 11:32:00PM +0300, Michael Bestas wrote:
> From: Hsin-Yi Wang <hsinyi@chromium.org>
> 
> commit e112b032a72c78f15d0c803c5dc6be444c2e6c66 upstream.
> 
> Currently in arm64, FDT is mapped to RO before it's passed to
> early_init_dt_scan(). However, there might be some codes
> (eg. commit "fdt: add support for rng-seed") that need to modify FDT
> during init. Map FDT to RO after early fixups are done.
> 
> Cc: stable@vger.kernel.org # 4.14
> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
> Reviewed-by: Stephen Boyd <swboyd@chromium.org>
> Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
> Signed-off-by: Will Deacon <will@kernel.org>
> [mkbestas: fixed trivial conflicts for 4.14 backport]
> Signed-off-by: Michael Bestas <mkbestas@gmail.com>
> ---
>  arch/arm64/include/asm/mmu.h |  2 +-
>  arch/arm64/kernel/kaslr.c    |  5 +----
>  arch/arm64/kernel/setup.c    |  9 ++++++++-
>  arch/arm64/mm/mmu.c          | 15 +--------------
>  4 files changed, 11 insertions(+), 20 deletions(-)
> 

Both now queued up, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] arm64: map FDT as RW for early_init_dt_scan()
  2022-09-01  9:57 ` Greg KH
@ 2022-09-01 10:57   ` Michael Bestas
  2022-09-01 12:07     ` Greg KH
  0 siblings, 1 reply; 10+ messages in thread
From: Michael Bestas @ 2022-09-01 10:57 UTC (permalink / raw)
  To: gregkh; +Cc: hsinyi, mkbestas, rppt, stable, swboyd, will

On Thu, 1 Sep 2022 11:57:55 +0200
Greg KH <gregkh@linuxfoundation.org> wrote:

> Both now queued up, thanks.
>
> greg k-h

Could you also queue the 4.9 patch or I need to send it again?
https://lore.kernel.org/all/20220809145624.1819905-1-mkbestas@gmail.com/

Thanks,

Michael Bestas

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] arm64: map FDT as RW for early_init_dt_scan()
  2022-09-01 10:57   ` Michael Bestas
@ 2022-09-01 12:07     ` Greg KH
  0 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2022-09-01 12:07 UTC (permalink / raw)
  To: Michael Bestas; +Cc: hsinyi, rppt, stable, swboyd, will

On Thu, Sep 01, 2022 at 01:57:27PM +0300, Michael Bestas wrote:
> On Thu, 1 Sep 2022 11:57:55 +0200
> Greg KH <gregkh@linuxfoundation.org> wrote:
> 
> > Both now queued up, thanks.
> >
> > greg k-h
> 
> Could you also queue the 4.9 patch or I need to send it again?
> https://lore.kernel.org/all/20220809145624.1819905-1-mkbestas@gmail.com/

Ah, thanks for pointing that out, it was long-gone from my queue.  Now
added.

greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH] arm64: map FDT as RW for early_init_dt_scan()
@ 2022-08-31 20:30 Michael Bestas
  0 siblings, 0 replies; 10+ messages in thread
From: Michael Bestas @ 2022-08-31 20:30 UTC (permalink / raw)
  To: stable
  Cc: Hsin-Yi Wang, Stephen Boyd, Mike Rapoport, Will Deacon, Michael Bestas

From: Hsin-Yi Wang <hsinyi@chromium.org>

commit e112b032a72c78f15d0c803c5dc6be444c2e6c66 upstream.

Currently in arm64, FDT is mapped to RO before it's passed to
early_init_dt_scan(). However, there might be some codes
(eg. commit "fdt: add support for rng-seed") that need to modify FDT
during init. Map FDT to RO after early fixups are done.

Cc: stable@vger.kernel.org # 4.19
Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
Signed-off-by: Will Deacon <will@kernel.org>
[mkbestas: fixed trivial conflicts for 4.19 backport]
Signed-off-by: Michael Bestas <mkbestas@gmail.com>
---
 arch/arm64/include/asm/mmu.h |  2 +-
 arch/arm64/kernel/kaslr.c    |  5 +----
 arch/arm64/kernel/setup.c    |  9 ++++++++-
 arch/arm64/mm/mmu.c          | 15 +--------------
 4 files changed, 11 insertions(+), 20 deletions(-)

diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h
index b37d185e0e841c..3dda6ff32efd7f 100644
--- a/arch/arm64/include/asm/mmu.h
+++ b/arch/arm64/include/asm/mmu.h
@@ -98,7 +98,7 @@ extern void init_mem_pgprot(void);
 extern void create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,
 			       unsigned long virt, phys_addr_t size,
 			       pgprot_t prot, bool page_mappings_only);
-extern void *fixmap_remap_fdt(phys_addr_t dt_phys);
+extern void *fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot);
 extern void mark_linear_text_alias_ro(void);
 
 #endif	/* !__ASSEMBLY__ */
diff --git a/arch/arm64/kernel/kaslr.c b/arch/arm64/kernel/kaslr.c
index 06941c1fe418e0..92bb53460401c0 100644
--- a/arch/arm64/kernel/kaslr.c
+++ b/arch/arm64/kernel/kaslr.c
@@ -65,9 +65,6 @@ static __init const u8 *kaslr_get_cmdline(void *fdt)
 	return default_cmdline;
 }
 
-extern void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size,
-				       pgprot_t prot);
-
 /*
  * This routine will be executed with the kernel mapped at its default virtual
  * address, and if it returns successfully, the kernel will be remapped, and
@@ -96,7 +93,7 @@ u64 __init kaslr_early_init(u64 dt_phys)
 	 * attempt at mapping the FDT in setup_machine()
 	 */
 	early_fixmap_init();
-	fdt = __fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
+	fdt = fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
 	if (!fdt)
 		return 0;
 
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index b3354ff94e7984..43e9786f1d6044 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -183,9 +183,13 @@ static void __init smp_build_mpidr_hash(void)
 
 static void __init setup_machine_fdt(phys_addr_t dt_phys)
 {
-	void *dt_virt = fixmap_remap_fdt(dt_phys);
+	int size;
+	void *dt_virt = fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
 	const char *name;
 
+	if (dt_virt)
+		memblock_reserve(dt_phys, size);
+
 	if (!dt_virt || !early_init_dt_scan(dt_virt)) {
 		pr_crit("\n"
 			"Error: invalid device tree blob at physical address %pa (virtual address 0x%p)\n"
@@ -197,6 +201,9 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
 			cpu_relax();
 	}
 
+	/* Early fixups are done, map the FDT as read-only now */
+	fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL_RO);
+
 	name = of_flat_dt_get_machine_name();
 	if (!name)
 		return;
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index b0a83dbed2dc44..7042fbb6d92bac 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -859,7 +859,7 @@ void __set_fixmap(enum fixed_addresses idx,
 	}
 }
 
-void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
+void *__init fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
 {
 	const u64 dt_virt_base = __fix_to_virt(FIX_FDT);
 	int offset;
@@ -912,19 +912,6 @@ void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
 	return dt_virt;
 }
 
-void *__init fixmap_remap_fdt(phys_addr_t dt_phys)
-{
-	void *dt_virt;
-	int size;
-
-	dt_virt = __fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL_RO);
-	if (!dt_virt)
-		return NULL;
-
-	memblock_reserve(dt_phys, size);
-	return dt_virt;
-}
-
 int __init arch_ioremap_pud_supported(void)
 {
 	/*
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] arm64: map FDT as RW for early_init_dt_scan()
  2022-08-09 18:17   ` Michael Bestas
@ 2022-08-19 11:07     ` Greg KH
  0 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2022-08-19 11:07 UTC (permalink / raw)
  To: Michael Bestas; +Cc: hsinyi, rppt, stable, swboyd, will

On Tue, Aug 09, 2022 at 09:17:53PM +0300, Michael Bestas wrote:
> On Tue, 9 Aug 2022 19:12:54 +0200
> Greg KH <gregkh@linuxfoundation.org> wrote:
> 
> > What about 4.14.y and newer?
> > 
> > thanks,
> > 
> > greg k-h  
> 
> This patch should be required on all stable kernels that got commit
> "fdt: add support for rng-seed", however I have not tested it.
> 
> A similar backport exists in android 4.19 kernel:
> https://android-review.googlesource.com/c/kernel/common/+/1238592

Great, please submit it so that we can include it.

Also for 4.14.y.  I can't take a patch for an older kernel tree without
the same commit being in a newer one, otherwise people would have
regressions when upgrading.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] arm64: map FDT as RW for early_init_dt_scan()
  2022-08-09 17:12 ` Greg KH
  2022-08-09 18:11   ` Michael Bestas
@ 2022-08-09 18:17   ` Michael Bestas
  2022-08-19 11:07     ` Greg KH
  1 sibling, 1 reply; 10+ messages in thread
From: Michael Bestas @ 2022-08-09 18:17 UTC (permalink / raw)
  To: gregkh; +Cc: hsinyi, mkbestas, rppt, stable, swboyd, will

On Tue, 9 Aug 2022 19:12:54 +0200
Greg KH <gregkh@linuxfoundation.org> wrote:

> What about 4.14.y and newer?
> 
> thanks,
> 
> greg k-h  

This patch should be required on all stable kernels that got commit
"fdt: add support for rng-seed", however I have not tested it.

A similar backport exists in android 4.19 kernel:
https://android-review.googlesource.com/c/kernel/common/+/1238592

Without this patch, Google Pixel 3/3a fails at a very early boot
stage after merging v4.9.320+ due to the random backport.

Sorry if I messed something up with the emails, this is the first
time I submit something to a mailing list.

Thanks,

Michael Bestas

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] arm64: map FDT as RW for early_init_dt_scan()
  2022-08-09 17:12 ` Greg KH
@ 2022-08-09 18:11   ` Michael Bestas
  2022-08-09 18:17   ` Michael Bestas
  1 sibling, 0 replies; 10+ messages in thread
From: Michael Bestas @ 2022-08-09 18:11 UTC (permalink / raw)
  To: Greg KH; +Cc: stable, Hsin-Yi Wang, Stephen Boyd, Mike Rapoport, Will Deacon

On Tue, 9 Aug 2022 19:12:54 +0200
Greg KH <gregkh@linuxfoundation.org> wrote:

> What about 4.14.y and newer?
> 
> thanks,
> 
> greg k-h

This patch should be required on all stable kernels that got commit
"fdt: add support for rng-seed", however I have not tested it.

A similar backport exists in android 4.19 kernel:
https://android-review.googlesource.com/c/kernel/common/+/1238592

Without this patch, Google Pixel 3/3a fails at a very early boot
stage after merging v4.9.320+ due to the random backport.

Thanks,

Michael Bestas

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] arm64: map FDT as RW for early_init_dt_scan()
  2022-08-09 14:56 Michael Bestas
@ 2022-08-09 17:12 ` Greg KH
  2022-08-09 18:11   ` Michael Bestas
  2022-08-09 18:17   ` Michael Bestas
  0 siblings, 2 replies; 10+ messages in thread
From: Greg KH @ 2022-08-09 17:12 UTC (permalink / raw)
  To: Michael Bestas
  Cc: stable, Hsin-Yi Wang, Stephen Boyd, Mike Rapoport, Will Deacon

On Tue, Aug 09, 2022 at 05:56:24PM +0300, Michael Bestas wrote:
> From: Hsin-Yi Wang <hsinyi@chromium.org>
> 
> commit e112b032a72c78f15d0c803c5dc6be444c2e6c66 upstream.
> 
> Currently in arm64, FDT is mapped to RO before it's passed to
> early_init_dt_scan(). However, there might be some codes
> (eg. commit "fdt: add support for rng-seed") that need to modify FDT
> during init. Map FDT to RO after early fixups are done.
> 
> Cc: stable@vger.kernel.org # 4.9+
> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
> Reviewed-by: Stephen Boyd <swboyd@chromium.org>
> Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
> Signed-off-by: Will Deacon <will@kernel.org>
> [mkbestas: fixed trivial conflicts for 4.9 backport]
> Signed-off-by: Michael Bestas <mkbestas@gmail.com>
> ---
>  arch/arm64/include/asm/mmu.h |  2 +-
>  arch/arm64/kernel/kaslr.c    |  5 +----
>  arch/arm64/kernel/setup.c    |  9 ++++++++-
>  arch/arm64/mm/mmu.c          | 15 +--------------
>  4 files changed, 11 insertions(+), 20 deletions(-)

What about 4.14.y and newer?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH] arm64: map FDT as RW for early_init_dt_scan()
@ 2022-08-09 14:56 Michael Bestas
  2022-08-09 17:12 ` Greg KH
  0 siblings, 1 reply; 10+ messages in thread
From: Michael Bestas @ 2022-08-09 14:56 UTC (permalink / raw)
  To: stable
  Cc: Hsin-Yi Wang, Stephen Boyd, Mike Rapoport, Will Deacon, Michael Bestas

From: Hsin-Yi Wang <hsinyi@chromium.org>

commit e112b032a72c78f15d0c803c5dc6be444c2e6c66 upstream.

Currently in arm64, FDT is mapped to RO before it's passed to
early_init_dt_scan(). However, there might be some codes
(eg. commit "fdt: add support for rng-seed") that need to modify FDT
during init. Map FDT to RO after early fixups are done.

Cc: stable@vger.kernel.org # 4.9+
Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
Signed-off-by: Will Deacon <will@kernel.org>
[mkbestas: fixed trivial conflicts for 4.9 backport]
Signed-off-by: Michael Bestas <mkbestas@gmail.com>
---
 arch/arm64/include/asm/mmu.h |  2 +-
 arch/arm64/kernel/kaslr.c    |  5 +----
 arch/arm64/kernel/setup.c    |  9 ++++++++-
 arch/arm64/mm/mmu.c          | 15 +--------------
 4 files changed, 11 insertions(+), 20 deletions(-)

diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h
index f4377b005cba90..c944253b3a4b63 100644
--- a/arch/arm64/include/asm/mmu.h
+++ b/arch/arm64/include/asm/mmu.h
@@ -90,7 +90,7 @@ extern void init_mem_pgprot(void);
 extern void create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,
 			       unsigned long virt, phys_addr_t size,
 			       pgprot_t prot, bool allow_block_mappings);
-extern void *fixmap_remap_fdt(phys_addr_t dt_phys);
+extern void *fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot);
 
 #endif	/* !__ASSEMBLY__ */
 #endif
diff --git a/arch/arm64/kernel/kaslr.c b/arch/arm64/kernel/kaslr.c
index c9ca903462a68d..6a9668f6e933f3 100644
--- a/arch/arm64/kernel/kaslr.c
+++ b/arch/arm64/kernel/kaslr.c
@@ -65,9 +65,6 @@ static __init const u8 *kaslr_get_cmdline(void *fdt)
 	return default_cmdline;
 }
 
-extern void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size,
-				       pgprot_t prot);
-
 /*
  * This routine will be executed with the kernel mapped at its default virtual
  * address, and if it returns successfully, the kernel will be remapped, and
@@ -96,7 +93,7 @@ u64 __init kaslr_early_init(u64 dt_phys, u64 modulo_offset)
 	 * attempt at mapping the FDT in setup_machine()
 	 */
 	early_fixmap_init();
-	fdt = __fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
+	fdt = fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
 	if (!fdt)
 		return 0;
 
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index f534f492a26874..ae82d9694542cd 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -178,7 +178,11 @@ static void __init smp_build_mpidr_hash(void)
 
 static void __init setup_machine_fdt(phys_addr_t dt_phys)
 {
-	void *dt_virt = fixmap_remap_fdt(dt_phys);
+	int size;
+	void *dt_virt = fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL);
+
+	if (dt_virt)
+		memblock_reserve(dt_phys, size);
 
 	if (!dt_virt || !early_init_dt_scan(dt_virt)) {
 		pr_crit("\n"
@@ -191,6 +195,9 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
 			cpu_relax();
 	}
 
+	/* Early fixups are done, map the FDT as read-only now */
+	fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL_RO);
+
 	dump_stack_set_arch_desc("%s (DT)", of_flat_dt_get_machine_name());
 }
 
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index 36bd50091c4bbc..784ea7c8d99667 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -718,7 +718,7 @@ void __set_fixmap(enum fixed_addresses idx,
 	}
 }
 
-void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
+void *__init fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
 {
 	const u64 dt_virt_base = __fix_to_virt(FIX_FDT);
 	int offset;
@@ -771,19 +771,6 @@ void *__init __fixmap_remap_fdt(phys_addr_t dt_phys, int *size, pgprot_t prot)
 	return dt_virt;
 }
 
-void *__init fixmap_remap_fdt(phys_addr_t dt_phys)
-{
-	void *dt_virt;
-	int size;
-
-	dt_virt = __fixmap_remap_fdt(dt_phys, &size, PAGE_KERNEL_RO);
-	if (!dt_virt)
-		return NULL;
-
-	memblock_reserve(dt_phys, size);
-	return dt_virt;
-}
-
 int __init arch_ioremap_pud_supported(void)
 {
 	/*
-- 
2.37.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-09-01 12:07 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-31 20:32 [PATCH] arm64: map FDT as RW for early_init_dt_scan() Michael Bestas
2022-09-01  9:57 ` Greg KH
2022-09-01 10:57   ` Michael Bestas
2022-09-01 12:07     ` Greg KH
  -- strict thread matches above, loose matches on Subject: below --
2022-08-31 20:30 Michael Bestas
2022-08-09 14:56 Michael Bestas
2022-08-09 17:12 ` Greg KH
2022-08-09 18:11   ` Michael Bestas
2022-08-09 18:17   ` Michael Bestas
2022-08-19 11:07     ` Greg KH

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).