Commit 2332c9ae authored by Chen, Kenneth W's avatar Chen, Kenneth W Committed by Tony Luck

[IA64] fix ia64 is_hugepage_only_range

fix is_hugepage_only_range() definition to be "overlaps"
instead of "within architectural restricted hugetlb address
range".  Simplify the ia64 specific code that used to use
is_hugepage_only_range() to just check which region the
address is in.
Signed-off-by: default avatarKen Chen <kenneth.w.chen@intel.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 1c2e0275
...@@ -113,8 +113,7 @@ void hugetlb_free_pgd_range(struct mmu_gather **tlb, ...@@ -113,8 +113,7 @@ void hugetlb_free_pgd_range(struct mmu_gather **tlb,
unsigned long floor, unsigned long ceiling) unsigned long floor, unsigned long ceiling)
{ {
/* /*
* This is called only when is_hugepage_only_range(addr,), * This is called to free hugetlb page tables.
* and it follows that is_hugepage_only_range(end,) also.
* *
* The offset of these addresses from the base of the hugetlb * The offset of these addresses from the base of the hugetlb
* region must be scaled down by HPAGE_SIZE/PAGE_SIZE so that * region must be scaled down by HPAGE_SIZE/PAGE_SIZE so that
...@@ -126,9 +125,9 @@ void hugetlb_free_pgd_range(struct mmu_gather **tlb, ...@@ -126,9 +125,9 @@ void hugetlb_free_pgd_range(struct mmu_gather **tlb,
addr = htlbpage_to_page(addr); addr = htlbpage_to_page(addr);
end = htlbpage_to_page(end); end = htlbpage_to_page(end);
if (is_hugepage_only_range(tlb->mm, floor, HPAGE_SIZE)) if (REGION_NUMBER(floor) == RGN_HPAGE)
floor = htlbpage_to_page(floor); floor = htlbpage_to_page(floor);
if (is_hugepage_only_range(tlb->mm, ceiling, HPAGE_SIZE)) if (REGION_NUMBER(ceiling) == RGN_HPAGE)
ceiling = htlbpage_to_page(ceiling); ceiling = htlbpage_to_page(ceiling);
free_pgd_range(tlb, addr, end, floor, ceiling); free_pgd_range(tlb, addr, end, floor, ceiling);
......
...@@ -149,7 +149,7 @@ typedef union ia64_va { ...@@ -149,7 +149,7 @@ typedef union ia64_va {
| (REGION_OFFSET(x) >> (HPAGE_SHIFT-PAGE_SHIFT))) | (REGION_OFFSET(x) >> (HPAGE_SHIFT-PAGE_SHIFT)))
# define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) # define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
# define is_hugepage_only_range(mm, addr, len) \ # define is_hugepage_only_range(mm, addr, len) \
(REGION_NUMBER(addr) == RGN_HPAGE && \ (REGION_NUMBER(addr) == RGN_HPAGE || \
REGION_NUMBER((addr)+(len)-1) == RGN_HPAGE) REGION_NUMBER((addr)+(len)-1) == RGN_HPAGE)
extern unsigned int hpage_shift; extern unsigned int hpage_shift;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment