Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41cb6654 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'perf-fixes-for-linus' of...

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:
  perf tools: Run generate-cmdlist.sh properly
  perf_event: Clean up perf_event_init_task()
  perf_event: Fix event group handling in __perf_event_sched_*()
  perf timechart: Add a power-only mode
  perf top: Add poll_idle to the skip list
parents e69a9ac5 1ad0560e
Loading
Loading
Loading
Loading
+9 −25
Original line number Diff line number Diff line
@@ -1030,14 +1030,10 @@ void __perf_event_sched_out(struct perf_event_context *ctx,
	update_context_time(ctx);

	perf_disable();
	if (ctx->nr_active) {
		list_for_each_entry(event, &ctx->group_list, group_entry) {
			if (event != event->group_leader)
				event_sched_out(event, cpuctx, ctx);
			else
	if (ctx->nr_active)
		list_for_each_entry(event, &ctx->group_list, group_entry)
			group_sched_out(event, cpuctx, ctx);
		}
	}

	perf_enable();
 out:
	spin_unlock(&ctx->lock);
@@ -1258,12 +1254,8 @@ __perf_event_sched_in(struct perf_event_context *ctx,
		if (event->cpu != -1 && event->cpu != cpu)
			continue;

		if (event != event->group_leader)
			event_sched_in(event, cpuctx, ctx, cpu);
		else {
		if (group_can_go_on(event, cpuctx, 1))
			group_sched_in(event, cpuctx, ctx, cpu);
		}

		/*
		 * If this pinned group hasn't been scheduled,
@@ -1291,16 +1283,10 @@ __perf_event_sched_in(struct perf_event_context *ctx,
		if (event->cpu != -1 && event->cpu != cpu)
			continue;

		if (event != event->group_leader) {
			if (event_sched_in(event, cpuctx, ctx, cpu))
				can_add_hw = 0;
		} else {
			if (group_can_go_on(event, cpuctx, can_add_hw)) {
		if (group_can_go_on(event, cpuctx, can_add_hw))
			if (group_sched_in(event, cpuctx, ctx, cpu))
				can_add_hw = 0;
	}
		}
	}
	perf_enable();
 out:
	spin_unlock(&ctx->lock);
@@ -4781,9 +4767,7 @@ int perf_event_init_task(struct task_struct *child)
	 * We dont have to disable NMIs - we are only looking at
	 * the list, not manipulating it:
	 */
	list_for_each_entry_rcu(event, &parent_ctx->event_list, event_entry) {
		if (event != event->group_leader)
			continue;
	list_for_each_entry(event, &parent_ctx->group_list, group_entry) {

		if (!event->attr.inherit) {
			inherited_all = 0;
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@ OPTIONS
-w::
--width=::
        Select the width of the SVG file (default: 1000)
-p::
--power-only::
        Only output the CPU power section of the diagram


SEE ALSO
+1 −1
Original line number Diff line number Diff line
@@ -728,7 +728,7 @@ $(BUILT_INS): perf$X
common-cmds.h: util/generate-cmdlist.sh command-list.txt

common-cmds.h: $(wildcard Documentation/perf-*.txt)
	$(QUIET_GEN)util/generate-cmdlist.sh > $@+ && mv $@+ $@
	$(QUIET_GEN). util/generate-cmdlist.sh > $@+ && mv $@+ $@

$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
	$(QUIET_GEN)$(RM) $@ $@+ && \
+7 −3
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ static u64 turbo_frequency;

static u64		first_time, last_time;

static int		power_only;


static struct perf_header	*header;

@@ -547,7 +549,7 @@ static void end_sample_processing(void)
	u64 cpu;
	struct power_event *pwr;

	for (cpu = 0; cpu < numcpus; cpu++) {
	for (cpu = 0; cpu <= numcpus; cpu++) {
		pwr = malloc(sizeof(struct power_event));
		if (!pwr)
			return;
@@ -871,7 +873,7 @@ static int determine_display_tasks(u64 threshold)
		/* no exit marker, task kept running to the end */
		if (p->end_time == 0)
			p->end_time = last_time;
		if (p->total_time >= threshold)
		if (p->total_time >= threshold && !power_only)
			p->display = 1;

		c = p->all;
@@ -882,7 +884,7 @@ static int determine_display_tasks(u64 threshold)
			if (c->start_time == 1)
				c->start_time = first_time;

			if (c->total_time >= threshold) {
			if (c->total_time >= threshold && !power_only) {
				c->display = 1;
				count++;
			}
@@ -1134,6 +1136,8 @@ static const struct option options[] = {
		    "output file name"),
	OPT_INTEGER('w', "width", &svg_page_width,
		    "page width"),
	OPT_BOOLEAN('p', "power-only", &power_only,
		    "output power data only"),
	OPT_END()
};

+1 −0
Original line number Diff line number Diff line
@@ -782,6 +782,7 @@ static const char *skip_symbols[] = {
	"exit_idle",
	"mwait_idle",
	"mwait_idle_with_hints",
	"poll_idle",
	"ppc64_runlatch_off",
	"pseries_dedicated_idle_sleep",
	NULL
Loading