diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-25 16:28:08 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-25 16:28:08 -0400 |
| commit | bdc5663fa14de657f24080ee959670d49c8dd094 (patch) | |
| tree | e97fc2caa29655ae5550f2467f56b6590e85a231 | |
| parent | 743a7ecbe8e28d487e2573ec2b7fb1179a443717 (diff) | |
| parent | cf3b425dd8d99e01214515a6754f9e69ecc6dce8 (diff) | |
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar:
"Assorted standalone fixes"
* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
perf/x86/intel: Add model number for Avoton Silvermont
perf: Fix capabilities bitfield compatibility in 'struct perf_event_mmap_page'
perf/x86/intel/uncore: Don't use smp_processor_id() in validate_group()
perf: Update ABI comment
tools lib lk: Uninclude linux/magic.h in debugfs.c
perf tools: Fix old GCC build error in trace-event-parse.c:parse_proc_kallsyms()
perf probe: Fix finder to find lines of given function
perf session: Check for SIGINT in more loops
perf tools: Fix compile with libelf without get_phdrnum
perf tools: Fix buildid cache handling of kallsyms with kcore
perf annotate: Fix objdump line parsing offset validation
perf tools: Fill in new definitions for madvise()/mmap() flags
perf tools: Sharpen the libaudit dependencies test
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event.c | 10 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_uncore.c | 10 | ||||
| -rw-r--r-- | include/uapi/linux/perf_event.h | 15 | ||||
| -rw-r--r-- | kernel/events/core.c | 21 | ||||
| -rw-r--r-- | tools/lib/lk/debugfs.c | 1 | ||||
| -rw-r--r-- | tools/perf/arch/x86/util/tsc.c | 6 | ||||
| -rw-r--r-- | tools/perf/builtin-inject.c | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-report.c | 5 | ||||
| -rw-r--r-- | tools/perf/builtin-script.c | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-trace.c | 17 | ||||
| -rw-r--r-- | tools/perf/config/Makefile | 3 | ||||
| -rw-r--r-- | tools/perf/config/feature-tests.mak | 10 | ||||
| -rw-r--r-- | tools/perf/util/annotate.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/dwarf-aux.c | 19 | ||||
| -rw-r--r-- | tools/perf/util/dwarf-aux.h | 3 | ||||
| -rw-r--r-- | tools/perf/util/header.c | 41 | ||||
| -rw-r--r-- | tools/perf/util/hist.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/probe-finder.c | 12 | ||||
| -rw-r--r-- | tools/perf/util/session.c | 9 | ||||
| -rw-r--r-- | tools/perf/util/session.h | 4 | ||||
| -rw-r--r-- | tools/perf/util/symbol-elf.c | 16 | ||||
| -rw-r--r-- | tools/perf/util/trace-event-parse.c | 2 |
23 files changed, 164 insertions, 49 deletions
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index 8355c84b9729..a9c606bb4945 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c | |||
| @@ -1883,9 +1883,9 @@ static struct pmu pmu = { | |||
| 1883 | 1883 | ||
| 1884 | void arch_perf_update_userpage(struct perf_event_mmap_page *userpg, u64 now) | 1884 | void arch_perf_update_userpage(struct perf_event_mmap_page *userpg, u64 now) |
| 1885 | { | 1885 | { |
| 1886 | userpg->cap_usr_time = 0; | 1886 | userpg->cap_user_time = 0; |
| 1887 | userpg->cap_usr_time_zero = 0; | 1887 | userpg->cap_user_time_zero = 0; |
| 1888 | userpg->cap_usr_rdpmc = x86_pmu.attr_rdpmc; | 1888 | userpg->cap_user_rdpmc = x86_pmu.attr_rdpmc; |
| 1889 | userpg->pmc_width = x86_pmu.cntval_bits; | 1889 | userpg->pmc_width = x86_pmu.cntval_bits; |
| 1890 | 1890 | ||
| 1891 | if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) | 1891 | if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) |
| @@ -1894,13 +1894,13 @@ void arch_perf_update_userpage(struct perf_event_mmap_page *userpg, u64 now) | |||
| 1894 | if (!boot_cpu_has(X86_FEATURE_NONSTOP_TSC)) | 1894 | if (!boot_cpu_has(X86_FEATURE_NONSTOP_TSC)) |
| 1895 | return; | 1895 | return; |
| 1896 | 1896 | ||
| 1897 | userpg->cap_usr_time = 1; | 1897 | userpg->cap_user_time = 1; |
| 1898 | userpg->time_mult = this_cpu_read(cyc2ns); | 1898 | userpg->time_mult = this_cpu_read(cyc2ns); |
| 1899 | userpg->time_shift = CYC2NS_SCALE_FACTOR; | 1899 | userpg->time_shift = CYC2NS_SCALE_FACTOR; |
| 1900 | userpg->time_offset = this_cpu_read(cyc2ns_offset) - now; | 1900 | userpg->time_offset = this_cpu_read(cyc2ns_offset) - now; |
| 1901 | 1901 | ||
| 1902 | if (sched_clock_stable && !check_tsc_disabled()) { | 1902 | if (sched_clock_stable && !check_tsc_disabled()) { |
| 1903 | userpg->cap_usr_time_zero = 1; | 1903 | userpg->cap_user_time_zero = 1; |
| 1904 | userpg->time_zero = this_cpu_read(cyc2ns_offset); | 1904 | userpg->time_zero = this_cpu_read(cyc2ns_offset); |
| 1905 | } | 1905 | } |
| 1906 | } | 1906 | } |
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 9db76c31b3c3..f31a1655d1ff 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
| @@ -2325,6 +2325,7 @@ __init int intel_pmu_init(void) | |||
| 2325 | break; | 2325 | break; |
| 2326 | 2326 | ||
| 2327 | case 55: /* Atom 22nm "Silvermont" */ | 2327 | case 55: /* Atom 22nm "Silvermont" */ |
| 2328 | case 77: /* Avoton "Silvermont" */ | ||
| 2328 | memcpy(hw_cache_event_ids, slm_hw_cache_event_ids, | 2329 | memcpy(hw_cache_event_ids, slm_hw_cache_event_ids, |
| 2329 | sizeof(hw_cache_event_ids)); | 2330 | sizeof(hw_cache_event_ids)); |
| 2330 | memcpy(hw_cache_extra_regs, slm_hw_cache_extra_regs, | 2331 | memcpy(hw_cache_extra_regs, slm_hw_cache_extra_regs, |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c index 8ed44589b0e4..4118f9f68315 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c | |||
| @@ -2706,14 +2706,14 @@ static void uncore_pmu_init_hrtimer(struct intel_uncore_box *box) | |||
| 2706 | box->hrtimer.function = uncore_pmu_hrtimer; | 2706 | box->hrtimer.function = uncore_pmu_hrtimer; |
| 2707 | } | 2707 | } |
| 2708 | 2708 | ||
| 2709 | struct intel_uncore_box *uncore_alloc_box(struct intel_uncore_type *type, int cpu) | 2709 | static struct intel_uncore_box *uncore_alloc_box(struct intel_uncore_type *type, int node) |
| 2710 | { | 2710 | { |
| 2711 | struct intel_uncore_box *box; | 2711 | struct intel_uncore_box *box; |
| 2712 | int i, size; | 2712 | int i, size; |
| 2713 | 2713 | ||
| 2714 | size = sizeof(*box) + type->num_shared_regs * sizeof(struct intel_uncore_extra_reg); | 2714 | size = sizeof(*box) + type->num_shared_regs * sizeof(struct intel_uncore_extra_reg); |
| 2715 | 2715 | ||
| 2716 | box = kzalloc_node(size, GFP_KERNEL, cpu_to_node(cpu)); | 2716 | box = kzalloc_node(size, GFP_KERNEL, node); |
| 2717 | if (!box) | 2717 | if (!box) |
| 2718 | return NULL; | 2718 | return NULL; |
| 2719 | 2719 | ||
| @@ -3031,7 +3031,7 @@ static int uncore_validate_group(struct intel_uncore_pmu *pmu, | |||
| 3031 | struct intel_uncore_box *fake_box; | 3031 | struct intel_uncore_box *fake_box; |
| 3032 | int ret = -EINVAL, n; | 3032 | int ret = -EINVAL, n; |
| 3033 | 3033 | ||
| 3034 | fake_box = uncore_alloc_box(pmu->type, smp_processor_id()); | 3034 | fake_box = uncore_alloc_box(pmu->type, NUMA_NO_NODE); |
| 3035 | if (!fake_box) | 3035 | if (!fake_box) |
| 3036 | return -ENOMEM; | 3036 | return -ENOMEM; |
| 3037 | 3037 | ||
| @@ -3294,7 +3294,7 @@ static int uncore_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id | |||
| 3294 | } | 3294 | } |
| 3295 | 3295 | ||
| 3296 | type = pci_uncores[UNCORE_PCI_DEV_TYPE(id->driver_data)]; | 3296 | type = pci_uncores[UNCORE_PCI_DEV_TYPE(id->driver_data)]; |
| 3297 | box = uncore_alloc_box(type, 0); | 3297 | box = uncore_alloc_box(type, NUMA_NO_NODE); |
| 3298 | if (!box) | 3298 | if (!box) |
| 3299 | return -ENOMEM; | 3299 | return -ENOMEM; |
| 3300 | 3300 | ||
| @@ -3499,7 +3499,7 @@ static int uncore_cpu_prepare(int cpu, int phys_id) | |||
| 3499 | if (pmu->func_id < 0) | 3499 | if (pmu->func_id < 0) |
| 3500 | pmu->func_id = j; | 3500 | pmu->func_id = j; |
| 3501 | 3501 | ||
| 3502 | box = uncore_alloc_box(type, cpu); | 3502 | box = uncore_alloc_box(type, cpu_to_node(cpu)); |
| 3503 | if (!box) | 3503 | if (!box) |
| 3504 | return -ENOMEM; | 3504 | return -ENOMEM; |
| 3505 | 3505 | ||
diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h index 40a1fb807396..009a655a5d35 100644 --- a/include/uapi/linux/perf_event.h +++ b/include/uapi/linux/perf_event.h | |||
| @@ -380,10 +380,13 @@ struct perf_event_mmap_page { | |||
| 380 | union { | 380 | union { |
| 381 | __u64 capabilities; | 381 | __u64 capabilities; |
| 382 | struct { | 382 | struct { |
| 383 | __u64 cap_usr_time : 1, | 383 | __u64 cap_bit0 : 1, /* Always 0, deprecated, see commit 860f085b74e9 */ |
| 384 | cap_usr_rdpmc : 1, | 384 | cap_bit0_is_deprecated : 1, /* Always 1, signals that bit 0 is zero */ |
| 385 | cap_usr_time_zero : 1, | 385 | |
| 386 | cap_____res : 61; | 386 | cap_user_rdpmc : 1, /* The RDPMC instruction can be used to read counts */ |
| 387 | cap_user_time : 1, /* The time_* fields are used */ | ||
| 388 | cap_user_time_zero : 1, /* The time_zero field is used */ | ||
| 389 | cap_____res : 59; | ||
| 387 | }; | 390 | }; |
| 388 | }; | 391 | }; |
| 389 | 392 | ||
| @@ -442,12 +445,13 @@ struct perf_event_mmap_page { | |||
| 442 | * ((rem * time_mult) >> time_shift); | 445 | * ((rem * time_mult) >> time_shift); |
| 443 | */ | 446 | */ |
| 444 | __u64 time_zero; | 447 | __u64 time_zero; |
| 448 | __u32 size; /* Header size up to __reserved[] fields. */ | ||
| 445 | 449 | ||
| 446 | /* | 450 | /* |
| 447 | * Hole for extension of the self monitor capabilities | 451 | * Hole for extension of the self monitor capabilities |
| 448 | */ | 452 | */ |
| 449 | 453 | ||
| 450 | __u64 __reserved[119]; /* align to 1k */ | ||
