Merge branch 'linus' into x86/asm, before applying dependent patch
[firefly-linux-kernel-4.4.55.git] / tools / perf / util / hist.c
index 70b48a65064cbc85fd30d6777eb1a9ca25ca0098..cc22b9158b93c41fd0d44cd451ba189c56bc19dd 100644 (file)
@@ -263,15 +263,9 @@ void hists__decay_entries(struct hists *hists, bool zap_user, bool zap_kernel)
        while (next) {
                n = rb_entry(next, struct hist_entry, rb_node);
                next = rb_next(&n->rb_node);
-               /*
-                * We may be annotating this, for instance, so keep it here in
-                * case some it gets new samples, we'll eventually free it when
-                * the user stops browsing and it agains gets fully decayed.
-                */
                if (((zap_user && n->level == '.') ||
                     (zap_kernel && n->level != '.') ||
-                    hists__decay_entry(hists, n)) &&
-                   !n->used) {
+                    hists__decay_entry(hists, n))) {
                        hists__delete_entry(hists, n);
                }
        }
@@ -355,6 +349,7 @@ static struct hist_entry *hist_entry__new(struct hist_entry *template,
                        callchain_init(he->callchain);
 
                INIT_LIST_HEAD(&he->pairs.node);
+               thread__get(he->thread);
        }
 
        return he;
@@ -941,6 +936,7 @@ hist_entry__collapse(struct hist_entry *left, struct hist_entry *right)
 
 void hist_entry__delete(struct hist_entry *he)
 {
+       thread__zput(he->thread);
        zfree(&he->branch_info);
        zfree(&he->mem_info);
        zfree(&he->stat_acc);
@@ -1169,6 +1165,7 @@ static void hists__remove_entry_filter(struct hists *hists, struct hist_entry *h
        /* force fold unfiltered entry for simplicity */
        h->ms.unfolded = false;
        h->row_offset = 0;
+       h->nr_rows = 0;
 
        hists->stats.nr_non_filtered_samples += h->stat.nr_events;