diff options
Diffstat (limited to 'sys/kern/kern_clock.c')
-rw-r--r-- | sys/kern/kern_clock.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c index fdc1302..57dd632 100644 --- a/sys/kern/kern_clock.c +++ b/sys/kern/kern_clock.c @@ -74,6 +74,8 @@ __FBSDID("$FreeBSD$"); #ifdef HWPMC_HOOKS #include <sys/pmckern.h> +PMC_SOFT_DEFINE( , , clock, hard); +PMC_SOFT_DEFINE( , , clock, stat); #endif #ifdef DEVICE_POLLING @@ -446,9 +448,11 @@ hardclock_cpu(int usermode) td->td_flags |= flags; thread_unlock(td); -#ifdef HWPMC_HOOKS +#ifdef HWPMC_HOOKS if (PMC_CPU_HAS_SAMPLES(PCPU_GET(cpuid))) PMC_CALL_HOOK_UNLOCKED(curthread, PMC_FN_DO_SAMPLES, NULL); + if (td->td_intr_frame != NULL) + PMC_SOFT_CALL_TF( , , clock, hard, td->td_intr_frame); #endif callout_tick(); } @@ -537,6 +541,8 @@ hardclock_cnt(int cnt, int usermode) #ifdef HWPMC_HOOKS if (PMC_CPU_HAS_SAMPLES(PCPU_GET(cpuid))) PMC_CALL_HOOK_UNLOCKED(curthread, PMC_FN_DO_SAMPLES, NULL); + if (td->td_intr_frame != NULL) + PMC_SOFT_CALL_TF( , , clock, hard, td->td_intr_frame); #endif callout_tick(); /* We are in charge to handle this tick duty. */ @@ -758,6 +764,10 @@ statclock_cnt(int cnt, int usermode) for ( ; cnt > 0; cnt--) sched_clock(td); thread_unlock(td); +#ifdef HWPMC_HOOKS + if (td->td_intr_frame != NULL) + PMC_SOFT_CALL_TF( , , clock, stat, td->td_intr_frame); +#endif } void |