|
@@ -88,7 +88,11 @@ static void pgd_ctor(void *addr)
|
|
|
|
|
|
static void pmd_ctor(void *addr)
|
|
|
{
|
|
|
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
+ memset(addr, 0, PMD_TABLE_SIZE * 2);
|
|
|
+#else
|
|
|
memset(addr, 0, PMD_TABLE_SIZE);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
struct kmem_cache *pgtable_cache[MAX_PGTABLE_INDEX_SIZE];
|
|
@@ -137,10 +141,9 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *))
|
|
|
void pgtable_cache_init(void)
|
|
|
{
|
|
|
pgtable_cache_add(PGD_INDEX_SIZE, pgd_ctor);
|
|
|
- pgtable_cache_add(PMD_INDEX_SIZE, pmd_ctor);
|
|
|
- if (!PGT_CACHE(PGD_INDEX_SIZE) || !PGT_CACHE(PMD_INDEX_SIZE))
|
|
|
+ pgtable_cache_add(PMD_CACHE_INDEX, pmd_ctor);
|
|
|
+ if (!PGT_CACHE(PGD_INDEX_SIZE) || !PGT_CACHE(PMD_CACHE_INDEX))
|
|
|
panic("Couldn't allocate pgtable caches");
|
|
|
-
|
|
|
/* In all current configs, when the PUD index exists it's the
|
|
|
* same size as either the pgd or pmd index. Verify that the
|
|
|
* initialization above has also created a PUD cache. This
|