svn commit: r250294 - head/sys/arm/arm

Grzegorz Bernacki gber at FreeBSD.org
Mon May 6 14:27:47 UTC 2013


Author: gber
Date: Mon May  6 14:27:46 2013
New Revision: 250294
URL: http://svnweb.freebsd.org/changeset/base/250294

Log:
  Avoid calling pcpu_init() simultaneously.
  
  pcpu_init() updates queue, so cannot be called by multiple cores
  at the same time
  
  Obtained from:	Semihalf

Modified:
  head/sys/arm/arm/mp_machdep.c

Modified: head/sys/arm/arm/mp_machdep.c
==============================================================================
--- head/sys/arm/arm/mp_machdep.c	Mon May  6 14:12:36 2013	(r250293)
+++ head/sys/arm/arm/mp_machdep.c	Mon May  6 14:27:46 2013	(r250294)
@@ -173,8 +173,15 @@ init_secondary(int cpu)
 
 	pc = &__pcpu[cpu];
 	set_pcpu(pc);
-	pcpu_init(pc, cpu, sizeof(struct pcpu));
 
+	/*
+	 * pcpu_init() updates queue, so it should not be executed in parallel
+	 * on several cores
+	 */
+	while(mp_naps < (cpu - 1))
+		;
+
+	pcpu_init(pc, cpu, sizeof(struct pcpu));
 	dpcpu_init(dpcpu[cpu - 1], cpu);
 
 	/* Provide stack pointers for other processor modes. */


More information about the svn-src-all mailing list