Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/sparc/sparc Shave some code off xcall().
details: https://anonhg.NetBSD.org/src/rev/a9c23b490893
branches: trunk
changeset: 542180:a9c23b490893
user: pk <pk%NetBSD.org@localhost>
date: Thu Jan 23 14:54:33 2003 +0000
description:
Shave some code off xcall().
diffstat:
sys/arch/sparc/sparc/cpu.c | 41 ++++++++++++++++-------------------------
1 files changed, 16 insertions(+), 25 deletions(-)
diffs (97 lines):
diff -r a94dea511cb4 -r a9c23b490893 sys/arch/sparc/sparc/cpu.c
--- a/sys/arch/sparc/sparc/cpu.c Thu Jan 23 12:48:53 2003 +0000
+++ b/sys/arch/sparc/sparc/cpu.c Thu Jan 23 14:54:33 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.c,v 1.171 2003/01/23 11:50:50 pk Exp $ */
+/* $NetBSD: cpu.c,v 1.172 2003/01/23 14:54:33 pk Exp $ */
/*
* Copyright (c) 1996
@@ -645,17 +645,21 @@
int arg0, arg1, arg2, arg3;
u_int cpuset;
{
- int s, n, i, done;
+ int s, n, i, done, callself, mybit;
volatile struct xpmsg_func *p;
/* XXX - note p->retval is probably no longer useful */
+ mybit = (1 << cpuinfo.ci_cpuid);
+ callself = func && (cpuset & mybit) != 0;
+ cpuset &= ~mybit;
+
/*
* If no cpus are configured yet, just call ourselves.
*/
if (cpus == NULL) {
p = &cpuinfo.msg.u.xpmsg_func;
- if (func && (cpuset & (1 << cpuinfo.ci_cpuid)) != 0)
+ if (callself)
p->retval = (*func)(arg0, arg1, arg2, arg3);
return;
}
@@ -681,10 +685,7 @@
for (n = 0; n < ncpu; n++) {
struct cpu_info *cpi = cpus[n];
- if (CPU_NOTREADY(cpi))
- continue;
-
- if ((cpuset & (1 << cpi->ci_cpuid)) == 0)
+ if (cpi == NULL || (cpuset & (1 << cpi->ci_cpuid)) == 0)
continue;
cpi->msg.tag = XPMSG_FUNC;
@@ -702,7 +703,7 @@
* Second, call ourselves.
*/
p = &cpuinfo.msg.u.xpmsg_func;
- if (func && (cpuset & (1 << cpuinfo.ci_cpuid)) != 0)
+ if (callself)
p->retval = (*func)(arg0, arg1, arg2, arg3);
/*
@@ -716,35 +717,25 @@
if (--i < 0) {
printf_nolog("xcall(cpu%d,%p): couldn't ping cpus:",
cpu_number(), func);
- break;
}
done = 1;
for (n = 0; n < ncpu; n++) {
struct cpu_info *cpi = cpus[n];
- if (CPU_NOTREADY(cpi))
- continue;
- if ((cpuset & (1 << cpi->ci_cpuid)) == 0)
+ if (cpi == NULL || (cpuset & (1 << cpi->ci_cpuid)) == 0)
continue;
if ((cpi->flags & CPUFLG_GOTMSG) == 0) {
- done = 0;
- break;
+ if (i < 0) {
+ printf_nolog(" cpu%d", cpi->ci_cpuid);
+ } else {
+ done = 0;
+ break;
+ }
}
}
}
- for (n = 0; n < ncpu; n++) {
- struct cpu_info *cpi = cpus[n];
-
- if (CPU_NOTREADY(cpi))
- continue;
- if ((cpuset & (1 << cpi->ci_cpuid)) == 0)
- continue;
-
- if ((cpi->flags & CPUFLG_GOTMSG) == 0)
- printf_nolog(" cpu%d", cpi->ci_cpuid);
- }
if (!done)
printf_nolog("\n");
Home |
Main Index |
Thread Index |
Old Index