diff options
Diffstat (limited to 'sys/kern/sched_ule.c')
-rw-r--r-- | sys/kern/sched_ule.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c index 850f07e..19a40ae 100644 --- a/sys/kern/sched_ule.c +++ b/sys/kern/sched_ule.c @@ -53,6 +53,10 @@ __FBSDID("$FreeBSD$"); #include <sys/ktrace.h> #endif +#ifdef HWPMC_HOOKS +#include <sys/pmckern.h> +#endif + #include <machine/cpu.h> #include <machine/smp.h> @@ -1391,8 +1395,18 @@ sched_switch(struct thread *td, struct thread *newtd, int flags) kseq_load_add(KSEQ_SELF(), newtd->td_kse); } else newtd = choosethread(); - if (td != newtd) + if (td != newtd) { +#ifdef HWPMC_HOOKS + if (PMC_PROC_IS_USING_PMCS(td->td_proc)) + PMC_SWITCH_CONTEXT(td, PMC_FN_CSW_OUT); +#endif cpu_switch(td, newtd); +#ifdef HWPMC_HOOKS + if (PMC_PROC_IS_USING_PMCS(td->td_proc)) + PMC_SWITCH_CONTEXT(td, PMC_FN_CSW_IN); +#endif + } + sched_lock.mtx_lock = (uintptr_t)td; td->td_oncpu = PCPU_GET(cpuid); @@ -1952,6 +1966,13 @@ sched_unbind(struct thread *td) } int +sched_is_bound(struct thread *td) +{ + mtx_assert(&sched_lock, MA_OWNED); + return (td->td_kse->ke_flags & KEF_BOUND); +} + +int sched_load(void) { #ifdef SMP |