mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "tip-bot for Yan, Zheng" <zheng.z.yan@intel.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@kernel.org,
	a.p.zijlstra@chello.nl, zheng.z.yan@intel.com,
	tglx@linutronix.de
Subject: [tip:perf/core] perf: Introduce perf_pmu_migrate_context()
Date: Wed, 20 Jun 2012 03:52:37 -0700	[thread overview]
Message-ID: <tip-0cda4c023132aa93f2dd94811061f812e88daf4c@git.kernel.org> (raw)
In-Reply-To: <1339741902-8449-5-git-send-email-zheng.z.yan@intel.com>

Commit-ID:  0cda4c023132aa93f2dd94811061f812e88daf4c
Gitweb:     http://git.kernel.org/tip/0cda4c023132aa93f2dd94811061f812e88daf4c
Author:     Yan, Zheng <zheng.z.yan@intel.com>
AuthorDate: Fri, 15 Jun 2012 14:31:33 +0800
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 18 Jun 2012 12:13:21 +0200

perf: Introduce perf_pmu_migrate_context()

Originally from Peter Zijlstra. The helper migrates perf events
from one cpu to another cpu.

Signed-off-by: Zheng Yan <zheng.z.yan@intel.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1339741902-8449-5-git-send-email-zheng.z.yan@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 include/linux/perf_event.h |    2 ++
 kernel/events/core.c       |   36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 1ce887a..76c5c8b 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1107,6 +1107,8 @@ perf_event_create_kernel_counter(struct perf_event_attr *attr,
 				struct task_struct *task,
 				perf_overflow_handler_t callback,
 				void *context);
+extern void perf_pmu_migrate_context(struct pmu *pmu,
+				int src_cpu, int dst_cpu);
 extern u64 perf_event_read_value(struct perf_event *event,
 				 u64 *enabled, u64 *running);
 
diff --git a/kernel/events/core.c b/kernel/events/core.c
index fa36a39..f1cf0ed 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -1645,6 +1645,8 @@ perf_install_in_context(struct perf_event_context *ctx,
 	lockdep_assert_held(&ctx->mutex);
 
 	event->ctx = ctx;
+	if (event->cpu != -1)
+		event->cpu = cpu;
 
 	if (!task) {
 		/*
@@ -6379,6 +6381,7 @@ SYSCALL_DEFINE5(perf_event_open,
 	mutex_lock(&ctx->mutex);
 
 	if (move_group) {
+		synchronize_rcu();
 		perf_install_in_context(ctx, group_leader, event->cpu);
 		get_ctx(ctx);
 		list_for_each_entry(sibling, &group_leader->sibling_list,
@@ -6484,6 +6487,39 @@ err:
 }
 EXPORT_SYMBOL_GPL(perf_event_create_kernel_counter);
 
+void perf_pmu_migrate_context(struct pmu *pmu, int src_cpu, int dst_cpu)
+{
+	struct perf_event_context *src_ctx;
+	struct perf_event_context *dst_ctx;
+	struct perf_event *event, *tmp;
+	LIST_HEAD(events);
+
+	src_ctx = &per_cpu_ptr(pmu->pmu_cpu_context, src_cpu)->ctx;
+	dst_ctx = &per_cpu_ptr(pmu->pmu_cpu_context, dst_cpu)->ctx;
+
+	mutex_lock(&src_ctx->mutex);
+	list_for_each_entry_safe(event, tmp, &src_ctx->event_list,
+				 event_entry) {
+		perf_remove_from_context(event);
+		put_ctx(src_ctx);
+		list_add(&event->event_entry, &events);
+	}
+	mutex_unlock(&src_ctx->mutex);
+
+	synchronize_rcu();
+
+	mutex_lock(&dst_ctx->mutex);
+	list_for_each_entry_safe(event, tmp, &events, event_entry) {
+		list_del(&event->event_entry);
+		if (event->state >= PERF_EVENT_STATE_OFF)
+			event->state = PERF_EVENT_STATE_INACTIVE;
+		perf_install_in_context(dst_ctx, event, dst_cpu);
+		get_ctx(dst_ctx);
+	}
+	mutex_unlock(&dst_ctx->mutex);
+}
+EXPORT_SYMBOL_GPL(perf_pmu_migrate_context);
+
 static void sync_child_event(struct perf_event *child_event,
 			       struct task_struct *child)
 {

  reply	other threads:[~2012-06-20 10:52 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-15  6:31 [PATCH V6 0/13] perf: Intel uncore pmu counting support Yan, Zheng
2012-06-15  6:31 ` [PATCH V6 01/13] perf: Export perf_assign_events Yan, Zheng
2012-06-20 10:49   ` [tip:perf/core] perf: Export perf_assign_events() tip-bot for Yan, Zheng
2012-06-15  6:31 ` [PATCH V6 02/13] perf: Avoid race between cpu hotplug and installing event Yan, Zheng
2012-06-20 10:50   ` [tip:perf/core] " tip-bot for Yan, Zheng
2012-06-15  6:31 ` [PATCH V6 03/13] perf: Allow pmu to choose cpu on which to install event Yan, Zheng
2012-06-20 10:51   ` [tip:perf/core] perf: Allow the PMU driver to choose the CPU on which to install events tip-bot for Yan, Zheng
2012-06-15  6:31 ` [PATCH V6 04/13] perf: Introduce perf_pmu_migrate_context Yan, Zheng
2012-06-20 10:52   ` tip-bot for Yan, Zheng [this message]
2012-06-15  6:31 ` [PATCH V6 05/13] perf: Generic intel uncore support Yan, Zheng
2012-06-20 10:54   ` [tip:perf/core] perf/x86: Add generic Intel uncore PMU support tip-bot for Yan, Zheng
2012-06-21 22:43     ` Andrew Morton
2012-06-21 22:46       ` Andrew Morton
2012-06-21 22:47       ` H. Peter Anvin
2012-06-21 22:51         ` Andrew Morton
2012-06-21 23:10           ` H. Peter Anvin
2012-06-21 23:15             ` Andrew Morton
2012-06-21 23:18               ` Andrew Morton
2012-06-21 23:22                 ` H. Peter Anvin
2012-06-21 23:29                   ` Andrew Morton
2012-06-22  8:05       ` Peter Zijlstra
2012-07-24  3:27   ` [PATCH V6 05/13] perf: Generic intel uncore support Stephane Eranian
2012-07-24  6:00     ` Yan, Zheng
2012-07-24  6:21       ` Stephane Eranian
2012-06-15  6:31 ` [PATCH V6 06/13] perf: Add Nehalem and Sandy Bridge " Yan, Zheng
2012-06-15 15:28   ` Peter Zijlstra
2012-06-15 16:31     ` Peter Zijlstra
2012-06-15 18:43     ` Andi Kleen
2012-06-15 17:18   ` Peter Zijlstra
2012-06-15 18:46     ` Stephane Eranian
2012-06-16 12:46       ` Peter Zijlstra
2012-06-16 12:52         ` Peter Zijlstra
2012-06-18  9:23         ` Stephane Eranian
2012-06-19  1:39           ` Yan, Zheng
2012-06-15 17:29   ` Peter Zijlstra
2012-06-15 18:47     ` Stephane Eranian
2012-06-16 12:46       ` Peter Zijlstra
2012-06-20 10:55   ` [tip:perf/core] perf/x86: Add Intel Nehalem and Sandy Bridge uncore PMU support tip-bot for Yan, Zheng
2012-06-15  6:31 ` [PATCH V6 07/13] perf: Generic pci uncore device support Yan, Zheng
2012-06-15 16:02   ` Peter Zijlstra
2012-06-18  3:06     ` Yan, Zheng
2012-06-18  7:43       ` Peter Zijlstra
2012-06-20 10:56   ` [tip:perf/core] perf: Add generic PCI uncore PMU " tip-bot for Yan, Zheng
2012-06-20 16:39     ` [PATCH] perf, x86: Fix section mismatch in uncore_pci_init() Robert Richter
2012-06-25 11:40       ` [tip:perf/core] perf/x86: Fix section mismatch in uncore_pci_init( ) tip-bot for Robert Richter
2012-08-13 17:10   ` [tip:perf/urgent] perf, x86: Fix uncore_types_exit section mismatch tip-bot for Borislav Petkov
2012-06-15  6:31 ` [PATCH V6 08/13] perf: Add Sandy Bridge-EP uncore support Yan, Zheng
2012-06-15 17:10   ` Peter Zijlstra
2012-06-18  1:47     ` Yan, Zheng
2012-06-18  7:42       ` Peter Zijlstra
2012-06-18 15:28   ` Stephane Eranian
2012-06-19  0:59     ` Yan, Zheng
2012-06-19  7:18       ` Stephane Eranian
2012-06-19  8:17         ` Yan, Zheng
2012-06-20 10:56   ` [tip:perf/core] perf/x86: Add Intel Nehalem and " tip-bot for Yan, Zheng
2012-07-22 19:37   ` [PATCH V6 08/13] perf: Add " Stephane Eranian
2012-06-15  6:31 ` [PATCH V6 09/13] perf, tool: Use data struct for arg passing in event parse function Yan, Zheng
2012-06-20 10:57   ` [tip:perf/core] perf/tool: " tip-bot for Jiri Olsa
2012-06-15  6:31 ` [PATCH V6 10/13] perf, tool: Make the event parser reentrantable Yan, Zheng
2012-06-20 10:58   ` [tip:perf/core] perf/tool: Make the event parser re-entrant tip-bot for Zheng Yan
2012-06-15  6:31 ` [PATCH V6 11/13] perf, tool: Add support to reuse event grammar to parse out terms Yan, Zheng
2012-06-20 10:59   ` [tip:perf/core] perf/tool: " tip-bot for Jiri Olsa
2012-06-15  6:31 ` [PATCH V6 12/13] perf, tool: Add pmu event alias support Yan, Zheng
2012-06-20 11:00   ` [tip:perf/core] perf/tool: Add PMU " tip-bot for Zheng Yan
2012-06-15  6:31 ` [PATCH V6 13/13] perf, tool: Add automated test for pure terms parsing Yan, Zheng
2012-06-20 11:01   ` [tip:perf/core] perf/tool: " tip-bot for Jiri Olsa
2012-06-20 16:01 ` [PATCH V6 0/13] perf: Intel uncore pmu counting support Peter Zijlstra
2012-06-21  2:34   ` Yan, Zheng
2012-06-21  8:10     ` Stephane Eranian
2012-06-21  8:43       ` Yan, Zheng
2012-06-21  9:13         ` Stephane Eranian
2012-06-21 11:40           ` Peter Zijlstra
2012-06-21 11:48             ` Stephane Eranian
2012-06-21 13:08               ` Yan, Zheng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tip-0cda4c023132aa93f2dd94811061f812e88daf4c@git.kernel.org \
    --to=zheng.z.yan@intel.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome