All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] perf, cpu hotplug: Run CPU_STARTING notifiers with irqs disabled
@ 2012-09-13 14:42 Srivatsa S. Bhat
  2012-09-13 14:42 ` [PATCH 2/2] perf, cpu hotplug: Use cached value of smp_processor_id() Srivatsa S. Bhat
  2012-10-05 10:43 ` [PATCH 1/2] perf, cpu hotplug: Run CPU_STARTING notifiers with irqs disabled Srivatsa S. Bhat
  0 siblings, 2 replies; 3+ messages in thread
From: Srivatsa S. Bhat @ 2012-09-13 14:42 UTC (permalink / raw)
  To: a.p.zijlstra, acme; +Cc: mingo, paulus, linux-kernel, Srivatsa S. Bhat

The CPU_STARTING notifiers are supposed to be run with irqs disabled. But the
perf_cpu_notifier() macro invokes them without doing that. Fix it.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
---

 include/linux/perf_event.h |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 7602ccb..cc4574d 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1346,10 +1346,13 @@ static inline void perf_event_task_tick(void)				{ }
 do {									\
 	static struct notifier_block fn##_nb __cpuinitdata =		\
 		{ .notifier_call = fn, .priority = CPU_PRI_PERF };	\
+	unsigned long flags;						\
 	fn(&fn##_nb, (unsigned long)CPU_UP_PREPARE,			\
 		(void *)(unsigned long)smp_processor_id());		\
+	local_irq_save(flags);						\
 	fn(&fn##_nb, (unsigned long)CPU_STARTING,			\
 		(void *)(unsigned long)smp_processor_id());		\
+	local_irq_restore(flags);					\
 	fn(&fn##_nb, (unsigned long)CPU_ONLINE,				\
 		(void *)(unsigned long)smp_processor_id());		\
 	register_cpu_notifier(&fn##_nb);				\


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] perf, cpu hotplug: Use cached value of smp_processor_id()
  2012-09-13 14:42 [PATCH 1/2] perf, cpu hotplug: Run CPU_STARTING notifiers with irqs disabled Srivatsa S. Bhat
@ 2012-09-13 14:42 ` Srivatsa S. Bhat
  2012-10-05 10:43 ` [PATCH 1/2] perf, cpu hotplug: Run CPU_STARTING notifiers with irqs disabled Srivatsa S. Bhat
  1 sibling, 0 replies; 3+ messages in thread
From: Srivatsa S. Bhat @ 2012-09-13 14:42 UTC (permalink / raw)
  To: a.p.zijlstra, acme; +Cc: mingo, paulus, linux-kernel, Srivatsa S. Bhat

The perf_cpu_notifier() macro invokes smp_processor_id() multiple
times. Optimize it by using a local variable.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
---

 include/linux/perf_event.h |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index cc4574d..5b5b017 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1346,15 +1346,16 @@ static inline void perf_event_task_tick(void)				{ }
 do {									\
 	static struct notifier_block fn##_nb __cpuinitdata =		\
 		{ .notifier_call = fn, .priority = CPU_PRI_PERF };	\
+	unsigned long cpu = smp_processor_id();				\
 	unsigned long flags;						\
 	fn(&fn##_nb, (unsigned long)CPU_UP_PREPARE,			\
-		(void *)(unsigned long)smp_processor_id());		\
+		(void *)(unsigned long)cpu);				\
 	local_irq_save(flags);						\
 	fn(&fn##_nb, (unsigned long)CPU_STARTING,			\
-		(void *)(unsigned long)smp_processor_id());		\
+		(void *)(unsigned long)cpu);				\
 	local_irq_restore(flags);					\
 	fn(&fn##_nb, (unsigned long)CPU_ONLINE,				\
-		(void *)(unsigned long)smp_processor_id());		\
+		(void *)(unsigned long)cpu);				\
 	register_cpu_notifier(&fn##_nb);				\
 } while (0)
 


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] perf, cpu hotplug: Run CPU_STARTING notifiers with irqs disabled
  2012-09-13 14:42 [PATCH 1/2] perf, cpu hotplug: Run CPU_STARTING notifiers with irqs disabled Srivatsa S. Bhat
  2012-09-13 14:42 ` [PATCH 2/2] perf, cpu hotplug: Use cached value of smp_processor_id() Srivatsa S. Bhat
@ 2012-10-05 10:43 ` Srivatsa S. Bhat
  1 sibling, 0 replies; 3+ messages in thread
From: Srivatsa S. Bhat @ 2012-10-05 10:43 UTC (permalink / raw)
  To: a.p.zijlstra, mingo; +Cc: acme, paulus, linux-kernel

On 09/13/2012 08:12 PM, Srivatsa S. Bhat wrote:
> The CPU_STARTING notifiers are supposed to be run with irqs disabled. But the
> perf_cpu_notifier() macro invokes them without doing that. Fix it.
> 
> Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
> ---

Any thoughts on this?

Regards,
Srivatsa S. Bhat

> 
>  include/linux/perf_event.h |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
> index 7602ccb..cc4574d 100644
> --- a/include/linux/perf_event.h
> +++ b/include/linux/perf_event.h
> @@ -1346,10 +1346,13 @@ static inline void perf_event_task_tick(void)				{ }
>  do {									\
>  	static struct notifier_block fn##_nb __cpuinitdata =		\
>  		{ .notifier_call = fn, .priority = CPU_PRI_PERF };	\
> +	unsigned long flags;						\
>  	fn(&fn##_nb, (unsigned long)CPU_UP_PREPARE,			\
>  		(void *)(unsigned long)smp_processor_id());		\
> +	local_irq_save(flags);						\
>  	fn(&fn##_nb, (unsigned long)CPU_STARTING,			\
>  		(void *)(unsigned long)smp_processor_id());		\
> +	local_irq_restore(flags);					\
>  	fn(&fn##_nb, (unsigned long)CPU_ONLINE,				\
>  		(void *)(unsigned long)smp_processor_id());		\
>  	register_cpu_notifier(&fn##_nb);				\
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-10-05 10:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-13 14:42 [PATCH 1/2] perf, cpu hotplug: Run CPU_STARTING notifiers with irqs disabled Srivatsa S. Bhat
2012-09-13 14:42 ` [PATCH 2/2] perf, cpu hotplug: Use cached value of smp_processor_id() Srivatsa S. Bhat
2012-10-05 10:43 ` [PATCH 1/2] perf, cpu hotplug: Run CPU_STARTING notifiers with irqs disabled Srivatsa S. Bhat

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.