diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a82b303c19b1..13cf4c665321 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -1724,6 +1724,19 @@ static bool check_new_pages(struct page *page, unsigned int order) | |||
1724 | return false; | 1724 | return false; |
1725 | } | 1725 | } |
1726 | 1726 | ||
1727 | inline void post_alloc_hook(struct page *page, unsigned int order, | ||
1728 | gfp_t gfp_flags) | ||
1729 | { | ||
1730 | set_page_private(page, 0); | ||
1731 | set_page_refcounted(page); | ||
1732 | |||
1733 | arch_alloc_page(page, order); | ||
1734 | kernel_map_pages(page, 1 << order, 1); | ||
1735 | kernel_poison_pages(page, 1 << order, 1); | ||
1736 | kasan_alloc_pages(page, order); | ||
1737 | set_page_owner(page, order, gfp_flags); | ||
1738 | } | ||
1739 | |||
1727 | static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags, | 1740 | static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags, |
1728 | unsigned int alloc_flags) | 1741 | unsigned int alloc_flags) |
1729 | { | 1742 | { |
@@ -1736,13 +1749,7 @@ static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags | |||
1736 | poisoned &= page_is_poisoned(p); | 1749 | poisoned &= page_is_poisoned(p); |
1737 | } | 1750 | } |
1738 | 1751 | ||
1739 | set_page_private(page, 0); | 1752 | post_alloc_hook(page, order, gfp_flags); |
1740 | set_page_refcounted(page); | ||
1741 | |||
1742 | arch_alloc_page(page, order); | ||
1743 | kernel_map_pages(page, 1 << order, 1); | ||
1744 | kernel_poison_pages(page, 1 << order, 1); | ||
1745 | kasan_alloc_pages(page, order); | ||
1746 | 1753 | ||
1747 | if (!free_pages_prezeroed(poisoned) && (gfp_flags & __GFP_ZERO)) | 1754 | if (!free_pages_prezeroed(poisoned) && (gfp_flags & __GFP_ZERO)) |
1748 | for (i = 0; i < (1 << order); i++) | 1755 | for (i = 0; i < (1 << order); i++) |
@@ -1751,8 +1758,6 @@ static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags | |||
1751 | if (order && (gfp_flags & __GFP_COMP)) | 1758 | if (order && (gfp_flags & __GFP_COMP)) |
1752 | prep_compound_page(page, order); | 1759 | prep_compound_page(page, order); |
1753 | 1760 | ||
1754 | set_page_owner(page, order, gfp_flags); | ||
1755 | |||
1756 | /* | 1761 | /* |
1757 | * page is set pfmemalloc when ALLOC_NO_WATERMARKS was necessary to | 1762 | * page is set pfmemalloc when ALLOC_NO_WATERMARKS was necessary to |
1758 | * allocate the page. The expectation is that the caller is taking | 1763 | * allocate the page. The expectation is that the caller is taking |