2012-11-20 17:07:51

by Thomas Gleixner

[permalink] [raw]
Subject: [GIT pull] perf fixes for 3.7

Linus,

please pull the latest perf-urgent-for-linus git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf-urgent-for-linus

* Fix to lookup the installed breakpoint(s) on the correct cpu
* Two fixes related to header printout (tools)

Thanks,

tglx

------------------>
Michael Neuling (1):
perf, powerpc: Fix hw breakpoints returning -ENOSPC

Namhyung Kim (2):
perf header: Fix numa topology printing
perf tools: Fix strbuf_addf() when the buffer needs to grow


kernel/events/hw_breakpoint.c | 12 +++++++-----
tools/perf/util/header.c | 2 ++
tools/perf/util/strbuf.c | 8 ++++----
3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c
index 9a7b487..fe8a916 100644
--- a/kernel/events/hw_breakpoint.c
+++ b/kernel/events/hw_breakpoint.c
@@ -111,14 +111,16 @@ static unsigned int max_task_bp_pinned(int cpu, enum bp_type_idx type)
* Count the number of breakpoints of the same type and same task.
* The given event must be not on the list.
*/
-static int task_bp_pinned(struct perf_event *bp, enum bp_type_idx type)
+static int task_bp_pinned(int cpu, struct perf_event *bp, enum bp_type_idx type)
{
struct task_struct *tsk = bp->hw.bp_target;
struct perf_event *iter;
int count = 0;

list_for_each_entry(iter, &bp_task_head, hw.bp_list) {
- if (iter->hw.bp_target == tsk && find_slot_idx(iter) == type)
+ if (iter->hw.bp_target == tsk &&
+ find_slot_idx(iter) == type &&
+ cpu == iter->cpu)
count += hw_breakpoint_weight(iter);
}

@@ -141,7 +143,7 @@ fetch_bp_busy_slots(struct bp_busy_slots *slots, struct perf_event *bp,
if (!tsk)
slots->pinned += max_task_bp_pinned(cpu, type);
else
- slots->pinned += task_bp_pinned(bp, type);
+ slots->pinned += task_bp_pinned(cpu, bp, type);
slots->flexible = per_cpu(nr_bp_flexible[type], cpu);

return;
@@ -154,7 +156,7 @@ fetch_bp_busy_slots(struct bp_busy_slots *slots, struct perf_event *bp,
if (!tsk)
nr += max_task_bp_pinned(cpu, type);
else
- nr += task_bp_pinned(bp, type);
+ nr += task_bp_pinned(cpu, bp, type);

if (nr > slots->pinned)
slots->pinned = nr;
@@ -188,7 +190,7 @@ static void toggle_bp_task_slot(struct perf_event *bp, int cpu, bool enable,
int old_idx = 0;
int idx = 0;

- old_count = task_bp_pinned(bp, type);
+ old_count = task_bp_pinned(cpu, bp, type);
old_idx = old_count - 1;
idx = old_idx + weight;

diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 7daad23..566b84c 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -1378,6 +1378,8 @@ static void print_numa_topology(struct perf_header *ph, int fd __maybe_unused,

str = tmp + 1;
fprintf(fp, "# node%u cpu list : %s\n", c, str);
+
+ str += strlen(str) + 1;
}
return;
error:
diff --git a/tools/perf/util/strbuf.c b/tools/perf/util/strbuf.c
index 2eeb51b..cfa9068 100644
--- a/tools/perf/util/strbuf.c
+++ b/tools/perf/util/strbuf.c
@@ -90,17 +90,17 @@ void strbuf_addf(struct strbuf *sb, const char *fmt, ...)
if (!strbuf_avail(sb))
strbuf_grow(sb, 64);
va_start(ap, fmt);
- len = vscnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
+ len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
va_end(ap);
if (len < 0)
- die("your vscnprintf is broken");
+ die("your vsnprintf is broken");
if (len > strbuf_avail(sb)) {
strbuf_grow(sb, len);
va_start(ap, fmt);
- len = vscnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
+ len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
va_end(ap);
if (len > strbuf_avail(sb)) {
- die("this should not happen, your snprintf is broken");
+ die("this should not happen, your vsnprintf is broken");
}
}
strbuf_setlen(sb, sb->len + len);


2012-11-20 20:33:52

by Josh Boyer

[permalink] [raw]
Subject: Re: [GIT pull] perf fixes for 3.7

On Tue, Nov 20, 2012 at 12:07 PM, Thomas Gleixner <[email protected]> wrote:
> Linus,
>
> please pull the latest perf-urgent-for-linus git tree from:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf-urgent-for-linus
>
> * Fix to lookup the installed breakpoint(s) on the correct cpu
> * Two fixes related to header printout (tools)
>
> Thanks,
>
> tglx
>
> ------------------>
> Michael Neuling (1):
> perf, powerpc: Fix hw breakpoints returning -ENOSPC
>
> Namhyung Kim (2):
> perf header: Fix numa topology printing
> perf tools: Fix strbuf_addf() when the buffer needs to grow

For perf to build on non-x86 architectures (or at least s390x and ppc64)
I think we still need:

http://thread.gmane.org/gmane.linux.kernel.cross-arch/15943

or at least the last patch in that set, otherwise we get build failures
due to uapi/unistd.h issues. We also need:

http://article.gmane.org/gmane.linux.kernel.cross-arch/15874
http://article.gmane.org/gmane.linux.kernel.cross-arch/15926

because svm.h and vmx.h are x86 only headers.

Those patches above are what I'm carrying to fix the build fixes for
Fedora rawhide kernels and can be found here for those interested:

http://jwboyer.fedorapeople.org/pub/perf-uapi-fixes2.patch

josh