Date: Tue, 31 Jan 2012 15:48:33 +0000 (UTC) From: Grzegorz Bernacki <gber@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r230821 - projects/armv6/sys/arm/arm Message-ID: <201201311548.q0VFmXVZ042967@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gber Date: Tue Jan 31 15:48:33 2012 New Revision: 230821 URL: http://svn.freebsd.org/changeset/base/230821 Log: Refactor infinitive loops If additional cores won't signal startup, notification will be sent instead of hangup. Submitted by: Lukasz Plachno Obtained from: Marvell, Semihalf Modified: projects/armv6/sys/arm/arm/mp_machdep.c Modified: projects/armv6/sys/arm/arm/mp_machdep.c ============================================================================== --- projects/armv6/sys/arm/arm/mp_machdep.c Tue Jan 31 15:47:15 2012 (r230820) +++ projects/armv6/sys/arm/arm/mp_machdep.c Tue Jan 31 15:48:33 2012 (r230821) @@ -80,7 +80,7 @@ check_ap(void) { uint32_t ms; - for (ms = 0; ms < 5000; ++ms) { + for (ms = 0; ms < 2000; ++ms) { if ((mp_naps + 1) == mp_ncpus) return (0); /* success */ else @@ -128,6 +128,7 @@ void init_secondary(int cpu) { struct pcpu *pc; + uint32_t loop_counter; cpu_setup(NULL); @@ -172,9 +173,13 @@ init_secondary(int cpu) arm_unmask_irq(0); enable_interrupts(I32_bit); - cpu_dcache_wbinv_all(); - while (smp_started == 0) - cpu_dcache_wbinv_all(); + loop_counter = 0; + while (smp_started == 0) { + DELAY(100); + loop_counter++; + if (loop_counter == 1000) + CTR0(KTR_SMP, "AP still wait for smp_started"); + } /* Start per-CPU event timers. */ cpu_initclocks_ap(); @@ -255,6 +260,7 @@ ipi_handler(void *arg) static void release_aps(void *dummy __unused) { + uint32_t loop_counter; if (mp_ncpus == 1) return; @@ -272,9 +278,13 @@ release_aps(void *dummy __unused) printf("Release APs\n"); - while (smp_started == 0) { - DELAY(5000); + for (loop_counter = 0; loop_counter < 2000; loop_counter++) { + if (smp_started) + return; + DELAY(1000); } + + printf("AP's not started\n"); } SYSINIT(start_aps, SI_SUB_SMP, SI_ORDER_FIRST, release_aps, NULL);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201201311548.q0VFmXVZ042967>