summaryrefslogtreecommitdiff
path: root/sys/arch/alpha
diff options
context:
space:
mode:
authorArtur Grabowski <art@cvs.openbsd.org>2008-07-18 23:43:32 +0000
committerArtur Grabowski <art@cvs.openbsd.org>2008-07-18 23:43:32 +0000
commitcbf40e0f6a4ee8fde77e05f8b74ca4b989937d38 (patch)
tree761b8494073324eacc2b020b8dcffd3c81afb3ee /sys/arch/alpha
parent7dde4e5a62193339964b0d2205abffd301cc786b (diff)
Add a macro that clears the want_resched flag that need_resched sets.
Right now when mi_switch picks up the same proc, we didn't clear the flag which would mean that every time we service an AST we would attempt a context switch. For some architectures, amd64 being probably the most extreme, that meant attempting to context switch for every trap and interrupt. Now we clear_resched explicitly after every context switch, even if it didn't do anything. Which also allows us to remove some more code in cpu_switchto (not done yet). miod@ ok
Diffstat (limited to 'sys/arch/alpha')
-rw-r--r--sys/arch/alpha/include/cpu.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/arch/alpha/include/cpu.h b/sys/arch/alpha/include/cpu.h
index 5937dbdd0d4..9e393ffc3d6 100644
--- a/sys/arch/alpha/include/cpu.h
+++ b/sys/arch/alpha/include/cpu.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpu.h,v 1.32 2008/06/26 05:42:08 ray Exp $ */
+/* $OpenBSD: cpu.h,v 1.33 2008/07/18 23:43:31 art Exp $ */
/* $NetBSD: cpu.h,v 1.45 2000/08/21 02:03:12 thorpej Exp $ */
/*-
@@ -282,12 +282,14 @@ do { \
ci->ci_want_resched = 1; \
aston(curcpu()); \
} while (/*CONSTCOND*/0)
+#define clear_resched(ci) (ci)->ci_want_resched = 0
#else
#define need_resched(ci) \
do { \
curcpu()->ci_want_resched = 1; \
aston(curcpu()); \
} while (/*CONSTCOND*/0)
+#define clear_resched(ci) curcpu()->ci_want_resched = 0
#endif
/*