]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/powerpc/mm/hugetlbpage.c
Merge branch 'linus' into cpus4096
[linux-2.6-omap-h63xx.git] / arch / powerpc / mm / hugetlbpage.c
index fb42c4dd32177327389dab8881d2b6cb8b681cb8..f1c2d55b4377c1a09af0e860316e80d56f6557e2 100644 (file)
@@ -113,7 +113,7 @@ static inline pte_t *hugepte_offset(hugepd_t *hpdp, unsigned long addr,
 static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp,
                           unsigned long address, unsigned int psize)
 {
-       pte_t *new = kmem_cache_alloc(huge_pgtable_cache(psize),
+       pte_t *new = kmem_cache_zalloc(huge_pgtable_cache(psize),
                                      GFP_KERNEL|__GFP_REPEAT);
 
        if (! new)
@@ -730,25 +730,27 @@ static int __init hugepage_setup_sz(char *str)
 }
 __setup("hugepagesz=", hugepage_setup_sz);
 
-static void zero_ctor(struct kmem_cache *cache, void *addr)
-{
-       memset(addr, 0, kmem_cache_size(cache));
-}
-
 static int __init hugetlbpage_init(void)
 {
        unsigned int psize;
 
        if (!cpu_has_feature(CPU_FTR_16M_PAGE))
                return -ENODEV;
+
        /* Add supported huge page sizes.  Need to change HUGE_MAX_HSTATE
         * and adjust PTE_NONCACHE_NUM if the number of supported huge page
         * sizes changes.
         */
        set_huge_psize(MMU_PAGE_16M);
-       set_huge_psize(MMU_PAGE_64K);
        set_huge_psize(MMU_PAGE_16G);
 
+       /* Temporarily disable support for 64K huge pages when 64K SPU local
+        * store support is enabled as the current implementation conflicts.
+        */
+#ifndef CONFIG_SPU_FS_64K_LS
+       set_huge_psize(MMU_PAGE_64K);
+#endif
+
        for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) {
                if (mmu_huge_psizes[psize]) {
                        huge_pgtable_cache(psize) = kmem_cache_create(
@@ -756,7 +758,7 @@ static int __init hugetlbpage_init(void)
                                                HUGEPTE_TABLE_SIZE(psize),
                                                HUGEPTE_TABLE_SIZE(psize),
                                                0,
-                                               zero_ctor);
+                                               NULL);
                        if (!huge_pgtable_cache(psize))
                                panic("hugetlbpage_init(): could not create %s"\
                                      "\n", HUGEPTE_CACHE_NAME(psize));