svn commit: r211220 - in head/sys: amd64/amd64 i386/i386

Attilio Rao attilio at FreeBSD.org
Thu Aug 12 13:46:43 UTC 2010


Author: attilio
Date: Thu Aug 12 13:46:43 2010
New Revision: 211220
URL: http://svn.freebsd.org/changeset/base/211220

Log:
  Revert r211176:
  As long as interrupts are disabled and there is not explicit call to
  sched_add() there can't be any preemption there, thus the calls may be
  consistent.
  
  Reported by:	kib, jhb

Modified:
  head/sys/amd64/amd64/mp_machdep.c
  head/sys/i386/i386/mp_machdep.c

Modified: head/sys/amd64/amd64/mp_machdep.c
==============================================================================
--- head/sys/amd64/amd64/mp_machdep.c	Thu Aug 12 11:01:38 2010	(r211219)
+++ head/sys/amd64/amd64/mp_machdep.c	Thu Aug 12 13:46:43 2010	(r211220)
@@ -1324,10 +1324,8 @@ cpustop_handler(void)
 	cpumask_t cpumask;
 	u_int cpu;
 
-	sched_pin();
 	cpu = PCPU_GET(cpuid);
 	cpumask = PCPU_GET(cpumask);
-	sched_unpin();
 
 	savectx(&stoppcbs[cpu]);
 
@@ -1358,10 +1356,8 @@ cpususpend_handler(void)
 	register_t cr3, rf;
 	u_int cpu;
 
-	sched_pin();
 	cpu = PCPU_GET(cpuid);
 	cpumask = PCPU_GET(cpumask);
-	sched_unpin();
 
 	rf = intr_disable();
 	cr3 = rcr3();
@@ -1542,14 +1538,10 @@ mp_grab_cpu_hlt(void)
 #endif
 	int retval;
 
-#ifdef MP_WATCHDOG
-	sched_pin();
 	mask = PCPU_GET(cpumask);
+#ifdef MP_WATCHDOG
 	cpuid = PCPU_GET(cpuid);
-	sched_unpin();
 	ap_watchdog(cpuid);
-#else
-	mask = PCPU_GET(cpumask);
 #endif
 
 	retval = 0;

Modified: head/sys/i386/i386/mp_machdep.c
==============================================================================
--- head/sys/i386/i386/mp_machdep.c	Thu Aug 12 11:01:38 2010	(r211219)
+++ head/sys/i386/i386/mp_machdep.c	Thu Aug 12 13:46:43 2010	(r211220)
@@ -1411,10 +1411,8 @@ cpustop_handler(void)
 	cpumask_t cpumask;
 	u_int cpu;
 
-	sched_pin();
 	cpu = PCPU_GET(cpuid);
 	cpumask = PCPU_GET(cpumask);
-	sched_unpin();
 
 	savectx(&stoppcbs[cpu]);
 
@@ -1588,14 +1586,10 @@ mp_grab_cpu_hlt(void)
 #endif
 	int retval;
 
-#ifdef MP_WATCHDOG
-	sched_pin();
 	mask = PCPU_GET(cpumask);
+#ifdef MP_WATCHDOG
 	cpuid = PCPU_GET(cpuid);
-	sched_unpin();
 	ap_watchdog(cpuid);
-#else
-	mask = PCPU_GET(cpumask);
 #endif
 
 	retval = 0;


More information about the svn-src-all mailing list