All of lore.kernel.org
 help / color / mirror / Atom feed
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.