Mercurial > illumos > illumos-gate
changeset 12999:9e5c3f16523e
6965789 Migrated domain hangs if it has cpus that are offline, faulted or spare.
author | Haik Aftandilian <Haik.Aftandilian@Oracle.COM> |
---|---|
date | Mon, 02 Aug 2010 12:21:53 -0700 |
parents | 04c3fb904c79 |
children | 28d31e0a7784 |
files | usr/src/uts/sun4v/os/suspend.c |
diffstat | 1 files changed, 7 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/sun4v/os/suspend.c Mon Aug 02 10:54:24 2010 -0700 +++ b/usr/src/uts/sun4v/os/suspend.c Mon Aug 02 12:21:53 2010 -0700 @@ -385,13 +385,16 @@ * so while CPUs are paused, call pg_cpu_inactive and swap in the * bootstrap PG structure saving the original PG structure to be * fini'd afterwards. This prevents the dispatcher from encountering - * PGs in which all CPUs are inactive. + * PGs in which all CPUs are inactive. Offline CPUs are already + * inactive in their PGs and shouldn't be reactivated, so we must + * not call pg_cpu_inactive or pg_cpu_active for those CPUs. */ pause_cpus(NULL); for (id = 0; id < NCPU; id++) { if ((cp = cpu_get(id)) == NULL) continue; - pg_cpu_inactive(cp); + if ((cp->cpu_flags & CPU_OFFLINE) == 0) + pg_cpu_inactive(cp); pgps[id] = cp->cpu_pg; pg_cpu_bootstrap(cp); } @@ -432,7 +435,8 @@ if ((cp = cpu_get(id)) == NULL) continue; cp->cpu_pg = pgps[id]; - pg_cpu_active(cp); + if ((cp->cpu_flags & CPU_OFFLINE) == 0) + pg_cpu_active(cp); } start_cpus();