diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2016-04-20 00:32:15 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2016-04-20 00:32:15 +0200 |
commit | 675fd4eecd75a7156c83bb814ecfdbbcfbf27ea1 (patch) | |
tree | ca1ef6507b938fe491bdf51a2fe6137de52d0f4c /i386 | |
parent | c908225cb5def2c6df3cf889ca458db8b633d395 (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.c | 9 |
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(); |