]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
patches for 4.19
authorSasha Levin <sashal@kernel.org>
Thu, 27 Dec 2018 23:47:13 +0000 (18:47 -0500)
committerSasha Levin <sashal@kernel.org>
Thu, 27 Dec 2018 23:47:13 +0000 (18:47 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/mm-add-mm_pxd_folded-checks-to-pgtable_bytes-account.patch [new file with mode: 0644]
queue-4.19/mm-introduce-mm_-p4d-pud-pmd-_folded.patch [new file with mode: 0644]
queue-4.19/mm-make-the-__pagetable_pxd_folded-defines-non-empty.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/mm-add-mm_pxd_folded-checks-to-pgtable_bytes-account.patch b/queue-4.19/mm-add-mm_pxd_folded-checks-to-pgtable_bytes-account.patch
new file mode 100644 (file)
index 0000000..68b880d
--- /dev/null
@@ -0,0 +1,66 @@
+From a9cda7f3765f119039df42908316f9b0b06ad5c7 Mon Sep 17 00:00:00 2001
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Date: Mon, 15 Oct 2018 10:30:23 +0200
+Subject: mm: add mm_pxd_folded checks to pgtable_bytes accounting functions
+
+[ Upstream commit 6d212db11947ae5464e4717536ed9faf61c01e86 ]
+
+The common mm code calls mm_dec_nr_pmds() and mm_dec_nr_puds()
+in free_pgtables() if the address range spans a full pud or pmd.
+If mm_dec_nr_puds/mm_dec_nr_pmds are non-empty due to configuration
+settings they blindly subtract the size of the pmd or pud table from
+pgtable_bytes even if the pud or pmd page table layer is folded.
+
+Add explicit mm_[pmd|pud]_folded checks to the four pgtable_bytes
+accounting functions mm_inc_nr_puds, mm_inc_nr_pmds, mm_dec_nr_puds
+and mm_dec_nr_pmds. As the check for folded page tables can be
+overwritten by the architecture, this allows to keep a correct
+pgtable_bytes value for platforms that use a dynamic number of
+page table levels.
+
+Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/mm.h | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/include/linux/mm.h b/include/linux/mm.h
+index 0416a7204be3..e899460f1bc5 100644
+--- a/include/linux/mm.h
++++ b/include/linux/mm.h
+@@ -1724,11 +1724,15 @@ int __pud_alloc(struct mm_struct *mm, p4d_t *p4d, unsigned long address);
+ static inline void mm_inc_nr_puds(struct mm_struct *mm)
+ {
++      if (mm_pud_folded(mm))
++              return;
+       atomic_long_add(PTRS_PER_PUD * sizeof(pud_t), &mm->pgtables_bytes);
+ }
+ static inline void mm_dec_nr_puds(struct mm_struct *mm)
+ {
++      if (mm_pud_folded(mm))
++              return;
+       atomic_long_sub(PTRS_PER_PUD * sizeof(pud_t), &mm->pgtables_bytes);
+ }
+ #endif
+@@ -1748,11 +1752,15 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address);
+ static inline void mm_inc_nr_pmds(struct mm_struct *mm)
+ {
++      if (mm_pmd_folded(mm))
++              return;
+       atomic_long_add(PTRS_PER_PMD * sizeof(pmd_t), &mm->pgtables_bytes);
+ }
+ static inline void mm_dec_nr_pmds(struct mm_struct *mm)
+ {
++      if (mm_pmd_folded(mm))
++              return;
+       atomic_long_sub(PTRS_PER_PMD * sizeof(pmd_t), &mm->pgtables_bytes);
+ }
+ #endif
+-- 
+2.19.1
+
diff --git a/queue-4.19/mm-introduce-mm_-p4d-pud-pmd-_folded.patch b/queue-4.19/mm-introduce-mm_-p4d-pud-pmd-_folded.patch
new file mode 100644 (file)
index 0000000..c0e6ef7
--- /dev/null
@@ -0,0 +1,45 @@
+From 1adafa6aee380b32ac2a7d0db03f7b67e9829b90 Mon Sep 17 00:00:00 2001
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Date: Mon, 15 Oct 2018 10:25:57 +0200
+Subject: mm: introduce mm_[p4d|pud|pmd]_folded
+
+[ Upstream commit 1071fc5779d9846fec56a4ff6089ab08cac1ab72 ]
+
+Add three architecture overrideable functions to test if the
+p4d, pud, or pmd layer of a page table is folded or not.
+
+Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/asm-generic/pgtable.h | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
+index 88ebc6102c7c..15fd0277ffa6 100644
+--- a/include/asm-generic/pgtable.h
++++ b/include/asm-generic/pgtable.h
+@@ -1127,4 +1127,20 @@ static inline bool arch_has_pfn_modify_check(void)
+ #endif
+ #endif
++/*
++ * On some architectures it depends on the mm if the p4d/pud or pmd
++ * layer of the page table hierarchy is folded or not.
++ */
++#ifndef mm_p4d_folded
++#define mm_p4d_folded(mm)     __is_defined(__PAGETABLE_P4D_FOLDED)
++#endif
++
++#ifndef mm_pud_folded
++#define mm_pud_folded(mm)     __is_defined(__PAGETABLE_PUD_FOLDED)
++#endif
++
++#ifndef mm_pmd_folded
++#define mm_pmd_folded(mm)     __is_defined(__PAGETABLE_PMD_FOLDED)
++#endif
++
+ #endif /* _ASM_GENERIC_PGTABLE_H */
+-- 
+2.19.1
+
diff --git a/queue-4.19/mm-make-the-__pagetable_pxd_folded-defines-non-empty.patch b/queue-4.19/mm-make-the-__pagetable_pxd_folded-defines-non-empty.patch
new file mode 100644 (file)
index 0000000..b50671e
--- /dev/null
@@ -0,0 +1,181 @@
+From 3c2fe9f1c6839fcda92bdf58a1c2194f2a11f82e Mon Sep 17 00:00:00 2001
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Date: Wed, 31 Oct 2018 12:11:48 +0100
+Subject: mm: make the __PAGETABLE_PxD_FOLDED defines non-empty
+
+[ Upstream commit a8874e7e8a8896f2b6c641f4b8e2473eafd35204 ]
+
+Change the currently empty defines for __PAGETABLE_PMD_FOLDED,
+__PAGETABLE_PUD_FOLDED and __PAGETABLE_P4D_FOLDED to return 1.
+This makes it possible to use __is_defined() to test if the
+preprocessor define exists.
+
+Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/include/asm/pgtable-2level.h    | 2 +-
+ arch/m68k/include/asm/pgtable_mm.h       | 4 ++--
+ arch/microblaze/include/asm/pgtable.h    | 2 +-
+ arch/nds32/include/asm/pgtable.h         | 2 +-
+ arch/parisc/include/asm/pgtable.h        | 2 +-
+ include/asm-generic/4level-fixup.h       | 2 +-
+ include/asm-generic/5level-fixup.h       | 2 +-
+ include/asm-generic/pgtable-nop4d-hack.h | 2 +-
+ include/asm-generic/pgtable-nop4d.h      | 2 +-
+ include/asm-generic/pgtable-nopmd.h      | 2 +-
+ include/asm-generic/pgtable-nopud.h      | 2 +-
+ 11 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h
+index 92fd2c8a9af0..12659ce5c1f3 100644
+--- a/arch/arm/include/asm/pgtable-2level.h
++++ b/arch/arm/include/asm/pgtable-2level.h
+@@ -10,7 +10,7 @@
+ #ifndef _ASM_PGTABLE_2LEVEL_H
+ #define _ASM_PGTABLE_2LEVEL_H
+-#define __PAGETABLE_PMD_FOLDED
++#define __PAGETABLE_PMD_FOLDED 1
+ /*
+  * Hardware-wise, we have a two level page table structure, where the first
+diff --git a/arch/m68k/include/asm/pgtable_mm.h b/arch/m68k/include/asm/pgtable_mm.h
+index 6181e4134483..fe3ddd73a0cc 100644
+--- a/arch/m68k/include/asm/pgtable_mm.h
++++ b/arch/m68k/include/asm/pgtable_mm.h
+@@ -55,12 +55,12 @@
+  */
+ #ifdef CONFIG_SUN3
+ #define PTRS_PER_PTE   16
+-#define __PAGETABLE_PMD_FOLDED
++#define __PAGETABLE_PMD_FOLDED 1
+ #define PTRS_PER_PMD   1
+ #define PTRS_PER_PGD   2048
+ #elif defined(CONFIG_COLDFIRE)
+ #define PTRS_PER_PTE  512
+-#define __PAGETABLE_PMD_FOLDED
++#define __PAGETABLE_PMD_FOLDED 1
+ #define PTRS_PER_PMD  1
+ #define PTRS_PER_PGD  1024
+ #else
+diff --git a/arch/microblaze/include/asm/pgtable.h b/arch/microblaze/include/asm/pgtable.h
+index 7b650ab14fa0..2ca598534cc7 100644
+--- a/arch/microblaze/include/asm/pgtable.h
++++ b/arch/microblaze/include/asm/pgtable.h
+@@ -63,7 +63,7 @@ extern int mem_init_done;
+ #include <asm-generic/4level-fixup.h>
+-#define __PAGETABLE_PMD_FOLDED
++#define __PAGETABLE_PMD_FOLDED 1
+ #ifdef __KERNEL__
+ #ifndef __ASSEMBLY__
+diff --git a/arch/nds32/include/asm/pgtable.h b/arch/nds32/include/asm/pgtable.h
+index d3e19a55cf53..9f52db930c00 100644
+--- a/arch/nds32/include/asm/pgtable.h
++++ b/arch/nds32/include/asm/pgtable.h
+@@ -4,7 +4,7 @@
+ #ifndef _ASMNDS32_PGTABLE_H
+ #define _ASMNDS32_PGTABLE_H
+-#define __PAGETABLE_PMD_FOLDED
++#define __PAGETABLE_PMD_FOLDED 1
+ #include <asm-generic/4level-fixup.h>
+ #include <asm-generic/sizes.h>
+diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h
+index fa6b7c78f18a..ff0860b2b21a 100644
+--- a/arch/parisc/include/asm/pgtable.h
++++ b/arch/parisc/include/asm/pgtable.h
+@@ -117,7 +117,7 @@ static inline void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
+ #if CONFIG_PGTABLE_LEVELS == 3
+ #define BITS_PER_PMD  (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
+ #else
+-#define __PAGETABLE_PMD_FOLDED
++#define __PAGETABLE_PMD_FOLDED 1
+ #define BITS_PER_PMD  0
+ #endif
+ #define PTRS_PER_PMD    (1UL << BITS_PER_PMD)
+diff --git a/include/asm-generic/4level-fixup.h b/include/asm-generic/4level-fixup.h
+index 89f3b03b1445..e3667c9a33a5 100644
+--- a/include/asm-generic/4level-fixup.h
++++ b/include/asm-generic/4level-fixup.h
+@@ -3,7 +3,7 @@
+ #define _4LEVEL_FIXUP_H
+ #define __ARCH_HAS_4LEVEL_HACK
+-#define __PAGETABLE_PUD_FOLDED
++#define __PAGETABLE_PUD_FOLDED 1
+ #define PUD_SHIFT                     PGDIR_SHIFT
+ #define PUD_SIZE                      PGDIR_SIZE
+diff --git a/include/asm-generic/5level-fixup.h b/include/asm-generic/5level-fixup.h
+index 9c2e0708eb82..73474bb52344 100644
+--- a/include/asm-generic/5level-fixup.h
++++ b/include/asm-generic/5level-fixup.h
+@@ -3,7 +3,7 @@
+ #define _5LEVEL_FIXUP_H
+ #define __ARCH_HAS_5LEVEL_HACK
+-#define __PAGETABLE_P4D_FOLDED
++#define __PAGETABLE_P4D_FOLDED 1
+ #define P4D_SHIFT                     PGDIR_SHIFT
+ #define P4D_SIZE                      PGDIR_SIZE
+diff --git a/include/asm-generic/pgtable-nop4d-hack.h b/include/asm-generic/pgtable-nop4d-hack.h
+index 0c34215263b8..1d6dd38c0e5e 100644
+--- a/include/asm-generic/pgtable-nop4d-hack.h
++++ b/include/asm-generic/pgtable-nop4d-hack.h
+@@ -5,7 +5,7 @@
+ #ifndef __ASSEMBLY__
+ #include <asm-generic/5level-fixup.h>
+-#define __PAGETABLE_PUD_FOLDED
++#define __PAGETABLE_PUD_FOLDED 1
+ /*
+  * Having the pud type consist of a pgd gets the size right, and allows
+diff --git a/include/asm-generic/pgtable-nop4d.h b/include/asm-generic/pgtable-nop4d.h
+index 1a29b2a0282b..04cb913797bc 100644
+--- a/include/asm-generic/pgtable-nop4d.h
++++ b/include/asm-generic/pgtable-nop4d.h
+@@ -4,7 +4,7 @@
+ #ifndef __ASSEMBLY__
+-#define __PAGETABLE_P4D_FOLDED
++#define __PAGETABLE_P4D_FOLDED 1
+ typedef struct { pgd_t pgd; } p4d_t;
+diff --git a/include/asm-generic/pgtable-nopmd.h b/include/asm-generic/pgtable-nopmd.h
+index f35f6e8149e4..b85b8271a73d 100644
+--- a/include/asm-generic/pgtable-nopmd.h
++++ b/include/asm-generic/pgtable-nopmd.h
+@@ -8,7 +8,7 @@
+ struct mm_struct;
+-#define __PAGETABLE_PMD_FOLDED
++#define __PAGETABLE_PMD_FOLDED 1
+ /*
+  * Having the pmd type consist of a pud gets the size right, and allows
+diff --git a/include/asm-generic/pgtable-nopud.h b/include/asm-generic/pgtable-nopud.h
+index e950b9c50f34..9bef475db6fe 100644
+--- a/include/asm-generic/pgtable-nopud.h
++++ b/include/asm-generic/pgtable-nopud.h
+@@ -9,7 +9,7 @@
+ #else
+ #include <asm-generic/pgtable-nop4d.h>
+-#define __PAGETABLE_PUD_FOLDED
++#define __PAGETABLE_PUD_FOLDED 1
+ /*
+  * Having the pud type consist of a p4d gets the size right, and allows
+-- 
+2.19.1
+
index 9dff243d9407d4d3f7411bc4574527c77d8b5a99..ef15c6fd362e825115b8b1f14ae22313765c81ce 100644 (file)
@@ -27,3 +27,6 @@ x86-mtrr-don-t-copy-uninitialized-gentry-fields-back-to-userspace.patch
 x86-mm-fix-decoy-address-handling-vs-32-bit-builds.patch
 x86-vdso-pass-eh-frame-hdr-to-the-linker.patch
 x86-intel_rdt-ensure-a-cpu-remains-online-for-the-region-s-pseudo-locking-sequence.patch
+mm-add-mm_pxd_folded-checks-to-pgtable_bytes-account.patch
+mm-make-the-__pagetable_pxd_folded-defines-non-empty.patch
+mm-introduce-mm_-p4d-pud-pmd-_folded.patch