Skip site navigation (1)Skip section navigation (2)
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>