Message ID | 1469629097-30859-4-git-send-email-mpe@ellerman.id.au (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
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.
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
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 --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);
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.