Skip to content

Commit

Permalink
[PARISC] Take into account nullified insn and lock functions for prof…
Browse files Browse the repository at this point in the history
…iling

export profile_pc() symbol - oprofile needs it when built as a module.

Signed-off-by: Grant Grundler <grundler@parisc-linux.org>

Take into account nullified insn and lock functions for profiling

This is needed at the end of functions; it is typical that the return
branch nullifies the next insn, which is in the next function. This
causes profiling data to show up against the "wrong" function.

We also count lock times against the locker. This is consistent with
other architectures.

Signed-off-by: Randolph Chung <tausq@parisc-linux.org>

Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
  • Loading branch information
Randolph Chung authored and Kyle McMartin committed Oct 22, 2005
1 parent 951a015 commit 5cd55b0
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
18 changes: 18 additions & 0 deletions arch/parisc/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,24 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
return IRQ_HANDLED;
}


unsigned long profile_pc(struct pt_regs *regs)
{
unsigned long pc = instruction_pointer(regs);

if (regs->gr[0] & PSW_N)
pc -= 4;

#ifdef CONFIG_SMP
if (in_lock_functions(pc))
pc = regs->gr[2];
#endif

return pc;
}
EXPORT_SYMBOL(profile_pc);


/*** converted from ia64 ***/
/*
* Return the number of micro-seconds that elapsed since the last
Expand Down
2 changes: 1 addition & 1 deletion include/asm-parisc/ptrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ struct pt_regs {
#define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0)
#define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0)
#define instruction_pointer(regs) ((regs)->iaoq[0] & ~3)
#define profile_pc(regs) instruction_pointer(regs)
unsigned long profile_pc(struct pt_regs *);
extern void show_regs(struct pt_regs *);
#endif

Expand Down

0 comments on commit 5cd55b0

Please sign in to comment.