Patchwork [3/3] sched: Use local_irq_save_nmi() in cpu_clock()

login
register
mail settings
Submitter Peter Zijlstra
Date April 6, 2010, 1:28 p.m.
Message ID <20100406133141.039454288@chello.nl>
Download mbox | patch
Permalink /patch/49515/
State RFC
Delegated to: David Miller
Headers show

Comments

Peter Zijlstra - April 6, 2010, 1:28 p.m.
Since we can call cpu_clock() from NMI context fix up the IRQ
disabling to conform to the new rules.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
 kernel/sched_clock.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)



--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Frédéric Weisbecker - April 7, 2010, 11:27 a.m.
On Tue, Apr 06, 2010 at 03:28:10PM +0200, Peter Zijlstra wrote:
> Since we can call cpu_clock() from NMI context fix up the IRQ
> disabling to conform to the new rules.
> 
> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> ---
>  kernel/sched_clock.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> Index: linux-2.6/kernel/sched_clock.c
> ===================================================================
> --- linux-2.6.orig/kernel/sched_clock.c
> +++ linux-2.6/kernel/sched_clock.c
> @@ -241,9 +241,9 @@ unsigned long long cpu_clock(int cpu)
>  	unsigned long long clock;
>  	unsigned long flags;
>  
> -	local_irq_save(flags);
> +	local_irq_save_nmi(flags);
>  	clock = sched_clock_cpu(cpu);
> -	local_irq_restore(flags);
> +	local_irq_restore_nmi(flags);
>  
>  	return clock;
>  }


That seem to add a small overhead in various places.
Do we want to make local_irq_save_nmi == local_irq_save
for archs that have native nmi?

Or cpu_clock_nmi()?

--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter Zijlstra - April 7, 2010, 11:31 a.m.
On Wed, 2010-04-07 at 13:27 +0200, Frederic Weisbecker wrote:
> On Tue, Apr 06, 2010 at 03:28:10PM +0200, Peter Zijlstra wrote:
> > Since we can call cpu_clock() from NMI context fix up the IRQ
> > disabling to conform to the new rules.
> > 
> > Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > ---
> >  kernel/sched_clock.c |    4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > Index: linux-2.6/kernel/sched_clock.c
> > ===================================================================
> > --- linux-2.6.orig/kernel/sched_clock.c
> > +++ linux-2.6/kernel/sched_clock.c
> > @@ -241,9 +241,9 @@ unsigned long long cpu_clock(int cpu)
> >  	unsigned long long clock;
> >  	unsigned long flags;
> >  
> > -	local_irq_save(flags);
> > +	local_irq_save_nmi(flags);
> >  	clock = sched_clock_cpu(cpu);
> > -	local_irq_restore(flags);
> > +	local_irq_restore_nmi(flags);
> >  
> >  	return clock;
> >  }
> 
> 
> That seem to add a small overhead in various places.
> Do we want to make local_irq_save_nmi == local_irq_save
> for archs that have native nmi?

That is already so, see 1/3.


--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Frédéric Weisbecker - April 7, 2010, 11:44 a.m.
On Wed, Apr 07, 2010 at 01:31:34PM +0200, Peter Zijlstra wrote:
> On Wed, 2010-04-07 at 13:27 +0200, Frederic Weisbecker wrote:
> > On Tue, Apr 06, 2010 at 03:28:10PM +0200, Peter Zijlstra wrote:
> > > Since we can call cpu_clock() from NMI context fix up the IRQ
> > > disabling to conform to the new rules.
> > > 
> > > Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > > ---
> > >  kernel/sched_clock.c |    4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > 
> > > Index: linux-2.6/kernel/sched_clock.c
> > > ===================================================================
> > > --- linux-2.6.orig/kernel/sched_clock.c
> > > +++ linux-2.6/kernel/sched_clock.c
> > > @@ -241,9 +241,9 @@ unsigned long long cpu_clock(int cpu)
> > >  	unsigned long long clock;
> > >  	unsigned long flags;
> > >  
> > > -	local_irq_save(flags);
> > > +	local_irq_save_nmi(flags);
> > >  	clock = sched_clock_cpu(cpu);
> > > -	local_irq_restore(flags);
> > > +	local_irq_restore_nmi(flags);
> > >  
> > >  	return clock;
> > >  }
> > 
> > 
> > That seem to add a small overhead in various places.
> > Do we want to make local_irq_save_nmi == local_irq_save
> > for archs that have native nmi?
> 
> That is already so, see 1/3.


Ah you're right.

--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

Index: linux-2.6/kernel/sched_clock.c
===================================================================
--- linux-2.6.orig/kernel/sched_clock.c
+++ linux-2.6/kernel/sched_clock.c
@@ -241,9 +241,9 @@  unsigned long long cpu_clock(int cpu)
 	unsigned long long clock;
 	unsigned long flags;
 
-	local_irq_save(flags);
+	local_irq_save_nmi(flags);
 	clock = sched_clock_cpu(cpu);
-	local_irq_restore(flags);
+	local_irq_restore_nmi(flags);
 
 	return clock;
 }