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. */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to