]> 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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 29 Oct 2025 13:08:53 +0000 (14:08 +0100)
[ Upstream commit 5671ce2a1fc6b4a16cff962423bc416b92cac3c8 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/s390/mm/pgalloc.c

index f5dece935353576f264668be81cc855f6e682340..a2ec82ec78ac9af676a8dce6570d79f6843fab96 100644 (file)
@@ -43,9 +43,13 @@ __initcall(page_table_register_sysctl);
 
 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);
@@ -142,7 +146,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);
@@ -161,10 +165,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(ptdesc)) {