hugetlbfs: add arch_hugetlb_valid_size
[linux-2.6-microblaze.git] / arch / s390 / mm / hugetlbpage.c
index 4632d4e..2f2b6b5 100644 (file)
@@ -254,16 +254,24 @@ follow_huge_pud(struct mm_struct *mm, unsigned long address,
        return pud_page(*pud) + ((address & ~PUD_MASK) >> PAGE_SHIFT);
 }
 
+bool __init arch_hugetlb_valid_size(unsigned long size)
+{
+       if (MACHINE_HAS_EDAT1 && size == PMD_SIZE)
+               return true;
+       else if (MACHINE_HAS_EDAT2 && size == PUD_SIZE)
+               return true;
+       else
+               return false;
+}
+
 static __init int setup_hugepagesz(char *opt)
 {
        unsigned long size;
        char *string = opt;
 
        size = memparse(opt, &opt);
-       if (MACHINE_HAS_EDAT1 && size == PMD_SIZE) {
-               hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT);
-       } else if (MACHINE_HAS_EDAT2 && size == PUD_SIZE) {
-               hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
+       if (arch_hugetlb_valid_size(size)) {
+               hugetlb_add_hstate(ilog2(size) - PAGE_SHIFT);
        } else {
                hugetlb_bad_size();
                pr_err("hugepagesz= specifies an unsupported page size %s\n",