svn commit: r223126 - head/sys/sparc64/include

Marius Strobl marius at FreeBSD.org
Wed Jun 15 22:41:55 UTC 2011


Author: marius
Date: Wed Jun 15 22:41:55 2011
New Revision: 223126
URL: http://svn.freebsd.org/changeset/base/223126

Log:
  Don't include curcpu in the mask which is used as the IPI cookie as we
  have to ignore it when sending the IPI anyway. Actually I can't think of
  a good reason why this ever was done that way in the first place as it's
  not even usefull for debugging.
  While at it replace the use of pc_other_cpus as it's slated for deorbit.

Modified:
  head/sys/sparc64/include/smp.h

Modified: head/sys/sparc64/include/smp.h
==============================================================================
--- head/sys/sparc64/include/smp.h	Wed Jun 15 22:15:28 2011	(r223125)
+++ head/sys/sparc64/include/smp.h	Wed Jun 15 22:41:55 2011	(r223126)
@@ -1,5 +1,6 @@
 /*-
  * Copyright (c) 2001 Jake Burkholder.
+ * Copyright (c) 2007 - 2011 Marius Strobl <marius at FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -136,8 +137,11 @@ extern	char tl_ipi_tlb_range_demap[];
 static __inline void
 ipi_all_but_self(u_int ipi)
 {
+	cpuset_t cpus;
 
-	cpu_ipi_selected(PCPU_GET(other_cpus), 0, (u_long)tl_ipi_level, ipi);
+	cpus = all_cpus;
+	CPU_CLR(PCPU_GET(cpuid), &cpus);
+	cpu_ipi_selected(cpus, 0, (u_long)tl_ipi_level, ipi);
 }
 
 static __inline void
@@ -167,8 +171,9 @@ ipi_dcache_page_inval(void *func, vm_pad
 	ica = &ipi_cache_args;
 	mtx_lock_spin(&ipi_mtx);
 	ica->ica_mask = all_cpus;
+	CPU_CLR(PCPU_GET(cpuid), &ica->ica_mask);
 	ica->ica_pa = pa;
-	cpu_ipi_selected(PCPU_GET(other_cpus), 0, (u_long)func, (u_long)ica);
+	cpu_ipi_selected(ica->ica_mask, 0, (u_long)func, (u_long)ica);
 	return (&ica->ica_mask);
 }
 
@@ -183,8 +188,9 @@ ipi_icache_page_inval(void *func, vm_pad
 	ica = &ipi_cache_args;
 	mtx_lock_spin(&ipi_mtx);
 	ica->ica_mask = all_cpus;
+	CPU_CLR(PCPU_GET(cpuid), &ica->ica_mask);
 	ica->ica_pa = pa;
-	cpu_ipi_selected(PCPU_GET(other_cpus), 0, (u_long)func, (u_long)ica);
+	cpu_ipi_selected(ica->ica_mask, 0, (u_long)func, (u_long)ica);
 	return (&ica->ica_mask);
 }
 
@@ -198,8 +204,7 @@ ipi_rd(u_int cpu, void *func, u_long *va
 	sched_pin();
 	ira = &ipi_rd_args;
 	mtx_lock_spin(&ipi_mtx);
-	ira->ira_mask = PCPU_GET(cpumask);
-	CPU_SET(cpu, &ira->ira_mask);
+	CPU_SETOF(cpu, &ira->ira_mask);
 	ira->ira_val = val;
 	cpu_ipi_single(cpu, 0, (u_long)func, (u_long)ira);
 	return (&ira->ira_mask);
@@ -215,7 +220,8 @@ ipi_tlb_context_demap(struct pmap *pm)
 		return (NULL);
 	sched_pin();
 	cpus = pm->pm_active;
-	CPU_AND(&cpus, PCPU_PTR(other_cpus));
+	CPU_AND(&cpus, &all_cpus);
+	CPU_CLR(PCPU_GET(cpuid), &cpus);
 	if (CPU_EMPTY(&cpus)) {
 		sched_unpin();
 		return (NULL);
@@ -223,7 +229,6 @@ ipi_tlb_context_demap(struct pmap *pm)
 	ita = &ipi_tlb_args;
 	mtx_lock_spin(&ipi_mtx);
 	ita->ita_mask = cpus;
-	CPU_OR(&ita->ita_mask, PCPU_PTR(cpumask));
 	ita->ita_pmap = pm;
 	cpu_ipi_selected(cpus, 0, (u_long)tl_ipi_tlb_context_demap,
 	    (u_long)ita);
@@ -240,7 +245,8 @@ ipi_tlb_page_demap(struct pmap *pm, vm_o
 		return (NULL);
 	sched_pin();
 	cpus = pm->pm_active;
-	CPU_AND(&cpus, PCPU_PTR(other_cpus));
+	CPU_AND(&cpus, &all_cpus);
+	CPU_CLR(PCPU_GET(cpuid), &cpus);
 	if (CPU_EMPTY(&cpus)) {
 		sched_unpin();
 		return (NULL);
@@ -248,7 +254,6 @@ ipi_tlb_page_demap(struct pmap *pm, vm_o
 	ita = &ipi_tlb_args;
 	mtx_lock_spin(&ipi_mtx);
 	ita->ita_mask = cpus;
-	CPU_OR(&ita->ita_mask, PCPU_PTR(cpumask));
 	ita->ita_pmap = pm;
 	ita->ita_va = va;
 	cpu_ipi_selected(cpus, 0, (u_long)tl_ipi_tlb_page_demap, (u_long)ita);
@@ -265,7 +270,8 @@ ipi_tlb_range_demap(struct pmap *pm, vm_
 		return (NULL);
 	sched_pin();
 	cpus = pm->pm_active;
-	CPU_AND(&cpus, PCPU_PTR(other_cpus));
+	CPU_AND(&cpus, &all_cpus);
+	CPU_CLR(PCPU_GET(cpuid), &cpus);
 	if (CPU_EMPTY(&cpus)) {
 		sched_unpin();
 		return (NULL);
@@ -273,7 +279,6 @@ ipi_tlb_range_demap(struct pmap *pm, vm_
 	ita = &ipi_tlb_args;
 	mtx_lock_spin(&ipi_mtx);
 	ita->ita_mask = cpus;
-	CPU_OR(&ita->ita_mask, PCPU_PTR(cpumask));
 	ita->ita_pmap = pm;
 	ita->ita_start = start;
 	ita->ita_end = end;
@@ -288,7 +293,6 @@ ipi_wait(void *cookie)
 	volatile cpuset_t *mask;
 
 	if ((mask = cookie) != NULL) {
-		CPU_NAND_ATOMIC(mask, PCPU_PTR(cpumask));
 		while (!CPU_EMPTY(mask))
 			;
 		mtx_unlock_spin(&ipi_mtx);


More information about the svn-src-head mailing list