Date: Sun, 09 Sep 2001 03:31:48 +0200 From: Tor.Egge@fast.no To: michael_class@gmx.net, michaelc@space.ebiz-hp.com Cc: current@FreeBSD.ORG Subject: Re: boot() called on cpu #1 - hang Message-ID: <200109090131.DAA16278@midten.fast.no> In-Reply-To: Your message of "Sat, 8 Sep 2001 18:21:33 %2B0200 (MEST)" References: <20010908181649.G894-100000@localhost>
next in thread | previous in thread | raw e-mail | index | archive | help
----Next_Part(Sun_Sep__9_03:31:20_2001)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit > Hello, > > on a 5.0-current i386-SMP system of today I am still getting on about > every second reboot the message: > > boot() called on cpu #1 > W Try applying the enclosed patch. - Tor Egge ----Next_Part(Sun_Sep__9_03:31:20_2001)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Index: vm_machdep.c =================================================================== RCS file: /home/ncvs/src/sys/i386/i386/vm_machdep.c,v retrieving revision 1.169 diff -u -r1.169 vm_machdep.c --- vm_machdep.c 4 Sep 2001 08:36:46 -0000 1.169 +++ vm_machdep.c 4 Sep 2001 19:58:38 -0000 @@ -424,8 +433,13 @@ { cpu_reset_proxy_active = 1; + wbinvd(); while (cpu_reset_proxy_active == 1) ; /* Wait for other cpu to see that we've started */ + cpu_reset_proxy_active = 3; + wbinvd(); + while (cpu_reset_proxy_active == 3) + ; /* Wait for other cpu to enable interrupts */ stop_cpus((1<<cpu_reset_proxyid)); printf("cpu_reset_proxy: Stopped CPU %d\n", cpu_reset_proxyid); DELAY(1000000); @@ -463,6 +477,7 @@ cpu_reset_proxyid = PCPU_GET(cpuid); cpustop_restartfunc = cpu_reset_proxy; cpu_reset_proxy_active = 0; + wbinvd(); printf("cpu_reset: Restarting BSP\n"); started_cpus = (1<<0); /* Restart CPU #0 */ @@ -471,9 +486,19 @@ cnt++; /* Wait for BSP to announce restart */ if (cpu_reset_proxy_active == 0) printf("cpu_reset: Failed to restart BSP\n"); - enable_intr(); + disable_intr(); cpu_reset_proxy_active = 2; - + wbinvd(); + cnt = 0; + while (cpu_reset_proxy_active == 2 && cnt < 10000000) + cnt++; /* Wait for BSP to stop APs */ + if (cpu_reset_proxy_active == 2) { + printf("cpu_reset: BSP did not stop APs\n"); + cpu_reset_real(); + } + cpu_reset_proxy_active = 4; + wbinvd(); + enable_intr(); while (1); /* NOTREACHED */ } ----Next_Part(Sun_Sep__9_03:31:20_2001)---- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200109090131.DAA16278>