diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-10 12:30:09 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-10 12:30:09 -0400 |
commit | 85ca7886f566ae387a57a37bc0ffab25e3e117b5 (patch) | |
tree | d170966b3352b3463669492648861795aad0fb92 | |
parent | 7c8d20d40f29e7c08332d406d7a65678dece4627 (diff) | |
parent | 16106822b67e0a5eb228aebf47e33d6cad1e91b6 (diff) |
Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
tracing: Fix null pointer deref with SEND_SIG_FORCED
perf: Fix signed comparison in perf_adjust_period()
powerpc/oprofile: fix potential buffer overrun in op_model_cell.c
perf symbols: Set the DSO long name when using symbol_conf.vmlinux_name
-rw-r--r-- | arch/powerpc/oprofile/op_model_cell.c | 2 | ||||
-rw-r--r-- | include/trace/events/signal.h | 3 | ||||
-rw-r--r-- | kernel/perf_event.c | 5 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 8 |
4 files changed, 13 insertions, 5 deletions
diff --git a/arch/powerpc/oprofile/op_model_cell.c b/arch/powerpc/oprofile/op_model_cell.c index 2c9e52267292..7fd90d02d8c6 100644 --- a/arch/powerpc/oprofile/op_model_cell.c +++ b/arch/powerpc/oprofile/op_model_cell.c | |||
@@ -1077,7 +1077,7 @@ static int calculate_lfsr(int n) | |||
1077 | index = ENTRIES-1; | 1077 | index = ENTRIES-1; |
1078 | 1078 | ||
1079 | /* make sure index is valid */ | 1079 | /* make sure index is valid */ |
1080 | if ((index > ENTRIES) || (index < 0)) | 1080 | if ((index >= ENTRIES) || (index < 0)) |
1081 | index = ENTRIES-1; | 1081 | index = ENTRIES-1; |
1082 | 1082 | ||
1083 | return initial_lfsr[index]; | 1083 | return initial_lfsr[index]; |
diff --git a/include/trace/events/signal.h b/include/trace/events/signal.h index 814566c99d29..17df43464df0 100644 --- a/include/trace/events/signal.h +++ b/include/trace/events/signal.h | |||
@@ -10,7 +10,8 @@ | |||
10 | 10 | ||
11 | #define TP_STORE_SIGINFO(__entry, info) \ | 11 | #define TP_STORE_SIGINFO(__entry, info) \ |
12 | do { \ | 12 | do { \ |
13 | if (info == SEND_SIG_NOINFO) { \ | 13 | if (info == SEND_SIG_NOINFO || \ |
14 | info == SEND_SIG_FORCED) { \ | ||
14 | __entry->errno = 0; \ | 15 | __entry->errno = 0; \ |
15 | __entry->code = SI_USER; \ | 16 | __entry->code = SI_USER; \ |
16 | } else if (info == SEND_SIG_PRIV) { \ | 17 | } else if (info == SEND_SIG_PRIV) { \ |
diff --git a/kernel/perf_event.c b/kernel/perf_event.c index 31d6afe92594..ff86c558af4c 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c | |||
@@ -1507,6 +1507,9 @@ do { \ | |||
1507 | divisor = nsec * frequency; | 1507 | divisor = nsec * frequency; |
1508 | } | 1508 | } |
1509 | 1509 | ||
1510 | if (!divisor) | ||
1511 | return dividend; | ||
1512 | |||
1510 | return div64_u64(dividend, divisor); | 1513 | return div64_u64(dividend, divisor); |
1511 | } | 1514 | } |
1512 | 1515 | ||
@@ -1529,7 +1532,7 @@ static int perf_event_start(struct perf_event *event) | |||
1529 | static void perf_adjust_period(struct perf_event *event, u64 nsec, u64 count) | 1532 | static void perf_adjust_period(struct perf_event *event, u64 nsec, u64 count) |
1530 | { | 1533 | { |
1531 | struct hw_perf_event *hwc = &event->hw; | 1534 | struct hw_perf_event *hwc = &event->hw; |
1532 | u64 period, sample_period; | 1535 | s64 period, sample_period; |
1533 | s64 delta; | 1536 | s64 delta; |
1534 | 1537 | ||
1535 | period = perf_calculate_period(event, nsec, count); | 1538 | period = perf_calculate_period(event, nsec, count); |
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 7fd6b151feb5..b63e5713849f 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -1745,7 +1745,12 @@ static int dso__load_kernel_sym(struct dso *self, struct map *map, | |||
1745 | if (symbol_conf.vmlinux_name != NULL) { | 1745 | if (symbol_conf.vmlinux_name != NULL) { |
1746 | err = dso__load_vmlinux(self, map, | 1746 | err = dso__load_vmlinux(self, map, |
1747 | symbol_conf.vmlinux_name, filter); | 1747 | symbol_conf.vmlinux_name, filter); |
1748 | goto out_try_fixup; | 1748 | if (err > 0) { |
1749 | dso__set_long_name(self, | ||
1750 | strdup(symbol_conf.vmlinux_name)); | ||
1751 | goto out_fixup; | ||
1752 | } | ||
1753 | return err; | ||
1749 | } | 1754 | } |
1750 | 1755 | ||
1751 | if (vmlinux_path != NULL) { | 1756 | if (vmlinux_path != NULL) { |
@@ -1806,7 +1811,6 @@ do_kallsyms: | |||
1806 | pr_debug("Using %s for symbols\n", kallsyms_filename); | 1811 | pr_debug("Using %s for symbols\n", kallsyms_filename); |
1807 | free(kallsyms_allocated_filename); | 1812 | free(kallsyms_allocated_filename); |
1808 | 1813 | ||
1809 | out_try_fixup: | ||
1810 | if (err > 0) { | 1814 | if (err > 0) { |
1811 | out_fixup: | 1815 | out_fixup: |
1812 | if (kallsyms_filename != NULL) | 1816 | if (kallsyms_filename != NULL) |