From owner-svn-src-projects@FreeBSD.ORG Tue Jan 31 15:48:33 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D3125106564A; Tue, 31 Jan 2012 15:48:33 +0000 (UTC) (envelope-from gber@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C23EB8FC13; Tue, 31 Jan 2012 15:48:33 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q0VFmX7V042969; Tue, 31 Jan 2012 15:48:33 GMT (envelope-from gber@svn.freebsd.org) Received: (from gber@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q0VFmXVZ042967; Tue, 31 Jan 2012 15:48:33 GMT (envelope-from gber@svn.freebsd.org) Message-Id: <201201311548.q0VFmXVZ042967@svn.freebsd.org> From: Grzegorz Bernacki Date: Tue, 31 Jan 2012 15:48:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r230821 - projects/armv6/sys/arm/arm X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Jan 2012 15:48:33 -0000 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);