summaryrefslogtreecommitdiffstats
path: root/sys/x86
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2010-07-24 10:49:59 +0000
committermav <mav@FreeBSD.org>2010-07-24 10:49:59 +0000
commitcabdb4184822c0a4fa0c8877d5ce0f0c10ad0853 (patch)
tree7ba7067ddb3c232ba7acd0c83bbbd03bd723224a /sys/x86
parentf77703411895765bbe759390e298c10cfe3b4d57 (diff)
downloadFreeBSD-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.c2
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();
}
OpenPOWER on IntegriCloud