6908683 cooperative guest migration panic in cmt_balance
authorHaik Aftandilian <Haik.Aftandilian@Sun.COM>
Fri, 26 Mar 2010 14:31:07 -0700
changeset 12013 a41a3263e845
parent 12012 32b94791f957
child 12014 abaacd7b1365
6908683 cooperative guest migration panic in cmt_balance
usr/src/uts/sun4v/os/mach_mp_startup.c
usr/src/uts/sun4v/os/mpo.c
usr/src/uts/sun4v/os/suspend.c
usr/src/uts/sun4v/sys/mpo.h
--- a/usr/src/uts/sun4v/os/mach_mp_startup.c	Fri Mar 26 14:22:56 2010 -0700
+++ b/usr/src/uts/sun4v/os/mach_mp_startup.c	Fri Mar 26 14:31:07 2010 -0700
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -207,7 +207,7 @@
 
 	kmem_free(listp, listsz);
 
-	mpo_cpu_add(cpuid);
+	mpo_cpu_add(mdp, cpuid);
 
 	/*
 	 * Note: uses cpu_lock to protect cpunodes
--- a/usr/src/uts/sun4v/os/mpo.c	Fri Mar 26 14:22:56 2010 -0700
+++ b/usr/src/uts/sun4v/os/mpo.c	Fri Mar 26 14:31:07 2010 -0700
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -382,9 +382,8 @@
 
 /* Called when DR'ing in a CPU */
 void
-mpo_cpu_add(int cpuid)
+mpo_cpu_add(md_t *md, int cpuid)
 {
-	md_t *md;
 	mde_cookie_t cpunode;
 
 	int i;
@@ -392,8 +391,6 @@
 	if (n_lgrpnodes <= 0)
 		return;
 
-	md = md_get_handle();
-
 	if (md == NULL)
 		goto add_fail;
 
@@ -409,7 +406,6 @@
 	mpo_cpu[cpuid].home = mpo_lgroup[i].addr_match >> home_mask_shift;
 	mpo_lgroup[i].ncpu++;
 	mpo_update_tunables();
-	(void) md_fini_handle(md);
 	return;
 add_fail:
 	panic("mpo_cpu_add: Cannot read MD");
--- a/usr/src/uts/sun4v/os/suspend.c	Fri Mar 26 14:22:56 2010 -0700
+++ b/usr/src/uts/sun4v/os/suspend.c	Fri Mar 26 14:31:07 2010 -0700
@@ -44,6 +44,7 @@
 #include <sys/sunddi.h>
 #include <sys/cpupart.h>
 #include <sys/hsvc.h>
+#include <sys/mpo.h>
 #include <vm/hat_sfmmu.h>
 
 /*
@@ -295,6 +296,7 @@
 		if ((cp = cpu_get(id)) == NULL)
 			continue;
 		pg_cpu_fini(cp, pgps[id]);
+		mpo_cpu_remove(id);
 	}
 
 	/*
@@ -305,6 +307,7 @@
 	for (id = 0; id < NCPU; id++) {
 		if ((cp = cpu_get(id)) == NULL)
 			continue;
+		mpo_cpu_add(mdp, id);
 		pgps[id] = pg_cpu_init(cp, B_TRUE);
 	}
 
--- a/usr/src/uts/sun4v/sys/mpo.h	Fri Mar 26 14:22:56 2010 -0700
+++ b/usr/src/uts/sun4v/sys/mpo.h	Fri Mar 26 14:31:07 2010 -0700
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -114,7 +114,7 @@
 /* These are used when MPO requires preallocated kvseg32 space */
 extern	caddr_t	mpo_heap32_buf;
 extern	size_t	mpo_heap32_bufsz;
-extern void mpo_cpu_add(int cpuid);
+extern void mpo_cpu_add(md_t *md, int cpuid);
 extern void mpo_cpu_remove(int cpuid);
 
 #ifdef	__cplusplus