diff options
author | jake <jake@FreeBSD.org> | 2003-02-03 17:53:15 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2003-02-03 17:53:15 +0000 |
commit | 6b3763a173b458d3138f8a5ae81d7574349cc99d (patch) | |
tree | 4ac2b707510b8d738855f9fa4a6576e6ded49a77 /sys/ia64 | |
parent | 9689f0580db3e8ffcfba46b99c0b3a370eb9524c (diff) | |
download | FreeBSD-src-6b3763a173b458d3138f8a5ae81d7574349cc99d.zip FreeBSD-src-6b3763a173b458d3138f8a5ae81d7574349cc99d.tar.gz |
Split statclock into statclock and profclock, and made the method for driving
statclock based on profhz when profiling is enabled MD, since most platforms
don't use this anyway. This removes the need for statclock_process, whose
only purpose was to subdivide profhz, and gets the profiling clock running
outside of sched_lock on platforms that implement suswintr.
Also changed the interface for starting and stopping the profiling clock to
do just that, instead of changing the rate of statclock, since they can now
be separate.
Reviewed by: jhb, tmm
Tested on: i386, sparc64
Diffstat (limited to 'sys/ia64')
-rw-r--r-- | sys/ia64/ia64/clock.c | 13 | ||||
-rw-r--r-- | sys/ia64/ia64/interrupt.c | 17 |
2 files changed, 20 insertions, 10 deletions
diff --git a/sys/ia64/ia64/clock.c b/sys/ia64/ia64/clock.c index 41d8dc4..277c14b 100644 --- a/sys/ia64/ia64/clock.c +++ b/sys/ia64/ia64/clock.c @@ -259,12 +259,19 @@ fail: * change after being set up above. Could recalculate intervals here * but that would be a drag. */ + +void +cpu_startprofclock(void) +{ + + /* nothing to do */ +} + void -setstatclockrate(newhz) - int newhz; +cpu_stopprofclock(void) { - /* nothing we can do */ + /* nothing to do */ } /* diff --git a/sys/ia64/ia64/interrupt.c b/sys/ia64/ia64/interrupt.c index 720dbee..bc2d324 100644 --- a/sys/ia64/ia64/interrupt.c +++ b/sys/ia64/ia64/interrupt.c @@ -132,16 +132,19 @@ interrupt(u_int64_t vector, struct trapframe *framep) #endif hardclock((struct clockframe *)framep); /* divide hz (1024) by 8 to get stathz (128) */ - if ((++schedclk2 & 0x7) == 0) + if ((++schedclk2 & 0x7) == 0) { + if (profprocs != 0) + profclock((struct clockframe *)framep); statclock((struct clockframe *)framep); + } #ifdef SMP } else { - mtx_lock_spin(&sched_lock); - hardclock_process(curthread, TRAPF_USERMODE(framep)); - if ((schedclk2 & 0x7) == 0) - statclock_process(curkse, TRAPF_PC(framep), - TRAPF_USERMODE(framep)); - mtx_unlock_spin(&sched_lock); + hardclock_process((struct clockframe *)framep); + if ((schedclk2 & 0x7) == 0) { + if (profprocs != 0) + profclock((struct clockframe *)framep); + statclock((struct clockframe *)framep); + } } #endif critical_exit(); |