Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 209257
b: refs/heads/master
c: d247eb6
h: refs/heads/master
i:
  209255: 16612ea
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo committed Aug 10, 2010
1 parent d37ae1d commit 0dbfe9d
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 57 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1c250d709fdc8aa5bf42d90be99428a01a256a55
refs/heads/master: d247eb6b924bbc2f13748c89b6c72c7a3d46645c
9 changes: 3 additions & 6 deletions trunk/arch/x86/kernel/cpu/perf_event_p4.c
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,6 @@ static int p4_pmu_handle_irq(struct pt_regs *regs)
cpuc = &__get_cpu_var(cpu_hw_events);

for (idx = 0; idx < x86_pmu.num_counters; idx++) {
int overflow;

if (!test_bit(idx, cpuc->active_mask))
continue;
Expand All @@ -667,14 +666,12 @@ static int p4_pmu_handle_irq(struct pt_regs *regs)
WARN_ON_ONCE(hwc->idx != idx);

/* it might be unflagged overflow */
overflow = p4_pmu_clear_cccr_ovf(hwc);
handled = p4_pmu_clear_cccr_ovf(hwc);

val = x86_perf_event_update(event);
if (!overflow && (val & (1ULL << (x86_pmu.cntval_bits - 1))))
if (!handled && (val & (1ULL << (x86_pmu.cntval_bits - 1))))
continue;

handled += overflow;

/* event overflow for sure */
data.period = event->hw.last_period;

Expand All @@ -690,7 +687,7 @@ static int p4_pmu_handle_irq(struct pt_regs *regs)
inc_irq_stat(apic_perf_irqs);
}

return handled > 0;
return handled;
}

/*
Expand Down
36 changes: 18 additions & 18 deletions trunk/tools/perf/util/newt.c
Original file line number Diff line number Diff line change
Expand Up @@ -450,8 +450,8 @@ static int map_browser__search(struct map_browser *self)
if (sym != NULL) {
u32 *idx = symbol__browser_index(sym);

self->b.first_visible_entry = &sym->rb_node;
self->b.index = self->b.first_visible_entry_idx = *idx;
self->b.top = &sym->rb_node;
self->b.index = self->b.top_idx = *idx;
} else
ui_helpline__fpush("%s not found!", target);

Expand Down Expand Up @@ -967,7 +967,7 @@ static int hist_browser__show_callchain_node_rb_tree(struct hist_browser *self,
}

SLsmg_set_color(color);
SLsmg_gotorc(self->b.top + row, self->b.left);
SLsmg_gotorc(self->b.y + row, self->b.x);
slsmg_write_nstring(" ", offset + extra_offset);
slsmg_printf("%c ", folded_sign);
slsmg_write_nstring(str, width);
Expand Down Expand Up @@ -1030,7 +1030,7 @@ static int hist_browser__show_callchain_node(struct hist_browser *self,
}

s = callchain_list__sym_name(chain, ipstr, sizeof(ipstr));
SLsmg_gotorc(self->b.top + row, self->b.left);
SLsmg_gotorc(self->b.y + row, self->b.x);
SLsmg_set_color(color);
slsmg_write_nstring(" ", offset);
slsmg_printf("%c ", folded_sign);
Expand Down Expand Up @@ -1110,7 +1110,7 @@ static int hist_browser__show_entry(struct hist_browser *self,
}

SLsmg_set_color(color);
SLsmg_gotorc(self->b.top + row, self->b.left);
SLsmg_gotorc(self->b.y + row, self->b.x);
if (symbol_conf.use_callchain) {
slsmg_printf("%c ", folded_sign);
width -= 2;
Expand Down Expand Up @@ -1138,10 +1138,10 @@ static unsigned int hist_browser__refresh(struct ui_browser *self)
struct rb_node *nd;
struct hist_browser *hb = container_of(self, struct hist_browser, b);

if (self->first_visible_entry == NULL)
self->first_visible_entry = rb_first(&hb->hists->entries);
if (self->top == NULL)
self->top = rb_first(&hb->hists->entries);

for (nd = self->first_visible_entry; nd; nd = rb_next(nd)) {
for (nd = self->top; nd; nd = rb_next(nd)) {
struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node);

if (h->filtered)
Expand Down Expand Up @@ -1244,7 +1244,7 @@ static void ui_browser__hists_seek(struct ui_browser *self,
nd = hists__filter_entries(rb_first(self->entries));
break;
case SEEK_CUR:
nd = self->first_visible_entry;
nd = self->top;
goto do_offset;
case SEEK_END:
nd = hists__filter_prev_entries(rb_last(self->entries));
Expand All @@ -1258,7 +1258,7 @@ static void ui_browser__hists_seek(struct ui_browser *self,
* Moves not relative to the first visible entry invalidates its
* row_offset:
*/
h = rb_entry(self->first_visible_entry, struct hist_entry, rb_node);
h = rb_entry(self->top, struct hist_entry, rb_node);
h->row_offset = 0;

/*
Expand Down Expand Up @@ -1286,15 +1286,15 @@ static void ui_browser__hists_seek(struct ui_browser *self,
} else {
h->row_offset += offset;
offset = 0;
self->first_visible_entry = nd;
self->top = nd;
break;
}
}
nd = hists__filter_entries(rb_next(nd));
if (nd == NULL)
break;
--offset;
self->first_visible_entry = nd;
self->top = nd;
} while (offset != 0);
} else if (offset < 0) {
while (1) {
Expand All @@ -1307,7 +1307,7 @@ static void ui_browser__hists_seek(struct ui_browser *self,
} else {
h->row_offset += offset;
offset = 0;
self->first_visible_entry = nd;
self->top = nd;
break;
}
} else {
Expand All @@ -1317,7 +1317,7 @@ static void ui_browser__hists_seek(struct ui_browser *self,
} else {
h->row_offset = h->nr_rows + offset;
offset = 0;
self->first_visible_entry = nd;
self->top = nd;
break;
}
}
Expand All @@ -1327,7 +1327,7 @@ static void ui_browser__hists_seek(struct ui_browser *self,
if (nd == NULL)
break;
++offset;
self->first_visible_entry = nd;
self->top = nd;
if (offset == 0) {
/*
* Last unfiltered hist_entry, check if it is
Expand All @@ -1342,7 +1342,7 @@ static void ui_browser__hists_seek(struct ui_browser *self,
first = false;
}
} else {
self->first_visible_entry = nd;
self->top = nd;
h = rb_entry(nd, struct hist_entry, rb_node);
h->row_offset = 0;
}
Expand Down Expand Up @@ -1463,15 +1463,15 @@ static int hist_browser__run(struct hist_browser *self, const char *title,
switch (es->u.key) {
case 'd': { /* Debug */
static int seq;
struct hist_entry *h = rb_entry(self->b.first_visible_entry,
struct hist_entry *h = rb_entry(self->b.top,
struct hist_entry, rb_node);
ui_helpline__pop();
ui_helpline__fpush("%d: nr_ent=(%d,%d), height=%d, idx=%d, fve: idx=%d, row_off=%d, nrows=%d",
seq++, self->b.nr_entries,
self->hists->nr_entries,
self->b.height,
self->b.index,
self->b.first_visible_entry_idx,
self->b.top_idx,
h->row_offset, h->nr_rows);
}
continue;
Expand Down
57 changes: 28 additions & 29 deletions trunk/tools/perf/util/ui/browser.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ void ui_browser__list_head_seek(struct ui_browser *self, off_t offset, int whenc
pos = head->next;
break;
case SEEK_CUR:
pos = self->first_visible_entry;
pos = self->top;
break;
case SEEK_END:
pos = head->prev;
Expand All @@ -66,7 +66,7 @@ void ui_browser__list_head_seek(struct ui_browser *self, off_t offset, int whenc
pos = pos->prev;
}

self->first_visible_entry = pos;
self->top = pos;
}

void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence)
Expand All @@ -79,7 +79,7 @@ void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence)
nd = rb_first(root);
break;
case SEEK_CUR:
nd = self->first_visible_entry;
nd = self->top;
break;
case SEEK_END:
nd = rb_last(root);
Expand All @@ -96,21 +96,21 @@ void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence)
nd = rb_prev(nd);
}

self->first_visible_entry = nd;
self->top = 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);
if (self->top == NULL)
self->top = rb_first(self->entries);

nd = self->first_visible_entry;
nd = self->top;

while (nd != NULL) {
SLsmg_gotorc(self->top + row, self->left);
SLsmg_gotorc(self->y + row, self->x);
self->write(self, nd, row);
if (++row == self->height)
break;
Expand All @@ -122,7 +122,7 @@ unsigned int ui_browser__rb_tree_refresh(struct ui_browser *self)

bool ui_browser__is_current_entry(struct ui_browser *self, unsigned row)
{
return (self->first_visible_entry_idx + row) == self->index;
return self->top_idx + row == self->index;
}

void ui_browser__refresh_dimensions(struct ui_browser *self)
Expand All @@ -135,13 +135,13 @@ void ui_browser__refresh_dimensions(struct ui_browser *self)
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;
self->y = (rows - self->height) / 2;
self->x = (cols - self->width) / 2;
}

void ui_browser__reset_index(struct ui_browser *self)
{
self->index = self->first_visible_entry_idx = 0;
self->index = self->top_idx = 0;
self->seek(self, 0, SEEK_SET);
}

Expand Down Expand Up @@ -180,7 +180,7 @@ int ui_browser__refresh(struct ui_browser *self)
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,
SLsmg_fill_region(self->y + row, self->x,
self->height - row, self->width, ' ');

return 0;
Expand All @@ -205,43 +205,43 @@ int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es)
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;
if (self->index == self->top_idx + self->height) {
++self->top_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;
if (self->index < self->top_idx) {
--self->top_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)
if (self->top_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->top_idx += offset;
self->seek(self, +offset, SEEK_CUR);
break;
case NEWT_KEY_PGUP:
if (self->first_visible_entry_idx == 0)
if (self->top_idx == 0)
break;

if (self->first_visible_entry_idx < self->height)
offset = self->first_visible_entry_idx;
if (self->top_idx < self->height)
offset = self->top_idx;
else
offset = self->height;

self->index -= offset;
self->first_visible_entry_idx -= offset;
self->top_idx -= offset;
self->seek(self, -offset, SEEK_CUR);
break;
case NEWT_KEY_HOME:
Expand All @@ -253,7 +253,7 @@ int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es)
offset = self->nr_entries - 1;

self->index = self->nr_entries - 1;
self->first_visible_entry_idx = self->index - offset;
self->top_idx = self->index - offset;
self->seek(self, -offset, SEEK_END);
break;
default:
Expand All @@ -271,14 +271,13 @@ unsigned int ui_browser__list_head_refresh(struct ui_browser *self)
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;
if (self->top == NULL || self->top == self->entries)
self->top = head->next;

pos = self->first_visible_entry;
pos = self->top;

list_for_each_from(pos, head) {
SLsmg_gotorc(self->top + row, self->left);
SLsmg_gotorc(self->y + row, self->x);
self->write(self, pos, row);
if (++row == self->height)
break;
Expand Down
6 changes: 3 additions & 3 deletions trunk/tools/perf/util/ui/browser.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@

struct ui_browser {
newtComponent form, sb;
u64 index, first_visible_entry_idx;
void *first_visible_entry, *entries;
u16 top, left, width, height;
u64 index, top_idx;
void *top, *entries;
u16 y, x, width, height;
void *priv;
unsigned int (*refresh)(struct ui_browser *self);
void (*write)(struct ui_browser *self, void *entry, int row);
Expand Down

0 comments on commit 0dbfe9d

Please sign in to comment.