diff options
Diffstat (limited to 'include/linux')
| -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. |
