diff for duplicates of <56179CE5.5000807@synopsys.com> diff --git a/a/1.txt b/N1/1.txt index e40fba4..4e0fa19 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -10,130 +10,3 @@ On Friday 09 October 2015 03:38 PM, Kirill A. Shutemov wrote: With updated change log and some reworking in the source code comment ! ----------------> -From 96537a576f99be29f65c5682d6e0e7b31028d5ba Mon Sep 17 00:00:00 2001 -From: Vineet Gupta <vgupta@synopsys.com> -Date: Fri, 20 Feb 2015 10:36:28 +0530 -Subject: [PATCH v3] mm,thp: introduce flush_pmd_tlb_range - -ARCHes with special requirements for evicting THP backing TLB entries -can implement this. - -Otherwise also, it can help optimize TLB flush in THP regime. -stock flush_tlb_range() typically has optimization to nuke the entire -TLB if flush span is greater than a certain threshhold, which will -likely be true for a single huge page. Thus a single thp flush will -invalidate the entrire TLB which is not desirable. - -e.g. see arch/arc: flush_pmd_tlb_range - -Signed-off-by: Vineet Gupta <vgupta@synopsys.com> ---- - mm/huge_memory.c | 2 +- - mm/pgtable-generic.c | 26 ++++++++++++++++++++------ - 2 files changed, 21 insertions(+), 7 deletions(-) - -diff --git a/mm/huge_memory.c b/mm/huge_memory.c -index 4b06b8db9df2..e25eb3d2081a 100644 ---- a/mm/huge_memory.c -+++ b/mm/huge_memory.c -@@ -1880,7 +1880,7 @@ static int __split_huge_page_map(struct page *page, - * here). But it is generally safer to never allow - * small and huge TLB entries for the same virtual - * address to be loaded simultaneously. So instead of -- * doing "pmd_populate(); flush_tlb_range();" we first -+ * doing "pmd_populate(); flush_pmd_tlb_range();" we first - * mark the current pmd notpresent (atomically because - * here the pmd_trans_huge and pmd_trans_splitting - * must remain set at all times on the pmd until the -diff --git a/mm/pgtable-generic.c b/mm/pgtable-generic.c -index c9c59bb75a17..7d3db0247983 100644 ---- a/mm/pgtable-generic.c -+++ b/mm/pgtable-generic.c -@@ -84,6 +84,20 @@ pte_t ptep_clear_flush(struct vm_area_struct *vma, unsigned -long address, - - #ifdef CONFIG_TRANSPARENT_HUGEPAGE - -+#ifndef __HAVE_ARCH_FLUSH_PMD_TLB_RANGE -+ -+/* -+ * ARCHes with special requirements for evicting THP backing TLB entries can -+ * implement this. Otherwise also, it can help optimize normal TLB flush in -+ * THP regime. stock flush_tlb_range() typically has optimization to nuke the -+ * entire TLB TLB if flush span is greater than a threshhold, which will -+ * likely be true for a single huge page. Thus a single thp flush will -+ * invalidate the entire TLB which is not desitable. -+ * e.g. see arch/arc: flush_pmd_tlb_range -+ */ -+#define flush_pmd_tlb_range(vma, addr, end) flush_tlb_range(vma, addr, end) -+#endif -+ - #ifndef __HAVE_ARCH_PMDP_SET_ACCESS_FLAGS - int pmdp_set_access_flags(struct vm_area_struct *vma, - unsigned long address, pmd_t *pmdp, -@@ -93,7 +107,7 @@ int pmdp_set_access_flags(struct vm_area_struct *vma, - VM_BUG_ON(address & ~HPAGE_PMD_MASK); - if (changed) { - set_pmd_at(vma->vm_mm, address, pmdp, entry); -- flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE); -+ flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); - } - return changed; - } -@@ -107,7 +121,7 @@ int pmdp_clear_flush_young(struct vm_area_struct *vma, - VM_BUG_ON(address & ~HPAGE_PMD_MASK); - young = pmdp_test_and_clear_young(vma, address, pmdp); - if (young) -- flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE); -+ flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); - return young; - } - #endif -@@ -120,7 +134,7 @@ pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma, -unsigned long address, - VM_BUG_ON(address & ~HPAGE_PMD_MASK); - VM_BUG_ON(!pmd_trans_huge(*pmdp)); - pmd = pmdp_huge_get_and_clear(vma->vm_mm, address, pmdp); -- flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE); -+ flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); - return pmd; - } - #endif -@@ -133,7 +147,7 @@ void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned -long address, - VM_BUG_ON(address & ~HPAGE_PMD_MASK); - set_pmd_at(vma->vm_mm, address, pmdp, pmd); - /* tlb flush only to serialize against gup-fast */ -- flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE); -+ flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); - } - #endif - -@@ -179,7 +193,7 @@ void pmdp_invalidate(struct vm_area_struct *vma, unsigned long -address, - { - pmd_t entry = *pmdp; - set_pmd_at(vma->vm_mm, address, pmdp, pmd_mknotpresent(entry)); -- flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE); -+ flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); - } - #endif - -@@ -196,7 +210,7 @@ pmd_t pmdp_collapse_flush(struct vm_area_struct *vma, unsigned -long address, - VM_BUG_ON(address & ~HPAGE_PMD_MASK); - VM_BUG_ON(pmd_trans_huge(*pmdp)); - pmd = pmdp_huge_get_and_clear(vma->vm_mm, address, pmdp); -- flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE); -+ flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); - return pmd; - } - #endif --- -1.9.1 - --- -To unsubscribe, send a message with 'unsubscribe linux-mm' in -the body to majordomo@kvack.org. For more info on Linux MM, -see: http://www.linux-mm.org/ . -Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> diff --git a/a/content_digest b/N1/content_digest index 5a19e56..1543ac4 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -27,133 +27,6 @@ "\n" "With updated change log and some reworking in the source code comment !\n" "\n" - "---------------->\n" - "From 96537a576f99be29f65c5682d6e0e7b31028d5ba Mon Sep 17 00:00:00 2001\n" - "From: Vineet Gupta <vgupta@synopsys.com>\n" - "Date: Fri, 20 Feb 2015 10:36:28 +0530\n" - "Subject: [PATCH v3] mm,thp: introduce flush_pmd_tlb_range\n" - "\n" - "ARCHes with special requirements for evicting THP backing TLB entries\n" - "can implement this.\n" - "\n" - "Otherwise also, it can help optimize TLB flush in THP regime.\n" - "stock flush_tlb_range() typically has optimization to nuke the entire\n" - "TLB if flush span is greater than a certain threshhold, which will\n" - "likely be true for a single huge page. Thus a single thp flush will\n" - "invalidate the entrire TLB which is not desirable.\n" - "\n" - "e.g. see arch/arc: flush_pmd_tlb_range\n" - "\n" - "Signed-off-by: Vineet Gupta <vgupta@synopsys.com>\n" - "---\n" - " mm/huge_memory.c | 2 +-\n" - " mm/pgtable-generic.c | 26 ++++++++++++++++++++------\n" - " 2 files changed, 21 insertions(+), 7 deletions(-)\n" - "\n" - "diff --git a/mm/huge_memory.c b/mm/huge_memory.c\n" - "index 4b06b8db9df2..e25eb3d2081a 100644\n" - "--- a/mm/huge_memory.c\n" - "+++ b/mm/huge_memory.c\n" - "@@ -1880,7 +1880,7 @@ static int __split_huge_page_map(struct page *page,\n" - " \t\t * here). But it is generally safer to never allow\n" - " \t\t * small and huge TLB entries for the same virtual\n" - " \t\t * address to be loaded simultaneously. So instead of\n" - "-\t\t * doing \"pmd_populate(); flush_tlb_range();\" we first\n" - "+\t\t * doing \"pmd_populate(); flush_pmd_tlb_range();\" we first\n" - " \t\t * mark the current pmd notpresent (atomically because\n" - " \t\t * here the pmd_trans_huge and pmd_trans_splitting\n" - " \t\t * must remain set at all times on the pmd until the\n" - "diff --git a/mm/pgtable-generic.c b/mm/pgtable-generic.c\n" - "index c9c59bb75a17..7d3db0247983 100644\n" - "--- a/mm/pgtable-generic.c\n" - "+++ b/mm/pgtable-generic.c\n" - "@@ -84,6 +84,20 @@ pte_t ptep_clear_flush(struct vm_area_struct *vma, unsigned\n" - "long address,\n" - "\n" - " #ifdef CONFIG_TRANSPARENT_HUGEPAGE\n" - "\n" - "+#ifndef __HAVE_ARCH_FLUSH_PMD_TLB_RANGE\n" - "+\n" - "+/*\n" - "+ * ARCHes with special requirements for evicting THP backing TLB entries can\n" - "+ * implement this. Otherwise also, it can help optimize normal TLB flush in\n" - "+ * THP regime. stock flush_tlb_range() typically has optimization to nuke the\n" - "+ * entire TLB TLB if flush span is greater than a threshhold, which will\n" - "+ * likely be true for a single huge page. Thus a single thp flush will\n" - "+ * invalidate the entire TLB which is not desitable.\n" - "+ * e.g. see arch/arc: flush_pmd_tlb_range\n" - "+ */\n" - "+#define flush_pmd_tlb_range(vma, addr, end)\tflush_tlb_range(vma, addr, end)\n" - "+#endif\n" - "+\n" - " #ifndef __HAVE_ARCH_PMDP_SET_ACCESS_FLAGS\n" - " int pmdp_set_access_flags(struct vm_area_struct *vma,\n" - " \t\t\t unsigned long address, pmd_t *pmdp,\n" - "@@ -93,7 +107,7 @@ int pmdp_set_access_flags(struct vm_area_struct *vma,\n" - " \tVM_BUG_ON(address & ~HPAGE_PMD_MASK);\n" - " \tif (changed) {\n" - " \t\tset_pmd_at(vma->vm_mm, address, pmdp, entry);\n" - "-\t\tflush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - "+\t\tflush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - " \t}\n" - " \treturn changed;\n" - " }\n" - "@@ -107,7 +121,7 @@ int pmdp_clear_flush_young(struct vm_area_struct *vma,\n" - " \tVM_BUG_ON(address & ~HPAGE_PMD_MASK);\n" - " \tyoung = pmdp_test_and_clear_young(vma, address, pmdp);\n" - " \tif (young)\n" - "-\t\tflush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - "+\t\tflush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - " \treturn young;\n" - " }\n" - " #endif\n" - "@@ -120,7 +134,7 @@ pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma,\n" - "unsigned long address,\n" - " \tVM_BUG_ON(address & ~HPAGE_PMD_MASK);\n" - " \tVM_BUG_ON(!pmd_trans_huge(*pmdp));\n" - " \tpmd = pmdp_huge_get_and_clear(vma->vm_mm, address, pmdp);\n" - "-\tflush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - "+\tflush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - " \treturn pmd;\n" - " }\n" - " #endif\n" - "@@ -133,7 +147,7 @@ void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned\n" - "long address,\n" - " \tVM_BUG_ON(address & ~HPAGE_PMD_MASK);\n" - " \tset_pmd_at(vma->vm_mm, address, pmdp, pmd);\n" - " \t/* tlb flush only to serialize against gup-fast */\n" - "-\tflush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - "+\tflush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - " }\n" - " #endif\n" - "\n" - "@@ -179,7 +193,7 @@ void pmdp_invalidate(struct vm_area_struct *vma, unsigned long\n" - "address,\n" - " {\n" - " \tpmd_t entry = *pmdp;\n" - " \tset_pmd_at(vma->vm_mm, address, pmdp, pmd_mknotpresent(entry));\n" - "-\tflush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - "+\tflush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - " }\n" - " #endif\n" - "\n" - "@@ -196,7 +210,7 @@ pmd_t pmdp_collapse_flush(struct vm_area_struct *vma, unsigned\n" - "long address,\n" - " \tVM_BUG_ON(address & ~HPAGE_PMD_MASK);\n" - " \tVM_BUG_ON(pmd_trans_huge(*pmdp));\n" - " \tpmd = pmdp_huge_get_and_clear(vma->vm_mm, address, pmdp);\n" - "-\tflush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - "+\tflush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE);\n" - " \treturn pmd;\n" - " }\n" - " #endif\n" - "-- \n" - "1.9.1\n" - "\n" - "--\n" - "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n" - "the body to majordomo@kvack.org. For more info on Linux MM,\n" - "see: http://www.linux-mm.org/ .\n" - "Don't email: <a href=mailto:\"dont@kvack.org\"> email@kvack.org </a>" + ----------------> -f0606ed276ff5915c360263cb95039aa2b3dc834fad5eef981d6c5b2aa63f39e +595cf35a09dab867a8c76ff3069cc96e09de0e9dd905cddc8853958bb1f7f955
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.