svn commit: r245204 - head/sys/amd64/amd64

Neel Natu neel at FreeBSD.org
Wed Jan 9 02:11:17 UTC 2013


Author: neel
Date: Wed Jan  9 02:11:16 2013
New Revision: 245204
URL: http://svnweb.freebsd.org/changeset/base/245204

Log:
  Add a "pause" to busy wait loops in the cpu reset path.
  
  This should not matter much when running on bare metal but it makes the guest
  more friendly when running inside a virtual machine.
  
  Discussed with:	jhb
  Obtained from:	NetApp

Modified:
  head/sys/amd64/amd64/vm_machdep.c

Modified: head/sys/amd64/amd64/vm_machdep.c
==============================================================================
--- head/sys/amd64/amd64/vm_machdep.c	Wed Jan  9 01:54:17 2013	(r245203)
+++ head/sys/amd64/amd64/vm_machdep.c	Wed Jan  9 02:11:16 2013	(r245204)
@@ -575,7 +575,8 @@ cpu_reset_proxy()
 
 	cpu_reset_proxy_active = 1;
 	while (cpu_reset_proxy_active == 1)
-		;	/* Wait for other cpu to see that we've started */
+		ia32_pause(); /* Wait for other cpu to see that we've started */
+
 	CPU_SETOF(cpu_reset_proxyid, &tcrp);
 	stop_cpus(tcrp);
 	printf("cpu_reset_proxy: Stopped CPU %d\n", cpu_reset_proxyid);
@@ -611,14 +612,17 @@ cpu_reset()
 			wmb();
 
 			cnt = 0;
-			while (cpu_reset_proxy_active == 0 && cnt < 10000000)
+			while (cpu_reset_proxy_active == 0 && cnt < 10000000) {
+				ia32_pause();
 				cnt++;	/* Wait for BSP to announce restart */
+			}
 			if (cpu_reset_proxy_active == 0)
 				printf("cpu_reset: Failed to restart BSP\n");
 			enable_intr();
 			cpu_reset_proxy_active = 2;
 
-			while (1);
+			while (1)
+				ia32_pause();
 			/* NOTREACHED */
 		}
 


More information about the svn-src-all mailing list