|
|
@@ -122,9 +122,6 @@ static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp,
|
|
|
#if defined(CONFIG_PPC_FSL_BOOK3E) || defined(CONFIG_PPC_8xx)
|
|
|
#define HUGEPD_PGD_SHIFT PGDIR_SHIFT
|
|
|
#define HUGEPD_PUD_SHIFT PUD_SHIFT
|
|
|
-#else
|
|
|
-#define HUGEPD_PGD_SHIFT PUD_SHIFT
|
|
|
-#define HUGEPD_PUD_SHIFT PMD_SHIFT
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
|
@@ -670,15 +667,26 @@ static int __init hugetlbpage_init(void)
|
|
|
|
|
|
shift = mmu_psize_to_shift(psize);
|
|
|
|
|
|
- if (add_huge_page_size(1ULL << shift) < 0)
|
|
|
+#ifdef CONFIG_PPC_BOOK3S_64
|
|
|
+ if (shift > PGDIR_SHIFT)
|
|
|
continue;
|
|
|
-
|
|
|
+ else if (shift > PUD_SHIFT)
|
|
|
+ pdshift = PGDIR_SHIFT;
|
|
|
+ else if (shift > PMD_SHIFT)
|
|
|
+ pdshift = PUD_SHIFT;
|
|
|
+ else
|
|
|
+ pdshift = PMD_SHIFT;
|
|
|
+#else
|
|
|
if (shift < HUGEPD_PUD_SHIFT)
|
|
|
pdshift = PMD_SHIFT;
|
|
|
else if (shift < HUGEPD_PGD_SHIFT)
|
|
|
pdshift = PUD_SHIFT;
|
|
|
else
|
|
|
pdshift = PGDIR_SHIFT;
|
|
|
+#endif
|
|
|
+
|
|
|
+ if (add_huge_page_size(1ULL << shift) < 0)
|
|
|
+ continue;
|
|
|
/*
|
|
|
* if we have pdshift and shift value same, we don't
|
|
|
* use pgt cache for hugepd.
|