diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-22 19:44:39 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-22 19:44:39 -0400 |
| commit | 4d4abdcb1dee03a4f9d6d2021622ed07e14dfd17 (patch) | |
| tree | 4ed4c74b70240451065165fda5fb2059f8c6b1e5 /arch/sparc/kernel | |
| parent | 0342cbcfced2ee937d7c8e1c63f3d3082da7c7dc (diff) | |
| parent | 7fcfd1abd6480d3b9ef17f5759c175e036e835cf (diff) | |
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
...
Diffstat (limited to 'arch/sparc/kernel')
| -rw-r--r-- | arch/sparc/kernel/perf_event.c | 44 | ||||
| -rw-r--r-- | arch/sparc/kernel/unaligned_32.c | 4 | ||||
| -rw-r--r-- | arch/sparc/kernel/unaligned_64.c | 12 | ||||
| -rw-r--r-- | arch/sparc/kernel/visemul.c | 2 |
4 files changed, 52 insertions, 10 deletions
diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c index 2cb0e1c001e2..62a034318b18 100644 --- a/arch/sparc/kernel/perf_event.c +++ b/arch/sparc/kernel/perf_event.c | |||
| @@ -246,6 +246,20 @@ static const cache_map_t ultra3_cache_map = { | |||
| 246 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | 246 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, |
| 247 | }, | 247 | }, |
| 248 | }, | 248 | }, |
| 249 | [C(NODE)] = { | ||
| 250 | [C(OP_READ)] = { | ||
| 251 | [C(RESULT_ACCESS)] = { CACHE_OP_UNSUPPORTED }, | ||
| 252 | [C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 253 | }, | ||
| 254 | [ C(OP_WRITE) ] = { | ||
| 255 | [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 256 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 257 | }, | ||
| 258 | [ C(OP_PREFETCH) ] = { | ||
| 259 | [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 260 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 261 | }, | ||
| 262 | }, | ||
| 249 | }; | 263 | }; |
| 250 | 264 | ||
| 251 | static const struct sparc_pmu ultra3_pmu = { | 265 | static const struct sparc_pmu ultra3_pmu = { |
| @@ -361,6 +375,20 @@ static const cache_map_t niagara1_cache_map = { | |||
| 361 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | 375 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, |
| 362 | }, | 376 | }, |
| 363 | }, | 377 | }, |
| 378 | [C(NODE)] = { | ||
| 379 | [C(OP_READ)] = { | ||
| 380 | [C(RESULT_ACCESS)] = { CACHE_OP_UNSUPPORTED }, | ||
| 381 | [C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 382 | }, | ||
| 383 | [ C(OP_WRITE) ] = { | ||
| 384 | [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 385 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 386 | }, | ||
| 387 | [ C(OP_PREFETCH) ] = { | ||
| 388 | [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 389 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 390 | }, | ||
| 391 | }, | ||
| 364 | }; | 392 | }; |
| 365 | 393 | ||
| 366 | static const struct sparc_pmu niagara1_pmu = { | 394 | static const struct sparc_pmu niagara1_pmu = { |
| @@ -473,6 +501,20 @@ static const cache_map_t niagara2_cache_map = { | |||
| 473 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | 501 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, |
| 474 | }, | 502 | }, |
| 475 | }, | 503 | }, |
| 504 | [C(NODE)] = { | ||
| 505 | [C(OP_READ)] = { | ||
| 506 | [C(RESULT_ACCESS)] = { CACHE_OP_UNSUPPORTED }, | ||
| 507 | [C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 508 | }, | ||
| 509 | [ C(OP_WRITE) ] = { | ||
| 510 | [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 511 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 512 | }, | ||
| 513 | [ C(OP_PREFETCH) ] = { | ||
| 514 | [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 515 | [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED }, | ||
| 516 | }, | ||
| 517 | }, | ||
| 476 | }; | 518 | }; |
| 477 | 519 | ||
| 478 | static const struct sparc_pmu niagara2_pmu = { | 520 | static const struct sparc_pmu niagara2_pmu = { |
| @@ -1277,7 +1319,7 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self, | |||
| 1277 | if (!sparc_perf_event_set_period(event, hwc, idx)) | 1319 | if (!sparc_perf_event_set_period(event, hwc, idx)) |
| 1278 | continue; | 1320 | continue; |
| 1279 | 1321 | ||
| 1280 | if (perf_event_overflow(event, 1, &data, regs)) | 1322 | if (perf_event_overflow(event, &data, regs)) |
| 1281 | sparc_pmu_stop(event, 0); | 1323 | sparc_pmu_stop(event, 0); |
| 1282 | } | 1324 | } |
| 1283 | 1325 | ||
diff --git a/arch/sparc/kernel/unaligned_32.c b/arch/sparc/kernel/unaligned_32.c index 4491f4cb2695..7efbb2f9e77f 100644 --- a/arch/sparc/kernel/unaligned_32.c +++ b/arch/sparc/kernel/unaligned_32.c | |||
| @@ -247,7 +247,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn) | |||
| 247 | unsigned long addr = compute_effective_address(regs, insn); | 247 | unsigned long addr = compute_effective_address(regs, insn); |
| 248 | int err; | 248 | int err; |
| 249 | 249 | ||
| 250 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, 0, regs, addr); | 250 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); |
| 251 | switch (dir) { | 251 | switch (dir) { |
| 252 | case load: | 252 | case load: |
| 253 | err = do_int_load(fetch_reg_addr(((insn>>25)&0x1f), | 253 | err = do_int_load(fetch_reg_addr(((insn>>25)&0x1f), |
| @@ -338,7 +338,7 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn) | |||
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | addr = compute_effective_address(regs, insn); | 340 | addr = compute_effective_address(regs, insn); |
| 341 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, 0, regs, addr); | 341 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); |
| 342 | switch(dir) { | 342 | switch(dir) { |
| 343 | case load: | 343 | case load: |
| 344 | err = do_int_load(fetch_reg_addr(((insn>>25)&0x1f), | 344 | err = do_int_load(fetch_reg_addr(((insn>>25)&0x1f), |
diff --git a/arch/sparc/kernel/unaligned_64.c b/arch/sparc/kernel/unaligned_64.c index b2b019ea8caa..35cff1673aa4 100644 --- a/arch/sparc/kernel/unaligned_64.c +++ b/arch/sparc/kernel/unaligned_64.c | |||
| @@ -317,7 +317,7 @@ asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn) | |||
| 317 | 317 | ||
| 318 | addr = compute_effective_address(regs, insn, | 318 | addr = compute_effective_address(regs, insn, |
| 319 | ((insn >> 25) & 0x1f)); | 319 | ((insn >> 25) & 0x1f)); |
| 320 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, 0, regs, addr); | 320 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); |
| 321 | switch (asi) { | 321 | switch (asi) { |
| 322 | case ASI_NL: | 322 | case ASI_NL: |
| 323 | case ASI_AIUPL: | 323 | case ASI_AIUPL: |
| @@ -384,7 +384,7 @@ int handle_popc(u32 insn, struct pt_regs *regs) | |||
| 384 | int ret, i, rd = ((insn >> 25) & 0x1f); | 384 | int ret, i, rd = ((insn >> 25) & 0x1f); |
| 385 | int from_kernel = (regs->tstate & TSTATE_PRIV) != 0; | 385 | int from_kernel = (regs->tstate & TSTATE_PRIV) != 0; |
| 386 | 386 | ||
| 387 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, 0, regs, 0); | 387 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, 0); |
| 388 | if (insn & 0x2000) { | 388 | if (insn & 0x2000) { |
| 389 | maybe_flush_windows(0, 0, rd, from_kernel); | 389 | maybe_flush_windows(0, 0, rd, from_kernel); |
| 390 | value = sign_extend_imm13(insn); | 390 | value = sign_extend_imm13(insn); |
| @@ -431,7 +431,7 @@ int handle_ldf_stq(u32 insn, struct pt_regs *regs) | |||
| 431 | int asi = decode_asi(insn, regs); | 431 | int asi = decode_asi(insn, regs); |
| 432 | int flag = (freg < 32) ? FPRS_DL : FPRS_DU; | 432 | int flag = (freg < 32) ? FPRS_DL : FPRS_DU; |
| 433 | 433 | ||
| 434 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, 0, regs, 0); | 434 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, 0); |
| 435 | 435 | ||
| 436 | save_and_clear_fpu(); | 436 | save_and_clear_fpu(); |
| 437 | current_thread_info()->xfsr[0] &= ~0x1c000; | 437 | current_thread_info()->xfsr[0] &= ~0x1c000; |
| @@ -554,7 +554,7 @@ void handle_ld_nf(u32 insn, struct pt_regs *regs) | |||
| 554 | int from_kernel = (regs->tstate & TSTATE_PRIV) != 0; | 554 | int from_kernel = (regs->tstate & TSTATE_PRIV) != 0; |
| 555 | unsigned long *reg; | 555 | unsigned long *reg; |
| 556 | 556 | ||
| 557 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, 0, regs, 0); | 557 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, 0); |
| 558 | 558 | ||
| 559 | maybe_flush_windows(0, 0, rd, from_kernel); | 559 | maybe_flush_windows(0, 0, rd, from_kernel); |
| 560 | reg = fetch_reg_addr(rd, regs); | 560 | reg = fetch_reg_addr(rd, regs); |
| @@ -586,7 +586,7 @@ void handle_lddfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr | |||
| 586 | 586 | ||
| 587 | if (tstate & TSTATE_PRIV) | 587 | if (tstate & TSTATE_PRIV) |
| 588 | die_if_kernel("lddfmna from kernel", regs); | 588 | die_if_kernel("lddfmna from kernel", regs); |
| 589 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, 0, regs, sfar); | 589 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, sfar); |
| 590 | if (test_thread_flag(TIF_32BIT)) | 590 | if (test_thread_flag(TIF_32BIT)) |
| 591 | pc = (u32)pc; | 591 | pc = (u32)pc; |
| 592 | if (get_user(insn, (u32 __user *) pc) != -EFAULT) { | 592 | if (get_user(insn, (u32 __user *) pc) != -EFAULT) { |
| @@ -647,7 +647,7 @@ void handle_stdfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr | |||
| 647 | 647 | ||
| 648 | if (tstate & TSTATE_PRIV) | 648 | if (tstate & TSTATE_PRIV) |
| 649 | die_if_kernel("stdfmna from kernel", regs); | 649 | die_if_kernel("stdfmna from kernel", regs); |
| 650 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, 0, regs, sfar); | 650 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, sfar); |
| 651 | if (test_thread_flag(TIF_32BIT)) | 651 | if (test_thread_flag(TIF_32BIT)) |
| 652 | pc = (u32)pc; | 652 | pc = (u32)pc; |
| 653 | if (get_user(insn, (u32 __user *) pc) != -EFAULT) { | 653 | if (get_user(insn, (u32 __user *) pc) != -EFAULT) { |
diff --git a/arch/sparc/kernel/visemul.c b/arch/sparc/kernel/visemul.c index 36357717d691..32b626c9d815 100644 --- a/arch/sparc/kernel/visemul.c +++ b/arch/sparc/kernel/visemul.c | |||
| @@ -802,7 +802,7 @@ int vis_emul(struct pt_regs *regs, unsigned int insn) | |||
| 802 | 802 | ||
| 803 | BUG_ON(regs->tstate & TSTATE_PRIV); | 803 | BUG_ON(regs->tstate & TSTATE_PRIV); |
| 804 | 804 | ||
| 805 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, 0, regs, 0); | 805 | perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, 0); |
| 806 | 806 | ||
| 807 | if (test_thread_flag(TIF_32BIT)) | 807 | if (test_thread_flag(TIF_32BIT)) |
| 808 | pc = (u32)pc; | 808 | pc = (u32)pc; |
