diff mbox

[v3,04/21] powerpc/mm: Do radix device tree scanning earlier

Message ID 1469629097-30859-4-git-send-email-mpe@ellerman.id.au (mailing list archive)
State Accepted
Headers show

Commit Message

Michael Ellerman July 27, 2016, 2:18 p.m. UTC
Like we just did for hash, split the device tree scanning parts out and
call them from mmu_early_init_devtree().

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/include/asm/book3s/64/mmu.h | 1 +
 arch/powerpc/mm/init_64.c                | 4 +++-
 arch/powerpc/mm/pgtable-radix.c          | 3 +--
 3 files changed, 5 insertions(+), 3 deletions(-)

v3: Merged into this series.

Comments

Balbir Singh July 28, 2016, 3:48 a.m. UTC | #1
On 28/07/16 00:18, Michael Ellerman wrote:
> Like we just did for hash, split the device tree scanning parts out and
> call them from mmu_early_init_devtree().
> 
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> ---
>  arch/powerpc/include/asm/book3s/64/mmu.h | 1 +
>  arch/powerpc/mm/init_64.c                | 4 +++-
>  arch/powerpc/mm/pgtable-radix.c          | 3 +--
>  3 files changed, 5 insertions(+), 3 deletions(-)
> 
> v3: Merged into this series.
> 
> diff --git a/arch/powerpc/include/asm/book3s/64/mmu.h b/arch/powerpc/include/asm/book3s/64/mmu.h
> index 358f1410dc0d..9ee00c2576d0 100644
> --- a/arch/powerpc/include/asm/book3s/64/mmu.h
> +++ b/arch/powerpc/include/asm/book3s/64/mmu.h
> @@ -109,6 +109,7 @@ extern int mmu_io_psize;
>  /* MMU initialization */
>  void mmu_early_init_devtree(void);
>  void hash__early_init_devtree(void);
> +void radix__early_init_devtree(void);
>  extern void radix_init_native(void);
>  extern void hash__early_init_mmu(void);
>  extern void radix__early_init_mmu(void);
> diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
> index d023333c6c9a..e0ab33d20a10 100644
> --- a/arch/powerpc/mm/init_64.c
> +++ b/arch/powerpc/mm/init_64.c
> @@ -427,7 +427,9 @@ void __init mmu_early_init_devtree(void)
>  	if (disable_radix)
>  		cur_cpu_spec->mmu_features &= ~MMU_FTR_RADIX;
>  
> -	if (!radix_enabled())
> +	if (radix_enabled())
> +		radix__early_init_devtree();
> +	else
>  		hash__early_init_devtree();
>  }
>  #endif /* CONFIG_PPC_STD_MMU_64 */
> diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
> index 003ff48a11b6..f34ccdbe0fbd 100644
> --- a/arch/powerpc/mm/pgtable-radix.c
> +++ b/arch/powerpc/mm/pgtable-radix.c
> @@ -264,7 +264,7 @@ static int __init radix_dt_scan_page_sizes(unsigned long node,
>  	return 1;
>  }
>  
> -static void __init radix_init_page_sizes(void)
> +void __init radix__early_init_devtree(void)
>  {
>  	int rc;
>  
> @@ -343,7 +343,6 @@ void __init radix__early_init_mmu(void)
>  	__pte_frag_nr = H_PTE_FRAG_NR;
>  	__pte_frag_size_shift = H_PTE_FRAG_SIZE_SHIFT;
>  
> -	radix_init_page_sizes();
>  	if (!firmware_has_feature(FW_FEATURE_LPAR)) {
>  		radix_init_native();
>  		lpcr = mfspr(SPRN_LPCR);
>

If I am reading this correctly, radix_init_page_sizes() has become
radix__early_init_devtree() where as hash__early_init_devtree() initializes
both segment and page sizes? I would still like to keep

mmu_early_init_devtree()
	-> radix__early_init_devtree()
		-> radix__init_page_sizes()


Balbir Singh.
Michael Ellerman July 28, 2016, 8:11 a.m. UTC | #2
Balbir Singh <bsingharora@gmail.com> writes:

> On 28/07/16 00:18, Michael Ellerman wrote:
>> diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
>> index 003ff48a11b6..f34ccdbe0fbd 100644
>> --- a/arch/powerpc/mm/pgtable-radix.c
>> +++ b/arch/powerpc/mm/pgtable-radix.c
>> @@ -343,7 +343,6 @@ void __init radix__early_init_mmu(void)
>>  	__pte_frag_nr = H_PTE_FRAG_NR;
>>  	__pte_frag_size_shift = H_PTE_FRAG_SIZE_SHIFT;
>>  
>> -	radix_init_page_sizes();
>>  	if (!firmware_has_feature(FW_FEATURE_LPAR)) {
>>  		radix_init_native();
>>  		lpcr = mfspr(SPRN_LPCR);
>>
>
> If I am reading this correctly, radix_init_page_sizes() has become
> radix__early_init_devtree() where as hash__early_init_devtree() initializes
> both segment and page sizes? I would still like to keep
>
> mmu_early_init_devtree()
> 	-> radix__early_init_devtree()
> 		-> radix__init_page_sizes()

But then radix__early_init_devtree() would just be:

void radix__early_init_devtree(void)
{
    radix__init_page_sizes();
}

Which seems silly.

I'm doing a new version which splits the htab scanning from the page
init more, as Ben suggested.

cheers
Balbir Singh July 28, 2016, 11:55 a.m. UTC | #3
On Thu, Jul 28, 2016 at 06:11:18PM +1000, Michael Ellerman wrote:
> Balbir Singh <bsingharora@gmail.com> writes:
> 
> > On 28/07/16 00:18, Michael Ellerman wrote:
> >> diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
> >> index 003ff48a11b6..f34ccdbe0fbd 100644
> >> --- a/arch/powerpc/mm/pgtable-radix.c
> >> +++ b/arch/powerpc/mm/pgtable-radix.c
> >> @@ -343,7 +343,6 @@ void __init radix__early_init_mmu(void)
> >>  	__pte_frag_nr = H_PTE_FRAG_NR;
> >>  	__pte_frag_size_shift = H_PTE_FRAG_SIZE_SHIFT;
> >>  
> >> -	radix_init_page_sizes();
> >>  	if (!firmware_has_feature(FW_FEATURE_LPAR)) {
> >>  		radix_init_native();
> >>  		lpcr = mfspr(SPRN_LPCR);
> >>
> >
> > If I am reading this correctly, radix_init_page_sizes() has become
> > radix__early_init_devtree() where as hash__early_init_devtree() initializes
> > both segment and page sizes? I would still like to keep
> >
> > mmu_early_init_devtree()
> > 	-> radix__early_init_devtree()
> > 		-> radix__init_page_sizes()
> 
> But then radix__early_init_devtree() would just be:
> 
> void radix__early_init_devtree(void)
> {
>     radix__init_page_sizes();
> }
> 
> Which seems silly.
>

But for a person parsing both hpte and radix bits, the code seems
saner and the compiler will do the right thing
 
> I'm doing a new version which splits the htab scanning from the page
> init more, as Ben suggested.
>

Sounds good

Balbir
diff mbox

Patch

diff --git a/arch/powerpc/include/asm/book3s/64/mmu.h b/arch/powerpc/include/asm/book3s/64/mmu.h
index 358f1410dc0d..9ee00c2576d0 100644
--- a/arch/powerpc/include/asm/book3s/64/mmu.h
+++ b/arch/powerpc/include/asm/book3s/64/mmu.h
@@ -109,6 +109,7 @@  extern int mmu_io_psize;
 /* MMU initialization */
 void mmu_early_init_devtree(void);
 void hash__early_init_devtree(void);
+void radix__early_init_devtree(void);
 extern void radix_init_native(void);
 extern void hash__early_init_mmu(void);
 extern void radix__early_init_mmu(void);
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index d023333c6c9a..e0ab33d20a10 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -427,7 +427,9 @@  void __init mmu_early_init_devtree(void)
 	if (disable_radix)
 		cur_cpu_spec->mmu_features &= ~MMU_FTR_RADIX;
 
-	if (!radix_enabled())
+	if (radix_enabled())
+		radix__early_init_devtree();
+	else
 		hash__early_init_devtree();
 }
 #endif /* CONFIG_PPC_STD_MMU_64 */
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index 003ff48a11b6..f34ccdbe0fbd 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -264,7 +264,7 @@  static int __init radix_dt_scan_page_sizes(unsigned long node,
 	return 1;
 }
 
-static void __init radix_init_page_sizes(void)
+void __init radix__early_init_devtree(void)
 {
 	int rc;
 
@@ -343,7 +343,6 @@  void __init radix__early_init_mmu(void)
 	__pte_frag_nr = H_PTE_FRAG_NR;
 	__pte_frag_size_shift = H_PTE_FRAG_SIZE_SHIFT;
 
-	radix_init_page_sizes();
 	if (!firmware_has_feature(FW_FEATURE_LPAR)) {
 		radix_init_native();
 		lpcr = mfspr(SPRN_LPCR);