Mercurial > illumos > fmac
changeset 45:43312befee79 onnv_18
backout 6285647: brickifies gate machine
author | dduvall |
---|---|
date | Mon, 20 Jun 2005 22:21:51 -0700 |
parents | 7fa80fa0cfde |
children | 042bf15ebd92 |
files | usr/src/uts/i86pc/os/x_call.c usr/src/uts/i86pc/sys/machcpuvar.h |
diffstat | 2 files changed, 22 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/i86pc/os/x_call.c Mon Jun 20 18:12:33 2005 -0700 +++ b/usr/src/uts/i86pc/os/x_call.c Mon Jun 20 22:21:51 2005 -0700 @@ -128,6 +128,7 @@ (cpup->cpu_m.xc_pend[X_CALL_MEDPRI])) break; ht_pause(); + return_instr(); } return (DDI_INTR_CLAIMED); } @@ -169,11 +170,15 @@ * 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. @@ -373,8 +378,10 @@ 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++; @@ -497,8 +504,10 @@ 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; } } @@ -537,8 +546,10 @@ 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; } }
--- a/usr/src/uts/i86pc/sys/machcpuvar.h Mon Jun 20 18:12:33 2005 -0700 +++ b/usr/src/uts/i86pc/sys/machcpuvar.h Mon Jun 20 22:21:51 2005 -0700 @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -56,11 +56,11 @@ struct machcpu { /* define all the x_call stuff */ - 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 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]; int mcpu_nodeid; /* node-id */ int mcpu_pri; /* CPU priority */