diff for duplicates of <20161222145203.GA18970@bbox> diff --git a/a/1.txt b/N1/1.txt index 5a886f8..6953e72 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -28,63 +28,3 @@ On Thu, Dec 22, 2016 at 11:17:13AM +0300, Kirill A. Shutemov wrote: > From what I see change to huge_pmd_set_accessed() should be enough. Yeb. Thanks for the review. Here v2 goes. - -From b3ec95c0df91ad113525968a4a6b53030fd0b48d Mon Sep 17 00:00:00 2001 -From: Minchan Kim <minchan@kernel.org> -Date: Thu, 22 Dec 2016 23:43:49 +0900 -Subject: [PATCH v2] mm: pmd dirty emulation in page fault handler - -Andreas reported [1] made a test in jemalloc hang in THP mode in arm64. -http://lkml.kernel.org/r/mvmmvfy37g1.fsf@hawking.suse.de - -The problem is page fault handler supports only accessed flag emulation -for THP page of SW-dirty/accessed architecture. - -This patch enables dirty-bit emulation for those architectures. -Without it, MADV_FREE makes application hang by repeated fault forever. - -[1] b8d3c4c3009d, mm/huge_memory.c: don't split THP page when MADV_FREE syscall is called - -Cc: Jason Evans <je@fb.com> -Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> -Cc: Will Deacon <will.deacon@arm.com> -Cc: Catalin Marinas <catalin.marinas@arm.com> -Cc: linux-arch@vger.kernel.org -Cc: linux-arm-kernel@lists.infradead.org -Cc: <stable@vger.kernel.org> [4.5+] -Fixes: b8d3c4c3009d ("mm/huge_memory.c: don't split THP page when MADV_FREE syscall is called") -Reported-by: Andreas Schwab <schwab@suse.de> -Signed-off-by: Minchan Kim <minchan@kernel.org> ---- -* from v1 - * Remove __handle_mm_fault part - Kirill - - mm/huge_memory.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/mm/huge_memory.c b/mm/huge_memory.c -index 10eedbf..29ec8a4 100644 ---- a/mm/huge_memory.c -+++ b/mm/huge_memory.c -@@ -883,15 +883,17 @@ void huge_pmd_set_accessed(struct vm_fault *vmf, pmd_t orig_pmd) - { - pmd_t entry; - unsigned long haddr; -+ bool write = vmf->flags & FAULT_FLAG_WRITE; - - vmf->ptl = pmd_lock(vmf->vma->vm_mm, vmf->pmd); - if (unlikely(!pmd_same(*vmf->pmd, orig_pmd))) - goto unlock; - - entry = pmd_mkyoung(orig_pmd); -+ if (write) -+ entry = pmd_mkdirty(entry); - haddr = vmf->address & HPAGE_PMD_MASK; -- if (pmdp_set_access_flags(vmf->vma, haddr, vmf->pmd, entry, -- vmf->flags & FAULT_FLAG_WRITE)) -+ if (pmdp_set_access_flags(vmf->vma, haddr, vmf->pmd, entry, write)) - update_mmu_cache_pmd(vmf->vma, vmf->address, vmf->pmd); - - unlock: --- -2.7.4 diff --git a/a/content_digest b/N1/content_digest index b6dc7b1..981ab74 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -45,66 +45,6 @@ "> __handle_mm_fault() at all.\n" "> From what I see change to huge_pmd_set_accessed() should be enough.\n" "\n" - "Yeb. Thanks for the review. Here v2 goes.\n" - "\n" - "From b3ec95c0df91ad113525968a4a6b53030fd0b48d Mon Sep 17 00:00:00 2001\n" - "From: Minchan Kim <minchan@kernel.org>\n" - "Date: Thu, 22 Dec 2016 23:43:49 +0900\n" - "Subject: [PATCH v2] mm: pmd dirty emulation in page fault handler\n" - "\n" - "Andreas reported [1] made a test in jemalloc hang in THP mode in arm64.\n" - "http://lkml.kernel.org/r/mvmmvfy37g1.fsf@hawking.suse.de\n" - "\n" - "The problem is page fault handler supports only accessed flag emulation\n" - "for THP page of SW-dirty/accessed architecture.\n" - "\n" - "This patch enables dirty-bit emulation for those architectures.\n" - "Without it, MADV_FREE makes application hang by repeated fault forever.\n" - "\n" - "[1] b8d3c4c3009d, mm/huge_memory.c: don't split THP page when MADV_FREE syscall is called\n" - "\n" - "Cc: Jason Evans <je@fb.com>\n" - "Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>\n" - "Cc: Will Deacon <will.deacon@arm.com>\n" - "Cc: Catalin Marinas <catalin.marinas@arm.com>\n" - "Cc: linux-arch@vger.kernel.org\n" - "Cc: linux-arm-kernel@lists.infradead.org\n" - "Cc: <stable@vger.kernel.org> [4.5+]\n" - "Fixes: b8d3c4c3009d (\"mm/huge_memory.c: don't split THP page when MADV_FREE syscall is called\")\n" - "Reported-by: Andreas Schwab <schwab@suse.de>\n" - "Signed-off-by: Minchan Kim <minchan@kernel.org>\n" - "---\n" - "* from v1\n" - " * Remove __handle_mm_fault part - Kirill\n" - "\n" - " mm/huge_memory.c | 6 ++++--\n" - " 1 file changed, 4 insertions(+), 2 deletions(-)\n" - "\n" - "diff --git a/mm/huge_memory.c b/mm/huge_memory.c\n" - "index 10eedbf..29ec8a4 100644\n" - "--- a/mm/huge_memory.c\n" - "+++ b/mm/huge_memory.c\n" - "@@ -883,15 +883,17 @@ void huge_pmd_set_accessed(struct vm_fault *vmf, pmd_t orig_pmd)\n" - " {\n" - " \tpmd_t entry;\n" - " \tunsigned long haddr;\n" - "+\tbool write = vmf->flags & FAULT_FLAG_WRITE;\n" - " \n" - " \tvmf->ptl = pmd_lock(vmf->vma->vm_mm, vmf->pmd);\n" - " \tif (unlikely(!pmd_same(*vmf->pmd, orig_pmd)))\n" - " \t\tgoto unlock;\n" - " \n" - " \tentry = pmd_mkyoung(orig_pmd);\n" - "+\tif (write)\n" - "+\t\tentry = pmd_mkdirty(entry);\n" - " \thaddr = vmf->address & HPAGE_PMD_MASK;\n" - "-\tif (pmdp_set_access_flags(vmf->vma, haddr, vmf->pmd, entry,\n" - "-\t\t\t\tvmf->flags & FAULT_FLAG_WRITE))\n" - "+\tif (pmdp_set_access_flags(vmf->vma, haddr, vmf->pmd, entry, write))\n" - " \t\tupdate_mmu_cache_pmd(vmf->vma, vmf->address, vmf->pmd);\n" - " \n" - " unlock:\n" - "-- \n" - 2.7.4 + Yeb. Thanks for the review. Here v2 goes. -bb8c26c2446478d4288136887001e56ee751b1dc6a6f16e37836d4dc999f0287 +9403b766ba224c3f8e1beb20d2daf7644957e6d6a6fceff7d8ab04df687637d1
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox