From 798e2c56e3a59d09333a9d0a7c3dbe2b73bb8fff Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 16 Aug 2018 13:58:05 +0200 Subject: [PATCH] 4.9-stable patches added patches: x86-mm-disable-ioremap-free-page-handling-on-x86-pae.patch --- queue-4.9/series | 1 + ...oremap-free-page-handling-on-x86-pae.patch | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 queue-4.9/x86-mm-disable-ioremap-free-page-handling-on-x86-pae.patch diff --git a/queue-4.9/series b/queue-4.9/series index 00c90abe058..1ecc038ab29 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -1,2 +1,3 @@ x86-l1tf-fix-build-error-seen-if-config_kvm_intel-is-disabled.patch x86-i8259-add-missing-include-file.patch +x86-mm-disable-ioremap-free-page-handling-on-x86-pae.patch diff --git a/queue-4.9/x86-mm-disable-ioremap-free-page-handling-on-x86-pae.patch b/queue-4.9/x86-mm-disable-ioremap-free-page-handling-on-x86-pae.patch new file mode 100644 index 00000000000..e75566b48bd --- /dev/null +++ b/queue-4.9/x86-mm-disable-ioremap-free-page-handling-on-x86-pae.patch @@ -0,0 +1,74 @@ +From f967db0b9ed44ec3057a28f3b28efc51df51b835 Mon Sep 17 00:00:00 2001 +From: Toshi Kani +Date: Wed, 27 Jun 2018 08:13:46 -0600 +Subject: x86/mm: Disable ioremap free page handling on x86-PAE + +From: Toshi Kani + +commit f967db0b9ed44ec3057a28f3b28efc51df51b835 upstream. + +ioremap() supports pmd mappings on x86-PAE. However, kernel's pmd +tables are not shared among processes on x86-PAE. Therefore, any +update to sync'd pmd entries need re-syncing. Freeing a pte page +also leads to a vmalloc fault and hits the BUG_ON in vmalloc_sync_one(). + +Disable free page handling on x86-PAE. pud_free_pmd_page() and +pmd_free_pte_page() simply return 0 if a given pud/pmd entry is present. +This assures that ioremap() does not update sync'd pmd entries at the +cost of falling back to pte mappings. + +Fixes: 28ee90fe6048 ("x86/mm: implement free pmd/pte page interfaces") +Reported-by: Joerg Roedel +Signed-off-by: Toshi Kani +Signed-off-by: Thomas Gleixner +Cc: mhocko@suse.com +Cc: akpm@linux-foundation.org +Cc: hpa@zytor.com +Cc: cpandya@codeaurora.org +Cc: linux-mm@kvack.org +Cc: linux-arm-kernel@lists.infradead.org +Cc: stable@vger.kernel.org +Cc: Andrew Morton +Cc: Michal Hocko +Cc: "H. Peter Anvin" +Cc: +Link: https://lkml.kernel.org/r/20180627141348.21777-2-toshi.kani@hpe.com +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/mm/pgtable.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +--- a/arch/x86/mm/pgtable.c ++++ b/arch/x86/mm/pgtable.c +@@ -653,6 +653,7 @@ int pmd_clear_huge(pmd_t *pmd) + return 0; + } + ++#ifdef CONFIG_X86_64 + /** + * pud_free_pmd_page - Clear pud entry and free pmd page. + * @pud: Pointer to a PUD. +@@ -700,4 +701,22 @@ int pmd_free_pte_page(pmd_t *pmd) + + return 1; + } ++ ++#else /* !CONFIG_X86_64 */ ++ ++int pud_free_pmd_page(pud_t *pud) ++{ ++ return pud_none(*pud); ++} ++ ++/* ++ * Disable free page handling on x86-PAE. This assures that ioremap() ++ * does not update sync'd pmd entries. See vmalloc_sync_one(). ++ */ ++int pmd_free_pte_page(pmd_t *pmd) ++{ ++ return pmd_none(*pmd); ++} ++ ++#endif /* CONFIG_X86_64 */ + #endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */ -- 2.47.3