[RFC] mm: Change the data type of huge page size from unsigned long to u64

From: Rui Teng
Date: Tue Sep 13 2016 - 05:26:32 EST

The huge page size could be 16G(0x400000000) on ppc64 architecture, and it will
cause an overflow on unsigned long data type(0xFFFFFFFF).

For example, huge_page_size() will return 0, if the PAGE_SIZE is 65536 and
h->order is 18, which is the result on ppc64 with 16G huge page enabled.

I think it needs to change the data type from unsigned long to u64. But it will
cause a lot of functions and data structures changed. Any comments and


Signed-off-by: Rui Teng <rui.teng@xxxxxxxxxxxxxxxxxx>
include/linux/hugetlb.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index c26d463..efbe5cf 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -374,9 +374,9 @@ static inline struct hstate *hstate_vma(struct vm_area_struct *vma)
return hstate_file(vma->vm_file);

-static inline unsigned long huge_page_size(struct hstate *h)
+static inline u64 huge_page_size(struct hstate *h)
- return (unsigned long)PAGE_SIZE << h->order;
+ return (u64)PAGE_SIZE << h->order;

extern unsigned long vma_kernel_pagesize(struct vm_area_struct *vma);