summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/i86pc/os/x_call.c21
-rw-r--r--usr/src/uts/i86pc/sys/machcpuvar.h12
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 */