]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/mm: Use __GFP_ACCOUNT for user page table allocations
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 22 Sep 2025 15:24:05 +0000 (17:24 +0200)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 24 Sep 2025 14:24:17 +0000 (16:24 +0200)
Add missing kmemcg accounting of user page table allocations.

Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/mm/pgalloc.c

index d2f6f1f6d2fcb9f6dff4caabf4cbc455bdbc7bcb..ad3e0f7f7fc1f98d4f80c4f79766484afb821e1a 100644 (file)
 
 unsigned long *crst_table_alloc(struct mm_struct *mm)
 {
-       struct ptdesc *ptdesc = pagetable_alloc(GFP_KERNEL, CRST_ALLOC_ORDER);
+       gfp_t gfp = GFP_KERNEL_ACCOUNT;
+       struct ptdesc *ptdesc;
        unsigned long *table;
 
+       if (mm == &init_mm)
+               gfp &= ~__GFP_ACCOUNT;
+       ptdesc = pagetable_alloc(gfp, CRST_ALLOC_ORDER);
        if (!ptdesc)
                return NULL;
        table = ptdesc_to_virt(ptdesc);
@@ -117,7 +121,7 @@ struct ptdesc *page_table_alloc_pgste(struct mm_struct *mm)
        struct ptdesc *ptdesc;
        u64 *table;
 
-       ptdesc = pagetable_alloc(GFP_KERNEL, 0);
+       ptdesc = pagetable_alloc(GFP_KERNEL_ACCOUNT, 0);
        if (ptdesc) {
                table = (u64 *)ptdesc_to_virt(ptdesc);
                __arch_set_page_dat(table, 1);
@@ -136,10 +140,13 @@ void page_table_free_pgste(struct ptdesc *ptdesc)
 
 unsigned long *page_table_alloc(struct mm_struct *mm)
 {
+       gfp_t gfp = GFP_KERNEL_ACCOUNT;
        struct ptdesc *ptdesc;
        unsigned long *table;
 
-       ptdesc = pagetable_alloc(GFP_KERNEL, 0);
+       if (mm == &init_mm)
+               gfp &= ~__GFP_ACCOUNT;
+       ptdesc = pagetable_alloc(gfp, 0);
        if (!ptdesc)
                return NULL;
        if (!pagetable_pte_ctor(mm, ptdesc)) {