summaryrefslogtreecommitdiff
path: root/i386
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2016-04-20 00:32:15 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2016-04-20 00:32:15 +0200
commit675fd4eecd75a7156c83bb814ecfdbbcfbf27ea1 (patch)
treeca1ef6507b938fe491bdf51a2fe6137de52d0f4c /i386
parentc908225cb5def2c6df3cf889ca458db8b633d395 (diff)
Add kernel profiling through sampling
* NEWS: Advertise feature. * configfrac.ac (--enable-kernsample): Add option. * kern/pc_sample.h (take_pc_sample): Add usermode and pc parameter. (take_pc_sample_macro): Take usermode and pc parameters, pass as such to take_pc_sample. * kern/pc_sample.c (take_pc_sample): Use pc parameter when usermode is 1. * kern/mach_clock.c (clock_interrupt): Add pc parameter. Pass usermode and pc to take_pc_sample_macro call. * i386/i386/hardclock.c (hardclock): Pass regs->eip to clock_interrupt call on normal interrupts, NULL on interrupt interrupt. * vm/vm_fault.c (vm_fault_cleanup): Set usermode to 1 and pc to NULL in take_pc_sample_macro call.
Diffstat (limited to 'i386')
-rw-r--r--i386/i386/hardclock.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/i386/i386/hardclock.c b/i386/i386/hardclock.c
index 49ea82cd..0ce6f381 100644
--- a/i386/i386/hardclock.c
+++ b/i386/i386/hardclock.c
@@ -62,18 +62,19 @@ hardclock(iunit, old_ipl, irq, ret_addr, regs)
(regs->efl & EFL_VM) || /* user mode */
((regs->cs & 0x03) != 0), /* user mode */
#if defined(LINUX_DEV)
- FALSE /* ignore SPL0 */
+ FALSE, /* ignore SPL0 */
#else /* LINUX_DEV */
- old_ipl == SPL0 /* base priority */
+ old_ipl == SPL0, /* base priority */
#endif /* LINUX_DEV */
- );
+ regs->eip); /* interrupted eip */
else
/*
* Interrupt from interrupt stack.
*/
clock_interrupt(tick, /* usec per tick */
FALSE, /* kernel mode */
- FALSE); /* not SPL0 */
+ FALSE, /* not SPL0 */
+ NULL); /* interrupted eip */
#ifdef LINUX_DEV
linux_timer_intr();