Thread (20 messages) 20 messages, 3 authors, 2014-02-07

[PATCH v2 1/7] ARM: perf_event: Support percpu irqs for the CPU PMU

From: Will Deacon <hidden>
Date: 2014-01-17 18:09:01
Also in: linux-arm-msm, lkml

On Fri, Jan 17, 2014 at 05:54:36PM +0000, Stephen Boyd wrote:
On 01/17/14 07:04, Will Deacon wrote:
quoted
Hi Stephen,

On Wed, Jan 15, 2014 at 08:54:27PM +0000, Stephen Boyd wrote:
quoted
On 01/15, Stephen Boyd wrote:
quoted
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
index 789d846a9184..e76750980b38 100644
--- a/arch/arm/kernel/perf_event.c
+++ b/arch/arm/kernel/perf_event.c
@@ -295,9 +297,15 @@ validate_group(struct perf_event *event)
 
 static irqreturn_t armpmu_dispatch_irq(int irq, void *dev)
 {
-	struct arm_pmu *armpmu = (struct arm_pmu *) dev;
-	struct platform_device *plat_device = armpmu->plat_device;
-	struct arm_pmu_platdata *plat = dev_get_platdata(&plat_device->dev);
+	struct arm_pmu *armpmu;
+	struct platform_device *plat_device;
+	struct arm_pmu_platdata *plat;
+
+	if (irq_is_percpu(irq))
+		dev = *(struct arm_pmu_cpu **)dev;
Oh. I just realized that struct arm_pmu_cpu doesn't even exist. This
still compiles though because we're dealing with a void pointer.

Perhaps its better to just do

	dev = *(void **)dev;

here. Can you fix that up when applying? Otherwise I'll do it on
the next send if there are more comments.
Shouldn't that actually be some per_cpu accessor like this_cpu_ptr?
Nope. The genirq layer unwraps the per_cpu pointer and passes it to the
handler.
Ah yeah, I forget the dispatcher is what genirq sees as the handler. In
which case your idea looks right.

Sorry for the noise.

Will
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help