All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <499D90AE.7060102@goop.org>

diff --git a/a/1.txt b/N1/1.txt
index 3224e99..d1ee0fa 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -72,75 +72,3 @@ exchange if the guest still has pagetable references to the page.
 
 It's almost safe.  I've got this patch in my tree to tie up the 
 flush_tlb_all loose end, though I won't claim its pretty.
-
->From 5812263a50a27c697a2287b41d4f005804b6b34a Mon Sep 17 00:00:00 2001
-From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
-Date: Tue, 17 Feb 2009 09:44:14 -0800
-Subject: [PATCH] x86: implement flush_tlb_all in terms of flush_tlb_others
-
-Modify flush_tlb_others to take a NULL mm, meaning "flush user
-and kernel tlbs", and implement flush_tlb_all in terms of that.
-
-The principle motivation for this is to make sure it goes via
-paravirt_ops, which allows for more efficient cross-cpu tlb
-flushes than a plain IPI.
-
-Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
-
-diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
-index 14c5af4..2d112f9 100644
---- a/arch/x86/mm/tlb.c
-+++ b/arch/x86/mm/tlb.c
-@@ -148,7 +148,13 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
- 		 * BUG();
- 		 */
- 
--	if (f->flush_mm == percpu_read(cpu_tlbstate.active_mm)) {
-+	if (f->flush_mm == NULL) {
-+		/* No mm - flush all kernel and user tlbs */
-+		__flush_tlb_all();
-+		if (percpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY)
-+			leave_mm(cpu);
-+	} else if (f->flush_mm == percpu_read(cpu_tlbstate.active_mm)) {
-+		/* Flushing a specific user mm */
- 		if (percpu_read(cpu_tlbstate.state) == TLBSTATE_OK) {
- 			if (f->flush_va == TLB_FLUSH_ALL)
- 				local_flush_tlb();
-@@ -281,16 +287,15 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long va)
- 	preempt_enable();
- }
- 
--static void do_flush_tlb_all(void *info)
-+void flush_tlb_all(void)
- {
--	unsigned long cpu = smp_processor_id();
-+	preempt_disable();
-+
-+	flush_tlb_others(cpu_online_mask, NULL, TLB_FLUSH_ALL);
- 
- 	__flush_tlb_all();
- 	if (percpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY)
--		leave_mm(cpu);
--}
-+		leave_mm(smp_processor_id());
- 
--void flush_tlb_all(void)
--{
--	on_each_cpu(do_flush_tlb_all, NULL, 1);
-+	preempt_enable();
- }
-diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index 7cadab1..dc83b47 100644
---- a/arch/x86/xen/mmu.c
-+++ b/arch/x86/xen/mmu.c
-@@ -1350,7 +1350,6 @@ static void xen_flush_tlb_others(const struct cpumask *cpus,
- 	struct multicall_space mcs;
- 
- 	BUG_ON(cpumask_empty(cpus));
--	BUG_ON(!mm);
- 
- 	mcs = xen_mc_entry(sizeof(*args));
- 	args = mcs.args;
-
-
-    J
diff --git a/a/content_digest b/N1/content_digest
index c75942a..a6fe674 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -86,78 +86,6 @@
  ">   \n"
  "\n"
  "It's almost safe.  I've got this patch in my tree to tie up the \n"
- "flush_tlb_all loose end, though I won't claim its pretty.\n"
- "\n"
- ">From 5812263a50a27c697a2287b41d4f005804b6b34a Mon Sep 17 00:00:00 2001\n"
- "From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>\n"
- "Date: Tue, 17 Feb 2009 09:44:14 -0800\n"
- "Subject: [PATCH] x86: implement flush_tlb_all in terms of flush_tlb_others\n"
- "\n"
- "Modify flush_tlb_others to take a NULL mm, meaning \"flush user\n"
- "and kernel tlbs\", and implement flush_tlb_all in terms of that.\n"
- "\n"
- "The principle motivation for this is to make sure it goes via\n"
- "paravirt_ops, which allows for more efficient cross-cpu tlb\n"
- "flushes than a plain IPI.\n"
- "\n"
- "Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>\n"
- "\n"
- "diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c\n"
- "index 14c5af4..2d112f9 100644\n"
- "--- a/arch/x86/mm/tlb.c\n"
- "+++ b/arch/x86/mm/tlb.c\n"
- "@@ -148,7 +148,13 @@ void smp_invalidate_interrupt(struct pt_regs *regs)\n"
- " \t\t * BUG();\n"
- " \t\t */\n"
- " \n"
- "-\tif (f->flush_mm == percpu_read(cpu_tlbstate.active_mm)) {\n"
- "+\tif (f->flush_mm == NULL) {\n"
- "+\t\t/* No mm - flush all kernel and user tlbs */\n"
- "+\t\t__flush_tlb_all();\n"
- "+\t\tif (percpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY)\n"
- "+\t\t\tleave_mm(cpu);\n"
- "+\t} else if (f->flush_mm == percpu_read(cpu_tlbstate.active_mm)) {\n"
- "+\t\t/* Flushing a specific user mm */\n"
- " \t\tif (percpu_read(cpu_tlbstate.state) == TLBSTATE_OK) {\n"
- " \t\t\tif (f->flush_va == TLB_FLUSH_ALL)\n"
- " \t\t\t\tlocal_flush_tlb();\n"
- "@@ -281,16 +287,15 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long va)\n"
- " \tpreempt_enable();\n"
- " }\n"
- " \n"
- "-static void do_flush_tlb_all(void *info)\n"
- "+void flush_tlb_all(void)\n"
- " {\n"
- "-\tunsigned long cpu = smp_processor_id();\n"
- "+\tpreempt_disable();\n"
- "+\n"
- "+\tflush_tlb_others(cpu_online_mask, NULL, TLB_FLUSH_ALL);\n"
- " \n"
- " \t__flush_tlb_all();\n"
- " \tif (percpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY)\n"
- "-\t\tleave_mm(cpu);\n"
- "-}\n"
- "+\t\tleave_mm(smp_processor_id());\n"
- " \n"
- "-void flush_tlb_all(void)\n"
- "-{\n"
- "-\ton_each_cpu(do_flush_tlb_all, NULL, 1);\n"
- "+\tpreempt_enable();\n"
- " }\n"
- "diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c\n"
- "index 7cadab1..dc83b47 100644\n"
- "--- a/arch/x86/xen/mmu.c\n"
- "+++ b/arch/x86/xen/mmu.c\n"
- "@@ -1350,7 +1350,6 @@ static void xen_flush_tlb_others(const struct cpumask *cpus,\n"
- " \tstruct multicall_space mcs;\n"
- " \n"
- " \tBUG_ON(cpumask_empty(cpus));\n"
- "-\tBUG_ON(!mm);\n"
- " \n"
- " \tmcs = xen_mc_entry(sizeof(*args));\n"
- " \targs = mcs.args;\n"
- "\n"
- "\n"
-     J
+ flush_tlb_all loose end, though I won't claim its pretty.
 
-13778b4705fb8193bd6460f9fa5a5385f8c46ee47ae98f2f6d3846214a398f81
+89ca68df648aa8631feb1c4fbaa25ad2a22504182af5874afb346700c4ecf079

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.