]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/mm: Fix DirectMap accounting
authorHeiko Carstens <hca@linux.ibm.com>
Fri, 29 Nov 2024 16:39:27 +0000 (17:39 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Tue, 10 Dec 2024 14:40:41 +0000 (15:40 +0100)
With uncoupling of physical and virtual address spaces population of
the identity mapping was changed to use the type POPULATE_IDENTITY
instead of POPULATE_DIRECT. This breaks DirectMap accounting:

> cat /proc/meminfo
DirectMap4k:       55296 kB
DirectMap1M:    18446744073709496320 kB

Adjust all locations of update_page_count() in vmem.c to use
POPULATE_IDENTITY instead of POPULATE_DIRECT as well. With this
accounting is correct again:

> cat /proc/meminfo
DirectMap4k:       54264 kB
DirectMap1M:     8334336 kB

Fixes: c98d2ecae08f ("s390/mm: Uncouple physical vs virtual address spaces")
Cc: stable@vger.kernel.org
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/boot/vmem.c

index 145035f84a0e3e898ff708f815b5ac54ec541860..3fa28db2fe59f4e23b8a43fc2b95af94062eb447 100644 (file)
@@ -306,7 +306,7 @@ static void pgtable_pte_populate(pmd_t *pmd, unsigned long addr, unsigned long e
                        pages++;
                }
        }
-       if (mode == POPULATE_DIRECT)
+       if (mode == POPULATE_IDENTITY)
                update_page_count(PG_DIRECT_MAP_4K, pages);
 }
 
@@ -339,7 +339,7 @@ static void pgtable_pmd_populate(pud_t *pud, unsigned long addr, unsigned long e
                }
                pgtable_pte_populate(pmd, addr, next, mode);
        }
-       if (mode == POPULATE_DIRECT)
+       if (mode == POPULATE_IDENTITY)
                update_page_count(PG_DIRECT_MAP_1M, pages);
 }
 
@@ -372,7 +372,7 @@ static void pgtable_pud_populate(p4d_t *p4d, unsigned long addr, unsigned long e
                }
                pgtable_pmd_populate(pud, addr, next, mode);
        }
-       if (mode == POPULATE_DIRECT)
+       if (mode == POPULATE_IDENTITY)
                update_page_count(PG_DIRECT_MAP_2G, pages);
 }