mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-18 18:23:53 +08:00
powerpc: is_hugepage_only_range() must account for both 4kB and 64kB slices
powerpc: is_hugepage_only_range() must account for both 4kB and 64kB slices The subpage_prot syscall fails on second and subsequent calls for a given region, because is_hugepage_only_range() is mis-identifying the 4 kB slices when the process has a 64 kB page size. Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
5d9ee3ff3d
commit
9ba0fdbfae
@ -710,9 +710,18 @@ int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
|
|||||||
unsigned long len)
|
unsigned long len)
|
||||||
{
|
{
|
||||||
struct slice_mask mask, available;
|
struct slice_mask mask, available;
|
||||||
|
unsigned int psize = mm->context.user_psize;
|
||||||
|
|
||||||
mask = slice_range_to_mask(addr, len);
|
mask = slice_range_to_mask(addr, len);
|
||||||
available = slice_mask_for_size(mm, mm->context.user_psize);
|
available = slice_mask_for_size(mm, psize);
|
||||||
|
#ifdef CONFIG_PPC_64K_PAGES
|
||||||
|
/* We need to account for 4k slices too */
|
||||||
|
if (psize == MMU_PAGE_64K) {
|
||||||
|
struct slice_mask compat_mask;
|
||||||
|
compat_mask = slice_mask_for_size(mm, MMU_PAGE_4K);
|
||||||
|
or_mask(available, compat_mask);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0 /* too verbose */
|
#if 0 /* too verbose */
|
||||||
slice_dbg("is_hugepage_only_range(mm=%p, addr=%lx, len=%lx)\n",
|
slice_dbg("is_hugepage_only_range(mm=%p, addr=%lx, len=%lx)\n",
|
||||||
|
Loading…
Reference in New Issue
Block a user