Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 May 2013 14:27:47 +0000 (UTC)
From:      Grzegorz Bernacki <gber@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r250294 - head/sys/arm/arm
Message-ID:  <201305061427.r46ERlbV023243@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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. */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201305061427.r46ERlbV023243>