diff options
author | mav <mav@FreeBSD.org> | 2010-07-24 10:49:59 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2010-07-24 10:49:59 +0000 |
commit | cabdb4184822c0a4fa0c8877d5ce0f0c10ad0853 (patch) | |
tree | 7ba7067ddb3c232ba7acd0c83bbbd03bd723224a /sys/x86 | |
parent | f77703411895765bbe759390e298c10cfe3b4d57 (diff) | |
download | FreeBSD-src-cabdb4184822c0a4fa0c8877d5ce0f0c10ad0853.zip FreeBSD-src-cabdb4184822c0a4fa0c8877d5ce0f0c10ad0853.tar.gz |
Increment td->td_intr_nesting_level for LAPIC timer interrupts. Among other
things it hints SCHED_ULE to run clock swi handlers on their native CPUs,
avoiding many unneeded IPI_PREEMPT calls.
Diffstat (limited to 'sys/x86')
-rw-r--r-- | sys/x86/x86/local_apic.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c index 9dba483..7d19ec1 100644 --- a/sys/x86/x86/local_apic.c +++ b/sys/x86/x86/local_apic.c @@ -811,10 +811,12 @@ lapic_handle_timer(struct trapframe *frame) critical_enter(); if (lapic_et.et_active) { td = curthread; + td->td_intr_nesting_level++; oldframe = td->td_intr_frame; td->td_intr_frame = frame; lapic_et.et_event_cb(&lapic_et, lapic_et.et_arg); td->td_intr_frame = oldframe; + td->td_intr_nesting_level--; } critical_exit(); } |