diff --git a/include/linux/mman.h b/include/linux/mman.h index 946641c5913506e5b19245c4416e08fc03b833bf..629cefc4ecba671682408ccdfe53a0a0726dcebd 100644 --- a/include/linux/mman.h +++ b/include/linux/mman.h @@ -154,10 +154,6 @@ calc_vm_flag_bits(unsigned long flags) _calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) | _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED ) | _calc_vm_trans(flags, MAP_SYNC, VM_SYNC ) | -#ifdef CONFIG_MEM_PURGEABLE - _calc_vm_trans(flags, MAP_PURGEABLE, VM_PURGEABLE ) | - _calc_vm_trans(flags, MAP_USEREXPTE, VM_USEREXPTE ) | -#endif arch_calc_vm_flag_bits(flags); } diff --git a/include/uapi/asm-generic/mman-common.h b/include/uapi/asm-generic/mman-common.h index 8003a595a007380aa4cf041c7cbeb14fc32af5ca..f94f65d429bea3c26bdcdc3197376916399089e9 100644 --- a/include/uapi/asm-generic/mman-common.h +++ b/include/uapi/asm-generic/mman-common.h @@ -21,8 +21,6 @@ #define MAP_TYPE 0x0f /* Mask for type of mapping */ #define MAP_FIXED 0x10 /* Interpret addr exactly */ #define MAP_ANONYMOUS 0x20 /* don't use a file */ -#define MAP_PURGEABLE 0x40 -#define MAP_USEREXPTE 0x80 /* 0x0100 - 0x4000 flags are defined in asm-generic/mman.h */ #define MAP_POPULATE 0x008000 /* populate (prefault) pagetables */ diff --git a/include/uapi/linux/mman.h b/include/uapi/linux/mman.h index f55bc680b5b0a45eefca46732e265a8bfe2f46aa..c28942bcd4e35b731130578244dcb13894f723ac 100644 --- a/include/uapi/linux/mman.h +++ b/include/uapi/linux/mman.h @@ -16,6 +16,8 @@ #define MAP_SHARED 0x01 /* Share changes */ #define MAP_PRIVATE 0x02 /* Changes are private */ #define MAP_SHARED_VALIDATE 0x03 /* share + validate extension flags */ +#define MAP_PURGEABLE 0x04 /* purgeable memory */ +#define MAP_USEREXPTE 0x08 /* userspace extension page table */ /* * Huge page size encoding when MAP_HUGETLB is specified, and a huge page diff --git a/mm/mmap.c b/mm/mmap.c index b134946984a9ef4e10245b1bf6d17c8838de7e5f..76e95375ed02d8d80fef8196efa370aab6558992 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1559,17 +1559,25 @@ unsigned long do_mmap(struct file *file, unsigned long addr, /* * Ignore pgoff. */ - if (!(flags & MAP_USEREXPTE)) - pgoff = 0; + pgoff = 0; vm_flags |= VM_SHARED | VM_MAYSHARE; break; case MAP_PRIVATE: /* * Set pgoff according to addr for anon_vma. */ - if (!(flags & MAP_USEREXPTE)) - pgoff = addr >> PAGE_SHIFT; + pgoff = addr >> PAGE_SHIFT; break; +#ifdef CONFIG_MEM_PURGEABLE + case MAP_PURGEABLE: + vm_flags |= VM_PURGEABLE; + pr_info("vm_flags purgeable = %lx.\m", VM_PURGEABLE); + break; + case MAP_USEREXPTE: + vm_flags |= VM_USEREXPTE; + pr_info("vm_flags useredpte = %lx.\m", VM_USEREXPTE); + break; +#endif default: return -EINVAL; }