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>