diff options
-rw-r--r-- | include/linux/mm.h | 4 | ||||
-rw-r--r-- | include/linux/page-flags.h | 22 | ||||
-rw-r--r-- | mm/memblock.c | 2 |
3 files changed, 21 insertions, 7 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h index f945dff34925..2e40a44a1fae 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -903,7 +903,9 @@ extern int page_to_nid(const struct page *page); | |||
903 | #else | 903 | #else |
904 | static inline int page_to_nid(const struct page *page) | 904 | static inline int page_to_nid(const struct page *page) |
905 | { | 905 | { |
906 | return (page->flags >> NODES_PGSHIFT) & NODES_MASK; | 906 | struct page *p = (struct page *)page; |
907 | |||
908 | return (PF_POISONED_CHECK(p)->flags >> NODES_PGSHIFT) & NODES_MASK; | ||
907 | } | 909 | } |
908 | #endif | 910 | #endif |
909 | 911 | ||
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 50c2b8786831..e34a27727b9a 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -156,9 +156,18 @@ static __always_inline int PageCompound(struct page *page) | |||
156 | return test_bit(PG_head, &page->flags) || PageTail(page); | 156 | return test_bit(PG_head, &page->flags) || PageTail(page); |
157 | } | 157 | } |
158 | 158 | ||
159 | #define PAGE_POISON_PATTERN -1l | ||
160 | static inline int PagePoisoned(const struct page *page) | ||
161 | { | ||
162 | return page->flags == PAGE_POISON_PATTERN; | ||
163 | } | ||
164 | |||
159 | /* | 165 | /* |
160 | * Page flags policies wrt compound pages | 166 | * Page flags policies wrt compound pages |
161 | * | 167 | * |
168 | * PF_POISONED_CHECK | ||
169 | * check if this struct page poisoned/uninitialized | ||
170 | * | ||
162 | * PF_ANY: | 171 | * PF_ANY: |
163 | * the page flag is relevant for small, head and tail pages. | 172 | * the page flag is relevant for small, head and tail pages. |
164 | * | 173 | * |
@@ -176,17 +185,20 @@ static __always_inline int PageCompound(struct page *page) | |||
176 | * PF_NO_COMPOUND: | 185 | * PF_NO_COMPOUND: |
177 | * the page flag is not relevant for compound pages. | 186 | * the page flag is not relevant for compound pages. |
178 | */ | 187 | */ |
179 | #define PF_ANY(page, enforce) page | 188 | #define PF_POISONED_CHECK(page) ({ \ |
180 | #define PF_HEAD(page, enforce) compound_head(page) | 189 | VM_BUG_ON_PGFLAGS(PagePoisoned(page), page); \ |
190 | page; }) | ||
191 | #define PF_ANY(page, enforce) PF_POISONED_CHECK(page) | ||
192 | #define PF_HEAD(page, enforce) PF_POISONED_CHECK(compound_head(page)) | ||
181 | #define PF_ONLY_HEAD(page, enforce) ({ \ | 193 | #define PF_ONLY_HEAD(page, enforce) ({ \ |
182 | VM_BUG_ON_PGFLAGS(PageTail(page), page); \ | 194 | VM_BUG_ON_PGFLAGS(PageTail(page), page); \ |
183 | page;}) | 195 | PF_POISONED_CHECK(page); }) |
184 | #define PF_NO_TAIL(page, enforce) ({ \ | 196 | #define PF_NO_TAIL(page, enforce) ({ \ |
185 | VM_BUG_ON_PGFLAGS(enforce && PageTail(page), page); \ | 197 | VM_BUG_ON_PGFLAGS(enforce && PageTail(page), page); \ |
186 | compound_head(page);}) | 198 | PF_POISONED_CHECK(compound_head(page)); }) |
187 | #define PF_NO_COMPOUND(page, enforce) ({ \ | 199 | #define PF_NO_COMPOUND(page, enforce) ({ \ |
188 | VM_BUG_ON_PGFLAGS(enforce && PageCompound(page), page); \ | 200 | VM_BUG_ON_PGFLAGS(enforce && PageCompound(page), page); \ |
189 | page;}) | 201 | PF_POISONED_CHECK(page); }) |
190 | 202 | ||
191 | /* | 203 | /* |
192 | * Macros to create function definitions for page flags | 204 | * Macros to create function definitions for page flags |
diff --git a/mm/memblock.c b/mm/memblock.c index f7f76513a0c5..c2fed302c2f8 100644 --- a/mm/memblock.c +++ b/mm/memblock.c | |||
@@ -1345,7 +1345,7 @@ void * __init memblock_virt_alloc_try_nid_raw( | |||
1345 | min_addr, max_addr, nid); | 1345 | min_addr, max_addr, nid); |
1346 | #ifdef CONFIG_DEBUG_VM | 1346 | #ifdef CONFIG_DEBUG_VM |
1347 | if (ptr && size > 0) | 1347 | if (ptr && size > 0) |
1348 | memset(ptr, 0xff, size); | 1348 | memset(ptr, PAGE_POISON_PATTERN, size); |
1349 | #endif | 1349 | #endif |
1350 | return ptr; | 1350 | return ptr; |
1351 | } | 1351 | } |