Print this page
XXXX pass in cpu_pause_func via pause_cpus


 183                 cmn_err(CE_PANIC, "resume_other_cpus: not all cpus resumed");
 184 
 185 }
 186 
 187 /*
 188  * Stop all other cpu's before halting or rebooting. We pause the cpu's
 189  * instead of sending a cross call.
 190  */
 191 void
 192 stop_other_cpus(void)
 193 {
 194         mutex_enter(&cpu_lock);
 195         if (cpu_are_paused) {
 196                 mutex_exit(&cpu_lock);
 197                 return;
 198         }
 199 
 200         if (ncpus > 1)
 201                 intr_redist_all_cpus_shutdown();
 202 
 203         pause_cpus(NULL);
 204         cpu_are_paused = 1;
 205 
 206         mutex_exit(&cpu_lock);
 207 }
 208 
 209 int cpu_quiesce_microsecond_sanity_limit = 60 * 1000000;
 210 
 211 void
 212 mp_cpu_quiesce(cpu_t *cp0)
 213 {
 214 
 215         volatile cpu_t  *cp = (volatile cpu_t *) cp0;
 216         int i, sanity_limit = cpu_quiesce_microsecond_sanity_limit;
 217         int             cpuid = cp->cpu_id;
 218         int             found_intr = 1;
 219         static fn_t     f = "mp_cpu_quiesce";
 220 
 221         ASSERT(CPU->cpu_id != cpuid);
 222         ASSERT(MUTEX_HELD(&cpu_lock));
 223         ASSERT(cp->cpu_flags & CPU_QUIESCED);




 183                 cmn_err(CE_PANIC, "resume_other_cpus: not all cpus resumed");
 184 
 185 }
 186 
 187 /*
 188  * Stop all other cpu's before halting or rebooting. We pause the cpu's
 189  * instead of sending a cross call.
 190  */
 191 void
 192 stop_other_cpus(void)
 193 {
 194         mutex_enter(&cpu_lock);
 195         if (cpu_are_paused) {
 196                 mutex_exit(&cpu_lock);
 197                 return;
 198         }
 199 
 200         if (ncpus > 1)
 201                 intr_redist_all_cpus_shutdown();
 202 
 203         pause_cpus(NULL, NULL);
 204         cpu_are_paused = 1;
 205 
 206         mutex_exit(&cpu_lock);
 207 }
 208 
 209 int cpu_quiesce_microsecond_sanity_limit = 60 * 1000000;
 210 
 211 void
 212 mp_cpu_quiesce(cpu_t *cp0)
 213 {
 214 
 215         volatile cpu_t  *cp = (volatile cpu_t *) cp0;
 216         int i, sanity_limit = cpu_quiesce_microsecond_sanity_limit;
 217         int             cpuid = cp->cpu_id;
 218         int             found_intr = 1;
 219         static fn_t     f = "mp_cpu_quiesce";
 220 
 221         ASSERT(CPU->cpu_id != cpuid);
 222         ASSERT(MUTEX_HELD(&cpu_lock));
 223         ASSERT(cp->cpu_flags & CPU_QUIESCED);