All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
@ 2011-04-23 20:54 Thomas Gleixner
  2011-04-23 20:54 ` [patch 01/16] time: Provide clocksource based sched_clock() Thomas Gleixner
                   ` (18 more replies)
  0 siblings, 19 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

Most of ARM sched_clocks is using the timekeeping clocksource as the
sched_clock. Only versatile uses a different clock for it, but there
is no real reason why it can't use the clocksource as well.

The core timekeeping code makes already sure that we don't wrap the
timekeeper and we can base a sched_clock easily on that.

It uses the read function of the clocksource and keeps track of time
independent of the timekeeping code as the ARM sched_clock
implementation does. It also uses it's own sequence counter so
sched_clock is not dependent on xtime_lock. The update sequence is
just adding offsets once in a while and runs from do_timer() which
also makes sure that only one core tries to update it.

Only lightly tested on orion. Please give it a go.

Another 650 lines gone :)

Thanks,

	tglx
---
 arch/arm/include/asm/sched_clock.h                     |  120 ----------------
 arch/arm/kernel/sched_clock.c                          |   74 ----------
 arch/arm/plat-versatile/include/plat/sched_clock.h     |    6 
 arch/arm/plat-versatile/sched-clock.c                  |   58 -------
 linux-2.6-tip/arch/arm/Kconfig                         |   15 --
 linux-2.6-tip/arch/arm/common/timer-sp.c               |    4 
 linux-2.6-tip/arch/arm/kernel/Makefile                 |    1 
 linux-2.6-tip/arch/arm/kernel/time.c                   |    4 
 linux-2.6-tip/arch/arm/mach-davinci/time.c             |   30 ----
 linux-2.6-tip/arch/arm/mach-integrator/integrator_cp.c |    5 
 linux-2.6-tip/arch/arm/mach-ixp4xx/common.c            |   22 --
 linux-2.6-tip/arch/arm/mach-mmp/time.c                 |   19 --
 linux-2.6-tip/arch/arm/mach-omap1/time.c               |   62 --------
 linux-2.6-tip/arch/arm/mach-omap2/timer-gp.c           |   17 --
 linux-2.6-tip/arch/arm/mach-pxa/time.c                 |   31 ----
 linux-2.6-tip/arch/arm/mach-realview/core.c            |    3 
 linux-2.6-tip/arch/arm/mach-sa1100/time.c              |   35 ----
 linux-2.6-tip/arch/arm/mach-tegra/timer.c              |   29 ---
 linux-2.6-tip/arch/arm/mach-u300/timer.c               |   29 ---
 linux-2.6-tip/arch/arm/mach-versatile/core.c           |    3 
 linux-2.6-tip/arch/arm/mach-vexpress/v2m.c             |    3 
 linux-2.6-tip/arch/arm/plat-iop/time.c                 |   22 --
 linux-2.6-tip/arch/arm/plat-mxc/time.c                 |   28 ---
 linux-2.6-tip/arch/arm/plat-nomadik/Kconfig            |    1 
 linux-2.6-tip/arch/arm/plat-nomadik/timer.c            |   45 ------
 linux-2.6-tip/arch/arm/plat-omap/counter_32k.c         |   71 ---------
 linux-2.6-tip/arch/arm/plat-omap/dmtimer.c             |    4 
 linux-2.6-tip/arch/arm/plat-omap/include/plat/common.h |    1 
 linux-2.6-tip/arch/arm/plat-orion/time.c               |   37 -----
 linux-2.6-tip/arch/arm/plat-s5p/s5p-time.c             |   67 ---------
 linux-2.6-tip/arch/arm/plat-versatile/Kconfig          |    4 
 linux-2.6-tip/arch/arm/plat-versatile/Makefile         |    1 
 linux-2.6-tip/include/linux/clocksource.h              |    1 
 linux-2.6-tip/include/linux/sched.h                    |    1 
 linux-2.6-tip/kernel/sched_clock.c                     |   12 -
 linux-2.6-tip/kernel/time/Kconfig                      |    4 
 linux-2.6-tip/kernel/time/timekeeping.c                |  125 +++++++++++++++++
 37 files changed, 173 insertions(+), 821 deletions(-)

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

* [patch 01/16] time: Provide clocksource based sched_clock()
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 21:33   ` Stephen Boyd
                     ` (2 more replies)
  2011-04-23 20:54 ` [patch 02/16] arm: plat-orion: Use clocksource based sched_clock Thomas Gleixner
                   ` (17 subsequent siblings)
  18 siblings, 3 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: time-provide-generic-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/072677e9/attachment.ksh>

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

* [patch 02/16] arm: plat-orion: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
  2011-04-23 20:54 ` [patch 01/16] time: Provide clocksource based sched_clock() Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 20:54 ` [patch 03/16] arm: s5p: " Thomas Gleixner
                   ` (16 subsequent siblings)
  18 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-orion-use-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/a33408b2/attachment.ksh>

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

* [patch 03/16] arm: s5p: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
  2011-04-23 20:54 ` [patch 01/16] time: Provide clocksource based sched_clock() Thomas Gleixner
  2011-04-23 20:54 ` [patch 02/16] arm: plat-orion: Use clocksource based sched_clock Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 21:33   ` Stephen Boyd
  2011-04-25  7:08   ` Kukjin Kim
  2011-04-23 20:54 ` [patch 04/16] arm: davinci: " Thomas Gleixner
                   ` (15 subsequent siblings)
  18 siblings, 2 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-s5p-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/6d83d1e0/attachment.ksh>

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

* [patch 04/16] arm: davinci: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (2 preceding siblings ...)
  2011-04-23 20:54 ` [patch 03/16] arm: s5p: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-26 15:40   ` Nori, Sekhar
  2011-04-23 20:54 ` [patch 05/16] arm: ixp4xx: " Thomas Gleixner
                   ` (14 subsequent siblings)
  18 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-davinci-clksrc-sched-clk.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/63760f9e/attachment.ksh>

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

* [patch 05/16] arm: ixp4xx: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (3 preceding siblings ...)
  2011-04-23 20:54 ` [patch 04/16] arm: davinci: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 20:54 ` [patch 06/16] arm: mmp: " Thomas Gleixner
                   ` (13 subsequent siblings)
  18 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-ixp4xx-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/6040d05a/attachment.ksh>

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

* [patch 06/16] arm: mmp: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (4 preceding siblings ...)
  2011-04-23 20:54 ` [patch 05/16] arm: ixp4xx: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 20:54 ` [patch 07/16] arm: omap: " Thomas Gleixner
                   ` (12 subsequent siblings)
  18 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-mmp-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/8a0a640e/attachment.ksh>

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

* [patch 07/16] arm: omap: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (5 preceding siblings ...)
  2011-04-23 20:54 ` [patch 06/16] arm: mmp: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-29 11:57   ` Tony Lindgren
  2011-04-23 20:54 ` [patch 08/16] arm: pxa: " Thomas Gleixner
                   ` (11 subsequent siblings)
  18 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-omap-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/19261919/attachment.ksh>

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

* [patch 08/16] arm: pxa: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (6 preceding siblings ...)
  2011-04-23 20:54 ` [patch 07/16] arm: omap: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-25 16:25   ` Eric
  2011-04-23 20:54 ` [patch 09/16] arm: sa1100: " Thomas Gleixner
                   ` (10 subsequent siblings)
  18 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-pxa-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/fc71f3df/attachment.ksh>

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

* [patch 09/16] arm: sa1100: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (7 preceding siblings ...)
  2011-04-23 20:54 ` [patch 08/16] arm: pxa: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 20:54 ` [patch 10/16] arm: tegra: " Thomas Gleixner
                   ` (9 subsequent siblings)
  18 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-sa1100-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/efc91cb1/attachment.ksh>

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

* [patch 10/16] arm: tegra: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (8 preceding siblings ...)
  2011-04-23 20:54 ` [patch 09/16] arm: sa1100: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 20:54 ` [patch 11/16] arm: u300: " Thomas Gleixner
                   ` (8 subsequent siblings)
  18 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-tegra-clock-source.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/713d266b/attachment.ksh>

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

* [patch 11/16] arm: u300: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (9 preceding siblings ...)
  2011-04-23 20:54 ` [patch 10/16] arm: tegra: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-24  7:03   ` Linus Walleij
  2011-04-23 20:54 ` [patch 12/16] arm: plat-iop: " Thomas Gleixner
                   ` (7 subsequent siblings)
  18 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-u300-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/5ce238c1/attachment.ksh>

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

* [patch 12/16] arm: plat-iop: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (10 preceding siblings ...)
  2011-04-23 20:54 ` [patch 11/16] arm: u300: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 20:54 ` [patch 13/16] arm plat-mxc: " Thomas Gleixner
                   ` (6 subsequent siblings)
  18 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-plat-iop-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/5294de2d/attachment.ksh>

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

* [patch 13/16] arm plat-mxc: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (11 preceding siblings ...)
  2011-04-23 20:54 ` [patch 12/16] arm: plat-iop: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-26  7:23   ` Sascha Hauer
  2011-04-23 20:54 ` [patch 14/16] arm: nomadik: " Thomas Gleixner
                   ` (5 subsequent siblings)
  18 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-mxc-sched-clk.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/7700a49c/attachment.ksh>

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

* [patch 14/16] arm: nomadik: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (12 preceding siblings ...)
  2011-04-23 20:54 ` [patch 13/16] arm plat-mxc: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-24  7:04   ` Linus Walleij
  2011-04-23 20:54 ` [patch 15/16] arm: versatile: " Thomas Gleixner
                   ` (4 subsequent siblings)
  18 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-nomadik-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/7a7f7eef/attachment.ksh>

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

* [patch 15/16] arm: versatile: Use clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (13 preceding siblings ...)
  2011-04-23 20:54 ` [patch 14/16] arm: nomadik: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-23 20:54 ` [patch 16/16] arm: Remove sched_clock code Thomas Gleixner
                   ` (3 subsequent siblings)
  18 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-versatile-sched-clock.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/2eff3619/attachment.ksh>

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

* [patch 16/16] arm: Remove sched_clock code
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (14 preceding siblings ...)
  2011-04-23 20:54 ` [patch 15/16] arm: versatile: " Thomas Gleixner
@ 2011-04-23 20:54 ` Thomas Gleixner
  2011-04-25  7:11   ` Kukjin Kim
  2011-04-24  7:27 ` [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Linus Walleij
                   ` (2 subsequent siblings)
  18 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 20:54 UTC (permalink / raw)
  To: linux-arm-kernel

An embedded and charset-unspecified text was scrubbed...
Name: arm-remove-sched-clock-code.patch
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110423/05eb2698/attachment.ksh>

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

* [patch 01/16] time: Provide clocksource based sched_clock()
  2011-04-23 20:54 ` [patch 01/16] time: Provide clocksource based sched_clock() Thomas Gleixner
@ 2011-04-23 21:33   ` Stephen Boyd
  2011-04-23 21:40     ` Thomas Gleixner
  2011-04-25  7:10   ` Kukjin Kim
  2011-04-26 16:36   ` Stephen Boyd
  2 siblings, 1 reply; 51+ messages in thread
From: Stephen Boyd @ 2011-04-23 21:33 UTC (permalink / raw)
  To: linux-arm-kernel

On 4/23/2011 1:54 PM, Thomas Gleixner wrote:
> Index: linux-2.6-tip/kernel/time/Kconfig
> ===================================================================
> --- linux-2.6-tip.orig/kernel/time/Kconfig
> +++ linux-2.6-tip/kernel/time/Kconfig
> @@ -27,3 +27,7 @@ config GENERIC_CLOCKEVENTS_BUILD
>  	default y
>  	depends on GENERIC_CLOCKEVENTS || GENERIC_CLOCKEVENTS_MIGR
> 
> +# Selectable by architectures which want to reuse the clocksource as
> +# sched_clock
> +config HAVE_CLKSRC_SCHED_CLOCK
> +       bool

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

* [patch 03/16] arm: s5p: Use clocksource based sched_clock
  2011-04-23 20:54 ` [patch 03/16] arm: s5p: " Thomas Gleixner
@ 2011-04-23 21:33   ` Stephen Boyd
  2011-04-23 21:41     ` Thomas Gleixner
  2011-04-25  7:08   ` Kukjin Kim
  1 sibling, 1 reply; 51+ messages in thread
From: Stephen Boyd @ 2011-04-23 21:33 UTC (permalink / raw)
  To: linux-arm-kernel

On 4/23/2011 1:54 PM, Thomas Gleixner wrote:
>  struct clocksource time_clocksource = {
>  	.name		= "s5p_clocksource_timer",
>  	.rating		= 250,
>  	.read		= s5p_timer_read,
>  	.mask		= CLOCKSOURCE_MASK(32),
> -	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
> +	.flags		= CLOCK_SOURCE_IS_CONTINUOUS | CLOCKS_SOURCE_SCHED_CLOCK,

Drop the extra 'S'. CLOCK_SOURCE_SCHED_CLOCK.

-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

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

* [patch 01/16] time: Provide clocksource based sched_clock()
  2011-04-23 21:33   ` Stephen Boyd
@ 2011-04-23 21:40     ` Thomas Gleixner
  0 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 21:40 UTC (permalink / raw)
  To: linux-arm-kernel

B1;2601;0cOn Sat, 23 Apr 2011, Stephen Boyd wrote:

> On 4/23/2011 1:54 PM, Thomas Gleixner wrote:
> > Index: linux-2.6-tip/kernel/time/Kconfig
> > ===================================================================
> > --- linux-2.6-tip.orig/kernel/time/Kconfig
> > +++ linux-2.6-tip/kernel/time/Kconfig
> > @@ -27,3 +27,7 @@ config GENERIC_CLOCKEVENTS_BUILD
> >  	default y
> >  	depends on GENERIC_CLOCKEVENTS || GENERIC_CLOCKEVENTS_MIGR
> > 
> > +# Selectable by architectures which want to reuse the clocksource as
> > +# sched_clock
> > +config HAVE_CLKSRC_SCHED_CLOCK
> > +       bool
> 
> >From what I can tell this isn't used so I'm guessing we can drop it?

Oops. Yes. Leftover from first version. I decided not to clutter the
tree with another "select HAVE_...."

Thanks,

	tglx

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

* [patch 03/16] arm: s5p: Use clocksource based sched_clock
  2011-04-23 21:33   ` Stephen Boyd
@ 2011-04-23 21:41     ` Thomas Gleixner
  0 siblings, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-23 21:41 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, 23 Apr 2011, Stephen Boyd wrote:

> On 4/23/2011 1:54 PM, Thomas Gleixner wrote:
> >  struct clocksource time_clocksource = {
> >  	.name		= "s5p_clocksource_timer",
> >  	.rating		= 250,
> >  	.read		= s5p_timer_read,
> >  	.mask		= CLOCKSOURCE_MASK(32),
> > -	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
> > +	.flags		= CLOCK_SOURCE_IS_CONTINUOUS | CLOCKS_SOURCE_SCHED_CLOCK,
> 
> Drop the extra 'S'. CLOCK_SOURCE_SCHED_CLOCK.

Indeed

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

* [patch 11/16] arm: u300: Use clocksource based sched_clock
  2011-04-23 20:54 ` [patch 11/16] arm: u300: " Thomas Gleixner
@ 2011-04-24  7:03   ` Linus Walleij
  0 siblings, 0 replies; 51+ messages in thread
From: Linus Walleij @ 2011-04-24  7:03 UTC (permalink / raw)
  To: linux-arm-kernel

2011/4/23 Thomas Gleixner <tglx@linutronix.de>:

> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> ?arch/arm/mach-u300/timer.c | ? 29 ++---------------------------
> ?1 file changed, 2 insertions(+), 27 deletions(-)

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

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

* [patch 14/16] arm: nomadik: Use clocksource based sched_clock
  2011-04-23 20:54 ` [patch 14/16] arm: nomadik: " Thomas Gleixner
@ 2011-04-24  7:04   ` Linus Walleij
  0 siblings, 0 replies; 51+ messages in thread
From: Linus Walleij @ 2011-04-24  7:04 UTC (permalink / raw)
  To: linux-arm-kernel

2011/4/23 Thomas Gleixner <tglx@linutronix.de>:
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> ?arch/arm/plat-nomadik/Kconfig | ? ?1
> ?arch/arm/plat-nomadik/timer.c | ? 45 ++----------------------------------------
> ?2 files changed, 3 insertions(+), 43 deletions(-)

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (15 preceding siblings ...)
  2011-04-23 20:54 ` [patch 16/16] arm: Remove sched_clock code Thomas Gleixner
@ 2011-04-24  7:27 ` Linus Walleij
  2011-04-25 19:10   ` john stultz
  2011-04-26  8:02   ` Thomas Gleixner
  2011-04-29  9:46 ` Russell King - ARM Linux
  2011-06-13  2:32 ` Rob Herring
  18 siblings, 2 replies; 51+ messages in thread
From: Linus Walleij @ 2011-04-24  7:27 UTC (permalink / raw)
  To: linux-arm-kernel

2011/4/23 Thomas Gleixner <tglx@linutronix.de>:

> Most of ARM sched_clocks is using the timekeeping clocksource as the
> sched_clock. Only versatile uses a different clock for it, but there
> is no real reason why it can't use the clocksource as well.

Excellent patch set!

> Another 650 lines gone :)

Any reason why we can't simply move *all* of these to
drivers/clocksource/* and proceed with consolidation there?

It must be a pain having to grep through the tree to find all of
these (even though I bet you know them all by heart now).

Yours,
Linus Walleij

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

* [patch 03/16] arm: s5p: Use clocksource based sched_clock
  2011-04-23 20:54 ` [patch 03/16] arm: s5p: " Thomas Gleixner
  2011-04-23 21:33   ` Stephen Boyd
@ 2011-04-25  7:08   ` Kukjin Kim
  1 sibling, 0 replies; 51+ messages in thread
From: Kukjin Kim @ 2011-04-25  7:08 UTC (permalink / raw)
  To: linux-arm-kernel

Thomas Gleixner wrote:
> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Acked-by: Kukjin Kim <kgene.kim@samsung.com>

(snip)

>  struct clocksource time_clocksource = {
>  	.name		= "s5p_clocksource_timer",
>  	.rating		= 250,
>  	.read		= s5p_timer_read,
>  	.mask		= CLOCKSOURCE_MASK(32),
> -	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
> +	.flags		= CLOCK_SOURCE_IS_CONTINUOUS |
> CLOCKS_SOURCE_SCHED_CLOCK,

As Stephen Boyd said, with fixing CLOCK_SOURCE_SCHED_CLOCK :)

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

* [patch 01/16] time: Provide clocksource based sched_clock()
  2011-04-23 20:54 ` [patch 01/16] time: Provide clocksource based sched_clock() Thomas Gleixner
  2011-04-23 21:33   ` Stephen Boyd
@ 2011-04-25  7:10   ` Kukjin Kim
  2011-04-26 16:36   ` Stephen Boyd
  2 siblings, 0 replies; 51+ messages in thread
From: Kukjin Kim @ 2011-04-25  7:10 UTC (permalink / raw)
  To: linux-arm-kernel

Thomas Gleixner wrote:
> 
> Many embedded platforms use the clocksource which is used for
> timekeeping as their sched_clock as well. Though they need to take
> care about the wraparounds as sched_clock() wants to be monotonic
> increasing nsescs. The timekeeping code and the NOHZ core take care of
> the timekeeping clocksource wraparound so we can simply use the
> timekeeping clocksource if possible.
> 
> clocksources which can be used by the clksrc sched_clock must have the
> flag CLOCK_SOURCE_SCHED_CLOCK set. This works with the default (weak)
> sched_clock implementation but the clksrc based function is also
> provided for architectures where multi platform kernels might override
> it. If there is no CLOCK_SOURCE_SCHED_CLOCK available, then the
> function returns the jiffies based sched clock.
> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Tested on Samsung stuff...

Tested-by: Kukjin Kim <kgene.kim@samsung.com>

> ---
>  include/linux/clocksource.h |    1
>  include/linux/sched.h       |    1
>  kernel/sched_clock.c        |   12 ----
>  kernel/time/Kconfig         |    4 +
>  kernel/time/timekeeping.c   |  125
> ++++++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 131 insertions(+), 12 deletions(-)

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

* [patch 16/16] arm: Remove sched_clock code
  2011-04-23 20:54 ` [patch 16/16] arm: Remove sched_clock code Thomas Gleixner
@ 2011-04-25  7:11   ` Kukjin Kim
  0 siblings, 0 replies; 51+ messages in thread
From: Kukjin Kim @ 2011-04-25  7:11 UTC (permalink / raw)
  To: linux-arm-kernel

Thomas Gleixner wrote:
> 
> All users converted to use the clocksource based sched_clock.
> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Tested on Samsung stuff...

Tested-by: Kukjin Kim <kgene.kim@samsung.com>

> ---
>  arch/arm/Kconfig                   |   15 ----
>  arch/arm/include/asm/sched_clock.h |  120
----------------------------------
> ---
>  arch/arm/kernel/Makefile           |    1
>  arch/arm/kernel/sched_clock.c      |   74 ----------------------
>  arch/arm/kernel/time.c             |    4 -
>  5 files changed, 214 deletions(-)
> 

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

* [patch 08/16] arm: pxa: Use clocksource based sched_clock
  2011-04-23 20:54 ` [patch 08/16] arm: pxa: " Thomas Gleixner
@ 2011-04-25 16:25   ` Eric
  2011-04-26  7:23     ` Sascha Hauer
  0 siblings, 1 reply; 51+ messages in thread
From: Eric @ 2011-04-25 16:25 UTC (permalink / raw)
  To: linux-arm-kernel



On Sat, 23 Apr 2011, Thomas Gleixner wrote:

> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> arch/arm/mach-pxa/time.c |   31 +++----------------------------

I think we need to remove HAVE_SCHED_CLOCK from ARCH_PXA in
arch/arm/Kconfig as well.

Didn't look into other sub-arch, but should be applicable to those
selecting HAVE_SCHED_CLOCK.

> 1 file changed, 3 insertions(+), 28 deletions(-)
>
> Index: linux-2.6-tip/arch/arm/mach-pxa/time.c
> ===================================================================
> --- linux-2.6-tip.orig/arch/arm/mach-pxa/time.c
> +++ linux-2.6-tip/arch/arm/mach-pxa/time.c
> @@ -21,31 +21,8 @@
> #include <asm/div64.h>
> #include <asm/mach/irq.h>
> #include <asm/mach/time.h>
> -#include <asm/sched_clock.h>
> -#include <mach/regs-ost.h>
> -
> -/*
> - * This is PXA's sched_clock implementation. This has a resolution
> - * of at least 308 ns and a maximum value of 208 days.
> - *
> - * The return value is guaranteed to be monotonic in that range as
> - * long as there is always less than 582 seconds between successive
> - * calls to sched_clock() which should always be the case in practice.
> - */
> -static DEFINE_CLOCK_DATA(cd);
> -
> -unsigned long long notrace sched_clock(void)
> -{
> -	u32 cyc = OSCR;
> -	return cyc_to_sched_clock(&cd, cyc, (u32)~0);
> -}
> -
> -static void notrace pxa_update_sched_clock(void)
> -{
> -	u32 cyc = OSCR;
> -	update_sched_clock(&cd, cyc, (u32)~0);
> -}
>
> +#include <mach/regs-ost.h>
>
> #define MIN_OSCR_DELTA 16
>
> @@ -105,7 +82,7 @@ static struct clock_event_device ckevt_p
> 	.set_mode	= pxa_osmr0_set_mode,
> };
>
> -static cycle_t pxa_read_oscr(struct clocksource *cs)
> +static cycle_t notrace pxa_read_oscr(struct clocksource *cs)
> {
> 	return OSCR;
> }
> @@ -115,7 +92,7 @@ static struct clocksource cksrc_pxa_oscr
> 	.rating         = 200,
> 	.read           = pxa_read_oscr,
> 	.mask           = CLOCKSOURCE_MASK(32),
> -	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
> +	.flags		= CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SCHED_CLOCK,
> };
>
> static struct irqaction pxa_ost0_irq = {
> @@ -132,8 +109,6 @@ static void __init pxa_timer_init(void)
> 	OIER = 0;
> 	OSSR = OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3;
>
> -	init_sched_clock(&cd, pxa_update_sched_clock, 32, clock_tick_rate);
> -
> 	clocksource_calc_mult_shift(&cksrc_pxa_oscr0, clock_tick_rate, 4);
> 	clockevents_calc_mult_shift(&ckevt_pxa_osmr0, clock_tick_rate, 4);
> 	ckevt_pxa_osmr0.max_delta_ns =
>
>
>

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-24  7:27 ` [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Linus Walleij
@ 2011-04-25 19:10   ` john stultz
  2011-04-26  7:45     ` Linus Walleij
  2011-04-26  8:02   ` Thomas Gleixner
  1 sibling, 1 reply; 51+ messages in thread
From: john stultz @ 2011-04-25 19:10 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, 2011-04-24 at 09:27 +0200, Linus Walleij wrote:
> 2011/4/23 Thomas Gleixner <tglx@linutronix.de>:
> 
> > Most of ARM sched_clocks is using the timekeeping clocksource as the
> > sched_clock. Only versatile uses a different clock for it, but there
> > is no real reason why it can't use the clocksource as well.
> 
> Excellent patch set!
> 
> > Another 650 lines gone :)
> 
> Any reason why we can't simply move *all* of these to
> drivers/clocksource/* and proceed with consolidation there?

This gives me some pause, as having the clocksources in the platform
code makes it easier to know what platform needs to be tested when a
change is made. The rule so far has been if more then one arch can make
use of it, it should be moved to the drivers/clocksource dir. Otherwise,
leave it close to any arch specific code that manages the hardware.

> It must be a pain having to grep through the tree to find all of
> these (even though I bet you know them all by heart now).

Not sure if grepping backwards through config dependencies to see who
actually uses a specific clocksource would be easier. But I'll admit
that sharing code is likely more important.

thanks
-john

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

* [patch 08/16] arm: pxa: Use clocksource based sched_clock
  2011-04-25 16:25   ` Eric
@ 2011-04-26  7:23     ` Sascha Hauer
  2011-04-26  7:26       ` Eric Miao
  0 siblings, 1 reply; 51+ messages in thread
From: Sascha Hauer @ 2011-04-26  7:23 UTC (permalink / raw)
  To: linux-arm-kernel

Eric,

On Tue, Apr 26, 2011 at 12:25:45AM +0800, Eric wrote:
> 
> 
> On Sat, 23 Apr 2011, Thomas Gleixner wrote:
> 
> >Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> >---
> >arch/arm/mach-pxa/time.c |   31 +++----------------------------
> 
> I think we need to remove HAVE_SCHED_CLOCK from ARCH_PXA in
> arch/arm/Kconfig as well.
> 
> Didn't look into other sub-arch, but should be applicable to those
> selecting HAVE_SCHED_CLOCK.

Thomas already did this. See 16/16

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

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

* [patch 13/16] arm plat-mxc: Use clocksource based sched_clock
  2011-04-23 20:54 ` [patch 13/16] arm plat-mxc: " Thomas Gleixner
@ 2011-04-26  7:23   ` Sascha Hauer
  0 siblings, 0 replies; 51+ messages in thread
From: Sascha Hauer @ 2011-04-26  7:23 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Apr 23, 2011 at 08:54:53PM -0000, Thomas Gleixner wrote:
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
>  arch/arm/plat-mxc/time.c |   28 +++-------------------------
>  1 file changed, 3 insertions(+), 25 deletions(-)

Acked-by: Sascha Hauer <s.hauer@pengutronix.de>


> 
> Index: linux-2.6-tip/arch/arm/plat-mxc/time.c
> ===================================================================
> --- linux-2.6-tip.orig/arch/arm/plat-mxc/time.c
> +++ linux-2.6-tip/arch/arm/plat-mxc/time.c
> @@ -27,7 +27,6 @@
>  #include <linux/clk.h>
>  
>  #include <mach/hardware.h>
> -#include <asm/sched_clock.h>
>  #include <asm/mach/time.h>
>  #include <mach/common.h>
>  
> @@ -106,17 +105,12 @@ static void gpt_irq_acknowledge(void)
>  		__raw_writel(V2_TSTAT_OF1, timer_base + V2_TSTAT);
>  }
>  
> -static cycle_t dummy_get_cycles(struct clocksource *cs)
> -{
> -	return 0;
> -}
> -
> -static cycle_t mx1_2_get_cycles(struct clocksource *cs)
> +static cycle_t notrace mx1_2_get_cycles(struct clocksource *cs)
>  {
>  	return __raw_readl(timer_base + MX1_2_TCN);
>  }
>  
> -static cycle_t v2_get_cycles(struct clocksource *cs)
> +static cycle_t notrace v2_get_cycles(struct clocksource *cs)
>  {
>  	return __raw_readl(timer_base + V2_TCN);
>  }
> @@ -124,25 +118,10 @@ static cycle_t v2_get_cycles(struct cloc
>  static struct clocksource clocksource_mxc = {
>  	.name 		= "mxc_timer1",
>  	.rating		= 200,
> -	.read		= dummy_get_cycles,
>  	.mask		= CLOCKSOURCE_MASK(32),
> -	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
> +	.flags		= CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SCHED_CLOCK,
>  };
>  
> -static DEFINE_CLOCK_DATA(cd);
> -unsigned long long notrace sched_clock(void)
> -{
> -	cycle_t cyc = clocksource_mxc.read(&clocksource_mxc);
> -
> -	return cyc_to_sched_clock(&cd, cyc, (u32)~0);
> -}
> -
> -static void notrace mxc_update_sched_clock(void)
> -{
> -	cycle_t cyc = clocksource_mxc.read(&clocksource_mxc);
> -	update_sched_clock(&cd, cyc, (u32)~0);
> -}
> -
>  static int __init mxc_clocksource_init(struct clk *timer_clk)
>  {
>  	unsigned int c = clk_get_rate(timer_clk);
> @@ -152,7 +131,6 @@ static int __init mxc_clocksource_init(s
>  	else
>  		clocksource_mxc.read = mx1_2_get_cycles;
>  
> -	init_sched_clock(&cd, mxc_update_sched_clock, 32, c);
>  	clocksource_register_hz(&clocksource_mxc, c);
>  
>  	return 0;
> 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

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

* [patch 08/16] arm: pxa: Use clocksource based sched_clock
  2011-04-26  7:23     ` Sascha Hauer
@ 2011-04-26  7:26       ` Eric Miao
  0 siblings, 0 replies; 51+ messages in thread
From: Eric Miao @ 2011-04-26  7:26 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Apr 26, 2011 at 3:23 PM, Sascha Hauer <s.hauer@pengutronix.de> wrote:
> Eric,
>
> On Tue, Apr 26, 2011 at 12:25:45AM +0800, Eric wrote:
>>
>>
>> On Sat, 23 Apr 2011, Thomas Gleixner wrote:
>>
>> >Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
>> >---
>> >arch/arm/mach-pxa/time.c | ? 31 +++----------------------------
>>
>> I think we need to remove HAVE_SCHED_CLOCK from ARCH_PXA in
>> arch/arm/Kconfig as well.
>>
>> Didn't look into other sub-arch, but should be applicable to those
>> selecting HAVE_SCHED_CLOCK.
>
> Thomas already did this. See 16/16
>

Ah, I missed that. Then I'm completely fine with this patch series.

Acked-by: Eric Miao <eric.y.miao@gmail.com>

> Sascha
>
> --
> Pengutronix e.K. ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
> Industrial Linux Solutions ? ? ? ? ? ? ? ? | http://www.pengutronix.de/ ?|
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 ? ?|
> Amtsgericht Hildesheim, HRA 2686 ? ? ? ? ? | Fax: ? +49-5121-206917-5555 |
>

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-25 19:10   ` john stultz
@ 2011-04-26  7:45     ` Linus Walleij
  2011-04-26  8:50       ` Tony Lindgren
  0 siblings, 1 reply; 51+ messages in thread
From: Linus Walleij @ 2011-04-26  7:45 UTC (permalink / raw)
  To: linux-arm-kernel

2011/4/25 john stultz <johnstul@us.ibm.com>:
> On Sun, 2011-04-24 at 09:27 +0200, Linus Walleij wrote:
>> Any reason why we can't simply move *all* of these to
>> drivers/clocksource/* and proceed with consolidation there?
>
> This gives me some pause, as having the clocksources in the platform
> code makes it easier to know what platform needs to be tested when a
> change is made. The rule so far has been if more then one arch can make
> use of it, it should be moved to the drivers/clocksource dir. Otherwise,
> leave it close to any arch specific code that manages the hardware.

That means that by definition anything in a plat-* directory, say e.g.
plat-nomadik/timer.c and plat-omap/dmtimer.c should go into
drivers/clocksource I believe?

Yours,
Linus Walleij

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-24  7:27 ` [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Linus Walleij
  2011-04-25 19:10   ` john stultz
@ 2011-04-26  8:02   ` Thomas Gleixner
  1 sibling, 0 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-26  8:02 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, 24 Apr 2011, Linus Walleij wrote:

> 2011/4/23 Thomas Gleixner <tglx@linutronix.de>:
> 
> > Most of ARM sched_clocks is using the timekeeping clocksource as the
> > sched_clock. Only versatile uses a different clock for it, but there
> > is no real reason why it can't use the clocksource as well.
> 
> Excellent patch set!
> 
> > Another 650 lines gone :)
> 
> Any reason why we can't simply move *all* of these to
> drivers/clocksource/* and proceed with consolidation there?
> 
> It must be a pain having to grep through the tree to find all of
> these (even though I bet you know them all by heart now).

Russell has a patch which creates clocksource_mmio. That will replace
all the mmio (read some random register) based clocksources all over
the place.

Thanks,

	tglx

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-26  7:45     ` Linus Walleij
@ 2011-04-26  8:50       ` Tony Lindgren
  0 siblings, 0 replies; 51+ messages in thread
From: Tony Lindgren @ 2011-04-26  8:50 UTC (permalink / raw)
  To: linux-arm-kernel

* Linus Walleij <linus.walleij@linaro.org> [110426 10:41]:
> 2011/4/25 john stultz <johnstul@us.ibm.com>:
> > On Sun, 2011-04-24 at 09:27 +0200, Linus Walleij wrote:
> >> Any reason why we can't simply move *all* of these to
> >> drivers/clocksource/* and proceed with consolidation there?
> >
> > This gives me some pause, as having the clocksources in the platform
> > code makes it easier to know what platform needs to be tested when a
> > change is made. The rule so far has been if more then one arch can make
> > use of it, it should be moved to the drivers/clocksource dir. Otherwise,
> > leave it close to any arch specific code that manages the hardware.
> 
> That means that by definition anything in a plat-* directory, say e.g.
> plat-nomadik/timer.c and plat-omap/dmtimer.c should go into
> drivers/clocksource I believe?

Or drivers/timers as they may be generic hardware timers? They are
not necessarily used for clocksource.

Regards,

Tony

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

* [patch 04/16] arm: davinci: Use clocksource based sched_clock
  2011-04-23 20:54 ` [patch 04/16] arm: davinci: " Thomas Gleixner
@ 2011-04-26 15:40   ` Nori, Sekhar
  0 siblings, 0 replies; 51+ messages in thread
From: Nori, Sekhar @ 2011-04-26 15:40 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, Apr 24, 2011 at 02:24:43, Thomas Gleixner wrote:

> -static cycle_t read_cycles(struct clocksource *cs)
> +static cycle_t notrace read_cycles(struct clocksource *cs)
>  {
>  	struct timer_s *t = &timers[TID_CLOCKSOURCE];
>  
>  	return (cycles_t)timer32_read(t);
>  }
>  
> -/*
> - * Kernel assumes that sched_clock can be called early but may not have
> - * things ready yet.
> - */
> -static cycle_t read_dummy(struct clocksource *cs)
> -{
> -	return 0;
> -}
> -
> -
>  static struct clocksource clocksource_davinci = {
>  	.rating		= 300,
> -	.read		= read_dummy,
> +	.read		= read_,

This should be read_cycles, I guess.

With that fixed, boot tested on DM365 and DA850 EVMs.

Thanks,
Sekhar

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

* [patch 01/16] time: Provide clocksource based sched_clock()
  2011-04-23 20:54 ` [patch 01/16] time: Provide clocksource based sched_clock() Thomas Gleixner
  2011-04-23 21:33   ` Stephen Boyd
  2011-04-25  7:10   ` Kukjin Kim
@ 2011-04-26 16:36   ` Stephen Boyd
  2 siblings, 0 replies; 51+ messages in thread
From: Stephen Boyd @ 2011-04-26 16:36 UTC (permalink / raw)
  To: linux-arm-kernel

On 04/23/2011 01:54 PM, Thomas Gleixner wrote:
> Many embedded platforms use the clocksource which is used for
> timekeeping as their sched_clock as well. Though they need to take
> care about the wraparounds as sched_clock() wants to be monotonic
> increasing nsescs. The timekeeping code and the NOHZ core take care of
> the timekeeping clocksource wraparound so we can simply use the
> timekeeping clocksource if possible.
>
> clocksources which can be used by the clksrc sched_clock must have the
> flag CLOCK_SOURCE_SCHED_CLOCK set. This works with the default (weak)
> sched_clock implementation but the clksrc based function is also
> provided for architectures where multi platform kernels might override
> it. If there is no CLOCK_SOURCE_SCHED_CLOCK available, then the
> function returns the jiffies based sched clock.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Tested-by: Stephen Boyd <sboyd@codeaurora.org>

MSM doesn't have a sched_clock(), so I applied this patch on top. Care
to pick it up?

8<-----

Subject: [PATCH] msm: timer: Support clocksource sched_clock()

With the clocksource sched_clock() implementation we can support
sched_clock on MSM with little effort.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---
 arch/arm/mach-msm/timer.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c
index 38b95e9..c875f9a 100644
--- a/arch/arm/mach-msm/timer.c
+++ b/arch/arm/mach-msm/timer.c
@@ -96,7 +96,7 @@ static irqreturn_t msm_timer_interrupt(int irq, void *dev_id)
        return IRQ_HANDLED;
 }

-static cycle_t msm_read_timer_count(struct clocksource *cs)
+static cycle_t notrace msm_read_timer_count(struct clocksource *cs)
 {
        struct msm_clock *clk = container_of(cs, struct msm_clock, clocksource);

@@ -186,7 +186,8 @@ static struct msm_clock msm_clocks[] = {
                        .rating         = 300,
                        .read           = msm_read_timer_count,
                        .mask           = CLOCKSOURCE_MASK((32 - MSM_DGT_SHIFT)),
-                       .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
+                       .flags          = CLOCK_SOURCE_IS_CONTINUOUS |
+                                         CLOCK_SOURCE_SCHED_CLOCK,
                },
                .irq = {
                        .name    = "dg_timer",

-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (16 preceding siblings ...)
  2011-04-24  7:27 ` [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Linus Walleij
@ 2011-04-29  9:46 ` Russell King - ARM Linux
  2011-04-29 10:22   ` Thomas Gleixner
  2011-06-13  2:32 ` Rob Herring
  18 siblings, 1 reply; 51+ messages in thread
From: Russell King - ARM Linux @ 2011-04-29  9:46 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Apr 23, 2011 at 08:54:39PM -0000, Thomas Gleixner wrote:
> Most of ARM sched_clocks is using the timekeeping clocksource as the
> sched_clock. Only versatile uses a different clock for it, but there
> is no real reason why it can't use the clocksource as well.

sched_clock really needs to be setup earlier than clocksources are setup,
before sched_init() is called in init/main.c.  This is where the scheduler
reads the initial value of sched_clock() to start its time measurements.
This is well before clocksources are initialized, or even the irq subsystem.

So I don't believe bolting it directly into the clocksource code in this
way is correct.  As things are currently setup with my sched_clock()
implementation, we can (and in any cases do) get the sched_clock() up
and running really early which is what's required.

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-29  9:46 ` Russell King - ARM Linux
@ 2011-04-29 10:22   ` Thomas Gleixner
  2011-04-29 10:32     ` Tony Lindgren
  0 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-29 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, 29 Apr 2011, Russell King - ARM Linux wrote:

> On Sat, Apr 23, 2011 at 08:54:39PM -0000, Thomas Gleixner wrote:
> > Most of ARM sched_clocks is using the timekeeping clocksource as the
> > sched_clock. Only versatile uses a different clock for it, but there
> > is no real reason why it can't use the clocksource as well.
> 
> sched_clock really needs to be setup earlier than clocksources are setup,
> before sched_init() is called in init/main.c.  This is where the scheduler
> reads the initial value of sched_clock() to start its time measurements.
> This is well before clocksources are initialized, or even the irq subsystem.
> 
> So I don't believe bolting it directly into the clocksource code in this
> way is correct.  As things are currently setup with my sched_clock()
> implementation, we can (and in any cases do) get the sched_clock() up
> and running really early which is what's required.

Not really. There is no requirement to have a high resolution sched
clock in the early boot process. The only requirement is that
sched_clock is monotonic increasing nsecs. So the code utilizes
jiffies up to the point where the clocksource is installed and then
switches over keeping the clock monotonic. The scheduler does not care
whether it gets coarse grained time information in the early boot
stage and then fine grained information at some point later.

The only drawback is that you don't get precise timestamps for tracing
up to the point where the clock source is installed. But that's really
not a big deal to worry about.

Thanks,

	tglx

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-29 10:22   ` Thomas Gleixner
@ 2011-04-29 10:32     ` Tony Lindgren
  2011-04-29 17:01       ` Thomas Gleixner
  0 siblings, 1 reply; 51+ messages in thread
From: Tony Lindgren @ 2011-04-29 10:32 UTC (permalink / raw)
  To: linux-arm-kernel

* Thomas Gleixner <tglx@linutronix.de> [110429 13:19]:
> On Fri, 29 Apr 2011, Russell King - ARM Linux wrote:
> 
> > On Sat, Apr 23, 2011 at 08:54:39PM -0000, Thomas Gleixner wrote:
> > > Most of ARM sched_clocks is using the timekeeping clocksource as the
> > > sched_clock. Only versatile uses a different clock for it, but there
> > > is no real reason why it can't use the clocksource as well.
> > 
> > sched_clock really needs to be setup earlier than clocksources are setup,
> > before sched_init() is called in init/main.c.  This is where the scheduler
> > reads the initial value of sched_clock() to start its time measurements.
> > This is well before clocksources are initialized, or even the irq subsystem.
> > 
> > So I don't believe bolting it directly into the clocksource code in this
> > way is correct.  As things are currently setup with my sched_clock()
> > implementation, we can (and in any cases do) get the sched_clock() up
> > and running really early which is what's required.
> 
> Not really. There is no requirement to have a high resolution sched
> clock in the early boot process. The only requirement is that
> sched_clock is monotonic increasing nsecs. So the code utilizes
> jiffies up to the point where the clocksource is installed and then
> switches over keeping the clock monotonic. The scheduler does not care
> whether it gets coarse grained time information in the early boot
> stage and then fine grained information at some point later.
> 
> The only drawback is that you don't get precise timestamps for tracing
> up to the point where the clock source is installed. But that's really
> not a big deal to worry about.

What about PRINTK_TIME? I think that uses sched_clock right from the
start.

Tony

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

* [patch 07/16] arm: omap: Use clocksource based sched_clock
  2011-04-23 20:54 ` [patch 07/16] arm: omap: " Thomas Gleixner
@ 2011-04-29 11:57   ` Tony Lindgren
  2011-04-29 12:28     ` Thomas Gleixner
  0 siblings, 1 reply; 51+ messages in thread
From: Tony Lindgren @ 2011-04-29 11:57 UTC (permalink / raw)
  To: linux-arm-kernel

* Thomas Gleixner <tglx@linutronix.de> [110423 13:51]:
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
>  arch/arm/mach-omap1/time.c               |   62 +--------------------------
>  arch/arm/mach-omap2/timer-gp.c           |   17 -------
>  arch/arm/plat-omap/counter_32k.c         |   71 ++-----------------------------
>  arch/arm/plat-omap/dmtimer.c             |    4 -
>  arch/arm/plat-omap/include/plat/common.h |    1 
>  5 files changed, 13 insertions(+), 142 deletions(-)

This one needs the following patch to compile. Also, this
fails with following, probably because the clocks are not
set up at that point.

Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 80000005 [#1] SMP
last sysfs file: 
Modules linked in:
CPU: 0    Not tainted  (2.6.39-rc5-00081-gc3dec8c #166)
PC is at 0x0
LR is at read_persistent_clock+0x24/0xb4
pc : [<00000000>]    lr : [<c007f86c>]    psr: 600001d3
sp : c05a3fa8  ip : c05a2000  fp : 00000000
r10: 00000000  r9 : 411fc092  r8 : 80000000
r7 : c05bc144  r6 : c05a3fc0  r5 : c0624bf4  r4 : c05f9120
r3 : 00000000  r2 : 00000001  r1 : c009bb24  r0 : c05f9120
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32  ISA ARM  Segment kernel
Control: 10c53c7f  Table: 8000404a  DAC: 00000017
Process swapper (pid: 0, stack limit = 0xc05a22f8)
Stack: (0xc05a3fa8 to 0xc05a4000)
3fa0:                   c0035d3c 00000001 c0623bc0 c001ce10 00000000 00000001
3fc0: 00000000 c0400a48 c0035d3c c0035d3c 00000001 c0008a04 c0008640 00000870
3fe0: 80000100 c0035d3c 10c53c7d c05b78dc c0035d0c 8000803c 00000000 00000000
[<c007f86c>] (read_persistent_clock+0x24/0xb4) from [<c001ce10>] (timekeeping_init+0x10/0x114)
[<c001ce10>] (timekeeping_init+0x10/0x114) from [<c0008a04>] (start_kernel+0x188/0x2ec)
[<c0008a04>] (start_kernel+0x188/0x2ec) from [<8000803c>] (0x8000803c)
Code: bad PC value
---[ end trace 1b75b31a2719ed1c ]---

The generic code should probably just return 0 until the clocks are
initialized. Or do you have some other solution for that in mind?

Tony


--- a/arch/arm/plat-omap/counter_32k.c
+++ b/arch/arm/plat-omap/counter_32k.c
@@ -139,8 +139,6 @@ int __init omap_init_clocksource_32k(void)
 		if (!IS_ERR(sync_32k_ick))
 			clk_enable(sync_32k_ick);
 
-		offset_32k = clocksource_32k.read(&clocksource_32k);
-
 		if (clocksource_register_hz(&clocksource_32k, 32768))
 			printk(err, clocksource_32k.name);
 	}

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

* [patch 07/16] arm: omap: Use clocksource based sched_clock
  2011-04-29 11:57   ` Tony Lindgren
@ 2011-04-29 12:28     ` Thomas Gleixner
  2011-04-29 12:51       ` Tony Lindgren
  0 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-29 12:28 UTC (permalink / raw)
  To: linux-arm-kernel

B1;2601;0cOn Fri, 29 Apr 2011, Tony Lindgren wrote:

> * Thomas Gleixner <tglx@linutronix.de> [110423 13:51]:
> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> > ---
> >  arch/arm/mach-omap1/time.c               |   62 +--------------------------
> >  arch/arm/mach-omap2/timer-gp.c           |   17 -------
> >  arch/arm/plat-omap/counter_32k.c         |   71 ++-----------------------------
> >  arch/arm/plat-omap/dmtimer.c             |    4 -
> >  arch/arm/plat-omap/include/plat/common.h |    1 
> >  5 files changed, 13 insertions(+), 142 deletions(-)
> 
> This one needs the following patch to compile. Also, this
> fails with following, probably because the clocks are not
> set up at that point.
> 
> Unable to handle kernel NULL pointer dereference at virtual address 00000000
> pgd = c0004000
> [00000000] *pgd=00000000
> Internal error: Oops: 80000005 [#1] SMP
> last sysfs file: 
> Modules linked in:
> CPU: 0    Not tainted  (2.6.39-rc5-00081-gc3dec8c #166)
> PC is at 0x0
> LR is at read_persistent_clock+0x24/0xb4

> The generic code should probably just return 0 until the clocks are
> initialized. Or do you have some other solution for that in mind?

The generic sched_clock implementation returns a jiffies based value
as long as there is no clocksource registered. But the above does not
fail in sched_clock() it fails in read_persistent_clock() which does

        last_cycles = cycles;
        cycles = clocksource_32k.read(&clocksource_32k);

So the following change causes this:

-     .read           = omap_32k_read_dummy,

Which leads to the question why you have a read_persistent_clock() at
all if it always reads 0 via omap_32k_read_dummy ? Or is this meant
just for the resume case? Then the above and the removal of
omap_32k_read_dummy() needs to be undone.

Thanks,

	tglx

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

* [patch 07/16] arm: omap: Use clocksource based sched_clock
  2011-04-29 12:28     ` Thomas Gleixner
@ 2011-04-29 12:51       ` Tony Lindgren
  2011-04-29 14:19         ` Thomas Gleixner
  0 siblings, 1 reply; 51+ messages in thread
From: Tony Lindgren @ 2011-04-29 12:51 UTC (permalink / raw)
  To: linux-arm-kernel

* Thomas Gleixner <tglx@linutronix.de> [110429 05:25]:
> 
> The generic sched_clock implementation returns a jiffies based value
> as long as there is no clocksource registered. But the above does not
> fail in sched_clock() it fails in read_persistent_clock() which does
> 
>         last_cycles = cycles;
>         cycles = clocksource_32k.read(&clocksource_32k);
> 
> So the following change causes this:
> 
> -     .read           = omap_32k_read_dummy,

Ah right.
 
> Which leads to the question why you have a read_persistent_clock() at
> all if it always reads 0 via omap_32k_read_dummy ? Or is this meant
> just for the resume case? Then the above and the removal of
> omap_32k_read_dummy() needs to be undone.

The omap_32k_read_dummy needs to return 0 until the clocks are
enabled and the right read function is selected. The .read gets
then set in omap_init_clocksource_32k.

It would be nice to handle that in a generic way though,
I would assume the same issue exists for other platforms too.

Updated version of your patch below, it now boots on both
omap1 and omap2+.

Regards,

Tony


From: Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH] arm: omap: Use clocksource based sched_clock

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Tony Lindgren <tony@atomide.com>

--- a/arch/arm/mach-omap1/time.c
+++ b/arch/arm/mach-omap1/time.c
@@ -49,7 +49,6 @@
 #include <mach/hardware.h>
 #include <asm/leds.h>
 #include <asm/irq.h>
-#include <asm/sched_clock.h>
 
 #include <asm/mach/irq.h>
 #include <asm/mach/time.h>
@@ -203,7 +202,7 @@ static struct irqaction omap_mpu_timer2_irq = {
 	.handler	= omap_mpu_timer2_interrupt,
 };
 
-static cycle_t mpu_read(struct clocksource *cs)
+static cycle_t notrace mpu_read(struct clocksource *cs)
 {
 	return ~omap_mpu_timer_read(1);
 }
@@ -213,35 +212,9 @@ static struct clocksource clocksource_mpu = {
 	.rating		= 300,
 	.read		= mpu_read,
 	.mask		= CLOCKSOURCE_MASK(32),
-	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
+	.flags		= CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SCHED_CLOCK,
 };
 
-static DEFINE_CLOCK_DATA(cd);
-
-static inline unsigned long long notrace _omap_mpu_sched_clock(void)
-{
-	u32 cyc = mpu_read(&clocksource_mpu);
-	return cyc_to_sched_clock(&cd, cyc, (u32)~0);
-}
-
-#ifndef CONFIG_OMAP_32K_TIMER
-unsigned long long notrace sched_clock(void)
-{
-	return _omap_mpu_sched_clock();
-}
-#else
-static unsigned long long notrace omap_mpu_sched_clock(void)
-{
-	return _omap_mpu_sched_clock();
-}
-#endif
-
-static void notrace mpu_update_sched_clock(void)
-{
-	u32 cyc = mpu_read(&clocksource_mpu);
-	update_sched_clock(&cd, cyc, (u32)~0);
-}
-
 static void __init omap_init_clocksource(unsigned long rate)
 {
 	static char err[] __initdata = KERN_ERR
@@ -249,7 +222,6 @@ static void __init omap_init_clocksource(unsigned long rate)
 
 	setup_irq(INT_TIMER2, &omap_mpu_timer2_irq);
 	omap_mpu_timer_start(1, ~0, 1);
-	init_sched_clock(&cd, mpu_update_sched_clock, 32, rate);
 
 	if (clocksource_register_hz(&clocksource_mpu, rate))
 		printk(err, clocksource_mpu.name);
@@ -279,30 +251,6 @@ static inline void omap_mpu_timer_init(void)
 }
 #endif	/* CONFIG_OMAP_MPU_TIMER */
 
-#if defined(CONFIG_OMAP_MPU_TIMER) && defined(CONFIG_OMAP_32K_TIMER)
-static unsigned long long (*preferred_sched_clock)(void);
-
-unsigned long long notrace sched_clock(void)
-{
-	if (!preferred_sched_clock)
-		return 0;
-
-	return preferred_sched_clock();
-}
-
-static inline void preferred_sched_clock_init(bool use_32k_sched_clock)
-{
-	if (use_32k_sched_clock)
-		preferred_sched_clock = omap_32k_sched_clock;
-	else
-		preferred_sched_clock = omap_mpu_sched_clock;
-}
-#else
-static inline void preferred_sched_clock_init(bool use_32k_sched_clcok)
-{
-}
-#endif
-
 static inline int omap_32k_timer_usable(void)
 {
 	int res = false;
@@ -324,12 +272,8 @@ static inline int omap_32k_timer_usable(void)
  */
 static void __init omap_timer_init(void)
 {
-	if (omap_32k_timer_usable()) {
-		preferred_sched_clock_init(1);
-	} else {
+	if (!omap_32k_timer_usable())
 		omap_mpu_timer_init();
-		preferred_sched_clock_init(0);
-	}
 }
 
 struct sys_timer omap_timer = {
--- a/arch/arm/mach-omap2/timer-gp.c
+++ b/arch/arm/mach-omap2/timer-gp.c
@@ -39,7 +39,6 @@
 #include <asm/mach/time.h>
 #include <plat/dmtimer.h>
 #include <asm/localtimer.h>
-#include <asm/sched_clock.h>
 #include <plat/common.h>
 #include <plat/omap_hwmod.h>
 
@@ -196,9 +195,8 @@ static void __init omap2_gp_clocksource_init(void)
 /*
  * clocksource
  */
-static DEFINE_CLOCK_DATA(cd);
 static struct omap_dm_timer *gpt_clocksource;
-static cycle_t clocksource_read_cycles(struct clocksource *cs)
+static cycle_t notrace clocksource_read_cycles(struct clocksource *cs)
 {
 	return (cycle_t)omap_dm_timer_read_counter(gpt_clocksource);
 }
@@ -208,18 +206,9 @@ static struct clocksource clocksource_gpt = {
 	.rating		= 300,
 	.read		= clocksource_read_cycles,
 	.mask		= CLOCKSOURCE_MASK(32),
-	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
+	.flags		= CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SCHED_CLOCK,
 };
 
-static void notrace dmtimer_update_sched_clock(void)
-{
-	u32 cyc;
-
-	cyc = omap_dm_timer_read_counter(gpt_clocksource);
-
-	update_sched_clock(&cd, cyc, (u32)~0);
-}
-
 /* Setup free-running counter for clocksource */
 static void __init omap2_gp_clocksource_init(void)
 {
@@ -240,8 +229,6 @@ static void __init omap2_gp_clocksource_init(void)
 
 	omap_dm_timer_set_load_start(gpt, 1, 0);
 
-	init_sched_clock(&cd, dmtimer_update_sched_clock, 32, tick_rate);
-
 	if (clocksource_register_hz(&clocksource_gpt, tick_rate))
 		printk(err2, clocksource_gpt.name);
 }
--- a/arch/arm/plat-omap/counter_32k.c
+++ b/arch/arm/plat-omap/counter_32k.c
@@ -19,8 +19,6 @@
 #include <linux/io.h>
 #include <linux/sched.h>
 
-#include <asm/sched_clock.h>
-
 #include <plat/common.h>
 #include <plat/board.h>
 
@@ -38,17 +36,10 @@
 
 #include <linux/clocksource.h>
 
-/*
- * offset_32k holds the init time counter value. It is then subtracted
- * from every counter read to achieve a counter that counts time from the
- * kernel boot (needed for sched_clock()).
- */
-static u32 offset_32k __read_mostly;
-
 #ifdef CONFIG_ARCH_OMAP16XX
 static cycle_t notrace omap16xx_32k_read(struct clocksource *cs)
 {
-	return omap_readl(OMAP16XX_TIMER_32K_SYNCHRONIZED) - offset_32k;
+	return omap_readl(OMAP16XX_TIMER_32K_SYNCHRONIZED);
 }
 #else
 #define omap16xx_32k_read	NULL
@@ -57,7 +48,7 @@ static cycle_t notrace omap16xx_32k_read(struct clocksource *cs)
 #ifdef CONFIG_SOC_OMAP2420
 static cycle_t notrace omap2420_32k_read(struct clocksource *cs)
 {
-	return omap_readl(OMAP2420_32KSYNCT_BASE + 0x10) - offset_32k;
+	return omap_readl(OMAP2420_32KSYNCT_BASE + 0x10);
 }
 #else
 #define omap2420_32k_read	NULL
@@ -66,7 +57,7 @@ static cycle_t notrace omap2420_32k_read(struct clocksource *cs)
 #ifdef CONFIG_SOC_OMAP2430
 static cycle_t notrace omap2430_32k_read(struct clocksource *cs)
 {
-	return omap_readl(OMAP2430_32KSYNCT_BASE + 0x10) - offset_32k;
+	return omap_readl(OMAP2430_32KSYNCT_BASE + 0x10);
 }
 #else
 #define omap2430_32k_read	NULL
@@ -75,7 +66,7 @@ static cycle_t notrace omap2430_32k_read(struct clocksource *cs)
 #ifdef CONFIG_ARCH_OMAP3
 static cycle_t notrace omap34xx_32k_read(struct clocksource *cs)
 {
-	return omap_readl(OMAP3430_32KSYNCT_BASE + 0x10) - offset_32k;
+	return omap_readl(OMAP3430_32KSYNCT_BASE + 0x10);
 }
 #else
 #define omap34xx_32k_read	NULL
@@ -84,7 +75,7 @@ static cycle_t notrace omap34xx_32k_read(struct clocksource *cs)
 #ifdef CONFIG_ARCH_OMAP4
 static cycle_t notrace omap44xx_32k_read(struct clocksource *cs)
 {
-	return omap_readl(OMAP4430_32KSYNCT_BASE + 0x10) - offset_32k;
+	return omap_readl(OMAP4430_32KSYNCT_BASE + 0x10);
 }
 #else
 #define omap44xx_32k_read	NULL
@@ -104,46 +95,9 @@ static struct clocksource clocksource_32k = {
 	.rating		= 250,
 	.read		= omap_32k_read_dummy,
 	.mask		= CLOCKSOURCE_MASK(32),
-	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
+	.flags		= CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SCHED_CLOCK,
 };
 
-/*
- * Returns current time from boot in nsecs. It's OK for this to wrap
- * around for now, as it's just a relative time stamp.
- */
-static DEFINE_CLOCK_DATA(cd);
-
-/*
- * Constants generated by clocks_calc_mult_shift(m, s, 32768, NSEC_PER_SEC, 60).
- * This gives a resolution of about 30us and a wrap period of about 36hrs.
- */
-#define SC_MULT		4000000000u
-#define SC_SHIFT	17
-
-static inline unsigned long long notrace _omap_32k_sched_clock(void)
-{
-	u32 cyc = clocksource_32k.read(&clocksource_32k);
-	return cyc_to_fixed_sched_clock(&cd, cyc, (u32)~0, SC_MULT, SC_SHIFT);
-}
-
-#ifndef CONFIG_OMAP_MPU_TIMER
-unsigned long long notrace sched_clock(void)
-{
-	return _omap_32k_sched_clock();
-}
-#else
-unsigned long long notrace omap_32k_sched_clock(void)
-{
-	return _omap_32k_sched_clock();
-}
-#endif
-
-static void notrace omap_update_sched_clock(void)
-{
-	u32 cyc = clocksource_32k.read(&clocksource_32k);
-	update_sched_clock(&cd, cyc, (u32)~0);
-}
-
 /**
  * read_persistent_clock -  Return time from a persistent clock.
  *
@@ -195,13 +149,8 @@ int __init omap_init_clocksource_32k(void)
 		if (!IS_ERR(sync_32k_ick))
 			clk_enable(sync_32k_ick);
 
-		offset_32k = clocksource_32k.read(&clocksource_32k);
-
 		if (clocksource_register_hz(&clocksource_32k, 32768))
 			printk(err, clocksource_32k.name);
-
-		init_fixed_sched_clock(&cd, omap_update_sched_clock, 32,
-				       32768, SC_MULT, SC_SHIFT);
 	}
 	return 0;
 }
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -289,7 +289,7 @@ static spinlock_t dm_timer_lock;
  * is encoded in reg. Note that in posted mode write pending bit must be
  * checked. Otherwise a read of a non completed write will produce an error.
  */
-static inline u32 omap_dm_timer_read_reg(struct omap_dm_timer *timer, u32 reg)
+static inline u32 notrace omap_dm_timer_read_reg(struct omap_dm_timer *timer, u32 reg)
 {
 	if (timer->posted)
 		while (readl(timer->io_base + (OMAP_TIMER_WRITE_PEND_REG & 0xff))
@@ -700,7 +700,7 @@ void omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value)
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_write_status);
 
-unsigned int omap_dm_timer_read_counter(struct omap_dm_timer *timer)
+unsigned int notrace omap_dm_timer_read_counter(struct omap_dm_timer *timer)
 {
 	unsigned int l;
 
--- a/arch/arm/plat-omap/include/plat/common.h
+++ b/arch/arm/plat-omap/include/plat/common.h
@@ -37,7 +37,6 @@ extern void omap_map_common_io(void);
 extern struct sys_timer omap_timer;
 extern bool omap_32k_timer_init(void);
 extern int __init omap_init_clocksource_32k(void);
-extern unsigned long long notrace omap_32k_sched_clock(void);
 
 extern void omap_reserve(void);
 

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

* [patch 07/16] arm: omap: Use clocksource based sched_clock
  2011-04-29 12:51       ` Tony Lindgren
@ 2011-04-29 14:19         ` Thomas Gleixner
  2011-05-02  8:10           ` Tony Lindgren
  0 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-29 14:19 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, 29 Apr 2011, Tony Lindgren wrote:
> * Thomas Gleixner <tglx@linutronix.de> [110429 05:25]:
> > 
> > The generic sched_clock implementation returns a jiffies based value
> > as long as there is no clocksource registered. But the above does not
> > fail in sched_clock() it fails in read_persistent_clock() which does
> > 
> >         last_cycles = cycles;
> >         cycles = clocksource_32k.read(&clocksource_32k);
> > 
> > So the following change causes this:
> > 
> > -     .read           = omap_32k_read_dummy,
> 
> Ah right.
>  
> > Which leads to the question why you have a read_persistent_clock() at
> > all if it always reads 0 via omap_32k_read_dummy ? Or is this meant
> > just for the resume case? Then the above and the removal of
> > omap_32k_read_dummy() needs to be undone.
> 
> The omap_32k_read_dummy needs to return 0 until the clocks are
> enabled and the right read function is selected. The .read gets
> then set in omap_init_clocksource_32k.
> 
> It would be nice to handle that in a generic way though,
> I would assume the same issue exists for other platforms too.

static inline cycles_t clocksource_read_safe(struct clocksource *c)
{
	return c->read ? c->read(c) : 0;
}

For the core timekeeping code that's a non issue as nothing should
register a clocksource with an invalid read function pointer :)

Thanks,

	tglx

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-29 10:32     ` Tony Lindgren
@ 2011-04-29 17:01       ` Thomas Gleixner
  2011-04-29 21:53         ` Linus Walleij
  0 siblings, 1 reply; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-29 17:01 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, 29 Apr 2011, Tony Lindgren wrote:
> * Thomas Gleixner <tglx@linutronix.de> [110429 13:19]:
> > On Fri, 29 Apr 2011, Russell King - ARM Linux wrote:
> > 
> > > On Sat, Apr 23, 2011 at 08:54:39PM -0000, Thomas Gleixner wrote:
> > > > Most of ARM sched_clocks is using the timekeeping clocksource as the
> > > > sched_clock. Only versatile uses a different clock for it, but there
> > > > is no real reason why it can't use the clocksource as well.
> > > 
> > > sched_clock really needs to be setup earlier than clocksources are setup,
> > > before sched_init() is called in init/main.c.  This is where the scheduler
> > > reads the initial value of sched_clock() to start its time measurements.
> > > This is well before clocksources are initialized, or even the irq subsystem.
> > > 
> > > So I don't believe bolting it directly into the clocksource code in this
> > > way is correct.  As things are currently setup with my sched_clock()
> > > implementation, we can (and in any cases do) get the sched_clock() up
> > > and running really early which is what's required.
> > 
> > Not really. There is no requirement to have a high resolution sched
> > clock in the early boot process. The only requirement is that
> > sched_clock is monotonic increasing nsecs. So the code utilizes
> > jiffies up to the point where the clocksource is installed and then
> > switches over keeping the clock monotonic. The scheduler does not care
> > whether it gets coarse grained time information in the early boot
> > stage and then fine grained information at some point later.
> > 
> > The only drawback is that you don't get precise timestamps for tracing
> > up to the point where the clock source is installed. But that's really
> > not a big deal to worry about.
> 
> What about PRINTK_TIME? I think that uses sched_clock right from the
> start.

Right, but where is the problem ? A few time stamps with jiffies
resolution and then the finegrained ones.

Thanks,

	tglx

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-29 17:01       ` Thomas Gleixner
@ 2011-04-29 21:53         ` Linus Walleij
  2011-04-29 21:57           ` Thomas Gleixner
  0 siblings, 1 reply; 51+ messages in thread
From: Linus Walleij @ 2011-04-29 21:53 UTC (permalink / raw)
  To: linux-arm-kernel

2011/4/29 Thomas Gleixner <tglx@linutronix.de>:
> On Fri, 29 Apr 2011, Tony Lindgren wrote:
>> What about PRINTK_TIME? I think that uses sched_clock right from the
>> start.
>
> Right, but where is the problem ? A few time stamps with jiffies
> resolution and then the finegrained ones.

Jonas ?berg has this pending patch that we call "boot time recorder".
What it does is basically start a free running timer before the
kernel is booted, e.g. in U-boot or even in the ROM of your
machine if you can.

If we need more finegrained sched_clock() before the
clocksource is up, a good approach would be to utilize
something like that for sched_clock up to that point, plus
it has the upside that [0.000000] is as close to electrical
power-on as possible.

Yours,
Linus Walleij

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-29 21:53         ` Linus Walleij
@ 2011-04-29 21:57           ` Thomas Gleixner
  2011-05-02  8:18             ` Tony Lindgren
  2011-05-08 20:34             ` Linus Walleij
  0 siblings, 2 replies; 51+ messages in thread
From: Thomas Gleixner @ 2011-04-29 21:57 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, 29 Apr 2011, Linus Walleij wrote:

> 2011/4/29 Thomas Gleixner <tglx@linutronix.de>:
> > On Fri, 29 Apr 2011, Tony Lindgren wrote:
> >> What about PRINTK_TIME? I think that uses sched_clock right from the
> >> start.
> >
> > Right, but where is the problem ? A few time stamps with jiffies
> > resolution and then the finegrained ones.
> 
> Jonas ?berg has this pending patch that we call "boot time recorder".
> What it does is basically start a free running timer before the
> kernel is booted, e.g. in U-boot or even in the ROM of your
> machine if you can.
> 
> If we need more finegrained sched_clock() before the
> clocksource is up, a good approach would be to utilize
> something like that for sched_clock up to that point, plus
> it has the upside that [0.000000] is as close to electrical
> power-on as possible.

Well, you can read out that value at the point the clocksource gets
installed so you have the time spent up to that point without adding
another facility, level of indirection ...

Thanks,

	tglx

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

* [patch 07/16] arm: omap: Use clocksource based sched_clock
  2011-04-29 14:19         ` Thomas Gleixner
@ 2011-05-02  8:10           ` Tony Lindgren
  0 siblings, 0 replies; 51+ messages in thread
From: Tony Lindgren @ 2011-05-02  8:10 UTC (permalink / raw)
  To: linux-arm-kernel

* Thomas Gleixner <tglx@linutronix.de> [110429 07:16]:
> On Fri, 29 Apr 2011, Tony Lindgren wrote:
> > * Thomas Gleixner <tglx@linutronix.de> [110429 05:25]:
> > > 
> > > The generic sched_clock implementation returns a jiffies based value
> > > as long as there is no clocksource registered. But the above does not
> > > fail in sched_clock() it fails in read_persistent_clock() which does
> > > 
> > >         last_cycles = cycles;
> > >         cycles = clocksource_32k.read(&clocksource_32k);
> > > 
> > > So the following change causes this:
> > > 
> > > -     .read           = omap_32k_read_dummy,
> > 
> > Ah right.
> >  
> > > Which leads to the question why you have a read_persistent_clock() at
> > > all if it always reads 0 via omap_32k_read_dummy ? Or is this meant
> > > just for the resume case? Then the above and the removal of
> > > omap_32k_read_dummy() needs to be undone.
> > 
> > The omap_32k_read_dummy needs to return 0 until the clocks are
> > enabled and the right read function is selected. The .read gets
> > then set in omap_init_clocksource_32k.
> > 
> > It would be nice to handle that in a generic way though,
> > I would assume the same issue exists for other platforms too.
> 
> static inline cycles_t clocksource_read_safe(struct clocksource *c)
> {
> 	return c->read ? c->read(c) : 0;
> }

That adds testing for it for each read.. So the current setup
is better.
 
> For the core timekeeping code that's a non issue as nothing should
> register a clocksource with an invalid read function pointer :)

Looks like omap_device code calls read_persistent_clock before
omap_init_clocksource_32k is run. I'll take a look and see if that
is needed when I refresh other omap init_early patches.

Anyways, currently nothing prevents calling read_persistent_clock
before it's initialized and a platform specific hack is needed.
Maybe the default should be clocksource_read_safe that gets
changed by the platform code when initializing?

Regards,

Tony

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-29 21:57           ` Thomas Gleixner
@ 2011-05-02  8:18             ` Tony Lindgren
  2011-05-08 20:34             ` Linus Walleij
  1 sibling, 0 replies; 51+ messages in thread
From: Tony Lindgren @ 2011-05-02  8:18 UTC (permalink / raw)
  To: linux-arm-kernel

* Thomas Gleixner <tglx@linutronix.de> [110429 14:54]:
> On Fri, 29 Apr 2011, Linus Walleij wrote:
> 
> > 2011/4/29 Thomas Gleixner <tglx@linutronix.de>:
> > > On Fri, 29 Apr 2011, Tony Lindgren wrote:
> > >> What about PRINTK_TIME? I think that uses sched_clock right from the
> > >> start.
> > >
> > > Right, but where is the problem ? A few time stamps with jiffies
> > > resolution and then the finegrained ones.
> > 
> > Jonas ?berg has this pending patch that we call "boot time recorder".
> > What it does is basically start a free running timer before the
> > kernel is booted, e.g. in U-boot or even in the ROM of your
> > machine if you can.
> > 
> > If we need more finegrained sched_clock() before the
> > clocksource is up, a good approach would be to utilize
> > something like that for sched_clock up to that point, plus
> > it has the upside that [0.000000] is as close to electrical
> > power-on as possible.
> 
> Well, you can read out that value at the point the clocksource gets
> installed so you have the time spent up to that point without adding
> another facility, level of indirection ...

I think the problem here too is that we are calling read_persistent_clock
and sched_clock before they're initialized. So we should default to
jiffies based value before the platform code enables the hardware.

Tony

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-29 21:57           ` Thomas Gleixner
  2011-05-02  8:18             ` Tony Lindgren
@ 2011-05-08 20:34             ` Linus Walleij
  1 sibling, 0 replies; 51+ messages in thread
From: Linus Walleij @ 2011-05-08 20:34 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Apr 29, 2011 at 11:57 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> On Fri, 29 Apr 2011, Linus Walleij wrote:
>>
>> Jonas ?berg has this pending patch that we call "boot time recorder".
>> What it does is basically start a free running timer before the
>> kernel is booted, e.g. in U-boot or even in the ROM of your
>> machine if you can.
>>
>> If we need more finegrained sched_clock() before the
>> clocksource is up, a good approach would be to utilize
>> something like that for sched_clock up to that point, plus
>> it has the upside that [0.000000] is as close to electrical
>> power-on as possible.
>
> Well, you can read out that value at the point the clocksource gets
> installed so you have the time spent up to that point without adding
> another facility, level of indirection ...

That too (one does not exclude the other), what I was getting at is that
systems may have something alredy running that is monotonic and
trustable, and would likely go into some early_timer() or similar familiar
kernel naming scheme. But no point in doing any of that sort now, let's
have jiffies for now and get that to work.

Thanks,
Linus Walleij

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

* [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock
  2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
                   ` (17 preceding siblings ...)
  2011-04-29  9:46 ` Russell King - ARM Linux
@ 2011-06-13  2:32 ` Rob Herring
  18 siblings, 0 replies; 51+ messages in thread
From: Rob Herring @ 2011-06-13  2:32 UTC (permalink / raw)
  To: linux-arm-kernel

Thomas,

On 04/23/2011 03:54 PM, Thomas Gleixner wrote:
> Most of ARM sched_clocks is using the timekeeping clocksource as the
> sched_clock. Only versatile uses a different clock for it, but there
> is no real reason why it can't use the clocksource as well.
>
> The core timekeeping code makes already sure that we don't wrap the
> timekeeper and we can base a sched_clock easily on that.
>
> It uses the read function of the clocksource and keeps track of time
> independent of the timekeeping code as the ARM sched_clock
> implementation does. It also uses it's own sequence counter so
> sched_clock is not dependent on xtime_lock. The update sequence is
> just adding offsets once in a while and runs from do_timer() which
> also makes sure that only one core tries to update it.
>
> Only lightly tested on orion. Please give it a go.
>
> Another 650 lines gone :)
>

What's happening with this patch series? Just wondering if I'll need to 
add yet another sched_clock implementation or not.

Rob

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

end of thread, other threads:[~2011-06-13  2:32 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-04-23 20:54 [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Thomas Gleixner
2011-04-23 20:54 ` [patch 01/16] time: Provide clocksource based sched_clock() Thomas Gleixner
2011-04-23 21:33   ` Stephen Boyd
2011-04-23 21:40     ` Thomas Gleixner
2011-04-25  7:10   ` Kukjin Kim
2011-04-26 16:36   ` Stephen Boyd
2011-04-23 20:54 ` [patch 02/16] arm: plat-orion: Use clocksource based sched_clock Thomas Gleixner
2011-04-23 20:54 ` [patch 03/16] arm: s5p: " Thomas Gleixner
2011-04-23 21:33   ` Stephen Boyd
2011-04-23 21:41     ` Thomas Gleixner
2011-04-25  7:08   ` Kukjin Kim
2011-04-23 20:54 ` [patch 04/16] arm: davinci: " Thomas Gleixner
2011-04-26 15:40   ` Nori, Sekhar
2011-04-23 20:54 ` [patch 05/16] arm: ixp4xx: " Thomas Gleixner
2011-04-23 20:54 ` [patch 06/16] arm: mmp: " Thomas Gleixner
2011-04-23 20:54 ` [patch 07/16] arm: omap: " Thomas Gleixner
2011-04-29 11:57   ` Tony Lindgren
2011-04-29 12:28     ` Thomas Gleixner
2011-04-29 12:51       ` Tony Lindgren
2011-04-29 14:19         ` Thomas Gleixner
2011-05-02  8:10           ` Tony Lindgren
2011-04-23 20:54 ` [patch 08/16] arm: pxa: " Thomas Gleixner
2011-04-25 16:25   ` Eric
2011-04-26  7:23     ` Sascha Hauer
2011-04-26  7:26       ` Eric Miao
2011-04-23 20:54 ` [patch 09/16] arm: sa1100: " Thomas Gleixner
2011-04-23 20:54 ` [patch 10/16] arm: tegra: " Thomas Gleixner
2011-04-23 20:54 ` [patch 11/16] arm: u300: " Thomas Gleixner
2011-04-24  7:03   ` Linus Walleij
2011-04-23 20:54 ` [patch 12/16] arm: plat-iop: " Thomas Gleixner
2011-04-23 20:54 ` [patch 13/16] arm plat-mxc: " Thomas Gleixner
2011-04-26  7:23   ` Sascha Hauer
2011-04-23 20:54 ` [patch 14/16] arm: nomadik: " Thomas Gleixner
2011-04-24  7:04   ` Linus Walleij
2011-04-23 20:54 ` [patch 15/16] arm: versatile: " Thomas Gleixner
2011-04-23 20:54 ` [patch 16/16] arm: Remove sched_clock code Thomas Gleixner
2011-04-25  7:11   ` Kukjin Kim
2011-04-24  7:27 ` [patch 00/16] arm: Replace arm sched_clock by clocksource based sched_clock Linus Walleij
2011-04-25 19:10   ` john stultz
2011-04-26  7:45     ` Linus Walleij
2011-04-26  8:50       ` Tony Lindgren
2011-04-26  8:02   ` Thomas Gleixner
2011-04-29  9:46 ` Russell King - ARM Linux
2011-04-29 10:22   ` Thomas Gleixner
2011-04-29 10:32     ` Tony Lindgren
2011-04-29 17:01       ` Thomas Gleixner
2011-04-29 21:53         ` Linus Walleij
2011-04-29 21:57           ` Thomas Gleixner
2011-05-02  8:18             ` Tony Lindgren
2011-05-08 20:34             ` Linus Walleij
2011-06-13  2:32 ` Rob Herring

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.