diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-28 02:13:18 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-28 02:30:53 -0400 |
commit | 00df438e89a9003895948170e1abf64dd4665872 (patch) | |
tree | cd016a215b2df2785846f85b0d19bd4baed27bd4 | |
parent | 025d7917a5ede982a5669c6735ef73a227b9827e (diff) |
powerpc: Disable 64K hugetlb support when doing 64K SPU mappings
The 64K SPU local store mapping feature is incompatible with the
64K huge pages support due to the inability of some parts of
the memory management to differenciate between them while they
use a different page table format.
For now, disable 64K huge pages when CONFIG_SPU_FS_64K_LS,
in the long run, this can be fixed by making this feature use
the hugetlb page table format.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/mm/hugetlbpage.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index ed0aab0208a6..f1c2d55b4377 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c | |||
@@ -736,14 +736,21 @@ static int __init hugetlbpage_init(void) | |||
736 | 736 | ||
737 | if (!cpu_has_feature(CPU_FTR_16M_PAGE)) | 737 | if (!cpu_has_feature(CPU_FTR_16M_PAGE)) |
738 | return -ENODEV; | 738 | return -ENODEV; |
739 | |||
739 | /* Add supported huge page sizes. Need to change HUGE_MAX_HSTATE | 740 | /* Add supported huge page sizes. Need to change HUGE_MAX_HSTATE |
740 | * and adjust PTE_NONCACHE_NUM if the number of supported huge page | 741 | * and adjust PTE_NONCACHE_NUM if the number of supported huge page |
741 | * sizes changes. | 742 | * sizes changes. |
742 | */ | 743 | */ |
743 | set_huge_psize(MMU_PAGE_16M); | 744 | set_huge_psize(MMU_PAGE_16M); |
744 | set_huge_psize(MMU_PAGE_64K); | ||
745 | set_huge_psize(MMU_PAGE_16G); | 745 | set_huge_psize(MMU_PAGE_16G); |
746 | 746 | ||
747 | /* Temporarily disable support for 64K huge pages when 64K SPU local | ||
748 | * store support is enabled as the current implementation conflicts. | ||
749 | */ | ||
750 | #ifndef CONFIG_SPU_FS_64K_LS | ||
751 | set_huge_psize(MMU_PAGE_64K); | ||
752 | #endif | ||
753 | |||
747 | for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { | 754 | for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { |
748 | if (mmu_huge_psizes[psize]) { | 755 | if (mmu_huge_psizes[psize]) { |
749 | huge_pgtable_cache(psize) = kmem_cache_create( | 756 | huge_pgtable_cache(psize) = kmem_cache_create( |