svn commit: r276451 - in projects/paravirt/sys: amd64/amd64 amd64/include i386/i386 i386/include

Bryan Venteicher bryanv at FreeBSD.org
Wed Dec 31 06:50:47 UTC 2014


Author: bryanv
Date: Wed Dec 31 06:50:44 2014
New Revision: 276451
URL: https://svnweb.freebsd.org/changeset/base/276451

Log:
  Add CPU operation callback when the CPU is stopped
  
  The KVM clock needs this callback to clear its MSR when the CPU is
  stopped so the host does not continue to write into the shared area.

Modified:
  projects/paravirt/sys/amd64/amd64/mp_machdep.c
  projects/paravirt/sys/amd64/amd64/vm_machdep.c
  projects/paravirt/sys/amd64/include/cpu.h
  projects/paravirt/sys/i386/i386/mp_machdep.c
  projects/paravirt/sys/i386/i386/vm_machdep.c
  projects/paravirt/sys/i386/include/cpu.h

Modified: projects/paravirt/sys/amd64/amd64/mp_machdep.c
==============================================================================
--- projects/paravirt/sys/amd64/amd64/mp_machdep.c	Wed Dec 31 04:54:48 2014	(r276450)
+++ projects/paravirt/sys/amd64/amd64/mp_machdep.c	Wed Dec 31 06:50:44 2014	(r276451)
@@ -1427,6 +1427,9 @@ cpustop_handler(void)
 
 	cpu = PCPU_GET(cpuid);
 
+	if (cpu_ops.cpu_stop)
+		cpu_ops.cpu_stop(0);
+
 	savectx(&stoppcbs[cpu]);
 
 	/* Indicate that we are stopped */
@@ -1439,6 +1442,9 @@ cpustop_handler(void)
 	CPU_CLR_ATOMIC(cpu, &started_cpus);
 	CPU_CLR_ATOMIC(cpu, &stopped_cpus);
 
+	if (cpu_ops.cpu_stop)
+		cpu_ops.cpu_stop(1);
+
 #ifdef DDB
 	amd64_db_resume_dbreg();
 #endif

Modified: projects/paravirt/sys/amd64/amd64/vm_machdep.c
==============================================================================
--- projects/paravirt/sys/amd64/amd64/vm_machdep.c	Wed Dec 31 04:54:48 2014	(r276450)
+++ projects/paravirt/sys/amd64/amd64/vm_machdep.c	Wed Dec 31 06:50:44 2014	(r276451)
@@ -644,6 +644,9 @@ cpu_reset_real()
 	struct region_descriptor null_idt;
 	int b;
 
+	if (cpu_ops.cpu_stop)
+		cpu_ops.cpu_stop(0);
+
 	disable_intr();
 
 	/*

Modified: projects/paravirt/sys/amd64/include/cpu.h
==============================================================================
--- projects/paravirt/sys/amd64/include/cpu.h	Wed Dec 31 04:54:48 2014	(r276450)
+++ projects/paravirt/sys/amd64/include/cpu.h	Wed Dec 31 06:50:44 2014	(r276451)
@@ -63,6 +63,7 @@
 struct cpu_ops {
 	void (*cpu_init)(void);
 	void (*cpu_resume)(void);
+	void (*cpu_stop)(int);
 };
 
 extern struct	cpu_ops cpu_ops;

Modified: projects/paravirt/sys/i386/i386/mp_machdep.c
==============================================================================
--- projects/paravirt/sys/i386/i386/mp_machdep.c	Wed Dec 31 04:54:48 2014	(r276450)
+++ projects/paravirt/sys/i386/i386/mp_machdep.c	Wed Dec 31 06:50:44 2014	(r276451)
@@ -1481,6 +1481,9 @@ cpustop_handler(void)
 
 	cpu = PCPU_GET(cpuid);
 
+	if (cpu_ops.cpu_stop)
+		cpu_ops.cpu_stop(0);
+
 	savectx(&stoppcbs[cpu]);
 
 	/* Indicate that we are stopped */
@@ -1493,6 +1496,9 @@ cpustop_handler(void)
 	CPU_CLR_ATOMIC(cpu, &started_cpus);
 	CPU_CLR_ATOMIC(cpu, &stopped_cpus);
 
+	if (cpu_ops.cpu_stop)
+		cpu_ops.cpu_stop(1);
+
 	if (cpu == 0 && cpustop_restartfunc != NULL) {
 		cpustop_restartfunc();
 		cpustop_restartfunc = NULL;

Modified: projects/paravirt/sys/i386/i386/vm_machdep.c
==============================================================================
--- projects/paravirt/sys/i386/i386/vm_machdep.c	Wed Dec 31 04:54:48 2014	(r276450)
+++ projects/paravirt/sys/i386/i386/vm_machdep.c	Wed Dec 31 06:50:44 2014	(r276451)
@@ -697,6 +697,9 @@ cpu_reset_real()
 	int b;
 #endif
 
+	if (cpu_ops.cpu_stop)
+		cpu_ops.cpu_stop(0);
+
 	disable_intr();
 #ifdef XEN
 	if (smp_processor_id() == 0)

Modified: projects/paravirt/sys/i386/include/cpu.h
==============================================================================
--- projects/paravirt/sys/i386/include/cpu.h	Wed Dec 31 04:54:48 2014	(r276450)
+++ projects/paravirt/sys/i386/include/cpu.h	Wed Dec 31 06:50:44 2014	(r276451)
@@ -63,6 +63,7 @@
 struct cpu_ops {
 	void (*cpu_init)(void);
 	void (*cpu_resume)(void);
+	void (*cpu_stop)(int);
 };
 
 extern struct	cpu_ops cpu_ops;


More information about the svn-src-projects mailing list