On 10/17/2012 12:04 AM, Paul E. McKenney wrote: > On Tue, Oct 16, 2012 at 10:07:15PM +0530, Srivatsa S. Bhat wrote: >> On 10/16/2012 10:01 PM, Paul E. McKenney wrote: >>> On Tue, Oct 16, 2012 at 01:28:10PM +0530, 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. >>> >>> Color me confused... >> >> Hehe, I believe the context provided by diff tricked you ;-) >> The function I am referring to is perf_cpu_notifier(), not >> perf_event_task_tick() :-) > > It did indeed fool me! And indeed, checking the code did indeed show > that the name of interest if perf_cpu_notifier(). > > When using the correct name, I do indeed find places where it is > called with interrupts enabled. So... > > Reviewed-by: Paul E. McKenney <paul...@linux.vnet.ibm.com> >
Great! Thank you :) Regards, Srivatsa S. Bhat >> >>> Isn't perf_event_task_tick() invoked only >>> from scheduler_tick(), which always has interrupts disabled? >>> >>> Or are you needing to invoke it from somewhere else? >>> >>> Thanx, Paul >>> >>>> Signed-off-by: Srivatsa S. Bhat <srivatsa.b...@linux.vnet.ibm.com> >>>> --- >>>> >>>> include/linux/perf_event.h | 3 +++ >>>> 1 file changed, 3 insertions(+) >>>> >>>> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h >>>> index 2e90235..0647805 100644 >>>> --- a/include/linux/perf_event.h >>>> +++ b/include/linux/perf_event.h >>>> @@ -803,10 +803,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); \ >>>> >> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/