* [GIT PULL 0/4] perf/core fixes and improvements
@ 2010-08-07 1:34 Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 1/4] perf probe: Fix to copy the type for raw parameters Arnaldo Carvalho de Melo
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2010-08-07 1:34 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Arnaldo Carvalho de Melo, Frederic Weisbecker,
Ingo Molnar, Masami Hiramatsu, Mike Galbraith, Paul Mackerras,
Peter Zijlstra, Stephane Eranian
Hi Ingo,
Please pull from:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 perf/core
Regards,
- Arnaldo
Arnaldo Carvalho de Melo (2):
perf ui: Introduce list_head based generic ui_browser refresh routine
perf ui: Start breaking down newt.c into multiple files
Masami Hiramatsu (2):
perf probe: Fix to copy the type for raw parameters
perf probe: Fix memory leaks in add_perf_probe_events
tools/perf/Makefile | 10 +-
tools/perf/util/include/linux/list.h | 8 +
tools/perf/util/newt.c | 343 +++-------------------------------
tools/perf/util/probe-event.c | 11 +-
tools/perf/util/probe-finder.c | 8 +-
tools/perf/util/ui/browser.c | 313 +++++++++++++++++++++++++++++++
tools/perf/util/ui/browser.h | 43 +++++
7 files changed, 408 insertions(+), 328 deletions(-)
create mode 100644 tools/perf/util/ui/browser.c
create mode 100644 tools/perf/util/ui/browser.h
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/4] perf probe: Fix to copy the type for raw parameters
2010-08-07 1:34 [GIT PULL 0/4] perf/core fixes and improvements Arnaldo Carvalho de Melo
@ 2010-08-07 1:34 ` Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 2/4] perf probe: Fix memory leaks in add_perf_probe_events Arnaldo Carvalho de Melo
` (3 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2010-08-07 1:34 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Masami Hiramatsu, Peter Zijlstra, Paul Mackerras,
Ingo Molnar, Frederic Weisbecker, Arnaldo Carvalho de Melo
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Copy type field if it is for raw parameters.
Without this fix, perf probe drops the type if user passes it
for raw parameters (e.g. %ax:u32 will be converted to %ax).
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
LKML-Reference: <4C577AD8.50808@hitachi.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/probe-finder.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 6c7750d..5251366 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -705,8 +705,12 @@ static int find_variable(Dwarf_Die *sp_die, struct probe_finder *pf)
pf->tvar->value = strdup(pf->pvar->var);
if (pf->tvar->value == NULL)
return -ENOMEM;
- else
- return 0;
+ if (pf->pvar->type) {
+ pf->tvar->type = strdup(pf->pvar->type);
+ if (pf->tvar->type == NULL)
+ return -ENOMEM;
+ }
+ return 0;
}
pr_debug("Searching '%s' variable in context.\n",
--
1.6.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/4] perf probe: Fix memory leaks in add_perf_probe_events
2010-08-07 1:34 [GIT PULL 0/4] perf/core fixes and improvements Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 1/4] perf probe: Fix to copy the type for raw parameters Arnaldo Carvalho de Melo
@ 2010-08-07 1:34 ` Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 3/4] perf tui: Introduce list_head based generic ui_browser refresh routine Arnaldo Carvalho de Melo
` (2 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2010-08-07 1:34 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Masami Hiramatsu, Peter Zijlstra, Paul Mackerras,
Ingo Molnar, Arnaldo Carvalho de Melo
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Fix several memory leaks of pkgs and tevs in add_perf_probe_events().
Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org
LKML-Reference: <4C577ADC.1000309@hitachi.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/probe-event.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 2e665cb..e72f05c 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -1606,8 +1606,10 @@ int add_perf_probe_events(struct perf_probe_event *pevs, int npevs,
/* Init vmlinux path */
ret = init_vmlinux();
- if (ret < 0)
+ if (ret < 0) {
+ free(pkgs);
return ret;
+ }
/* Loop 1: convert all events */
for (i = 0; i < npevs; i++) {
@@ -1625,10 +1627,13 @@ int add_perf_probe_events(struct perf_probe_event *pevs, int npevs,
ret = __add_probe_trace_events(pkgs[i].pev, pkgs[i].tevs,
pkgs[i].ntevs, force_add);
end:
- /* Loop 3: cleanup trace events */
- for (i = 0; i < npevs; i++)
+ /* Loop 3: cleanup and free trace events */
+ for (i = 0; i < npevs; i++) {
for (j = 0; j < pkgs[i].ntevs; j++)
clear_probe_trace_event(&pkgs[i].tevs[j]);
+ free(pkgs[i].tevs);
+ }
+ free(pkgs);
return ret;
}
--
1.6.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/4] perf tui: Introduce list_head based generic ui_browser refresh routine
2010-08-07 1:34 [GIT PULL 0/4] perf/core fixes and improvements Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 1/4] perf probe: Fix to copy the type for raw parameters Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 2/4] perf probe: Fix memory leaks in add_perf_probe_events Arnaldo Carvalho de Melo
@ 2010-08-07 1:34 ` Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 4/4] perf ui: Start breaking down newt.c into multiple files Arnaldo Carvalho de Melo
2010-08-07 6:43 ` [GIT PULL 0/4] perf/core fixes and improvements Ingo Molnar
4 siblings, 0 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2010-08-07 1:34 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Arnaldo Carvalho de Melo, Frederic Weisbecker,
Mike Galbraith, Peter Zijlstra, Stephane Eranian
From: Arnaldo Carvalho de Melo <acme@redhat.com>
So that building other browser based on structures linked via a linked
list can be as easy as it is already for the ones linked via an rb_tree.
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/include/linux/list.h | 8 +++++
tools/perf/util/newt.c | 49 ++++++++++++++++-----------------
2 files changed, 32 insertions(+), 25 deletions(-)
diff --git a/tools/perf/util/include/linux/list.h b/tools/perf/util/include/linux/list.h
index dbe4b81..f5ca26e 100644
--- a/tools/perf/util/include/linux/list.h
+++ b/tools/perf/util/include/linux/list.h
@@ -15,4 +15,12 @@ static inline void list_del_range(struct list_head *begin,
begin->prev->next = end->next;
end->next->prev = begin->prev;
}
+
+/**
+ * list_for_each_from - iterate over a list from one of its nodes
+ * @pos: the &struct list_head to use as a loop cursor, from where to start
+ * @head: the head for your list.
+ */
+#define list_for_each_from(pos, head) \
+ for (; prefetch(pos->next), pos != (head); pos = pos->next)
#endif
diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c
index e2deae0..37fe8eb 100644
--- a/tools/perf/util/newt.c
+++ b/tools/perf/util/newt.c
@@ -456,20 +456,24 @@ static int ui_browser__show(struct ui_browser *self, const char *title)
return 0;
}
-static int objdump_line__show(struct objdump_line *self, struct list_head *head,
- int width, struct hist_entry *he, int len,
- bool current_entry)
+static void annotate_browser__write(struct ui_browser *self, void *entry, int row)
{
- if (self->offset != -1) {
+ struct objdump_line *ol = rb_entry(entry, struct objdump_line, node);
+ bool current_entry = ui_browser__is_current_entry(self, row);
+ int width = self->width;
+
+ if (ol->offset != -1) {
+ struct hist_entry *he = self->priv;
struct symbol *sym = he->ms.sym;
+ int len = he->ms.sym->end - he->ms.sym->start;
unsigned int hits = 0;
double percent = 0.0;
int color;
struct sym_priv *priv = symbol__priv(sym);
struct sym_ext *sym_ext = priv->ext;
struct sym_hist *h = priv->hist;
- s64 offset = self->offset;
- struct objdump_line *next = objdump__get_next_ip_line(head, self);
+ s64 offset = ol->offset;
+ struct objdump_line *next = objdump__get_next_ip_line(self->entries, ol);
while (offset < (s64)len &&
(next == NULL || offset < next->offset)) {
@@ -497,12 +501,10 @@ static int objdump_line__show(struct objdump_line *self, struct list_head *head,
SLsmg_write_char(':');
slsmg_write_nstring(" ", 8);
- if (!*self->line)
+ if (!*ol->line)
slsmg_write_nstring(" ", width - 18);
else
- slsmg_write_nstring(self->line, width - 18);
-
- return 0;
+ slsmg_write_nstring(ol->line, width - 18);
}
static int ui_browser__refresh(struct ui_browser *self)
@@ -607,24 +609,20 @@ static char *callchain_list__sym_name(struct callchain_list *self,
return bf;
}
-static unsigned int hist_entry__annotate_browser_refresh(struct ui_browser *self)
+static unsigned int ui_browser__list_head_refresh(struct ui_browser *self)
{
- struct objdump_line *pos;
+ struct list_head *pos;
struct list_head *head = self->entries;
- struct hist_entry *he = self->priv;
int row = 0;
- int len = he->ms.sym->end - he->ms.sym->start;
if (self->first_visible_entry == NULL || self->first_visible_entry == self->entries)
self->first_visible_entry = head->next;
- pos = list_entry(self->first_visible_entry, struct objdump_line, node);
+ pos = self->first_visible_entry;
- list_for_each_entry_from(pos, head, node) {
- bool current_entry = ui_browser__is_current_entry(self, row);
+ list_for_each_from(pos, head) {
SLsmg_gotorc(self->top + row, self->left);
- objdump_line__show(pos, head, self->width,
- he, len, current_entry);
+ self->write(self, pos, row);
if (++row == self->height)
break;
}
@@ -634,10 +632,16 @@ static unsigned int hist_entry__annotate_browser_refresh(struct ui_browser *self
int hist_entry__tui_annotate(struct hist_entry *self)
{
- struct ui_browser browser;
struct newtExitStruct es;
struct objdump_line *pos, *n;
LIST_HEAD(head);
+ struct ui_browser browser = {
+ .entries = &head,
+ .refresh = ui_browser__list_head_refresh,
+ .seek = ui_browser__list_head_seek,
+ .write = annotate_browser__write,
+ .priv = self,
+ };
int ret;
if (self->ms.sym == NULL)
@@ -653,11 +657,6 @@ int hist_entry__tui_annotate(struct hist_entry *self)
ui_helpline__push("Press <- or ESC to exit");
- memset(&browser, 0, sizeof(browser));
- browser.entries = &head;
- browser.refresh = hist_entry__annotate_browser_refresh;
- browser.seek = ui_browser__list_head_seek;
- browser.priv = self;
list_for_each_entry(pos, &head, node) {
size_t line_len = strlen(pos->line);
if (browser.width < line_len)
--
1.6.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/4] perf ui: Start breaking down newt.c into multiple files
2010-08-07 1:34 [GIT PULL 0/4] perf/core fixes and improvements Arnaldo Carvalho de Melo
` (2 preceding siblings ...)
2010-08-07 1:34 ` [PATCH 3/4] perf tui: Introduce list_head based generic ui_browser refresh routine Arnaldo Carvalho de Melo
@ 2010-08-07 1:34 ` Arnaldo Carvalho de Melo
2010-08-07 6:43 ` [GIT PULL 0/4] perf/core fixes and improvements Ingo Molnar
4 siblings, 0 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2010-08-07 1:34 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Arnaldo Carvalho de Melo, Frederic Weisbecker,
Mike Galbraith, Peter Zijlstra, Stephane Eranian
From: Arnaldo Carvalho de Melo <acme@redhat.com>
As new TUI features get added the newt.c file is growing a lot and its
name is growing misleading as an effort is being made to reduce the
coupling with libnewt.
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/Makefile | 10 +-
tools/perf/util/newt.c | 306 +----------------------------------------
tools/perf/util/ui/browser.c | 313 ++++++++++++++++++++++++++++++++++++++++++
tools/perf/util/ui/browser.h | 43 ++++++
4 files changed, 368 insertions(+), 304 deletions(-)
create mode 100644 tools/perf/util/ui/browser.c
create mode 100644 tools/perf/util/ui/browser.h
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index 26f626d..d5bce76 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -157,9 +157,8 @@ all::
#
# Define NO_DWARF if you do not want debug-info analysis feature at all.
-$(shell sh -c 'mkdir -p $(OUTPUT)scripts/python/Perf-Trace-Util/' 2> /dev/null)
-$(shell sh -c 'mkdir -p $(OUTPUT)scripts/perl/Perf-Trace-Util/' 2> /dev/null)
-$(shell sh -c 'mkdir -p $(OUTPUT)util/scripting-engines/' 2> /dev/null)
+$(shell sh -c 'mkdir -p $(OUTPUT)scripts/{perl,python}/Perf-Trace-Util/' 2> /dev/null)
+$(shell sh -c 'mkdir -p $(OUTPUT)util/{ui,scripting-engines}/' 2> /dev/null)
$(shell sh -c 'mkdir $(OUTPUT)bench' 2> /dev/null)
$(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE
@@ -569,6 +568,8 @@ else
BASIC_CFLAGS += -I/usr/include/slang
EXTLIBS += -lnewt -lslang
LIB_OBJS += $(OUTPUT)util/newt.o
+ LIB_OBJS += $(OUTPUT)util/ui/browser.o
+ LIB_H += util/ui/browser.h
endif
endif
@@ -969,6 +970,9 @@ $(OUTPUT)util/config.o: util/config.c $(OUTPUT)PERF-CFLAGS
$(OUTPUT)util/newt.o: util/newt.c $(OUTPUT)PERF-CFLAGS
$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<
+$(OUTPUT)util/ui/browser.o: util/ui/browser.c $(OUTPUT)PERF-CFLAGS
+ $(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $<
+
$(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS
$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $<
diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c
index 37fe8eb..266a9e0 100644
--- a/tools/perf/util/newt.c
+++ b/tools/perf/util/newt.c
@@ -23,6 +23,7 @@
#include "session.h"
#include "sort.h"
#include "symbol.h"
+#include "ui/browser.h"
#if SLANG_VERSION < 20104
#define slsmg_printf(msg, args...) SLsmg_printf((char *)msg, ##args)
@@ -35,6 +36,8 @@
#define sltt_set_color SLtt_set_color
#endif
+newtComponent newt_form__new(void);
+
struct ui_progress {
newtComponent form, scale;
};
@@ -190,7 +193,7 @@ static void newt_form__set_exit_keys(newtComponent self)
newtFormAddHotKey(self, CTRL('c'));
}
-static newtComponent newt_form__new(void)
+newtComponent newt_form__new(void)
{
newtComponent self = newtForm(NULL, NULL, 0);
if (self)
@@ -290,172 +293,6 @@ static void ui__error_window(const char *fmt, ...)
va_end(ap);
}
-#define HE_COLORSET_TOP 50
-#define HE_COLORSET_MEDIUM 51
-#define HE_COLORSET_NORMAL 52
-#define HE_COLORSET_SELECTED 53
-#define HE_COLORSET_CODE 54
-
-static int ui_browser__percent_color(double percent, bool current)
-{
- if (current)
- return HE_COLORSET_SELECTED;
- if (percent >= MIN_RED)
- return HE_COLORSET_TOP;
- if (percent >= MIN_GREEN)
- return HE_COLORSET_MEDIUM;
- return HE_COLORSET_NORMAL;
-}
-
-struct ui_browser {
- newtComponent form, sb;
- u64 index, first_visible_entry_idx;
- void *first_visible_entry, *entries;
- u16 top, left, width, height;
- void *priv;
- unsigned int (*refresh)(struct ui_browser *self);
- void (*write)(struct ui_browser *self, void *entry, int row);
- void (*seek)(struct ui_browser *self,
- off_t offset, int whence);
- u32 nr_entries;
-};
-
-static void ui_browser__list_head_seek(struct ui_browser *self,
- off_t offset, int whence)
-{
- struct list_head *head = self->entries;
- struct list_head *pos;
-
- switch (whence) {
- case SEEK_SET:
- pos = head->next;
- break;
- case SEEK_CUR:
- pos = self->first_visible_entry;
- break;
- case SEEK_END:
- pos = head->prev;
- break;
- default:
- return;
- }
-
- if (offset > 0) {
- while (offset-- != 0)
- pos = pos->next;
- } else {
- while (offset++ != 0)
- pos = pos->prev;
- }
-
- self->first_visible_entry = pos;
-}
-
-static void ui_browser__rb_tree_seek(struct ui_browser *self,
- off_t offset, int whence)
-{
- struct rb_root *root = self->entries;
- struct rb_node *nd;
-
- switch (whence) {
- case SEEK_SET:
- nd = rb_first(root);
- break;
- case SEEK_CUR:
- nd = self->first_visible_entry;
- break;
- case SEEK_END:
- nd = rb_last(root);
- break;
- default:
- return;
- }
-
- if (offset > 0) {
- while (offset-- != 0)
- nd = rb_next(nd);
- } else {
- while (offset++ != 0)
- nd = rb_prev(nd);
- }
-
- self->first_visible_entry = nd;
-}
-
-static unsigned int ui_browser__rb_tree_refresh(struct ui_browser *self)
-{
- struct rb_node *nd;
- int row = 0;
-
- if (self->first_visible_entry == NULL)
- self->first_visible_entry = rb_first(self->entries);
-
- nd = self->first_visible_entry;
-
- while (nd != NULL) {
- SLsmg_gotorc(self->top + row, self->left);
- self->write(self, nd, row);
- if (++row == self->height)
- break;
- nd = rb_next(nd);
- }
-
- return row;
-}
-
-static bool ui_browser__is_current_entry(struct ui_browser *self, unsigned row)
-{
- return (self->first_visible_entry_idx + row) == self->index;
-}
-
-static void ui_browser__refresh_dimensions(struct ui_browser *self)
-{
- int cols, rows;
- newtGetScreenSize(&cols, &rows);
-
- if (self->width > cols - 4)
- self->width = cols - 4;
- self->height = rows - 5;
- if (self->height > self->nr_entries)
- self->height = self->nr_entries;
- self->top = (rows - self->height) / 2;
- self->left = (cols - self->width) / 2;
-}
-
-static void ui_browser__reset_index(struct ui_browser *self)
-{
- self->index = self->first_visible_entry_idx = 0;
- self->seek(self, 0, SEEK_SET);
-}
-
-static int ui_browser__show(struct ui_browser *self, const char *title)
-{
- if (self->form != NULL) {
- newtFormDestroy(self->form);
- newtPopWindow();
- }
- ui_browser__refresh_dimensions(self);
- newtCenteredWindow(self->width, self->height, title);
- self->form = newt_form__new();
- if (self->form == NULL)
- return -1;
-
- self->sb = newtVerticalScrollbar(self->width, 0, self->height,
- HE_COLORSET_NORMAL,
- HE_COLORSET_SELECTED);
- if (self->sb == NULL)
- return -1;
-
- newtFormAddHotKey(self->form, NEWT_KEY_UP);
- newtFormAddHotKey(self->form, NEWT_KEY_DOWN);
- newtFormAddHotKey(self->form, NEWT_KEY_PGUP);
- newtFormAddHotKey(self->form, NEWT_KEY_PGDN);
- newtFormAddHotKey(self->form, NEWT_KEY_HOME);
- newtFormAddHotKey(self->form, NEWT_KEY_END);
- newtFormAddComponent(self->form, self->sb);
- return 0;
-}
-
static void annotate_browser__write(struct ui_browser *self, void *entry, int row)
{
struct objdump_line *ol = rb_entry(entry, struct objdump_line, node);
@@ -507,98 +344,6 @@ static void annotate_browser__write(struct ui_browser *self, void *entry, int ro
slsmg_write_nstring(ol->line, width - 18);
}
-static int ui_browser__refresh(struct ui_browser *self)
-{
- int row;
-
- newtScrollbarSet(self->sb, self->index, self->nr_entries - 1);
- row = self->refresh(self);
- SLsmg_set_color(HE_COLORSET_NORMAL);
- SLsmg_fill_region(self->top + row, self->left,
- self->height - row, self->width, ' ');
-
- return 0;
-}
-
-static int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es)
-{
- if (ui_browser__refresh(self) < 0)
- return -1;
-
- while (1) {
- off_t offset;
-
- newtFormRun(self->form, es);
-
- if (es->reason != NEWT_EXIT_HOTKEY)
- break;
- if (is_exit_key(es->u.key))
- return es->u.key;
- switch (es->u.key) {
- case NEWT_KEY_DOWN:
- if (self->index == self->nr_entries - 1)
- break;
- ++self->index;
- if (self->index == self->first_visible_entry_idx + self->height) {
- ++self->first_visible_entry_idx;
- self->seek(self, +1, SEEK_CUR);
- }
- break;
- case NEWT_KEY_UP:
- if (self->index == 0)
- break;
- --self->index;
- if (self->index < self->first_visible_entry_idx) {
- --self->first_visible_entry_idx;
- self->seek(self, -1, SEEK_CUR);
- }
- break;
- case NEWT_KEY_PGDN:
- case ' ':
- if (self->first_visible_entry_idx + self->height > self->nr_entries - 1)
- break;
-
- offset = self->height;
- if (self->index + offset > self->nr_entries - 1)
- offset = self->nr_entries - 1 - self->index;
- self->index += offset;
- self->first_visible_entry_idx += offset;
- self->seek(self, +offset, SEEK_CUR);
- break;
- case NEWT_KEY_PGUP:
- if (self->first_visible_entry_idx == 0)
- break;
-
- if (self->first_visible_entry_idx < self->height)
- offset = self->first_visible_entry_idx;
- else
- offset = self->height;
-
- self->index -= offset;
- self->first_visible_entry_idx -= offset;
- self->seek(self, -offset, SEEK_CUR);
- break;
- case NEWT_KEY_HOME:
- ui_browser__reset_index(self);
- break;
- case NEWT_KEY_END:
- offset = self->height - 1;
- if (offset >= self->nr_entries)
- offset = self->nr_entries - 1;
-
- self->index = self->nr_entries - 1;
- self->first_visible_entry_idx = self->index - offset;
- self->seek(self, -offset, SEEK_END);
- break;
- default:
- return es->u.key;
- }
- if (ui_browser__refresh(self) < 0)
- return -1;
- }
- return 0;
-}
-
static char *callchain_list__sym_name(struct callchain_list *self,
char *bf, size_t bfsize)
{
@@ -609,27 +354,6 @@ static char *callchain_list__sym_name(struct callchain_list *self,
return bf;
}
-static unsigned int ui_browser__list_head_refresh(struct ui_browser *self)
-{
- struct list_head *pos;
- struct list_head *head = self->entries;
- int row = 0;
-
- if (self->first_visible_entry == NULL || self->first_visible_entry == self->entries)
- self->first_visible_entry = head->next;
-
- pos = self->first_visible_entry;
-
- list_for_each_from(pos, head) {
- SLsmg_gotorc(self->top + row, self->left);
- self->write(self, pos, row);
- if (++row == self->height)
- break;
- }
-
- return row;
-}
-
int hist_entry__tui_annotate(struct hist_entry *self)
{
struct newtExitStruct es;
@@ -1093,20 +817,6 @@ int hists__tui_browse_tree(struct rb_root *self, const char *help)
return key;
}
-static struct newtPercentTreeColors {
- const char *topColorFg, *topColorBg;
- const char *mediumColorFg, *mediumColorBg;
- const char *normalColorFg, *normalColorBg;
- const char *selColorFg, *selColorBg;
- const char *codeColorFg, *codeColorBg;
-} defaultPercentTreeColors = {
- "red", "lightgray",
- "green", "lightgray",
- "black", "lightgray",
- "lightgray", "magenta",
- "blue", "lightgray",
-};
-
static void newt_suspend(void *d __used)
{
newtSuspend();
@@ -1116,8 +826,6 @@ static void newt_suspend(void *d __used)
void setup_browser(void)
{
- struct newtPercentTreeColors *c = &defaultPercentTreeColors;
-
if (!isatty(1) || !use_browser || dump_trace) {
use_browser = 0;
setup_pager();
@@ -1129,11 +837,7 @@ void setup_browser(void)
newtCls();
newtSetSuspendCallback(newt_suspend, NULL);
ui_helpline__puts(" ");
- sltt_set_color(HE_COLORSET_TOP, NULL, c->topColorFg, c->topColorBg);
- sltt_set_color(HE_COLORSET_MEDIUM, NULL, c->mediumColorFg, c->mediumColorBg);
- sltt_set_color(HE_COLORSET_NORMAL, NULL, c->normalColorFg, c->normalColorBg);
- sltt_set_color(HE_COLORSET_SELECTED, NULL, c->selColorFg, c->selColorBg);
- sltt_set_color(HE_COLORSET_CODE, NULL, c->codeColorFg, c->codeColorBg);
+ ui_browser__init();
}
void exit_browser(bool wait_for_ok)
diff --git a/tools/perf/util/ui/browser.c b/tools/perf/util/ui/browser.c
new file mode 100644
index 0000000..0b2b930
--- /dev/null
+++ b/tools/perf/util/ui/browser.c
@@ -0,0 +1,313 @@
+#define _GNU_SOURCE
+#include <stdio.h>
+#undef _GNU_SOURCE
+/*
+ * slang versions <= 2.0.6 have a "#if HAVE_LONG_LONG" that breaks
+ * the build if it isn't defined. Use the equivalent one that glibc
+ * has on features.h.
+ */
+#include <features.h>
+#ifndef HAVE_LONG_LONG
+#define HAVE_LONG_LONG __GLIBC_HAVE_LONG_LONG
+#endif
+#include <slang.h>
+#include <linux/list.h>
+#include <linux/rbtree.h>
+#include <stdlib.h>
+#include <sys/ttydefaults.h>
+#include "browser.h"
+#include "../color.h"
+#include "../util.h"
+
+#if SLANG_VERSION < 20104
+#define sltt_set_color(obj, name, fg, bg) \
+ SLtt_set_color(obj,(char *)name, (char *)fg, (char *)bg)
+#else
+#define sltt_set_color SLtt_set_color
+#endif
+
+newtComponent newt_form__new(void);
+
+int ui_browser__percent_color(double percent, bool current)
+{
+ if (current)
+ return HE_COLORSET_SELECTED;
+ if (percent >= MIN_RED)
+ return HE_COLORSET_TOP;
+ if (percent >= MIN_GREEN)
+ return HE_COLORSET_MEDIUM;
+ return HE_COLORSET_NORMAL;
+}
+
+void ui_browser__list_head_seek(struct ui_browser *self, off_t offset, int whence)
+{
+ struct list_head *head = self->entries;
+ struct list_head *pos;
+
+ switch (whence) {
+ case SEEK_SET:
+ pos = head->next;
+ break;
+ case SEEK_CUR:
+ pos = self->first_visible_entry;
+ break;
+ case SEEK_END:
+ pos = head->prev;
+ break;
+ default:
+ return;
+ }
+
+ if (offset > 0) {
+ while (offset-- != 0)
+ pos = pos->next;
+ } else {
+ while (offset++ != 0)
+ pos = pos->prev;
+ }
+
+ self->first_visible_entry = pos;
+}
+
+void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence)
+{
+ struct rb_root *root = self->entries;
+ struct rb_node *nd;
+
+ switch (whence) {
+ case SEEK_SET:
+ nd = rb_first(root);
+ break;
+ case SEEK_CUR:
+ nd = self->first_visible_entry;
+ break;
+ case SEEK_END:
+ nd = rb_last(root);
+ break;
+ default:
+ return;
+ }
+
+ if (offset > 0) {
+ while (offset-- != 0)
+ nd = rb_next(nd);
+ } else {
+ while (offset++ != 0)
+ nd = rb_prev(nd);
+ }
+
+ self->first_visible_entry = nd;
+}
+
+unsigned int ui_browser__rb_tree_refresh(struct ui_browser *self)
+{
+ struct rb_node *nd;
+ int row = 0;
+
+ if (self->first_visible_entry == NULL)
+ self->first_visible_entry = rb_first(self->entries);
+
+ nd = self->first_visible_entry;
+
+ while (nd != NULL) {
+ SLsmg_gotorc(self->top + row, self->left);
+ self->write(self, nd, row);
+ if (++row == self->height)
+ break;
+ nd = rb_next(nd);
+ }
+
+ return row;
+}
+
+bool ui_browser__is_current_entry(struct ui_browser *self, unsigned row)
+{
+ return (self->first_visible_entry_idx + row) == self->index;
+}
+
+void ui_browser__refresh_dimensions(struct ui_browser *self)
+{
+ int cols, rows;
+ newtGetScreenSize(&cols, &rows);
+
+ if (self->width > cols - 4)
+ self->width = cols - 4;
+ self->height = rows - 5;
+ if (self->height > self->nr_entries)
+ self->height = self->nr_entries;
+ self->top = (rows - self->height) / 2;
+ self->left = (cols - self->width) / 2;
+}
+
+void ui_browser__reset_index(struct ui_browser *self)
+{
+ self->index = self->first_visible_entry_idx = 0;
+ self->seek(self, 0, SEEK_SET);
+}
+
+int ui_browser__show(struct ui_browser *self, const char *title)
+{
+ if (self->form != NULL) {
+ newtFormDestroy(self->form);
+ newtPopWindow();
+ }
+ ui_browser__refresh_dimensions(self);
+ newtCenteredWindow(self->width, self->height, title);
+ self->form = newt_form__new();
+ if (self->form == NULL)
+ return -1;
+
+ self->sb = newtVerticalScrollbar(self->width, 0, self->height,
+ HE_COLORSET_NORMAL,
+ HE_COLORSET_SELECTED);
+ if (self->sb == NULL)
+ return -1;
+
+ newtFormAddHotKey(self->form, NEWT_KEY_UP);
+ newtFormAddHotKey(self->form, NEWT_KEY_DOWN);
+ newtFormAddHotKey(self->form, NEWT_KEY_PGUP);
+ newtFormAddHotKey(self->form, NEWT_KEY_PGDN);
+ newtFormAddHotKey(self->form, NEWT_KEY_HOME);
+ newtFormAddHotKey(self->form, NEWT_KEY_END);
+ newtFormAddComponent(self->form, self->sb);
+ return 0;
+}
+
+int ui_browser__refresh(struct ui_browser *self)
+{
+ int row;
+
+ newtScrollbarSet(self->sb, self->index, self->nr_entries - 1);
+ row = self->refresh(self);
+ SLsmg_set_color(HE_COLORSET_NORMAL);
+ SLsmg_fill_region(self->top + row, self->left,
+ self->height - row, self->width, ' ');
+
+ return 0;
+}
+
+int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es)
+{
+ if (ui_browser__refresh(self) < 0)
+ return -1;
+
+ while (1) {
+ off_t offset;
+
+ newtFormRun(self->form, es);
+
+ if (es->reason != NEWT_EXIT_HOTKEY)
+ break;
+ if (is_exit_key(es->u.key))
+ return es->u.key;
+ switch (es->u.key) {
+ case NEWT_KEY_DOWN:
+ if (self->index == self->nr_entries - 1)
+ break;
+ ++self->index;
+ if (self->index == self->first_visible_entry_idx + self->height) {
+ ++self->first_visible_entry_idx;
+ self->seek(self, +1, SEEK_CUR);
+ }
+ break;
+ case NEWT_KEY_UP:
+ if (self->index == 0)
+ break;
+ --self->index;
+ if (self->index < self->first_visible_entry_idx) {
+ --self->first_visible_entry_idx;
+ self->seek(self, -1, SEEK_CUR);
+ }
+ break;
+ case NEWT_KEY_PGDN:
+ case ' ':
+ if (self->first_visible_entry_idx + self->height > self->nr_entries - 1)
+ break;
+
+ offset = self->height;
+ if (self->index + offset > self->nr_entries - 1)
+ offset = self->nr_entries - 1 - self->index;
+ self->index += offset;
+ self->first_visible_entry_idx += offset;
+ self->seek(self, +offset, SEEK_CUR);
+ break;
+ case NEWT_KEY_PGUP:
+ if (self->first_visible_entry_idx == 0)
+ break;
+
+ if (self->first_visible_entry_idx < self->height)
+ offset = self->first_visible_entry_idx;
+ else
+ offset = self->height;
+
+ self->index -= offset;
+ self->first_visible_entry_idx -= offset;
+ self->seek(self, -offset, SEEK_CUR);
+ break;
+ case NEWT_KEY_HOME:
+ ui_browser__reset_index(self);
+ break;
+ case NEWT_KEY_END:
+ offset = self->height - 1;
+ if (offset >= self->nr_entries)
+ offset = self->nr_entries - 1;
+
+ self->index = self->nr_entries - 1;
+ self->first_visible_entry_idx = self->index - offset;
+ self->seek(self, -offset, SEEK_END);
+ break;
+ default:
+ return es->u.key;
+ }
+ if (ui_browser__refresh(self) < 0)
+ return -1;
+ }
+ return 0;
+}
+
+unsigned int ui_browser__list_head_refresh(struct ui_browser *self)
+{
+ struct list_head *pos;
+ struct list_head *head = self->entries;
+ int row = 0;
+
+ if (self->first_visible_entry == NULL ||
+ self->first_visible_entry == self->entries)
+ self->first_visible_entry = head->next;
+
+ pos = self->first_visible_entry;
+
+ list_for_each_from(pos, head) {
+ SLsmg_gotorc(self->top + row, self->left);
+ self->write(self, pos, row);
+ if (++row == self->height)
+ break;
+ }
+
+ return row;
+}
+
+static struct newtPercentTreeColors {
+ const char *topColorFg, *topColorBg;
+ const char *mediumColorFg, *mediumColorBg;
+ const char *normalColorFg, *normalColorBg;
+ const char *selColorFg, *selColorBg;
+ const char *codeColorFg, *codeColorBg;
+} defaultPercentTreeColors = {
+ "red", "lightgray",
+ "green", "lightgray",
+ "black", "lightgray",
+ "lightgray", "magenta",
+ "blue", "lightgray",
+};
+
+void ui_browser__init(void)
+{
+ struct newtPercentTreeColors *c = &defaultPercentTreeColors;
+
+ sltt_set_color(HE_COLORSET_TOP, NULL, c->topColorFg, c->topColorBg);
+ sltt_set_color(HE_COLORSET_MEDIUM, NULL, c->mediumColorFg, c->mediumColorBg);
+ sltt_set_color(HE_COLORSET_NORMAL, NULL, c->normalColorFg, c->normalColorBg);
+ sltt_set_color(HE_COLORSET_SELECTED, NULL, c->selColorFg, c->selColorBg);
+ sltt_set_color(HE_COLORSET_CODE, NULL, c->codeColorFg, c->codeColorBg);
+}
diff --git a/tools/perf/util/ui/browser.h b/tools/perf/util/ui/browser.h
new file mode 100644
index 0000000..bcc4391
--- /dev/null
+++ b/tools/perf/util/ui/browser.h
@@ -0,0 +1,43 @@
+#ifndef _PERF_UI_BROWSER_H_
+#define _PERF_UI_BROWSER_H_ 1
+
+#include <stdbool.h>
+#include <newt.h>
+#include "../types.h"
+
+#define HE_COLORSET_TOP 50
+#define HE_COLORSET_MEDIUM 51
+#define HE_COLORSET_NORMAL 52
+#define HE_COLORSET_SELECTED 53
+#define HE_COLORSET_CODE 54
+
+struct ui_browser {
+ newtComponent form, sb;
+ u64 index, first_visible_entry_idx;
+ void *first_visible_entry, *entries;
+ u16 top, left, width, height;
+ void *priv;
+ unsigned int (*refresh)(struct ui_browser *self);
+ void (*write)(struct ui_browser *self, void *entry, int row);
+ void (*seek)(struct ui_browser *self, off_t offset, int whence);
+ u32 nr_entries;
+};
+
+
+int ui_browser__percent_color(double percent, bool current);
+bool ui_browser__is_current_entry(struct ui_browser *self, unsigned row);
+void ui_browser__refresh_dimensions(struct ui_browser *self);
+void ui_browser__reset_index(struct ui_browser *self);
+
+int ui_browser__show(struct ui_browser *self, const char *title);
+int ui_browser__refresh(struct ui_browser *self);
+int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es);
+
+void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence);
+unsigned int ui_browser__rb_tree_refresh(struct ui_browser *self);
+
+void ui_browser__list_head_seek(struct ui_browser *self, off_t offset, int whence);
+unsigned int ui_browser__list_head_refresh(struct ui_browser *self);
+
+void ui_browser__init(void);
+#endif /* _PERF_UI_BROWSER_H_ */
--
1.6.2.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [GIT PULL 0/4] perf/core fixes and improvements
2010-08-07 1:34 [GIT PULL 0/4] perf/core fixes and improvements Arnaldo Carvalho de Melo
` (3 preceding siblings ...)
2010-08-07 1:34 ` [PATCH 4/4] perf ui: Start breaking down newt.c into multiple files Arnaldo Carvalho de Melo
@ 2010-08-07 6:43 ` Ingo Molnar
4 siblings, 0 replies; 11+ messages in thread
From: Ingo Molnar @ 2010-08-07 6:43 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: linux-kernel, Frederic Weisbecker, Masami Hiramatsu,
Mike Galbraith, Paul Mackerras, Peter Zijlstra, Stephane Eranian
* Arnaldo Carvalho de Melo <acme@infradead.org> wrote:
> Hi Ingo,
>
> Please pull from:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 perf/core
>
> Regards,
>
> - Arnaldo
>
> Arnaldo Carvalho de Melo (2):
> perf ui: Introduce list_head based generic ui_browser refresh routine
> perf ui: Start breaking down newt.c into multiple files
>
> Masami Hiramatsu (2):
> perf probe: Fix to copy the type for raw parameters
> perf probe: Fix memory leaks in add_perf_probe_events
>
> tools/perf/Makefile | 10 +-
> tools/perf/util/include/linux/list.h | 8 +
> tools/perf/util/newt.c | 343 +++-------------------------------
> tools/perf/util/probe-event.c | 11 +-
> tools/perf/util/probe-finder.c | 8 +-
> tools/perf/util/ui/browser.c | 313 +++++++++++++++++++++++++++++++
> tools/perf/util/ui/browser.h | 43 +++++
> 7 files changed, 408 insertions(+), 328 deletions(-)
> create mode 100644 tools/perf/util/ui/browser.c
> create mode 100644 tools/perf/util/ui/browser.h
Pulled, thanks Arnaldo!
Ingo
^ permalink raw reply [flat|nested] 11+ messages in thread
* [GIT PULL 0/4] perf/core fixes and improvements
@ 2011-03-10 19:29 Arnaldo Carvalho de Melo
0 siblings, 0 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2011-03-10 19:29 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Arnaldo Carvalho de Melo, Frederic Weisbecker,
Han Pingtian, Ingo Molnar, Jiri Olsa, Mike Galbraith,
Paul Mackerras, Peter Zijlstra, Stephane Eranian, Thomas Gleixner,
Tom Zanussi, Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling from:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 perf/core
Regards,
- Arnaldo
Arnaldo Carvalho de Melo (2):
perf session: Use evlist/evsel for managing perf.data attributes
perf header: Stop using 'self'
Jiri Olsa (2):
perf top: Fix events overflow in top command
perf top: Don't let events to eat up whole header line
tools/perf/builtin-record.c | 101 ++++-------
tools/perf/builtin-report.c | 4 +-
tools/perf/builtin-top.c | 5 +-
tools/perf/util/evlist.c | 26 ++-
tools/perf/util/evlist.h | 4 +-
tools/perf/util/evsel.c | 21 ++-
tools/perf/util/evsel.h | 9 +-
tools/perf/util/header.c | 422 +++++++++++++++++++------------------------
tools/perf/util/header.h | 48 ++----
tools/perf/util/session.c | 74 +-------
tools/perf/util/session.h | 2 -
tools/perf/util/top.c | 48 ++++--
12 files changed, 317 insertions(+), 447 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread
* [GIT PULL 0/4] perf/core fixes and improvements
@ 2011-10-23 19:12 Arnaldo Carvalho de Melo
2011-10-25 3:22 ` Ingo Molnar
0 siblings, 1 reply; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2011-10-23 19:12 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Arnaldo Carvalho de Melo, Anton Blanchard,
David Ahern, Eric Dumazet, Frederic Weisbecker, Ingo Molnar,
Jiri Olsa, Mike Galbraith, Neil Horman, Paul Mackerras,
Pekka Enberg, Peter Zijlstra, Ricardo Ribalda Delgado,
Stephane Eranian, Steven Rostedt, arnaldo.melo
Hi Ingo,
Please consider pulling from:
git://github.com/acmel/linux.git perf/core
Regards,
- Arnaldo
Arnaldo Carvalho de Melo (2):
perf ui browser: Use libslang to read keys
perf hists browser: Refuse 'a' hotkey on non symbolic views
Jiri Olsa (1):
perf tools: Fix tracing info recording
Ricardo Ribalda Delgado (1):
perf symbols: Increase symbol KSYM_NAME_LEN size
tools/perf/Makefile | 1 +
tools/perf/builtin-annotate.c | 8 +-
tools/perf/util/header.c | 27 +++++++-
tools/perf/util/hist.h | 9 +--
tools/perf/util/symbol.c | 2 +-
tools/perf/util/trace-event-info.c | 112 +++++++++++++++++++++++++-------
tools/perf/util/trace-event.h | 13 ++++-
tools/perf/util/ui/browser.c | 79 +++++++++++++++-------
tools/perf/util/ui/browsers/annotate.c | 19 ++---
tools/perf/util/ui/browsers/hists.c | 40 +++++++-----
tools/perf/util/ui/keysyms.h | 25 +++++++
tools/perf/util/ui/libslang.h | 2 +
tools/perf/util/ui/setup.c | 13 ++++
13 files changed, 256 insertions(+), 94 deletions(-)
create mode 100644 tools/perf/util/ui/keysyms.h
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [GIT PULL 0/4] perf/core fixes and improvements
2011-10-23 19:12 Arnaldo Carvalho de Melo
@ 2011-10-25 3:22 ` Ingo Molnar
0 siblings, 0 replies; 11+ messages in thread
From: Ingo Molnar @ 2011-10-25 3:22 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: linux-kernel, Anton Blanchard, David Ahern, Eric Dumazet,
Frederic Weisbecker, Jiri Olsa, Mike Galbraith, Neil Horman,
Paul Mackerras, Pekka Enberg, Peter Zijlstra,
Ricardo Ribalda Delgado, Stephane Eranian, Steven Rostedt,
arnaldo.melo
* Arnaldo Carvalho de Melo <acme@infradead.org> wrote:
> Hi Ingo,
>
> Please consider pulling from:
>
> git://github.com/acmel/linux.git perf/core
>
> Regards,
>
> - Arnaldo
>
> Arnaldo Carvalho de Melo (2):
> perf ui browser: Use libslang to read keys
> perf hists browser: Refuse 'a' hotkey on non symbolic views
>
> Jiri Olsa (1):
> perf tools: Fix tracing info recording
>
> Ricardo Ribalda Delgado (1):
> perf symbols: Increase symbol KSYM_NAME_LEN size
>
> tools/perf/Makefile | 1 +
> tools/perf/builtin-annotate.c | 8 +-
> tools/perf/util/header.c | 27 +++++++-
> tools/perf/util/hist.h | 9 +--
> tools/perf/util/symbol.c | 2 +-
> tools/perf/util/trace-event-info.c | 112 +++++++++++++++++++++++++-------
> tools/perf/util/trace-event.h | 13 ++++-
> tools/perf/util/ui/browser.c | 79 +++++++++++++++-------
> tools/perf/util/ui/browsers/annotate.c | 19 ++---
> tools/perf/util/ui/browsers/hists.c | 40 +++++++-----
> tools/perf/util/ui/keysyms.h | 25 +++++++
> tools/perf/util/ui/libslang.h | 2 +
> tools/perf/util/ui/setup.c | 13 ++++
> 13 files changed, 256 insertions(+), 94 deletions(-)
> create mode 100644 tools/perf/util/ui/keysyms.h
Pulled, thanks a lot Arnaldo!
Ingo
^ permalink raw reply [flat|nested] 11+ messages in thread
* [GIT PULL 0/4] perf/core fixes and improvements
@ 2019-01-10 16:56 Arnaldo Carvalho de Melo
2019-01-11 7:12 ` Ingo Molnar
0 siblings, 1 reply; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2019-01-10 16:56 UTC (permalink / raw)
To: Ingo Molnar
Cc: Clark Williams, linux-kernel, linux-perf-users,
Arnaldo Carvalho de Melo, Ravi Bangoria, Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling, now there are no more ABI header
warnings,
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit 576b50ea235699d83758c0c514c65b8d486a159d:
Merge tag 'perf-core-for-mingo-5.0-20190108' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2019-01-09 07:59:40 +0100)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-5.0-20190110
for you to fetch changes up to 15c03092a9fbcdd041f58e5f832bf76c21c42e6a:
tools headers powerpc: Remove unistd.h (2019-01-10 10:42:08 -0300)
----------------------------------------------------------------
perf/core fixes and improvements:
perf trace:
Ravi Bangoria:
- Rework PowerPC syscall table generation, now using a .tbl file just like
x86_64 and S/390, also silencing a tools build warning about headers out of
sync with the kernel sources.
tools include uapi:
Arnaldo Carvalho de Melo:
- Sync linux/if_link.h copy with the kernel sources, silencing a build warning.
perf top:
Arnaldo Carvalho de Melo:
- Add 'arch_cpu_idle' to the list of kernel idle symbols, noticed on a Orange
Pi Zero ARM board, just like with other symbols in other arches.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
----------------------------------------------------------------
Arnaldo Carvalho de Melo (2):
tools include uapi: Sync linux/if_link.h copy with the kernel sources
perf symbols: Add 'arch_cpu_idle' to the list of kernel idle symbols
Ravi Bangoria (2):
perf powerpc: Rework syscall table generation
tools headers powerpc: Remove unistd.h
tools/arch/powerpc/include/uapi/asm/unistd.h | 404 -------------------
tools/include/uapi/linux/if_link.h | 19 +
tools/perf/arch/powerpc/Makefile | 15 +-
.../perf/arch/powerpc/entry/syscalls/mksyscalltbl | 22 +-
tools/perf/arch/powerpc/entry/syscalls/syscall.tbl | 427 +++++++++++++++++++++
tools/perf/check-headers.sh | 1 -
tools/perf/util/symbol.c | 1 +
7 files changed, 470 insertions(+), 419 deletions(-)
delete mode 100644 tools/arch/powerpc/include/uapi/asm/unistd.h
create mode 100644 tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
Test results:
The first ones are container based builds of tools/perf with and without libelf
support. Where clang is available, it is also used to build perf with/without
libelf, and building with LIBCLANGLLVM=1 (built-in clang) with gcc and clang
when clang and its devel libraries are installed.
The objtool and samples/bpf/ builds are disabled now that I'm switching from
using the sources in a local volume to fetching them from a http server to
build it inside the container, to make it easier to build in a container cluster.
Those will come back later.
Several are cross builds, the ones with -x-ARCH and the android one, and those
may not have all the features built, due to lack of multi-arch devel packages,
available and being used so far on just a few, like
debian:experimental-x-{arm64,mipsel}.
The 'perf test' one will perform a variety of tests exercising
tools/perf/util/, tools/lib/{bpf,traceevent,etc}, as well as run perf commands
with a variety of command line event specifications to then intercept the
sys_perf_event syscall to check that the perf_event_attr fields are set up as
expected, among a variety of other unit tests.
Then there is the 'make -C tools/perf build-test' ones, that build tools/perf/
with a variety of feature sets, exercising the build with an incomplete set of
features as well as with a complete one. It is planned to have it run on each
of the containers mentioned above, using some container orchestration
infrastructure. Get in contact if interested in helping having this in place.
$ export PERF_TARBALL=http://192.168.124.1/perf/perf-5.0.0-rc1.tar.xz
$ dm
1 alpine:3.4 : Ok gcc (Alpine 5.3.0) 5.3.0
2 alpine:3.5 : Ok gcc (Alpine 6.2.1) 6.2.1 20160822
3 alpine:3.6 : Ok gcc (Alpine 6.3.0) 6.3.0
4 alpine:3.7 : Ok gcc (Alpine 6.4.0) 6.4.0
5 alpine:3.8 : Ok gcc (Alpine 6.4.0) 6.4.0
6 alpine:edge : Ok gcc (Alpine 8.2.0) 8.2.0
7 amazonlinux:1 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
8 amazonlinux:2 : Ok gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
9 android-ndk:r12b-arm : Ok arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
10 android-ndk:r15c-arm : Ok arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
11 centos:5 : Ok gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55)
12 centos:6 : Ok gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)
13 centos:7 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
14 clearlinux:latest : Ok gcc (Clear Linux OS for Intel Architecture) 8.2.1 20180502
15 debian:7 : Ok gcc (Debian 4.7.2-5) 4.7.2
16 debian:8 : Ok gcc (Debian 4.9.2-10+deb8u2) 4.9.2
17 debian:9 : Ok gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
18 debian:experimental : Ok gcc (Debian 8.2.0-13) 8.2.0
19 debian:experimental-x-arm64 : Ok aarch64-linux-gnu-gcc (Debian 8.2.0-11) 8.2.0
20 debian:experimental-x-mips : Ok mips-linux-gnu-gcc (Debian 8.2.0-11) 8.2.0
21 debian:experimental-x-mips64 : Ok mips64-linux-gnuabi64-gcc (Debian 8.2.0-11) 8.2.0
22 debian:experimental-x-mipsel : Ok mipsel-linux-gnu-gcc (Debian 8.2.0-11) 8.2.0
23 fedora:20 : Ok gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7)
24 fedora:22 : Ok gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
25 fedora:23 : Ok gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
26 fedora:24 : Ok gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
27 fedora:24-x-ARC-uClibc : Ok arc-linux-gcc (ARCompact ISA Linux uClibc toolchain 2017.09-rc2) 7.1.1 20170710
28 fedora:25 : Ok gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1)
29 fedora:26 : Ok gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2)
30 fedora:27 : Ok gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6)
31 fedora:28 : Ok gcc (GCC) 8.2.1 20181105 (Red Hat 8.2.1-5)
32 fedora:29 : Ok gcc (GCC) 8.2.1 20181105 (Red Hat 8.2.1-5)
33 fedora:rawhide : Ok gcc (GCC) 8.2.1 20181105 (Red Hat 8.2.1-5)
34 gentoo-stage3-amd64:latest : Ok gcc (Gentoo 7.3.0-r3 p1.4) 7.3.0
35 mageia:5 : Ok gcc (GCC) 4.9.2
36 mageia:6 : Ok gcc (Mageia 5.5.0-1.mga6) 5.5.0
37 opensuse:13.2 : Ok gcc (SUSE Linux) 4.8.3 20140627 [gcc-4_8-branch revision 212064]
38 opensuse:15.0 : Ok gcc (SUSE Linux) 7.3.1 20180323 [gcc-7-branch revision 258812]
39 opensuse:42.1 : Ok gcc (SUSE Linux) 4.8.5
40 opensuse:42.2 : Ok gcc (SUSE Linux) 4.8.5
41 opensuse:42.3 : Ok gcc (SUSE Linux) 4.8.5
42 opensuse:tumbleweed : Ok gcc (SUSE Linux) 8.2.1 20181108 [gcc-8-branch revision 265914]
43 oraclelinux:6 : Ok gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23.0.1)
44 oraclelinux:7 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36.0.1)
45 ubuntu:12.04.5 : Ok gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
46 ubuntu:14.04.4 : Ok gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
47 ubuntu:14.04.4-x-linaro-arm64 : Ok aarch64-linux-gnu-gcc (Linaro GCC 5.5-2017.10) 5.5.0
48 ubuntu:16.04 : Ok gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
49 ubuntu:16.04-x-arm : Ok arm-linux-gnueabihf-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
50 ubuntu:16.04-x-arm64 : Ok aarch64-linux-gnu-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
51 ubuntu:16.04-x-powerpc : Ok powerpc-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
52 ubuntu:16.04-x-powerpc64 : Ok powerpc64-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
53 ubuntu:16.04-x-powerpc64el : Ok powerpc64le-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
54 ubuntu:16.04-x-s390 : Ok s390x-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
55 ubuntu:17.10 : Ok gcc (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0
56 ubuntu:18.04 : Ok gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
57 ubuntu:18.04-x-arm : Ok arm-linux-gnueabihf-gcc (Ubuntu/Linaro 7.3.0-27ubuntu1~18.04) 7.3.0
58 ubuntu:18.04-x-arm64 : Ok aarch64-linux-gnu-gcc (Ubuntu/Linaro 7.3.0-27ubuntu1~18.04) 7.3.0
59 ubuntu:18.04-x-m68k : Ok m68k-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
60 ubuntu:18.04-x-powerpc : Ok powerpc-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
61 ubuntu:18.04-x-powerpc64 : Ok powerpc64-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
62 ubuntu:18.04-x-powerpc64el : Ok powerpc64le-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
63 ubuntu:18.04-x-riscv64 : Ok riscv64-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
64 ubuntu:18.04-x-s390 : Ok s390x-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
65 ubuntu:18.04-x-sh4 : Ok sh4-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
66 ubuntu:18.04-x-sparc64 : Ok sparc64-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
67 ubuntu:18.10 : Ok gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0
68 ubuntu:19.04 : Ok gcc (Ubuntu 8.2.0-12ubuntu1) 8.2.0
69 ubuntu:19.04-x-alpha : Ok alpha-linux-gnu-gcc (Ubuntu 8.2.0-11ubuntu1) 8.2.0
70 ubuntu:19.04-x-hppa : Ok hppa-linux-gnu-gcc (Ubuntu 8.2.0-11ubuntu1) 8.2.0
$
# uname -a
Linux quaco 4.19.13-300.fc29.x86_64 #1 SMP Sat Dec 29 22:54:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# git log --oneline -1
15c03092a9fb tools headers powerpc: Remove unistd.h
# perf version --build-options
perf version 5.0.rc1.g15c030
dwarf: [ on ] # HAVE_DWARF_SUPPORT
dwarf_getlocations: [ on ] # HAVE_DWARF_GETLOCATIONS_SUPPORT
glibc: [ on ] # HAVE_GLIBC_SUPPORT
gtk2: [ on ] # HAVE_GTK2_SUPPORT
syscall_table: [ on ] # HAVE_SYSCALL_TABLE_SUPPORT
libbfd: [ on ] # HAVE_LIBBFD_SUPPORT
libelf: [ on ] # HAVE_LIBELF_SUPPORT
libnuma: [ on ] # HAVE_LIBNUMA_SUPPORT
numa_num_possible_cpus: [ on ] # HAVE_LIBNUMA_SUPPORT
libperl: [ on ] # HAVE_LIBPERL_SUPPORT
libpython: [ on ] # HAVE_LIBPYTHON_SUPPORT
libslang: [ on ] # HAVE_SLANG_SUPPORT
libcrypto: [ on ] # HAVE_LIBCRYPTO_SUPPORT
libunwind: [ on ] # HAVE_LIBUNWIND_SUPPORT
libdw-dwarf-unwind: [ on ] # HAVE_DWARF_SUPPORT
zlib: [ on ] # HAVE_ZLIB_SUPPORT
lzma: [ on ] # HAVE_LZMA_SUPPORT
get_cpuid: [ on ] # HAVE_AUXTRACE_SUPPORT
bpf: [ on ] # HAVE_LIBBPF_SUPPORT
# perf test
1: vmlinux symtab matches kallsyms : Ok
2: Detect openat syscall event : Ok
3: Detect openat syscall event on all cpus : Ok
4: Read samples using the mmap interface : Ok
5: Test data source output : Ok
6: Parse event definition strings : Ok
7: Simple expression parser : Ok
8: PERF_RECORD_* events & perf_sample fields : Ok
9: Parse perf pmu format : Ok
10: DSO data read : Ok
11: DSO data cache : Ok
12: DSO data reopen : Ok
13: Roundtrip evsel->name : Ok
14: Parse sched tracepoints fields : Ok
15: syscalls:sys_enter_openat event fields : Ok
16: Setup struct perf_event_attr : Ok
17: Match and link multiple hists : Ok
18: 'import perf' in python : Ok
19: Breakpoint overflow signal handler : Ok
20: Breakpoint overflow sampling : Ok
21: Breakpoint accounting : Ok
22: Watchpoint :
22.1: Read Only Watchpoint : Skip
22.2: Write Only Watchpoint : Ok
22.3: Read / Write Watchpoint : Ok
22.4: Modify Watchpoint : Ok
23: Number of exit events of a simple workload : Ok
24: Software clock events period values : Ok
25: Object code reading : Ok
26: Sample parsing : Ok
27: Use a dummy software event to keep tracking : Ok
28: Parse with no sample_id_all bit set : Ok
29: Filter hist entries : Ok
30: Lookup mmap thread : Ok
31: Share thread mg : Ok
32: Sort output of hist entries : Ok
33: Cumulate child hist entries : Ok
34: Track with sched_switch : Ok
35: Filter fds with revents mask in a fdarray : Ok
36: Add fd to a fdarray, making it autogrow : Ok
37: kmod_path__parse : Ok
38: Thread map : Ok
39: LLVM search and compile :
39.1: Basic BPF llvm compile : Ok
39.2: kbuild searching : Ok
39.3: Compile source for BPF prologue generation : Ok
39.4: Compile source for BPF relocation : Ok
40: Session topology : Ok
41: BPF filter :
41.1: Basic BPF filtering : Ok
41.2: BPF pinning : Ok
41.3: BPF prologue generation : Ok
41.4: BPF relocation checker : Ok
42: Synthesize thread map : Ok
43: Remove thread map : Ok
44: Synthesize cpu map : Ok
45: Synthesize stat config : Ok
46: Synthesize stat : Ok
47: Synthesize stat round : Ok
48: Synthesize attr update : Ok
49: Event times : Ok
50: Read backward ring buffer : Ok
51: Print cpu map : Ok
52: Probe SDT events : Ok
53: is_printable_array : Ok
54: Print bitmap : Ok
55: perf hooks : Ok
56: builtin clang support : Skip (not compiled in)
57: unit_number__scnprintf : Ok
58: mem2node : Ok
59: x86 rdpmc : Ok
60: Convert perf time to TSC : Ok
61: DWARF unwind : Ok
62: x86 instruction decoder - new instructions : Ok
63: x86 bp modify : Ok
64: probe libc's inet_pton & backtrace it with ping : Ok
65: Use vfs_getname probe to get syscall args filenames : Ok
66: Add vfs_getname probe to get syscall args filenames : Ok
67: Check open filename arg using perf trace + vfs_getname: Ok
$ make -C tools/perf build-test
make: Entering directory '/home/acme/git/perf/tools/perf'
- tarpkg: ./tests/perf-targz-src-pkg .
make_with_clangllvm_O: make LIBCLANGLLVM=1
make_perf_o_O: make perf.o
make_no_slang_O: make NO_SLANG=1
make_tags_O: make tags
make_no_backtrace_O: make NO_BACKTRACE=1
make_no_libbpf_O: make NO_LIBBPF=1
make_minimal_O: make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1
make_no_auxtrace_O: make NO_AUXTRACE=1
make_no_libnuma_O: make NO_LIBNUMA=1
make_install_bin_O: make install-bin
make_no_ui_O: make NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
make_debug_O: make DEBUG=1
make_install_prefix_slash_O: make install prefix=/tmp/krava/
make_no_libaudit_O: make NO_LIBAUDIT=1
make_help_O: make help
make_no_libelf_O: make NO_LIBELF=1
make_no_gtk2_O: make NO_GTK2=1
make_no_libbionic_O: make NO_LIBBIONIC=1
make_install_O: make install
make_util_map_o_O: make util/map.o
make_install_prefix_O: make install prefix=/tmp/krava
make_static_O: make LDFLAGS=-static
make_no_scripts_O: make NO_LIBPYTHON=1 NO_LIBPERL=1
make_no_libunwind_O: make NO_LIBUNWIND=1
make_no_libdw_dwarf_unwind_O: make NO_LIBDW_DWARF_UNWIND=1
make_no_newt_O: make NO_NEWT=1
make_no_libperl_O: make NO_LIBPERL=1
make_util_pmu_bison_o_O: make util/pmu-bison.o
make_no_libpython_O: make NO_LIBPYTHON=1
make_clean_all_O: make clean all
make_pure_O: make
make_no_demangle_O: make NO_DEMANGLE=1
make_doc_O: make doc
make_with_babeltrace_O: make LIBBABELTRACE=1
OK
make: Leaving directory '/home/acme/git/perf/tools/perf'
$
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [GIT PULL 0/4] perf/core fixes and improvements
2019-01-10 16:56 Arnaldo Carvalho de Melo
@ 2019-01-11 7:12 ` Ingo Molnar
0 siblings, 0 replies; 11+ messages in thread
From: Ingo Molnar @ 2019-01-11 7:12 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Clark Williams, linux-kernel, linux-perf-users, Ravi Bangoria,
Arnaldo Carvalho de Melo
* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> Hi Ingo,
>
> Please consider pulling, now there are no more ABI header
> warnings,
>
> - Arnaldo
>
> Test results at the end of this message, as usual.
>
> The following changes since commit 576b50ea235699d83758c0c514c65b8d486a159d:
>
> Merge tag 'perf-core-for-mingo-5.0-20190108' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2019-01-09 07:59:40 +0100)
>
> are available in the Git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-5.0-20190110
>
> for you to fetch changes up to 15c03092a9fbcdd041f58e5f832bf76c21c42e6a:
>
> tools headers powerpc: Remove unistd.h (2019-01-10 10:42:08 -0300)
>
> ----------------------------------------------------------------
> perf/core fixes and improvements:
>
> perf trace:
>
> Ravi Bangoria:
>
> - Rework PowerPC syscall table generation, now using a .tbl file just like
> x86_64 and S/390, also silencing a tools build warning about headers out of
> sync with the kernel sources.
>
> tools include uapi:
>
> Arnaldo Carvalho de Melo:
>
> - Sync linux/if_link.h copy with the kernel sources, silencing a build warning.
>
> perf top:
>
> Arnaldo Carvalho de Melo:
>
> - Add 'arch_cpu_idle' to the list of kernel idle symbols, noticed on a Orange
> Pi Zero ARM board, just like with other symbols in other arches.
>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (2):
> tools include uapi: Sync linux/if_link.h copy with the kernel sources
> perf symbols: Add 'arch_cpu_idle' to the list of kernel idle symbols
>
> Ravi Bangoria (2):
> perf powerpc: Rework syscall table generation
> tools headers powerpc: Remove unistd.h
>
> tools/arch/powerpc/include/uapi/asm/unistd.h | 404 -------------------
> tools/include/uapi/linux/if_link.h | 19 +
> tools/perf/arch/powerpc/Makefile | 15 +-
> .../perf/arch/powerpc/entry/syscalls/mksyscalltbl | 22 +-
> tools/perf/arch/powerpc/entry/syscalls/syscall.tbl | 427 +++++++++++++++++++++
> tools/perf/check-headers.sh | 1 -
> tools/perf/util/symbol.c | 1 +
> 7 files changed, 470 insertions(+), 419 deletions(-)
> delete mode 100644 tools/arch/powerpc/include/uapi/asm/unistd.h
> create mode 100644 tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
Pulled, thanks a lot Arnaldo!
Ingo
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2019-01-11 7:12 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-07 1:34 [GIT PULL 0/4] perf/core fixes and improvements Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 1/4] perf probe: Fix to copy the type for raw parameters Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 2/4] perf probe: Fix memory leaks in add_perf_probe_events Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 3/4] perf tui: Introduce list_head based generic ui_browser refresh routine Arnaldo Carvalho de Melo
2010-08-07 1:34 ` [PATCH 4/4] perf ui: Start breaking down newt.c into multiple files Arnaldo Carvalho de Melo
2010-08-07 6:43 ` [GIT PULL 0/4] perf/core fixes and improvements Ingo Molnar
-- strict thread matches above, loose matches on Subject: below --
2011-03-10 19:29 Arnaldo Carvalho de Melo
2011-10-23 19:12 Arnaldo Carvalho de Melo
2011-10-25 3:22 ` Ingo Molnar
2019-01-10 16:56 Arnaldo Carvalho de Melo
2019-01-11 7:12 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).