|
@@ -81,7 +81,11 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
|
|
|
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
|
|
|
{
|
|
|
struct page *page;
|
|
|
- page = alloc_pages(GFP_KERNEL | __GFP_ZERO, 0);
|
|
|
+ gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_ZERO;
|
|
|
+
|
|
|
+ if (mm == &init_mm)
|
|
|
+ gfp &= ~__GFP_ACCOUNT;
|
|
|
+ page = alloc_pages(gfp, 0);
|
|
|
if (!page)
|
|
|
return NULL;
|
|
|
if (!pgtable_pmd_page_ctor(page)) {
|
|
@@ -125,7 +129,11 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
|
|
|
|
|
|
static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
|
|
|
{
|
|
|
- return (pud_t *)get_zeroed_page(GFP_KERNEL);
|
|
|
+ gfp_t gfp = GFP_KERNEL_ACCOUNT;
|
|
|
+
|
|
|
+ if (mm == &init_mm)
|
|
|
+ gfp &= ~__GFP_ACCOUNT;
|
|
|
+ return (pud_t *)get_zeroed_page(gfp);
|
|
|
}
|
|
|
|
|
|
static inline void pud_free(struct mm_struct *mm, pud_t *pud)
|