Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (123 commits) perf: Remove the nmi parameter from the oprofile_perf backend x86, perf: Make copy_from_user_nmi() a library function perf: Remove perf_event_attr::type check x86, perf: P4 PMU - Fix typos in comments and style cleanup perf tools: Make test use the preset debugfs path perf tools: Add automated tests for events parsing perf tools: De-opt the parse_events function perf script: Fix display of IP address for non-callchain path perf tools: Fix endian conversion reading event attr from file header perf tools: Add missing 'node' alias to the hw_cache[] array perf probe: Support adding probes on offline kernel modules perf probe: Add probed module in front of function perf probe: Introduce debuginfo to encapsulate dwarf information perf-probe: Move dwarf library routines to dwarf-aux.{c, h} perf probe: Remove redundant dwarf functions perf probe: Move strtailcmp to string.c perf probe: Rename DIE_FIND_CB_FOUND to DIE_FIND_CB_END tracing/kprobe: Update symbol reference when loading module tracing/kprobes: Support module init function probing kprobes: Return -ENOENT if probe point doesn't exist ...
This commit is contained in:
@@ -527,7 +527,7 @@ handle_associated_event(struct cpu_hw_events *cpuc,
|
||||
if (!mipspmu_event_set_period(event, hwc, idx))
|
||||
return;
|
||||
|
||||
if (perf_event_overflow(event, 0, data, regs))
|
||||
if (perf_event_overflow(event, data, regs))
|
||||
mipspmu->disable_event(idx);
|
||||
}
|
||||
|
||||
|
@@ -377,6 +377,20 @@ static const struct mips_perf_event mipsxxcore_cache_map
|
||||
[C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
},
|
||||
},
|
||||
[C(NODE)] = {
|
||||
[C(OP_READ)] = {
|
||||
[C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
[C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
},
|
||||
[C(OP_WRITE)] = {
|
||||
[C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
[C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
},
|
||||
[C(OP_PREFETCH)] = {
|
||||
[C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
[C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
/* 74K core has completely different cache event map. */
|
||||
@@ -480,6 +494,20 @@ static const struct mips_perf_event mipsxx74Kcore_cache_map
|
||||
[C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
},
|
||||
},
|
||||
[C(NODE)] = {
|
||||
[C(OP_READ)] = {
|
||||
[C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
[C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
},
|
||||
[C(OP_WRITE)] = {
|
||||
[C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
[C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
},
|
||||
[C(OP_PREFETCH)] = {
|
||||
[C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
[C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MIPS_MT_SMP
|
||||
|
@@ -373,18 +373,18 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
|
||||
|
||||
|
||||
#ifdef CONFIG_KALLSYMS
|
||||
/* used by show_backtrace() */
|
||||
unsigned long unwind_stack(struct task_struct *task, unsigned long *sp,
|
||||
unsigned long pc, unsigned long *ra)
|
||||
/* generic stack unwinding function */
|
||||
unsigned long notrace unwind_stack_by_address(unsigned long stack_page,
|
||||
unsigned long *sp,
|
||||
unsigned long pc,
|
||||
unsigned long *ra)
|
||||
{
|
||||
unsigned long stack_page;
|
||||
struct mips_frame_info info;
|
||||
unsigned long size, ofs;
|
||||
int leaf;
|
||||
extern void ret_from_irq(void);
|
||||
extern void ret_from_exception(void);
|
||||
|
||||
stack_page = (unsigned long)task_stack_page(task);
|
||||
if (!stack_page)
|
||||
return 0;
|
||||
|
||||
@@ -443,6 +443,15 @@ unsigned long unwind_stack(struct task_struct *task, unsigned long *sp,
|
||||
*ra = 0;
|
||||
return __kernel_text_address(pc) ? pc : 0;
|
||||
}
|
||||
EXPORT_SYMBOL(unwind_stack_by_address);
|
||||
|
||||
/* used by show_backtrace() */
|
||||
unsigned long unwind_stack(struct task_struct *task, unsigned long *sp,
|
||||
unsigned long pc, unsigned long *ra)
|
||||
{
|
||||
unsigned long stack_page = (unsigned long)task_stack_page(task);
|
||||
return unwind_stack_by_address(stack_page, sp, pc, ra);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@@ -578,12 +578,12 @@ static int simulate_llsc(struct pt_regs *regs, unsigned int opcode)
|
||||
{
|
||||
if ((opcode & OPCODE) == LL) {
|
||||
perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS,
|
||||
1, 0, regs, 0);
|
||||
1, regs, 0);
|
||||
return simulate_ll(regs, opcode);
|
||||
}
|
||||
if ((opcode & OPCODE) == SC) {
|
||||
perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS,
|
||||
1, 0, regs, 0);
|
||||
1, regs, 0);
|
||||
return simulate_sc(regs, opcode);
|
||||
}
|
||||
|
||||
@@ -602,7 +602,7 @@ static int simulate_rdhwr(struct pt_regs *regs, unsigned int opcode)
|
||||
int rd = (opcode & RD) >> 11;
|
||||
int rt = (opcode & RT) >> 16;
|
||||
perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS,
|
||||
1, 0, regs, 0);
|
||||
1, regs, 0);
|
||||
switch (rd) {
|
||||
case 0: /* CPU number */
|
||||
regs->regs[rt] = smp_processor_id();
|
||||
@@ -640,7 +640,7 @@ static int simulate_sync(struct pt_regs *regs, unsigned int opcode)
|
||||
{
|
||||
if ((opcode & OPCODE) == SPEC0 && (opcode & FUNC) == SYNC) {
|
||||
perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS,
|
||||
1, 0, regs, 0);
|
||||
1, regs, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -111,8 +111,7 @@ static void emulate_load_store_insn(struct pt_regs *regs,
|
||||
unsigned long value;
|
||||
unsigned int res;
|
||||
|
||||
perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS,
|
||||
1, 0, regs, 0);
|
||||
perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, 0);
|
||||
|
||||
/*
|
||||
* This load never faults.
|
||||
@@ -517,7 +516,7 @@ asmlinkage void do_ade(struct pt_regs *regs)
|
||||
mm_segment_t seg;
|
||||
|
||||
perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS,
|
||||
1, 0, regs, regs->cp0_badvaddr);
|
||||
1, regs, regs->cp0_badvaddr);
|
||||
/*
|
||||
* Did we catch a fault trying to load an instruction?
|
||||
* Or are we running in MIPS16 mode?
|
||||
|
Reference in New Issue
Block a user