From: Greg Kroah-Hartman Date: Thu, 30 Jan 2014 12:39:57 +0000 (-0800) Subject: delete powerpc-thp-fix-crash-on-mremap.patch from 3.12 and 3.13 X-Git-Tag: v3.4.79~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ab4d8292cad9a98ececfa062d7efc3da7902ce1;p=thirdparty%2Fkernel%2Fstable-queue.git delete powerpc-thp-fix-crash-on-mremap.patch from 3.12 and 3.13 --- diff --git a/queue-3.12/powerpc-thp-fix-crash-on-mremap.patch b/queue-3.12/powerpc-thp-fix-crash-on-mremap.patch deleted file mode 100644 index 0ff37254b4e..00000000000 --- a/queue-3.12/powerpc-thp-fix-crash-on-mremap.patch +++ /dev/null @@ -1,86 +0,0 @@ -From b3084f4db3aeb991c507ca774337c7e7893ed04f Mon Sep 17 00:00:00 2001 -From: "Aneesh Kumar K.V" -Date: Mon, 13 Jan 2014 11:34:24 +0530 -Subject: powerpc/thp: Fix crash on mremap - -From: "Aneesh Kumar K.V" - -commit b3084f4db3aeb991c507ca774337c7e7893ed04f upstream. - -This patch fix the below crash - -NIP [c00000000004cee4] .__hash_page_thp+0x2a4/0x440 -LR [c0000000000439ac] .hash_page+0x18c/0x5e0 -... -Call Trace: -[c000000736103c40] [00001ffffb000000] 0x1ffffb000000(unreliable) -[437908.479693] [c000000736103d50] [c0000000000439ac] .hash_page+0x18c/0x5e0 -[437908.479699] [c000000736103e30] [c00000000000924c] .do_hash_page+0x4c/0x58 - -On ppc64 we use the pgtable for storing the hpte slot information and -store address to the pgtable at a constant offset (PTRS_PER_PMD) from -pmd. On mremap, when we switch the pmd, we need to withdraw and deposit -the pgtable again, so that we find the pgtable at PTRS_PER_PMD offset -from new pmd. - -We also want to move the withdraw and deposit before the set_pmd so -that, when page fault find the pmd as trans huge we can be sure that -pgtable can be located at the offset. - -Signed-off-by: Aneesh Kumar K.V -Acked-by: Kirill A. Shutemov -Signed-off-by: Benjamin Herrenschmidt -Signed-off-by: Greg Kroah-Hartman - - ---- - arch/Kconfig | 3 +++ - arch/powerpc/platforms/Kconfig.cputype | 1 + - mm/huge_memory.c | 12 ++++++++++++ - 3 files changed, 16 insertions(+) - ---- a/arch/Kconfig -+++ b/arch/Kconfig -@@ -365,6 +365,9 @@ config HAVE_ARCH_TRANSPARENT_HUGEPAGE - config HAVE_ARCH_SOFT_DIRTY - bool - -+config ARCH_THP_MOVE_PMD_ALWAYS_WITHDRAW -+ bool -+ - config HAVE_MOD_ARCH_SPECIFIC - bool - help ---- a/arch/powerpc/platforms/Kconfig.cputype -+++ b/arch/powerpc/platforms/Kconfig.cputype -@@ -71,6 +71,7 @@ config PPC_BOOK3S_64 - select PPC_FPU - select PPC_HAVE_PMU_SUPPORT - select SYS_SUPPORTS_HUGETLBFS -+ select ARCH_THP_MOVE_PMD_ALWAYS_WITHDRAW - select HAVE_ARCH_TRANSPARENT_HUGEPAGE if PPC_64K_PAGES - - config PPC_BOOK3E_64 ---- a/mm/huge_memory.c -+++ b/mm/huge_memory.c -@@ -1474,8 +1474,20 @@ int move_huge_pmd(struct vm_area_struct - - ret = __pmd_trans_huge_lock(old_pmd, vma); - if (ret == 1) { -+#ifdef CONFIG_ARCH_THP_MOVE_PMD_ALWAYS_WITHDRAW -+ pgtable_t pgtable; -+#endif - pmd = pmdp_get_and_clear(mm, old_addr, old_pmd); - VM_BUG_ON(!pmd_none(*new_pmd)); -+#ifdef CONFIG_ARCH_THP_MOVE_PMD_ALWAYS_WITHDRAW -+ /* -+ * Archs like ppc64 use pgtable to store per pmd -+ * specific information. So when we switch the pmd, -+ * we should also withdraw and deposit the pgtable -+ */ -+ pgtable = pgtable_trans_huge_withdraw(mm, old_pmd); -+ pgtable_trans_huge_deposit(mm, new_pmd, pgtable); -+#endif - set_pmd_at(mm, new_addr, new_pmd, pmd_mksoft_dirty(pmd)); - spin_unlock(&mm->page_table_lock); - } diff --git a/queue-3.12/series b/queue-3.12/series index 6f2b4f4508b..fe61463d853 100644 --- a/queue-3.12/series +++ b/queue-3.12/series @@ -2,4 +2,3 @@ kvm-x86-fix-apic_base-enable-check.patch md-raid5-fix-long-standing-problem-with-bitmap-handling-on-write-failure.patch drm-nouveau-bios-fix-offset-calculation-for-bmpv1-bioses.patch mm-hugetlbfs-fix-hugetlbfs-optimization.patch -powerpc-thp-fix-crash-on-mremap.patch diff --git a/queue-3.13/powerpc-thp-fix-crash-on-mremap.patch b/queue-3.13/powerpc-thp-fix-crash-on-mremap.patch deleted file mode 100644 index 1b2ca130a1a..00000000000 --- a/queue-3.13/powerpc-thp-fix-crash-on-mremap.patch +++ /dev/null @@ -1,110 +0,0 @@ -From b3084f4db3aeb991c507ca774337c7e7893ed04f Mon Sep 17 00:00:00 2001 -From: "Aneesh Kumar K.V" -Date: Mon, 13 Jan 2014 11:34:24 +0530 -Subject: powerpc/thp: Fix crash on mremap - -From: "Aneesh Kumar K.V" - -commit b3084f4db3aeb991c507ca774337c7e7893ed04f upstream. - -This patch fix the below crash - -NIP [c00000000004cee4] .__hash_page_thp+0x2a4/0x440 -LR [c0000000000439ac] .hash_page+0x18c/0x5e0 -... -Call Trace: -[c000000736103c40] [00001ffffb000000] 0x1ffffb000000(unreliable) -[437908.479693] [c000000736103d50] [c0000000000439ac] .hash_page+0x18c/0x5e0 -[437908.479699] [c000000736103e30] [c00000000000924c] .do_hash_page+0x4c/0x58 - -On ppc64 we use the pgtable for storing the hpte slot information and -store address to the pgtable at a constant offset (PTRS_PER_PMD) from -pmd. On mremap, when we switch the pmd, we need to withdraw and deposit -the pgtable again, so that we find the pgtable at PTRS_PER_PMD offset -from new pmd. - -We also want to move the withdraw and deposit before the set_pmd so -that, when page fault find the pmd as trans huge we can be sure that -pgtable can be located at the offset. - -Signed-off-by: Aneesh Kumar K.V -Acked-by: Kirill A. Shutemov -Signed-off-by: Benjamin Herrenschmidt -Signed-off-by: Greg Kroah-Hartman - ---- - arch/powerpc/include/asm/pgtable-ppc64.h | 14 ++++++++++++++ - include/asm-generic/pgtable.h | 12 ++++++++++++ - mm/huge_memory.c | 14 +++++--------- - 3 files changed, 31 insertions(+), 9 deletions(-) - ---- a/arch/powerpc/include/asm/pgtable-ppc64.h -+++ b/arch/powerpc/include/asm/pgtable-ppc64.h -@@ -558,5 +558,19 @@ extern pgtable_t pgtable_trans_huge_with - #define __HAVE_ARCH_PMDP_INVALIDATE - extern void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address, - pmd_t *pmdp); -+ -+#define pmd_move_must_withdraw pmd_move_must_withdraw -+typedef struct spinlock spinlock_t; -+static inline int pmd_move_must_withdraw(spinlock_t *new_pmd_ptl, -+ spinlock_t *old_pmd_ptl) -+{ -+ /* -+ * Archs like ppc64 use pgtable to store per pmd -+ * specific information. So when we switch the pmd, -+ * we should also withdraw and deposit the pgtable -+ */ -+ return true; -+} -+ - #endif /* __ASSEMBLY__ */ - #endif /* _ASM_POWERPC_PGTABLE_PPC64_H_ */ ---- a/include/asm-generic/pgtable.h -+++ b/include/asm-generic/pgtable.h -@@ -558,6 +558,18 @@ static inline pmd_t pmd_read_atomic(pmd_ - } - #endif - -+#ifndef pmd_move_must_withdraw -+static inline int pmd_move_must_withdraw(spinlock_t *new_pmd_ptl, -+ spinlock_t *old_pmd_ptl) -+{ -+ /* -+ * With split pmd lock we also need to move preallocated -+ * PTE page table if new_pmd is on different PMD page table. -+ */ -+ return new_pmd_ptl != old_pmd_ptl; -+} -+#endif -+ - /* - * This function is meant to be used by sites walking pagetables with - * the mmap_sem hold in read mode to protect against MADV_DONTNEED and ---- a/mm/huge_memory.c -+++ b/mm/huge_memory.c -@@ -1502,19 +1502,15 @@ int move_huge_pmd(struct vm_area_struct - spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING); - pmd = pmdp_get_and_clear(mm, old_addr, old_pmd); - VM_BUG_ON(!pmd_none(*new_pmd)); -- set_pmd_at(mm, new_addr, new_pmd, pmd_mksoft_dirty(pmd)); -- if (new_ptl != old_ptl) { -- pgtable_t pgtable; - -- /* -- * Move preallocated PTE page table if new_pmd is on -- * different PMD page table. -- */ -+ if (pmd_move_must_withdraw(new_ptl, old_ptl)) { -+ pgtable_t pgtable; - pgtable = pgtable_trans_huge_withdraw(mm, old_pmd); - pgtable_trans_huge_deposit(mm, new_pmd, pgtable); -- -- spin_unlock(new_ptl); - } -+ set_pmd_at(mm, new_addr, new_pmd, pmd_mksoft_dirty(pmd)); -+ if (new_ptl != old_ptl) -+ spin_unlock(new_ptl); - spin_unlock(old_ptl); - } - out: diff --git a/queue-3.13/series b/queue-3.13/series index 6d9e8a46adf..e69de29bb2d 100644 --- a/queue-3.13/series +++ b/queue-3.13/series @@ -1 +0,0 @@ -powerpc-thp-fix-crash-on-mremap.patch