In my opinion this is the simplest way to do it, however if you think it should be done other way I can change it.

grzesiek

On 05/06/13 20:45, Adrian Chadd wrote:
.. is this really the only way to do this reliably?



adrian

On 6 May 2013 07:27, Grzegorz Bernacki<g...@freebsd.org>  wrote:
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-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to