mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
mm: export stable page flags
Rename get_uflags() to stable_page_flags() and make it a global function for use in the hwpoison page flags filter, which need to compare user page flags with the value provided by user space. Also move KPF_* to kernel-page-flags.h for use by user space tools. Acked-by: Matt Mackall <mpm@selenic.com> Signed-off-by: Andi Kleen <ak@linux.intel.com> CC: Nick Piggin <npiggin@suse.de> CC: Christoph Lameter <cl@linux-foundation.org> Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Andi Kleen <ak@linux.intel.com>
This commit is contained in:
parent
31d3d3484f
commit
1a9b5b7fe0
3 changed files with 51 additions and 42 deletions
|
@ -8,6 +8,7 @@
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/hugetlb.h>
|
#include <linux/hugetlb.h>
|
||||||
|
#include <linux/kernel-page-flags.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
|
@ -71,52 +72,12 @@ static const struct file_operations proc_kpagecount_operations = {
|
||||||
* physical page flags.
|
* physical page flags.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* These macros are used to decouple internal flags from exported ones */
|
|
||||||
|
|
||||||
#define KPF_LOCKED 0
|
|
||||||
#define KPF_ERROR 1
|
|
||||||
#define KPF_REFERENCED 2
|
|
||||||
#define KPF_UPTODATE 3
|
|
||||||
#define KPF_DIRTY 4
|
|
||||||
#define KPF_LRU 5
|
|
||||||
#define KPF_ACTIVE 6
|
|
||||||
#define KPF_SLAB 7
|
|
||||||
#define KPF_WRITEBACK 8
|
|
||||||
#define KPF_RECLAIM 9
|
|
||||||
#define KPF_BUDDY 10
|
|
||||||
|
|
||||||
/* 11-20: new additions in 2.6.31 */
|
|
||||||
#define KPF_MMAP 11
|
|
||||||
#define KPF_ANON 12
|
|
||||||
#define KPF_SWAPCACHE 13
|
|
||||||
#define KPF_SWAPBACKED 14
|
|
||||||
#define KPF_COMPOUND_HEAD 15
|
|
||||||
#define KPF_COMPOUND_TAIL 16
|
|
||||||
#define KPF_HUGE 17
|
|
||||||
#define KPF_UNEVICTABLE 18
|
|
||||||
#define KPF_HWPOISON 19
|
|
||||||
#define KPF_NOPAGE 20
|
|
||||||
|
|
||||||
#define KPF_KSM 21
|
|
||||||
|
|
||||||
/* kernel hacking assistances
|
|
||||||
* WARNING: subject to change, never rely on them!
|
|
||||||
*/
|
|
||||||
#define KPF_RESERVED 32
|
|
||||||
#define KPF_MLOCKED 33
|
|
||||||
#define KPF_MAPPEDTODISK 34
|
|
||||||
#define KPF_PRIVATE 35
|
|
||||||
#define KPF_PRIVATE_2 36
|
|
||||||
#define KPF_OWNER_PRIVATE 37
|
|
||||||
#define KPF_ARCH 38
|
|
||||||
#define KPF_UNCACHED 39
|
|
||||||
|
|
||||||
static inline u64 kpf_copy_bit(u64 kflags, int ubit, int kbit)
|
static inline u64 kpf_copy_bit(u64 kflags, int ubit, int kbit)
|
||||||
{
|
{
|
||||||
return ((kflags >> kbit) & 1) << ubit;
|
return ((kflags >> kbit) & 1) << ubit;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 get_uflags(struct page *page)
|
u64 stable_page_flags(struct page *page)
|
||||||
{
|
{
|
||||||
u64 k;
|
u64 k;
|
||||||
u64 u;
|
u64 u;
|
||||||
|
@ -219,7 +180,7 @@ static ssize_t kpageflags_read(struct file *file, char __user *buf,
|
||||||
else
|
else
|
||||||
ppage = NULL;
|
ppage = NULL;
|
||||||
|
|
||||||
if (put_user(get_uflags(ppage), out)) {
|
if (put_user(stable_page_flags(ppage), out)) {
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
46
include/linux/kernel-page-flags.h
Normal file
46
include/linux/kernel-page-flags.h
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#ifndef LINUX_KERNEL_PAGE_FLAGS_H
|
||||||
|
#define LINUX_KERNEL_PAGE_FLAGS_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stable page flag bits exported to user space
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define KPF_LOCKED 0
|
||||||
|
#define KPF_ERROR 1
|
||||||
|
#define KPF_REFERENCED 2
|
||||||
|
#define KPF_UPTODATE 3
|
||||||
|
#define KPF_DIRTY 4
|
||||||
|
#define KPF_LRU 5
|
||||||
|
#define KPF_ACTIVE 6
|
||||||
|
#define KPF_SLAB 7
|
||||||
|
#define KPF_WRITEBACK 8
|
||||||
|
#define KPF_RECLAIM 9
|
||||||
|
#define KPF_BUDDY 10
|
||||||
|
|
||||||
|
/* 11-20: new additions in 2.6.31 */
|
||||||
|
#define KPF_MMAP 11
|
||||||
|
#define KPF_ANON 12
|
||||||
|
#define KPF_SWAPCACHE 13
|
||||||
|
#define KPF_SWAPBACKED 14
|
||||||
|
#define KPF_COMPOUND_HEAD 15
|
||||||
|
#define KPF_COMPOUND_TAIL 16
|
||||||
|
#define KPF_HUGE 17
|
||||||
|
#define KPF_UNEVICTABLE 18
|
||||||
|
#define KPF_HWPOISON 19
|
||||||
|
#define KPF_NOPAGE 20
|
||||||
|
|
||||||
|
#define KPF_KSM 21
|
||||||
|
|
||||||
|
/* kernel hacking assistances
|
||||||
|
* WARNING: subject to change, never rely on them!
|
||||||
|
*/
|
||||||
|
#define KPF_RESERVED 32
|
||||||
|
#define KPF_MLOCKED 33
|
||||||
|
#define KPF_MAPPEDTODISK 34
|
||||||
|
#define KPF_PRIVATE 35
|
||||||
|
#define KPF_PRIVATE_2 36
|
||||||
|
#define KPF_OWNER_PRIVATE 37
|
||||||
|
#define KPF_ARCH 38
|
||||||
|
#define KPF_UNCACHED 39
|
||||||
|
|
||||||
|
#endif /* LINUX_KERNEL_PAGE_FLAGS_H */
|
|
@ -282,6 +282,8 @@ PAGEFLAG_FALSE(HWPoison)
|
||||||
#define __PG_HWPOISON 0
|
#define __PG_HWPOISON 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
u64 stable_page_flags(struct page *page);
|
||||||
|
|
||||||
static inline int PageUptodate(struct page *page)
|
static inline int PageUptodate(struct page *page)
|
||||||
{
|
{
|
||||||
int ret = test_bit(PG_uptodate, &(page)->flags);
|
int ret = test_bit(PG_uptodate, &(page)->flags);
|
||||||
|
|
Loading…
Reference in a new issue