aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/cpu/perf_event.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/cpu/perf_event.c')
-rw-r--r--arch/x86/kernel/cpu/perf_event.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 4a4d191f9492..8af28caeafc1 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1571,12 +1571,6 @@ const struct pmu *hw_perf_event_init(struct perf_event *event)
1571 * callchain support 1571 * callchain support
1572 */ 1572 */
1573 1573
1574static inline
1575void callchain_store(struct perf_callchain_entry *entry, u64 ip)
1576{
1577 if (entry->nr < PERF_MAX_STACK_DEPTH)
1578 entry->ip[entry->nr++] = ip;
1579}
1580 1574
1581static DEFINE_PER_CPU(struct perf_callchain_entry, pmc_irq_entry); 1575static DEFINE_PER_CPU(struct perf_callchain_entry, pmc_irq_entry);
1582static DEFINE_PER_CPU(struct perf_callchain_entry, pmc_nmi_entry); 1576static DEFINE_PER_CPU(struct perf_callchain_entry, pmc_nmi_entry);
@@ -1602,7 +1596,7 @@ static void backtrace_address(void *data, unsigned long addr, int reliable)
1602{ 1596{
1603 struct perf_callchain_entry *entry = data; 1597 struct perf_callchain_entry *entry = data;
1604 1598
1605 callchain_store(entry, addr); 1599 perf_callchain_store(entry, addr);
1606} 1600}
1607 1601
1608static const struct stacktrace_ops backtrace_ops = { 1602static const struct stacktrace_ops backtrace_ops = {
@@ -1616,8 +1610,8 @@ static const struct stacktrace_ops backtrace_ops = {
1616static void 1610static void
1617perf_callchain_kernel(struct pt_regs *regs, struct perf_callchain_entry *entry) 1611perf_callchain_kernel(struct pt_regs *regs, struct perf_callchain_entry *entry)
1618{ 1612{
1619 callchain_store(entry, PERF_CONTEXT_KERNEL); 1613 perf_callchain_store(entry, PERF_CONTEXT_KERNEL);
1620 callchain_store(entry, regs->ip); 1614 perf_callchain_store(entry, regs->ip);
1621 1615
1622 dump_trace(NULL, regs, NULL, regs->bp, &backtrace_ops, entry); 1616 dump_trace(NULL, regs, NULL, regs->bp, &backtrace_ops, entry);
1623} 1617}
@@ -1646,7 +1640,7 @@ perf_callchain_user32(struct pt_regs *regs, struct perf_callchain_entry *entry)
1646 if (fp < compat_ptr(regs->sp)) 1640 if (fp < compat_ptr(regs->sp))
1647 break; 1641 break;
1648 1642
1649 callchain_store(entry, frame.return_address); 1643 perf_callchain_store(entry, frame.return_address);
1650 fp = compat_ptr(frame.next_frame); 1644 fp = compat_ptr(frame.next_frame);
1651 } 1645 }
1652 return 1; 1646 return 1;
@@ -1670,8 +1664,8 @@ perf_callchain_user(struct pt_regs *regs, struct perf_callchain_entry *entry)
1670 1664
1671 fp = (void __user *)regs->bp; 1665 fp = (void __user *)regs->bp;
1672 1666
1673 callchain_store(entry, PERF_CONTEXT_USER); 1667 perf_callchain_store(entry, PERF_CONTEXT_USER);
1674 callchain_store(entry, regs->ip); 1668 perf_callchain_store(entry, regs->ip);
1675 1669
1676 if (perf_callchain_user32(regs, entry)) 1670 if (perf_callchain_user32(regs, entry))
1677 return; 1671 return;
@@ -1688,7 +1682,7 @@ perf_callchain_user(struct pt_regs *regs, struct perf_callchain_entry *entry)
1688 if ((unsigned long)fp < regs->sp) 1682 if ((unsigned long)fp < regs->sp)
1689 break; 1683 break;
1690 1684
1691 callchain_store(entry, frame.return_address); 1685 perf_callchain_store(entry, frame.return_address);
1692 fp = frame.next_frame; 1686 fp = frame.next_frame;
1693 } 1687 }
1694} 1688}