diff options
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event.c | 8 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event.h | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 11 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_uncore.c | 10 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_p6.c | 48 | ||||
| -rw-r--r-- | tools/perf/builtin-trace.c | 22 | ||||
| -rw-r--r-- | tools/perf/util/parse-events.c | 17 | ||||
| -rw-r--r-- | tools/perf/util/probe-event.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/session.c | 6 |
9 files changed, 96 insertions, 29 deletions
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index b88645191fe5..895604f2e916 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c | |||
| @@ -1521,6 +1521,8 @@ static int __init init_hw_perf_events(void) | |||
| 1521 | 1521 | ||
| 1522 | pr_cont("%s PMU driver.\n", x86_pmu.name); | 1522 | pr_cont("%s PMU driver.\n", x86_pmu.name); |
| 1523 | 1523 | ||
| 1524 | x86_pmu.attr_rdpmc = 1; /* enable userspace RDPMC usage by default */ | ||
| 1525 | |||
| 1524 | for (quirk = x86_pmu.quirks; quirk; quirk = quirk->next) | 1526 | for (quirk = x86_pmu.quirks; quirk; quirk = quirk->next) |
| 1525 | quirk->func(); | 1527 | quirk->func(); |
| 1526 | 1528 | ||
| @@ -1534,7 +1536,6 @@ static int __init init_hw_perf_events(void) | |||
| 1534 | __EVENT_CONSTRAINT(0, (1ULL << x86_pmu.num_counters) - 1, | 1536 | __EVENT_CONSTRAINT(0, (1ULL << x86_pmu.num_counters) - 1, |
| 1535 | 0, x86_pmu.num_counters, 0, 0); | 1537 | 0, x86_pmu.num_counters, 0, 0); |
| 1536 | 1538 | ||
| 1537 | x86_pmu.attr_rdpmc = 1; /* enable userspace RDPMC usage by default */ | ||
| 1538 | x86_pmu_format_group.attrs = x86_pmu.format_attrs; | 1539 | x86_pmu_format_group.attrs = x86_pmu.format_attrs; |
| 1539 | 1540 | ||
| 1540 | if (x86_pmu.event_attrs) | 1541 | if (x86_pmu.event_attrs) |
| @@ -1820,9 +1821,12 @@ static ssize_t set_attr_rdpmc(struct device *cdev, | |||
| 1820 | if (ret) | 1821 | if (ret) |
| 1821 | return ret; | 1822 | return ret; |
| 1822 | 1823 | ||
| 1824 | if (x86_pmu.attr_rdpmc_broken) | ||
| 1825 | return -ENOTSUPP; | ||
| 1826 | |||
| 1823 | if (!!val != !!x86_pmu.attr_rdpmc) { | 1827 | if (!!val != !!x86_pmu.attr_rdpmc) { |
| 1824 | x86_pmu.attr_rdpmc = !!val; | 1828 | x86_pmu.attr_rdpmc = !!val; |
| 1825 | smp_call_function(change_rdpmc, (void *)val, 1); | 1829 | on_each_cpu(change_rdpmc, (void *)val, 1); |
| 1826 | } | 1830 | } |
| 1827 | 1831 | ||
| 1828 | return count; | 1832 | return count; |
diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h index c1a861829d81..4972c244d0bc 100644 --- a/arch/x86/kernel/cpu/perf_event.h +++ b/arch/x86/kernel/cpu/perf_event.h | |||
| @@ -409,6 +409,7 @@ struct x86_pmu { | |||
| 409 | /* | 409 | /* |
| 410 | * sysfs attrs | 410 | * sysfs attrs |
| 411 | */ | 411 | */ |
| 412 | int attr_rdpmc_broken; | ||
| 412 | int attr_rdpmc; | 413 | int attr_rdpmc; |
| 413 | struct attribute **format_attrs; | 414 | struct attribute **format_attrs; |
| 414 | struct attribute **event_attrs; | 415 | struct attribute **event_attrs; |
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 0fa4f242f050..aa333d966886 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
| @@ -1361,10 +1361,8 @@ static int intel_pmu_handle_irq(struct pt_regs *regs) | |||
| 1361 | intel_pmu_disable_all(); | 1361 | intel_pmu_disable_all(); |
| 1362 | handled = intel_pmu_drain_bts_buffer(); | 1362 | handled = intel_pmu_drain_bts_buffer(); |
| 1363 | status = intel_pmu_get_status(); | 1363 | status = intel_pmu_get_status(); |
| 1364 | if (!status) { | 1364 | if (!status) |
| 1365 | intel_pmu_enable_all(0); | 1365 | goto done; |
| 1366 | return handled; | ||
| 1367 | } | ||
| 1368 | 1366 | ||
| 1369 | loops = 0; | 1367 | loops = 0; |
| 1370 | again: | 1368 | again: |
| @@ -2310,10 +2308,7 @@ __init int intel_pmu_init(void) | |||
| 2310 | if (version > 1) | 2308 | if (version > 1) |
| 2311 | x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3); | 2309 | x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3); |
| 2312 | 2310 | ||
| 2313 | /* | 2311 | if (boot_cpu_has(X86_FEATURE_PDCM)) { |
| 2314 | * v2 and above have a perf capabilities MSR | ||
| 2315 | */ | ||
| 2316 | if (version > 1) { | ||
| 2317 | u64 capabilities; | 2312 | u64 capabilities; |
| 2318 | 2313 | ||
| 2319 | rdmsrl(MSR_IA32_PERF_CAPABILITIES, capabilities); | 2314 | rdmsrl(MSR_IA32_PERF_CAPABILITIES, capabilities); |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c index 29c248799ced..c88f7f4b03ee 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c | |||
| @@ -501,8 +501,11 @@ static struct extra_reg snbep_uncore_cbox_extra_regs[] = { | |||
| 501 | SNBEP_CBO_EVENT_EXTRA_REG(SNBEP_CBO_PMON_CTL_TID_EN, | 501 | SNBEP_CBO_EVENT_EXTRA_REG(SNBEP_CBO_PMON_CTL_TID_EN, |
| 502 | SNBEP_CBO_PMON_CTL_TID_EN, 0x1), | 502 | SNBEP_CBO_PMON_CTL_TID_EN, 0x1), |
| 503 | SNBEP_CBO_EVENT_EXTRA_REG(0x0334, 0xffff, 0x4), | 503 | SNBEP_CBO_EVENT_EXTRA_REG(0x0334, 0xffff, 0x4), |
| 504 | SNBEP_CBO_EVENT_EXTRA_REG(0x4334, 0xffff, 0x6), | ||
| 504 | SNBEP_CBO_EVENT_EXTRA_REG(0x0534, 0xffff, 0x4), | 505 | SNBEP_CBO_EVENT_EXTRA_REG(0x0534, 0xffff, 0x4), |
| 506 | SNBEP_CBO_EVENT_EXTRA_REG(0x4534, 0xffff, 0x6), | ||
| 505 | SNBEP_CBO_EVENT_EXTRA_REG(0x0934, 0xffff, 0x4), | 507 | SNBEP_CBO_EVENT_EXTRA_REG(0x0934, 0xffff, 0x4), |
| 508 | SNBEP_CBO_EVENT_EXTRA_REG(0x4934, 0xffff, 0x6), | ||
| 506 | SNBEP_CBO_EVENT_EXTRA_REG(0x4134, 0xffff, 0x6), | 509 | SNBEP_CBO_EVENT_EXTRA_REG(0x4134, 0xffff, 0x6), |
| 507 | SNBEP_CBO_EVENT_EXTRA_REG(0x0135, 0xffff, 0x8), | 510 | SNBEP_CBO_EVENT_EXTRA_REG(0x0135, 0xffff, 0x8), |
| 508 | SNBEP_CBO_EVENT_EXTRA_REG(0x0335, 0xffff, 0x8), | 511 | SNBEP_CBO_EVENT_EXTRA_REG(0x0335, 0xffff, 0x8), |
| @@ -1178,10 +1181,15 @@ static struct extra_reg ivt_uncore_cbox_extra_regs[] = { | |||
| 1178 | SNBEP_CBO_EVENT_EXTRA_REG(SNBEP_CBO_PMON_CTL_TID_EN, | 1181 | SNBEP_CBO_EVENT_EXTRA_REG(SNBEP_CBO_PMON_CTL_TID_EN, |
| 1179 | SNBEP_CBO_PMON_CTL_TID_EN, 0x1), | 1182 | SNBEP_CBO_PMON_CTL_TID_EN, 0x1), |
| 1180 | SNBEP_CBO_EVENT_EXTRA_REG(0x1031, 0x10ff, 0x2), | 1183 | SNBEP_CBO_EVENT_EXTRA_REG(0x1031, 0x10ff, 0x2), |
| 1184 | SNBEP_CBO_EVENT_EXTRA_REG(0x1134, 0xffff, 0x4), | ||
| 1185 | SNBEP_CBO_EVENT_EXTRA_REG(0x4134, 0xffff, 0xc), | ||
| 1186 | SNBEP_CBO_EVENT_EXTRA_REG(0x5134, 0xffff, 0xc), | ||
| 1181 | SNBEP_CBO_EVENT_EXTRA_REG(0x0334, 0xffff, 0x4), | 1187 | SNBEP_CBO_EVENT_EXTRA_REG(0x0334, 0xffff, 0x4), |
| 1188 | SNBEP_CBO_EVENT_EXTRA_REG(0x4334, 0xffff, 0xc), | ||
| 1182 | SNBEP_CBO_EVENT_EXTRA_REG(0x0534, 0xffff, 0x4), | 1189 | SNBEP_CBO_EVENT_EXTRA_REG(0x0534, 0xffff, 0x4), |
| 1190 | SNBEP_CBO_EVENT_EXTRA_REG(0x4534, 0xffff, 0xc), | ||
| 1183 | SNBEP_CBO_EVENT_EXTRA_REG(0x0934, 0xffff, 0x4), | 1191 | SNBEP_CBO_EVENT_EXTRA_REG(0x0934, 0xffff, 0x4), |
| 1184 | SNBEP_CBO_EVENT_EXTRA_REG(0x4134, 0xffff, 0xc), | 1192 | SNBEP_CBO_EVENT_EXTRA_REG(0x4934, 0xffff, 0xc), |
| 1185 | SNBEP_CBO_EVENT_EXTRA_REG(0x0135, 0xffff, 0x10), | 1193 | SNBEP_CBO_EVENT_EXTRA_REG(0x0135, 0xffff, 0x10), |
| 1186 | SNBEP_CBO_EVENT_EXTRA_REG(0x0335, 0xffff, 0x10), | 1194 | SNBEP_CBO_EVENT_EXTRA_REG(0x0335, 0xffff, 0x10), |
| 1187 | SNBEP_CBO_EVENT_EXTRA_REG(0x2135, 0xffff, 0x10), | 1195 | SNBEP_CBO_EVENT_EXTRA_REG(0x2135, 0xffff, 0x10), |
diff --git a/arch/x86/kernel/cpu/perf_event_p6.c b/arch/x86/kernel/cpu/perf_event_p6.c index b1e2fe115323..7c1a0c07b607 100644 --- a/arch/x86/kernel/cpu/perf_event_p6.c +++ b/arch/x86/kernel/cpu/perf_event_p6.c | |||
| @@ -231,31 +231,49 @@ static __initconst const struct x86_pmu p6_pmu = { | |||
| 231 | 231 | ||
| 232 | }; | 232 | }; |
| 233 | 233 | ||
| 234 | static __init void p6_pmu_rdpmc_quirk(void) | ||
| 235 | { | ||
| 236 | if (boot_cpu_data.x86_mask < 9) { | ||
| 237 | /* | ||
| 238 | * PPro erratum 26; fixed in stepping 9 and above. | ||
| 239 | */ | ||
| 240 | pr_warn("Userspace RDPMC support disabled due to a CPU erratum\n"); | ||
| 241 | x86_pmu.attr_rdpmc_broken = 1; | ||
| 242 | x86_pmu.attr_rdpmc = 0; | ||
| 243 | } | ||
| 244 | } | ||
| 245 | |||
| 234 | __init int p6_pmu_init(void) | 246 | __init int p6_pmu_init(void) |
| 235 | { | 247 | { |
| 248 | x86_pmu = p6_pmu; | ||
| 249 | |||
| 236 | switch (boot_cpu_data.x86_model) { | 250 | switch (boot_cpu_data.x86_model) { |
| 237 | case 1: | 251 | case 1: /* Pentium Pro */ |
| 238 | case 3: /* Pentium Pro */ | 252 | x86_add_quirk(p6_pmu_rdpmc_quirk); |
| 239 | case 5: | 253 | break; |
| 240 | case 6: /* Pentium II */ | 254 | |
| 241 | case 7: | 255 | case 3: /* Pentium II - Klamath */ |
| 242 | case 8: | 256 | case 5: /* Pentium II - Deschutes */ |
| 243 | case 11: /* Pentium III */ | 257 | case 6: /* Pentium II - Mendocino */ |
| 244 | case 9: | ||
| 245 | case 13: | ||
| 246 | /* Pentium M */ | ||
| 247 | break; | 258 | break; |
| 259 | |||
| 260 | case 7: /* Pentium III - Katmai */ | ||
| 261 | case 8: /* Pentium III - Coppermine */ | ||
| 262 | case 10: /* Pentium III Xeon */ | ||
| 263 | case 11: /* Pentium III - Tualatin */ | ||
| 264 | break; | ||
| 265 | |||
| 266 | case 9: /* Pentium M - Banias */ | ||
| 267 | case 13: /* Pentium M - Dothan */ | ||
| 268 | break; | ||
| 269 | |||
| 248 | default: | 270 | default: |
| 249 | pr_cont("unsupported p6 CPU model %d ", | 271 | pr_cont("unsupported p6 CPU model %d ", boot_cpu_data.x86_model); |
| 250 | boot_cpu_data.x86_model); | ||
| 251 | return -ENODEV; | 272 | return -ENODEV; |
| 252 | } | 273 | } |
| 253 | 274 | ||
| 254 | x86_pmu = p6_pmu; | ||
| 255 | |||
| 256 | memcpy(hw_cache_event_ids, p6_hw_cache_event_ids, | 275 | memcpy(hw_cache_event_ids, p6_hw_cache_event_ids, |
| 257 | sizeof(hw_cache_event_ids)); | 276 | sizeof(hw_cache_event_ids)); |
| 258 | 277 | ||
| 259 | |||
| 260 | return 0; | 278 | return 0; |
| 261 | } | 279 | } |
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 896f27047ed6..6aa6fb6f7bd9 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
| @@ -37,6 +37,10 @@ | |||
| 37 | # define MADV_UNMERGEABLE 13 | 37 | # define MADV_UNMERGEABLE 13 |
| 38 | #endif | 38 | #endif |
| 39 | 39 | ||
| 40 | #ifndef EFD_SEMAPHORE | ||
| 41 | # define EFD_SEMAPHORE 1 | ||
| 42 | #endif | ||
| 43 | |||
| 40 | struct tp_field { | 44 | struct tp_field { |
| 41 | int offset; | 45 | int offset; |
| 42 | union { | 46 | union { |
| @@ -279,6 +283,11 @@ static size_t syscall_arg__scnprintf_strarray(char *bf, size_t size, | |||
| 279 | 283 | ||
| 280 | #define SCA_STRARRAY syscall_arg__scnprintf_strarray | 284 | #define SCA_STRARRAY syscall_arg__scnprintf_strarray |
| 281 | 285 | ||
| 286 | #if defined(__i386__) || defined(__x86_64__) | ||
| 287 | /* | ||
| 288 | * FIXME: Make this available to all arches as soon as the ioctl beautifier | ||
| 289 | * gets rewritten to support all arches. | ||
| 290 | */ | ||
| 282 | static size_t syscall_arg__scnprintf_strhexarray(char *bf, size_t size, | 291 | static size_t syscall_arg__scnprintf_strhexarray(char *bf, size_t size, |
| 283 | struct syscall_arg *arg) | 292 | struct syscall_arg *arg) |
| 284 | { | 293 | { |
| @@ -286,6 +295,7 @@ static size_t syscall_arg__scnprintf_strhexarray(char *bf, size_t size, | |||
| 286 | } | 295 | } |
| 287 | 296 | ||
| 288 | #define SCA_STRHEXARRAY syscall_arg__scnprintf_strhexarray | 297 | #define SCA_STRHEXARRAY syscall_arg__scnprintf_strhexarray |
| 298 | #endif /* defined(__i386__) || defined(__x86_64__) */ | ||
| 289 | 299 | ||
| 290 | static size_t syscall_arg__scnprintf_fd(char *bf, size_t size, | 300 | static size_t syscall_arg__scnprintf_fd(char *bf, size_t size, |
| 291 | struct syscall_arg *arg); | 301 | struct syscall_arg *arg); |
| @@ -839,6 +849,10 @@ static size_t syscall_arg__scnprintf_signum(char *bf, size_t size, struct syscal | |||
| 839 | 849 | ||
| 840 | #define SCA_SIGNUM syscall_arg__scnprintf_signum | 850 | #define SCA_SIGNUM syscall_arg__scnprintf_signum |
| 841 | 851 | ||
| 852 | #if defined(__i386__) || defined(__x86_64__) | ||
| 853 | /* | ||
| 854 | * FIXME: Make this available to all arches. | ||
| 855 | */ | ||
| 842 | #define TCGETS 0x5401 | 856 | #define TCGETS 0x5401 |
| 843 | 857 | ||
| 844 | static const char *tioctls[] = { | 858 | static const char *tioctls[] = { |
| @@ -860,6 +874,7 @@ static const char *tioctls[] = { | |||
| 860 | }; | 874 | }; |
| 861 | 875 | ||
| 862 | static DEFINE_STRARRAY_OFFSET(tioctls, 0x5401); | 876 | static DEFINE_STRARRAY_OFFSET(tioctls, 0x5401); |
| 877 | #endif /* defined(__i386__) || defined(__x86_64__) */ | ||
| 863 | 878 | ||
| 864 | #define STRARRAY(arg, name, array) \ | 879 | #define STRARRAY(arg, name, array) \ |
| 865 | .arg_scnprintf = { [arg] = SCA_STRARRAY, }, \ | 880 | .arg_scnprintf = { [arg] = SCA_STRARRAY, }, \ |
| @@ -941,9 +956,16 @@ static struct syscall_fmt { | |||
| 941 | { .name = "getrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), }, | 956 | { .name = "getrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), }, |
| 942 | { .name = "ioctl", .errmsg = true, | 957 | { .name = "ioctl", .errmsg = true, |
| 943 | .arg_scnprintf = { [0] = SCA_FD, /* fd */ | 958 | .arg_scnprintf = { [0] = SCA_FD, /* fd */ |
| 959 | #if defined(__i386__) || defined(__x86_64__) | ||
| 960 | /* | ||
| 961 | * FIXME: Make this available to all arches. | ||
| 962 | */ | ||
| 944 | [1] = SCA_STRHEXARRAY, /* cmd */ | 963 | [1] = SCA_STRHEXARRAY, /* cmd */ |
| 945 | [2] = SCA_HEX, /* arg */ }, | 964 | [2] = SCA_HEX, /* arg */ }, |
| 946 | .arg_parm = { [1] = &strarray__tioctls, /* cmd */ }, }, | 965 | .arg_parm = { [1] = &strarray__tioctls, /* cmd */ }, }, |
| 966 | #else | ||
| 967 | [2] = SCA_HEX, /* arg */ }, }, | ||
| 968 | #endif | ||
| 947 | { .name = "kill", .errmsg = true, | 969 | { .name = "kill", .errmsg = true, |
| 948 | .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, }, | 970 | .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, }, |
| 949 | { .name = "linkat", .errmsg = true, | 971 | { .name = "linkat", .errmsg = true, |
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index d248fca6d7ed..1e15df10a88c 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
| @@ -1091,12 +1091,12 @@ int is_valid_tracepoint(const char *event_string) | |||
| 1091 | static bool is_event_supported(u8 type, unsigned config) | 1091 | static bool is_event_supported(u8 type, unsigned config) |
| 1092 | { | 1092 | { |
| 1093 | bool ret = true; | 1093 | bool ret = true; |
| 1094 | int open_return; | ||
| 1094 | struct perf_evsel *evsel; | 1095 | struct perf_evsel *evsel; |
| 1095 | struct perf_event_attr attr = { | 1096 | struct perf_event_attr attr = { |
| 1096 | .type = type, | 1097 | .type = type, |
| 1097 | .config = config, | 1098 | .config = config, |
| 1098 | .disabled = 1, | 1099 | .disabled = 1, |
| 1099 | .exclude_kernel = 1, | ||
| 1100 | }; | 1100 | }; |
| 1101 | struct { | 1101 | struct { |
| 1102 | struct thread_map map; | 1102 | struct thread_map map; |
| @@ -1108,7 +1108,20 @@ static bool is_event_supported(u8 type, unsigned config) | |||
| 1108 | 1108 | ||
| 1109 | evsel = perf_evsel__new(&attr); | 1109 | evsel = perf_evsel__new(&attr); |
| 1110 | if (evsel) { | 1110 | if (evsel) { |
| 1111 | ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0; | 1111 | open_return = perf_evsel__open(evsel, NULL, &tmap.map); |
| 1112 | ret = open_return >= 0; | ||
| 1113 | |||
| 1114 | if (open_return == -EACCES) { | ||
| 1115 | /* | ||
| 1116 | * This happens if the paranoid value | ||
| 1117 | * /proc/sys/kernel/perf_event_paranoid is set to 2 | ||
| 1118 | * Re-run with exclude_kernel set; we don't do that | ||
| 1119 | * by default as some ARM machines do not support it. | ||
| 1120 | * | ||
| 1121 | */ | ||
| 1122 | evsel->attr.exclude_kernel = 1; | ||
| 1123 | ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0; | ||
| 1124 | } | ||
| 1112 | perf_evsel__delete(evsel); | 1125 | perf_evsel__delete(evsel); |
| 1113 | } | 1126 | } |
| 1114 | 1127 | ||
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index a8a9b6cd93a8..d8b048c20cde 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
| @@ -336,8 +336,8 @@ static int add_exec_to_probe_trace_events(struct probe_trace_event *tevs, | |||
| 336 | return ret; | 336 | return ret; |
| 337 | 337 | ||
| 338 | for (i = 0; i < ntevs && ret >= 0; i++) { | 338 | for (i = 0; i < ntevs && ret >= 0; i++) { |
| 339 | /* point.address is the addres of point.symbol + point.offset */ | ||
| 339 | offset = tevs[i].point.address - stext; | 340 | offset = tevs[i].point.address - stext; |
| 340 | offset += tevs[i].point.offset; | ||
| 341 | tevs[i].point.offset = 0; | 341 | tevs[i].point.offset = 0; |
| 342 | zfree(&tevs[i].point.symbol); | 342 | zfree(&tevs[i].point.symbol); |
| 343 | ret = e_snprintf(buf, 32, "0x%lx", offset); | 343 | ret = e_snprintf(buf, 32, "0x%lx", offset); |
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 0b39a48e5110..5da6ce74c676 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
| @@ -1008,6 +1008,12 @@ static int perf_session__process_user_event(struct perf_session *session, union | |||
| 1008 | if (err == 0) | 1008 | if (err == 0) |
| 1009 | perf_session__set_id_hdr_size(session); | 1009 | perf_session__set_id_hdr_size(session); |
| 1010 | return err; | 1010 | return err; |
| 1011 | case PERF_RECORD_HEADER_EVENT_TYPE: | ||
| 1012 | /* | ||
| 1013 | * Depreceated, but we need to handle it for sake | ||
| 1014 | * of old data files create in pipe mode. | ||
| 1015 | */ | ||
| 1016 | return 0; | ||
| 1011 | case PERF_RECORD_HEADER_TRACING_DATA: | 1017 | case PERF_RECORD_HEADER_TRACING_DATA: |
| 1012 | /* setup for reading amidst mmap */ | 1018 | /* setup for reading amidst mmap */ |
| 1013 | lseek(fd, file_offset, SEEK_SET); | 1019 | lseek(fd, file_offset, SEEK_SET); |
