diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/page-flags.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 2b87acfc5f87..9bc5fd9fdbf6 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -51,6 +51,9 @@ | |||
51 | * PG_buddy is set to indicate that the page is free and in the buddy system | 51 | * PG_buddy is set to indicate that the page is free and in the buddy system |
52 | * (see mm/page_alloc.c). | 52 | * (see mm/page_alloc.c). |
53 | * | 53 | * |
54 | * PG_hwpoison indicates that a page got corrupted in hardware and contains | ||
55 | * data with incorrect ECC bits that triggered a machine check. Accessing is | ||
56 | * not safe since it may cause another machine check. Don't touch! | ||
54 | */ | 57 | */ |
55 | 58 | ||
56 | /* | 59 | /* |
@@ -102,6 +105,9 @@ enum pageflags { | |||
102 | #ifdef CONFIG_ARCH_USES_PG_UNCACHED | 105 | #ifdef CONFIG_ARCH_USES_PG_UNCACHED |
103 | PG_uncached, /* Page has been mapped as uncached */ | 106 | PG_uncached, /* Page has been mapped as uncached */ |
104 | #endif | 107 | #endif |
108 | #ifdef CONFIG_MEMORY_FAILURE | ||
109 | PG_hwpoison, /* hardware poisoned page. Don't touch */ | ||
110 | #endif | ||
105 | __NR_PAGEFLAGS, | 111 | __NR_PAGEFLAGS, |
106 | 112 | ||
107 | /* Filesystems */ | 113 | /* Filesystems */ |
@@ -263,6 +269,15 @@ PAGEFLAG(Uncached, uncached) | |||
263 | PAGEFLAG_FALSE(Uncached) | 269 | PAGEFLAG_FALSE(Uncached) |
264 | #endif | 270 | #endif |
265 | 271 | ||
272 | #ifdef CONFIG_MEMORY_FAILURE | ||
273 | PAGEFLAG(HWPoison, hwpoison) | ||
274 | TESTSETFLAG(HWPoison, hwpoison) | ||
275 | #define __PG_HWPOISON (1UL << PG_hwpoison) | ||
276 | #else | ||
277 | PAGEFLAG_FALSE(HWPoison) | ||
278 | #define __PG_HWPOISON 0 | ||
279 | #endif | ||
280 | |||
266 | static inline int PageUptodate(struct page *page) | 281 | static inline int PageUptodate(struct page *page) |
267 | { | 282 | { |
268 | int ret = test_bit(PG_uptodate, &(page)->flags); | 283 | int ret = test_bit(PG_uptodate, &(page)->flags); |
@@ -387,7 +402,7 @@ static inline void __ClearPageTail(struct page *page) | |||
387 | 1 << PG_private | 1 << PG_private_2 | \ | 402 | 1 << PG_private | 1 << PG_private_2 | \ |
388 | 1 << PG_buddy | 1 << PG_writeback | 1 << PG_reserved | \ | 403 | 1 << PG_buddy | 1 << PG_writeback | 1 << PG_reserved | \ |
389 | 1 << PG_slab | 1 << PG_swapcache | 1 << PG_active | \ | 404 | 1 << PG_slab | 1 << PG_swapcache | 1 << PG_active | \ |
390 | 1 << PG_unevictable | __PG_MLOCKED) | 405 | 1 << PG_unevictable | __PG_MLOCKED | __PG_HWPOISON) |
391 | 406 | ||
392 | /* | 407 | /* |
393 | * Flags checked when a page is prepped for return by the page allocator. | 408 | * Flags checked when a page is prepped for return by the page allocator. |