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);
|