diff options
author | bde <bde@FreeBSD.org> | 2006-10-18 04:48:09 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 2006-10-18 04:48:09 +0000 |
commit | 57b90fd011d2563ca80c7ab82d05b1ea024be3f4 (patch) | |
tree | 224964ba269f457106a9507f477fbfdbe93ee949 /sys | |
parent | 90ebfcc21816f68697583b2914951c5906edf261 (diff) | |
download | FreeBSD-src-57b90fd011d2563ca80c7ab82d05b1ea024be3f4.zip FreeBSD-src-57b90fd011d2563ca80c7ab82d05b1ea024be3f4.tar.gz |
kern_intr.c:
- Count (scheduling of) software interrupts (SWIs) as SWIs, not as
hardware interrupts.
- Don't count (scheduling of) delayed SWIs as interrupts at all, since
in the delayed case it is expected that there are many more scheduling
calls than handling calls. Perhaps all interrupts should be counted
only when they are handled, but it is only counts of delayed SWIs that
shouldn never be combined with the other counts.
subr_trap.c:
- Count (handling of) Asynchronous System Traps (ASTs) as traps, not as
software interrupts.
Before these changes, the counter for SWIs only counted ASTs, and SWIs
weren't counted separately, but a subcounter for ASTs alone is less
needed than for most other exception sources.
4.4BSD-Lite uses the counters for similar things (actually matching
their names) on its main arches (hp300, ..., !i386) where more of the
exceptions are in hardware.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_intr.c | 4 | ||||
-rw-r--r-- | sys/kern/subr_trap.c | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c index 7693954..00d512e 100644 --- a/sys/kern/kern_intr.c +++ b/sys/kern/kern_intr.c @@ -583,8 +583,6 @@ swi_sched(void *cookie, int flags) struct intr_event *ie = ih->ih_event; int error; - PCPU_LAZY_INC(cnt.v_intr); - CTR3(KTR_INTR, "swi_sched: %s %s need=%d", ie->ie_name, ih->ih_name, ih->ih_need); @@ -594,7 +592,9 @@ swi_sched(void *cookie, int flags) * it will execute it the next time it runs. */ atomic_store_rel_int(&ih->ih_need, 1); + if (!(flags & SWI_DELAY)) { + PCPU_LAZY_INC(cnt.v_soft); error = intr_event_schedule_thread(ie); KASSERT(error == 0, ("stray software interrupt")); } diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c index c6af66b..d5c03b7 100644 --- a/sys/kern/subr_trap.c +++ b/sys/kern/subr_trap.c @@ -190,7 +190,7 @@ ast(struct trapframe *framep) #endif td->td_flags &= ~(TDF_ASTPENDING | TDF_NEEDSIGCHK | TDF_NEEDRESCHED | TDF_INTERRUPT); - cnt.v_soft++; + cnt.v_trap++; mtx_unlock_spin(&sched_lock); /* |