From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Michael Ellerman <mpe@ellerman.id.au>,
linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-s390@vger.kernel.org, sparclinux@vger.kernel.org
Subject: Re: [PATCH v3 7/8] perf: Define PMU_TXN_READ interface
Date: Wed, 22 Jul 2015 16:19:16 -0700 [thread overview]
Message-ID: <20150722231916.GA1863@us.ibm.com> (raw)
In-Reply-To: <20150722055503.GO25159@twins.programming.kicks-ass.net>
Peter Zijlstra [peterz@infradead.org] wrote:
| I've not woken up yet, and not actually fully read the email, but can
| you stuff the entire above chunk inside the IPI?
|
| I think you could then actually optimize __perf_event_read() as well,
| because all these events should be on the same context, so no point in
| calling update_*time*() for every event or so.
|
Do you mean something like this (will move the rename to a separate
patch before posting):
--
From e8eddb5d3877ebdb3b71213a00aaa980f4010dd0 Mon Sep 17 00:00:00 2001
From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Date: Tue, 7 Jul 2015 21:45:23 -0400
Subject: [PATCH 1/1] perf: Define PMU_TXN_READ interface
Define a new PERF_PMU_TXN_READ interface to read a group of counters
at once. Note that we use this interface with all PMUs.
PMUs that implement this interface use the ->read() operation to _queue_
the counters to be read and use ->commit_txn() to actually read all the
queued counters at once.
PMUs that don't implement PERF_PMU_TXN_READ ignore ->start_txn() and
->commit_txn() and continue to read counters one at a time.
Thanks to input from Peter Zijlstra.
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
---
Changelog[v5]
[Peter Zijlstra] Ensure the entire transaction happens on the same CPU.
Changelog[v4]
[Peter Zijlstra] Add lockdep_assert_held() in perf_event_read_group()
---
include/linux/perf_event.h | 1 +
kernel/events/core.c | 72 +++++++++++++++++++++++++++++++++++++-------
2 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 44bf05f..da307ad 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -169,6 +169,7 @@ struct perf_event;
#define PERF_EVENT_TXN 0x1
#define PERF_PMU_TXN_ADD 0x1 /* txn to add/schedule event on PMU */
+#define PERF_PMU_TXN_READ 0x2 /* txn to read event group from PMU */
/**
* pmu::capabilities flags
diff --git a/kernel/events/core.c b/kernel/events/core.c
index a6bd09d..7177dd8 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -3174,12 +3174,8 @@ void perf_event_exec(void)
rcu_read_unlock();
}
-/*
- * Cross CPU call to read the hardware event
- */
-static void __perf_event_read(void *info)
+static void __perf_event_read(struct perf_event *event, int update_ctx)
{
- struct perf_event *event = info;
struct perf_event_context *ctx = event->ctx;
struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
@@ -3194,7 +3190,7 @@ static void __perf_event_read(void *info)
return;
raw_spin_lock(&ctx->lock);
- if (ctx->is_active) {
+ if (ctx->is_active && update_ctx) {
update_context_time(ctx);
update_cgrp_time_from_event(event);
}
@@ -3204,6 +3200,16 @@ static void __perf_event_read(void *info)
raw_spin_unlock(&ctx->lock);
}
+/*
+ * Cross CPU call to read the hardware event
+ */
+static void __perf_event_read_ipi(void *info)
+{
+ struct perf_event *event = info;
+
+ __perf_event_read(event, 1);
+}
+
static inline u64 perf_event_count(struct perf_event *event)
{
if (event->pmu->count)
@@ -3220,7 +3226,7 @@ static void perf_event_read(struct perf_event *event)
*/
if (event->state == PERF_EVENT_STATE_ACTIVE) {
smp_call_function_single(event->oncpu,
- __perf_event_read, event, 1);
+ __perf_event_read_ipi, event, 1);
} else if (event->state == PERF_EVENT_STATE_INACTIVE) {
struct perf_event_context *ctx = event->ctx;
unsigned long flags;
@@ -3765,6 +3771,36 @@ static void orphans_remove_work(struct work_struct *work)
put_ctx(ctx);
}
+/*
+ * Use the transaction interface to read the group of events in @leader.
+ * PMUs like the 24x7 counters in Power, can use this to queue the events
+ * in the ->read() operation and perform the actual read in ->commit_txn.
+ *
+ * Other PMUs can ignore the ->start_txn and ->commit_txn and read each
+ * PMU directly in the ->read() operation.
+ */
+static int perf_event_read_group(struct perf_event *leader)
+{
+ int ret;
+ struct perf_event *sub;
+ struct pmu *pmu;
+ struct perf_event_context *ctx = leader->ctx;
+
+ lockdep_assert_held(&ctx->mutex);
+
+ pmu = leader->pmu;
+
+ pmu->start_txn(pmu, PERF_PMU_TXN_READ);
+
+ __perf_event_read(leader, 1);
+ list_for_each_entry(sub, &leader->sibling_list, group_entry)
+ __perf_event_read(sub, 0);
+
+ ret = pmu->commit_txn(pmu);
+
+ return ret;
+}
+
u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
{
u64 total = 0;
@@ -3794,7 +3830,17 @@ static int perf_read_group(struct perf_event *event,
lockdep_assert_held(&ctx->mutex);
- count = perf_event_read_value(leader, &enabled, &running);
+ mutex_lock(&leader->child_mutex);
+
+ ret = perf_event_read_group(leader);
+ if (ret) {
+ mutex_unlock(&leader->child_mutex);
+ return ret;
+ }
+
+ count = perf_event_aggregate(leader, &enabled, &running);
+
+ mutex_unlock(&leader->child_mutex);
values[n++] = 1 + leader->nr_siblings;
if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
@@ -3815,15 +3861,19 @@ static int perf_read_group(struct perf_event *event,
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
n = 0;
- values[n++] = perf_event_read_value(sub, &enabled, &running);
+ mutex_lock(&sub->child_mutex);
+
+ values[n++] = perf_event_aggregate(sub, &enabled, &running);
+
+ mutex_unlock(&sub->child_mutex);
+
if (read_format & PERF_FORMAT_ID)
values[n++] = primary_event_id(sub);
size = n * sizeof(u64);
- if (copy_to_user(buf + ret, values, size)) {
+ if (copy_to_user(buf + ret, values, size))
return -EFAULT;
- }
ret += size;
}
--
1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Michael Ellerman <mpe@ellerman.id.au>,
linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-s390@vger.kernel.org, sparclinux@vger.kernel.org
Subject: Re: [PATCH v3 7/8] perf: Define PMU_TXN_READ interface
Date: Wed, 22 Jul 2015 16:19:16 -0700 [thread overview]
Message-ID: <20150722231916.GA1863@us.ibm.com> (raw)
In-Reply-To: <20150722055503.GO25159@twins.programming.kicks-ass.net>
Peter Zijlstra [peterz@infradead.org] wrote:
| I've not woken up yet, and not actually fully read the email, but can
| you stuff the entire above chunk inside the IPI?
|
| I think you could then actually optimize __perf_event_read() as well,
| because all these events should be on the same context, so no point in
| calling update_*time*() for every event or so.
|
Do you mean something like this (will move the rename to a separate
patch before posting):
--
>From e8eddb5d3877ebdb3b71213a00aaa980f4010dd0 Mon Sep 17 00:00:00 2001
From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Date: Tue, 7 Jul 2015 21:45:23 -0400
Subject: [PATCH 1/1] perf: Define PMU_TXN_READ interface
Define a new PERF_PMU_TXN_READ interface to read a group of counters
at once. Note that we use this interface with all PMUs.
PMUs that implement this interface use the ->read() operation to _queue_
the counters to be read and use ->commit_txn() to actually read all the
queued counters at once.
PMUs that don't implement PERF_PMU_TXN_READ ignore ->start_txn() and
->commit_txn() and continue to read counters one at a time.
Thanks to input from Peter Zijlstra.
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
---
Changelog[v5]
[Peter Zijlstra] Ensure the entire transaction happens on the same CPU.
Changelog[v4]
[Peter Zijlstra] Add lockdep_assert_held() in perf_event_read_group()
---
include/linux/perf_event.h | 1 +
kernel/events/core.c | 72 +++++++++++++++++++++++++++++++++++++-------
2 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 44bf05f..da307ad 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -169,6 +169,7 @@ struct perf_event;
#define PERF_EVENT_TXN 0x1
#define PERF_PMU_TXN_ADD 0x1 /* txn to add/schedule event on PMU */
+#define PERF_PMU_TXN_READ 0x2 /* txn to read event group from PMU */
/**
* pmu::capabilities flags
diff --git a/kernel/events/core.c b/kernel/events/core.c
index a6bd09d..7177dd8 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -3174,12 +3174,8 @@ void perf_event_exec(void)
rcu_read_unlock();
}
-/*
- * Cross CPU call to read the hardware event
- */
-static void __perf_event_read(void *info)
+static void __perf_event_read(struct perf_event *event, int update_ctx)
{
- struct perf_event *event = info;
struct perf_event_context *ctx = event->ctx;
struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
@@ -3194,7 +3190,7 @@ static void __perf_event_read(void *info)
return;
raw_spin_lock(&ctx->lock);
- if (ctx->is_active) {
+ if (ctx->is_active && update_ctx) {
update_context_time(ctx);
update_cgrp_time_from_event(event);
}
@@ -3204,6 +3200,16 @@ static void __perf_event_read(void *info)
raw_spin_unlock(&ctx->lock);
}
+/*
+ * Cross CPU call to read the hardware event
+ */
+static void __perf_event_read_ipi(void *info)
+{
+ struct perf_event *event = info;
+
+ __perf_event_read(event, 1);
+}
+
static inline u64 perf_event_count(struct perf_event *event)
{
if (event->pmu->count)
@@ -3220,7 +3226,7 @@ static void perf_event_read(struct perf_event *event)
*/
if (event->state == PERF_EVENT_STATE_ACTIVE) {
smp_call_function_single(event->oncpu,
- __perf_event_read, event, 1);
+ __perf_event_read_ipi, event, 1);
} else if (event->state == PERF_EVENT_STATE_INACTIVE) {
struct perf_event_context *ctx = event->ctx;
unsigned long flags;
@@ -3765,6 +3771,36 @@ static void orphans_remove_work(struct work_struct *work)
put_ctx(ctx);
}
+/*
+ * Use the transaction interface to read the group of events in @leader.
+ * PMUs like the 24x7 counters in Power, can use this to queue the events
+ * in the ->read() operation and perform the actual read in ->commit_txn.
+ *
+ * Other PMUs can ignore the ->start_txn and ->commit_txn and read each
+ * PMU directly in the ->read() operation.
+ */
+static int perf_event_read_group(struct perf_event *leader)
+{
+ int ret;
+ struct perf_event *sub;
+ struct pmu *pmu;
+ struct perf_event_context *ctx = leader->ctx;
+
+ lockdep_assert_held(&ctx->mutex);
+
+ pmu = leader->pmu;
+
+ pmu->start_txn(pmu, PERF_PMU_TXN_READ);
+
+ __perf_event_read(leader, 1);
+ list_for_each_entry(sub, &leader->sibling_list, group_entry)
+ __perf_event_read(sub, 0);
+
+ ret = pmu->commit_txn(pmu);
+
+ return ret;
+}
+
u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
{
u64 total = 0;
@@ -3794,7 +3830,17 @@ static int perf_read_group(struct perf_event *event,
lockdep_assert_held(&ctx->mutex);
- count = perf_event_read_value(leader, &enabled, &running);
+ mutex_lock(&leader->child_mutex);
+
+ ret = perf_event_read_group(leader);
+ if (ret) {
+ mutex_unlock(&leader->child_mutex);
+ return ret;
+ }
+
+ count = perf_event_aggregate(leader, &enabled, &running);
+
+ mutex_unlock(&leader->child_mutex);
values[n++] = 1 + leader->nr_siblings;
if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
@@ -3815,15 +3861,19 @@ static int perf_read_group(struct perf_event *event,
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
n = 0;
- values[n++] = perf_event_read_value(sub, &enabled, &running);
+ mutex_lock(&sub->child_mutex);
+
+ values[n++] = perf_event_aggregate(sub, &enabled, &running);
+
+ mutex_unlock(&sub->child_mutex);
+
if (read_format & PERF_FORMAT_ID)
values[n++] = primary_event_id(sub);
size = n * sizeof(u64);
- if (copy_to_user(buf + ret, values, size)) {
+ if (copy_to_user(buf + ret, values, size))
return -EFAULT;
- }
ret += size;
}
--
1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Michael Ellerman <mpe@ellerman.id.au>,
linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-s390@vger.kernel.org, sparclinux@vger.kernel.org
Subject: Re: [PATCH v3 7/8] perf: Define PMU_TXN_READ interface
Date: Wed, 22 Jul 2015 23:19:16 +0000 [thread overview]
Message-ID: <20150722231916.GA1863@us.ibm.com> (raw)
In-Reply-To: <20150722055503.GO25159@twins.programming.kicks-ass.net>
Peter Zijlstra [peterz@infradead.org] wrote:
| I've not woken up yet, and not actually fully read the email, but can
| you stuff the entire above chunk inside the IPI?
|
| I think you could then actually optimize __perf_event_read() as well,
| because all these events should be on the same context, so no point in
| calling update_*time*() for every event or so.
|
Do you mean something like this (will move the rename to a separate
patch before posting):
--
From e8eddb5d3877ebdb3b71213a00aaa980f4010dd0 Mon Sep 17 00:00:00 2001
From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Date: Tue, 7 Jul 2015 21:45:23 -0400
Subject: [PATCH 1/1] perf: Define PMU_TXN_READ interface
Define a new PERF_PMU_TXN_READ interface to read a group of counters
at once. Note that we use this interface with all PMUs.
PMUs that implement this interface use the ->read() operation to _queue_
the counters to be read and use ->commit_txn() to actually read all the
queued counters at once.
PMUs that don't implement PERF_PMU_TXN_READ ignore ->start_txn() and
->commit_txn() and continue to read counters one at a time.
Thanks to input from Peter Zijlstra.
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
---
Changelog[v5]
[Peter Zijlstra] Ensure the entire transaction happens on the same CPU.
Changelog[v4]
[Peter Zijlstra] Add lockdep_assert_held() in perf_event_read_group()
---
include/linux/perf_event.h | 1 +
kernel/events/core.c | 72 +++++++++++++++++++++++++++++++++++++-------
2 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 44bf05f..da307ad 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -169,6 +169,7 @@ struct perf_event;
#define PERF_EVENT_TXN 0x1
#define PERF_PMU_TXN_ADD 0x1 /* txn to add/schedule event on PMU */
+#define PERF_PMU_TXN_READ 0x2 /* txn to read event group from PMU */
/**
* pmu::capabilities flags
diff --git a/kernel/events/core.c b/kernel/events/core.c
index a6bd09d..7177dd8 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -3174,12 +3174,8 @@ void perf_event_exec(void)
rcu_read_unlock();
}
-/*
- * Cross CPU call to read the hardware event
- */
-static void __perf_event_read(void *info)
+static void __perf_event_read(struct perf_event *event, int update_ctx)
{
- struct perf_event *event = info;
struct perf_event_context *ctx = event->ctx;
struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
@@ -3194,7 +3190,7 @@ static void __perf_event_read(void *info)
return;
raw_spin_lock(&ctx->lock);
- if (ctx->is_active) {
+ if (ctx->is_active && update_ctx) {
update_context_time(ctx);
update_cgrp_time_from_event(event);
}
@@ -3204,6 +3200,16 @@ static void __perf_event_read(void *info)
raw_spin_unlock(&ctx->lock);
}
+/*
+ * Cross CPU call to read the hardware event
+ */
+static void __perf_event_read_ipi(void *info)
+{
+ struct perf_event *event = info;
+
+ __perf_event_read(event, 1);
+}
+
static inline u64 perf_event_count(struct perf_event *event)
{
if (event->pmu->count)
@@ -3220,7 +3226,7 @@ static void perf_event_read(struct perf_event *event)
*/
if (event->state = PERF_EVENT_STATE_ACTIVE) {
smp_call_function_single(event->oncpu,
- __perf_event_read, event, 1);
+ __perf_event_read_ipi, event, 1);
} else if (event->state = PERF_EVENT_STATE_INACTIVE) {
struct perf_event_context *ctx = event->ctx;
unsigned long flags;
@@ -3765,6 +3771,36 @@ static void orphans_remove_work(struct work_struct *work)
put_ctx(ctx);
}
+/*
+ * Use the transaction interface to read the group of events in @leader.
+ * PMUs like the 24x7 counters in Power, can use this to queue the events
+ * in the ->read() operation and perform the actual read in ->commit_txn.
+ *
+ * Other PMUs can ignore the ->start_txn and ->commit_txn and read each
+ * PMU directly in the ->read() operation.
+ */
+static int perf_event_read_group(struct perf_event *leader)
+{
+ int ret;
+ struct perf_event *sub;
+ struct pmu *pmu;
+ struct perf_event_context *ctx = leader->ctx;
+
+ lockdep_assert_held(&ctx->mutex);
+
+ pmu = leader->pmu;
+
+ pmu->start_txn(pmu, PERF_PMU_TXN_READ);
+
+ __perf_event_read(leader, 1);
+ list_for_each_entry(sub, &leader->sibling_list, group_entry)
+ __perf_event_read(sub, 0);
+
+ ret = pmu->commit_txn(pmu);
+
+ return ret;
+}
+
u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
{
u64 total = 0;
@@ -3794,7 +3830,17 @@ static int perf_read_group(struct perf_event *event,
lockdep_assert_held(&ctx->mutex);
- count = perf_event_read_value(leader, &enabled, &running);
+ mutex_lock(&leader->child_mutex);
+
+ ret = perf_event_read_group(leader);
+ if (ret) {
+ mutex_unlock(&leader->child_mutex);
+ return ret;
+ }
+
+ count = perf_event_aggregate(leader, &enabled, &running);
+
+ mutex_unlock(&leader->child_mutex);
values[n++] = 1 + leader->nr_siblings;
if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
@@ -3815,15 +3861,19 @@ static int perf_read_group(struct perf_event *event,
list_for_each_entry(sub, &leader->sibling_list, group_entry) {
n = 0;
- values[n++] = perf_event_read_value(sub, &enabled, &running);
+ mutex_lock(&sub->child_mutex);
+
+ values[n++] = perf_event_aggregate(sub, &enabled, &running);
+
+ mutex_unlock(&sub->child_mutex);
+
if (read_format & PERF_FORMAT_ID)
values[n++] = primary_event_id(sub);
size = n * sizeof(u64);
- if (copy_to_user(buf + ret, values, size)) {
+ if (copy_to_user(buf + ret, values, size))
return -EFAULT;
- }
ret += size;
}
--
1.7.9.5
next prev parent reply other threads:[~2015-07-22 23:19 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-15 3:01 [PATCH v3 0/8] Implement group-read of events using txn interface Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` [PATCH v3 1/8] powerpc/perf/hv-24x7: Whitespace - fix parameter alignment Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-08-03 1:35 ` [v3, " Michael Ellerman
2015-08-03 1:35 ` [v3,1/8] " Michael Ellerman
2015-08-03 1:35 ` Michael Ellerman
2015-07-15 3:01 ` [PATCH v3 2/8] powerpc/perf/hv-24x7: Simplify extracting counter from result buffer Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-08-03 1:35 ` [v3, " Michael Ellerman
2015-08-03 1:35 ` Michael Ellerman
2015-07-15 3:01 ` [PATCH v3 3/8] perf: Add a flags parameter to pmu txn interfaces Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-16 20:17 ` Peter Zijlstra
2015-07-16 20:17 ` Peter Zijlstra
2015-07-16 21:28 ` Sukadev Bhattiprolu
2015-07-16 21:28 ` Sukadev Bhattiprolu
2015-07-16 20:48 ` Peter Zijlstra
2015-07-16 20:48 ` Peter Zijlstra
2015-07-15 3:01 ` [PATCH v3 4/8] perf: Split perf_event_read() and perf_event_count() Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` [PATCH v3 5/8] perf: Split perf_event_read_value() Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-16 21:12 ` Peter Zijlstra
2015-07-16 21:12 ` Peter Zijlstra
2015-07-16 21:41 ` Sukadev Bhattiprolu
2015-07-16 21:41 ` Sukadev Bhattiprolu
2015-07-23 7:45 ` Peter Zijlstra
2015-07-23 7:45 ` Peter Zijlstra
2015-07-27 5:54 ` Sukadev Bhattiprolu
2015-07-27 5:54 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` [PATCH v3 6/8] perf: Rename perf_event_read_{one, group}, perf_read_hw Sukadev Bhattiprolu
2015-07-15 3:01 ` [PATCH v3 6/8] perf: Rename perf_event_read_{one,group}, perf_read_hw Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` [PATCH v3 6/8] perf: Rename perf_event_read_{one, group}, perf_read_hw Sukadev Bhattiprolu
2015-07-15 3:01 ` [PATCH v3 7/8] perf: Define PMU_TXN_READ interface Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-16 22:20 ` Peter Zijlstra
2015-07-16 22:20 ` Peter Zijlstra
2015-07-22 1:50 ` Sukadev Bhattiprolu
2015-07-22 1:50 ` Sukadev Bhattiprolu
2015-07-22 5:55 ` Peter Zijlstra
2015-07-22 5:55 ` Peter Zijlstra
2015-07-22 23:19 ` Sukadev Bhattiprolu [this message]
2015-07-22 23:19 ` Sukadev Bhattiprolu
2015-07-22 23:19 ` Sukadev Bhattiprolu
2015-07-23 8:04 ` Peter Zijlstra
2015-07-23 8:04 ` Peter Zijlstra
2015-07-24 1:17 ` Sukadev Bhattiprolu
2015-07-24 1:17 ` Sukadev Bhattiprolu
2015-09-13 11:11 ` [tip:perf/core] perf/core: Add group reads to perf_event_read() tip-bot for Peter Zijlstra
2015-07-15 3:01 ` [PATCH v3 8/8] powerpc/perf/hv-24x7: Use PMU_TXN_READ interface Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
2015-07-15 3:01 ` Sukadev Bhattiprolu
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=20150722231916.GA1863@us.ibm.com \
--to=sukadev@linux.vnet.ibm.com \
--cc=acme@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=peterz@infradead.org \
--cc=sparclinux@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.