diff options
Diffstat (limited to 'mm/internal.h')
-rw-r--r-- | mm/internal.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/mm/internal.h b/mm/internal.h index 83a07b2a7b1f..bbe900f9f095 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -96,6 +96,26 @@ static inline void set_page_refcounted(struct page *page) set_page_count(page, 1); } +/* + * When kernel touch the user page, the user page may be have been marked + * poison but still mapped in user space, if without this page, the kernel + * can guarantee the data integrity and operation success, the kernel is + * better to check the posion status and avoid touching it, be good not to + * panic, coredump for process fatal signal is a sample case matching this + * scenario. Or if kernel can't guarantee the data integrity, it's better + * not to call this function, let kernel touch the poison page and get to + * panic. + */ +static inline bool is_page_poisoned(struct page *page) +{ + if (PageHWPoison(page)) + return true; + else if (PageHuge(page) && PageHWPoison(compound_head(page))) + return true; + + return false; +} + extern unsigned long highest_memmap_pfn; /* |