From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757131Ab2BGW4k (ORCPT ); Tue, 7 Feb 2012 17:56:40 -0500 Received: from mail-iy0-f174.google.com ([209.85.210.174]:63868 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755661Ab2BGW4j convert rfc822-to-8bit (ORCPT ); Tue, 7 Feb 2012 17:56:39 -0500 MIME-Version: 1.0 In-Reply-To: <1328637982-26681-1-git-send-email-dmitry.antipov@linaro.org> References: <1328637982-26681-1-git-send-email-dmitry.antipov@linaro.org> Date: Tue, 7 Feb 2012 14:56:38 -0800 Message-ID: Subject: Re: [PATCH] sched: generalize CONFIG_IRQ_TIME_ACCOUNTING for X86 and ARM From: Venki Pallipadi To: Dmitry Antipov Cc: Rusty Russell , Ingo Molnar , linux-kernel@vger.kernel.org, x86@kernel.org, linux-arm-kernel@lists.infradead.org, linaro-dev@lists.linaro.org, patches@linaro.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8BIT X-System-Of-Record: true Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 7, 2012 at 10:06 AM, Dmitry Antipov wrote: > Generalize CONFIG_IRQ_TIME_ACCOUNTING  between X86 and > ARM, move "noirqtime=" option to common debugging code. > > Signed-off-by: Dmitry Antipov > --- >  arch/arm/kernel/sched_clock.c |    3 +++ >  arch/x86/Kconfig              |   11 ----------- >  arch/x86/kernel/tsc.c         |    4 ---- >  include/linux/sched.h         |    2 ++ >  lib/Kconfig.debug             |   12 ++++++++++++ >  lib/Makefile                  |    2 ++ >  lib/irqtime.c                 |   12 ++++++++++++ >  7 files changed, 31 insertions(+), 15 deletions(-) >  create mode 100644 lib/irqtime.c > > diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c > index 5416c7c..56d2a9d 100644 > --- a/arch/arm/kernel/sched_clock.c > +++ b/arch/arm/kernel/sched_clock.c > @@ -162,5 +162,8 @@ void __init sched_clock_postinit(void) >        if (read_sched_clock == jiffy_sched_clock_read) >                setup_sched_clock(jiffy_sched_clock_read, 32, HZ); > > +       if (!no_sched_irq_time) > +               enable_sched_clock_irqtime(); > + >        sched_clock_poll(sched_clock_timer.data); >  } > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index 5bed94e..4759676 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -805,17 +805,6 @@ config SCHED_MC >          making when dealing with multi-core CPU chips at a cost of slightly >          increased overhead in some places. If unsure say N here. > > -config IRQ_TIME_ACCOUNTING > -       bool "Fine granularity task level IRQ time accounting" > -       default n > -       ---help--- > -         Select this option to enable fine granularity task irq time > -         accounting. This is done by reading a timestamp on each > -         transitions between softirq and hardirq state, so there can be a > -         small performance impact. > - > -         If in doubt, say N here. > - >  source "kernel/Kconfig.preempt" > >  config X86_UP_APIC > diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c > index a62c201..a3a5465 100644 > --- a/arch/x86/kernel/tsc.c > +++ b/arch/x86/kernel/tsc.c > @@ -103,14 +103,10 @@ int __init notsc_setup(char *str) > >  __setup("notsc", notsc_setup); > > -static int no_sched_irq_time; > - >  static int __init tsc_setup(char *str) >  { >        if (!strcmp(str, "reliable")) >                tsc_clocksource_reliable = 1; > -       if (!strncmp(str, "noirqtime", 9)) > -               no_sched_irq_time = 1; I guess we need to keep this option around and gracefully deprecate to the new one? >        return 1; >  } > > diff --git a/include/linux/sched.h b/include/linux/sched.h > index 7d379a6..b3575b5 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -1966,9 +1966,11 @@ extern void sched_clock_idle_wakeup_event(u64 delta_ns); >  * The reason for this explicit opt-in is not to have perf penalty with >  * slow sched_clocks. >  */ > +extern int no_sched_irq_time; >  extern void enable_sched_clock_irqtime(void); >  extern void disable_sched_clock_irqtime(void); >  #else > +#define no_sched_irq_time 1 >  static inline void enable_sched_clock_irqtime(void) {} >  static inline void disable_sched_clock_irqtime(void) {} >  #endif > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > index 8745ac7..a55287e 100644 > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -299,6 +299,18 @@ config SCHEDSTATS >          application, you can say N to avoid the very slight overhead >          this adds. > > +config IRQ_TIME_ACCOUNTING > +       bool "Fine granularity task level IRQ time accounting" > +       depends on DEBUG_KERNEL && (X86 || (ARM && HAVE_SCHED_CLOCK)) Why the new dependency on DEBUG_KERNEL? Thanks, -Venki > +       default n > +       ---help--- > +         Select this option to enable fine granularity task irq time > +         accounting. This is done by reading a timestamp on each > +         transitions between softirq and hardirq state, so there can be a > +         small performance impact. > + > +         If in doubt, say N here. > + >  config TIMER_STATS >        bool "Collect kernel timers statistics" >        depends on DEBUG_KERNEL && PROC_FS > diff --git a/lib/Makefile b/lib/Makefile > index 18515f0..44d67d4 100644 > --- a/lib/Makefile > +++ b/lib/Makefile > @@ -49,6 +49,8 @@ obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o >  obj-$(CONFIG_DEBUG_LIST) += list_debug.o >  obj-$(CONFIG_DEBUG_OBJECTS) += debugobjects.o > > +obj-$(CONFIG_IRQ_TIME_ACCOUNTING) += irqtime.o > + >  ifneq ($(CONFIG_HAVE_DEC_LOCK),y) >   lib-y += dec_and_lock.o >  endif > diff --git a/lib/irqtime.c b/lib/irqtime.c > new file mode 100644 > index 0000000..10d440d > --- /dev/null > +++ b/lib/irqtime.c > @@ -0,0 +1,12 @@ > +#include > +#include > + > +int no_sched_irq_time; > + > +static int __init irqtime_setup(char *str) > +{ > +       no_sched_irq_time = 1; > +       return 1; > +} > + > +__setup("noirqtime", irqtime_setup); > -- > 1.7.7.6 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at  http://vger.kernel.org/majordomo-info.html > Please read the FAQ at  http://www.tux.org/lkml/