diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/i86pc/os/x_call.c | 21 | ||||
-rw-r--r-- | usr/src/uts/i86pc/sys/machcpuvar.h | 12 |
2 files changed, 11 insertions, 22 deletions
diff --git a/usr/src/uts/i86pc/os/x_call.c b/usr/src/uts/i86pc/os/x_call.c index e8bc33c7c0..e89802c463 100644 --- a/usr/src/uts/i86pc/os/x_call.c +++ b/usr/src/uts/i86pc/os/x_call.c @@ -128,7 +128,6 @@ xc_serv(caddr_t arg1, caddr_t arg2) (cpup->cpu_m.xc_pend[X_CALL_MEDPRI])) break; ht_pause(); - return_instr(); } return (DDI_INTR_CLAIMED); } @@ -170,15 +169,11 @@ xc_serv(caddr_t arg1, caddr_t arg2) * Wait for the initiator of the x-call to indicate * that all CPUs involved can proceed. */ - while (cpup->cpu_m.xc_wait[pri]) { + while (cpup->cpu_m.xc_wait[pri]) ht_pause(); - return_instr(); - } - while (cpup->cpu_m.xc_state[pri] != XC_DONE) { + while (cpup->cpu_m.xc_state[pri] != XC_DONE) ht_pause(); - return_instr(); - } /* * Flush the TLB, if that's what is requested. @@ -378,10 +373,8 @@ xc_capture_cpus(cpuset_t set) for (cix = 0; cix < NCPU; cix++) { if (lcx != cix && CPU_IN_SET(set, cix)) { cpup = cpu[cix]; - while (cpup->cpu_m.xc_ack[X_CALL_MEDPRI] == 0) { + while (cpup->cpu_m.xc_ack[X_CALL_MEDPRI] == 0) ht_pause(); - return_instr(); - } cpup->cpu_m.xc_ack[X_CALL_MEDPRI] = 0; } i++; @@ -504,10 +497,8 @@ xc_common( for (cix = 0; cix < NCPU; cix++) { if (lcx != cix && CPU_IN_SET(set, cix)) { cpup = cpu[cix]; - while (cpup->cpu_m.xc_ack[pri] == 0) { + while (cpup->cpu_m.xc_ack[pri] == 0) ht_pause(); - return_instr(); - } cpup->cpu_m.xc_ack[pri] = 0; } } @@ -546,10 +537,8 @@ xc_common( if (lcx != cix && CPU_IN_SET(set, cix)) { cpup = cpu[cix]; if (cpup != NULL && (cpup->cpu_flags & CPU_READY)) { - while (cpup->cpu_m.xc_ack[pri] == 0) { + while (cpup->cpu_m.xc_ack[pri] == 0) ht_pause(); - return_instr(); - } cpup->cpu_m.xc_ack[pri] = 0; } } diff --git a/usr/src/uts/i86pc/sys/machcpuvar.h b/usr/src/uts/i86pc/sys/machcpuvar.h index 085c3249cf..4be0c023d6 100644 --- a/usr/src/uts/i86pc/sys/machcpuvar.h +++ b/usr/src/uts/i86pc/sys/machcpuvar.h @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -56,11 +56,11 @@ struct cpuid_info; /* (deliberately not visible here) */ struct machcpu { /* define all the x_call stuff */ - int xc_pend[X_CALL_LEVELS]; - int xc_wait[X_CALL_LEVELS]; - int xc_ack[X_CALL_LEVELS]; - int xc_state[X_CALL_LEVELS]; - int xc_retval[X_CALL_LEVELS]; + volatile int xc_pend[X_CALL_LEVELS]; + volatile int xc_wait[X_CALL_LEVELS]; + volatile int xc_ack[X_CALL_LEVELS]; + volatile int xc_state[X_CALL_LEVELS]; + volatile int xc_retval[X_CALL_LEVELS]; int mcpu_nodeid; /* node-id */ int mcpu_pri; /* CPU priority */ |