RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-09-07 Thread Sripathy, Vishwanath
Hi Jean,

 -Original Message-
 From: Jean Pihet [mailto:jean.pi...@newoldbits.com]
 Sent: Monday, September 06, 2010 9:53 PM
 To: Sripathy, Vishwanath
 Cc: Shilimkar, Santosh; Amit Kucheria; Kevin Hilman; 
 linaro-...@lists.linaro.org;
 linux-omap@vger.kernel.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
 Hi Vishwa,
 
 On Mon, Sep 6, 2010 at 1:15 PM, Sripathy, Vishwanath
 vishwanath...@ti.com wrote:
  I did some profiling of assembly code on OMAP3630 board (ZOOM3). In worst 
  case
 it takes around 3.28ms and best case around 2.93ms for mpu off mode.
 Can you give a bit more details? Which measurement has been taken (ASM
 only, sleep, wake-up ...?) and what are the significant figures?
Measurement has been done for save (as part of sleep sequence) and restore 
routine (part of wake up sequence) in assembly code. The above number indicates 
total time spent in save and restore of ARM context. 

 
 For MPU INACTIVE/RET, it is less than 30us.
 Mmh that is the resolution of the 32kHz timer, so I guess you get
 either 0 or 1 timer cycle depending when you start the measurement.
 IMO the 32kHz timer is too slow to measure those fast events.
Yes I agree. When we use trace events, I believe it would be more accurate as 
it is based on ARM perf counters. 

Vishwa
 
  However as Kevin mentioned in other email, it would be better to find out a 
  way to
 trace inside assembly code as well.
 OK that could be done but first I would like to make sure such a
 complication is  needed.
 
 
  Regards
  Vishwa
 
 Jean
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-09-06 Thread Sripathy, Vishwanath
Jean,

 -Original Message-
 From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
 ow...@vger.kernel.org] On Behalf Of Jean Pihet
 Sent: Thursday, September 02, 2010 2:39 PM
 To: Shilimkar, Santosh
 Cc: Amit Kucheria; Kevin Hilman; linaro-...@lists.linaro.org; linux-
 o...@vger.kernel.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
 Hi Amit, Santosh,
 
 On Thu, Sep 2, 2010 at 10:11 AM, Shilimkar, Santosh
 santosh.shilim...@ti.com wrote:
 ...
   The point is to keep the minimum possible in the kernel: just the
   tracepoints we're interested in.   The rest (calculations, averages,
   analysis, etc.) does not need to be in the kernel and can be done easier
   and with more powerful tools outside the kernel.
 
  Kevin,
 
  I agree. We discussed this a little in our weekly meeting. Vishwa's main
  concern was the lack of ability to instrument the last bit of SRAM code.
 
  I have a feeling that even with caches on when we enter this code, we
  won't
  see too much variance in the latency to execute this bit of code. Vishwa
  is
  going to confirm that now. If that hypothesis is true, we can indeed move
  to
  using tracepoints in the idle path and use external tools to track latency.
 I agree. Can you confirm this asap?

I did some profiling of assembly code on OMAP3630 board (ZOOM3). In worst case 
it takes around 3.28ms and best case around 2.93ms for mpu off mode. For MPU 
INACTIVE/RET, it is less than 30us. 
However as Kevin mentioned in other email, it would be better to find out a way 
to trace inside assembly code as well.

Regards
Vishwa
 I am looking at the instrumentation tracepoints now. I think it would
 be ideal to provide multiple tracepoints in both sleep and wake-up
 paths.
 
  There will be difference with and without caches but the delta latency will 
  be
 constant with caches and without caches. Another important point is
  he lowest level code should be just profiled once and for worst CPU/BUS 
  clock
 speed.
 Ok.
 
  Even if it isn't true, the rest of the idle path could still contain
  tracepoints.
 I am looking at the best way to introduce tracepoints in the low level
 code, in case it is needed.
 
  I also think this would be better approach considering a generic solution.
 Good!
 
 
  Regards,
  Santosh
 
 
 Jean
 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-09-06 Thread Jean Pihet
Hi Vishwa,

On Mon, Sep 6, 2010 at 1:15 PM, Sripathy, Vishwanath
vishwanath...@ti.com wrote:
 I did some profiling of assembly code on OMAP3630 board (ZOOM3). In worst 
 case it takes around 3.28ms and best case around 2.93ms for mpu off mode.
Can you give a bit more details? Which measurement has been taken (ASM
only, sleep, wake-up ...?) and what are the significant figures?

For MPU INACTIVE/RET, it is less than 30us.
Mmh that is the resolution of the 32kHz timer, so I guess you get
either 0 or 1 timer cycle depending when you start the measurement.
IMO the 32kHz timer is too slow to measure those fast events.

 However as Kevin mentioned in other email, it would be better to find out a 
 way to trace inside assembly code as well.
OK that could be done but first I would like to make sure such a
complication is  needed.


 Regards
 Vishwa

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


RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-09-02 Thread Shilimkar, Santosh
 -Original Message-
 From: linaro-dev-boun...@lists.linaro.org [mailto:linaro-dev-
 boun...@lists.linaro.org] On Behalf Of Amit Kucheria
 Sent: Thursday, September 02, 2010 1:26 PM
 To: Kevin Hilman
 Cc: linaro-...@lists.linaro.org; linux-omap@vger.kernel.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
 On 10 Aug 27, Kevin Hilman wrote:
  vishwanath.sripa...@linaro.org writes:
 
   From: Vishwanath BS vishwanath.sripa...@linaro.org
  
   This patch has instrumentation code for measuring latencies for
   various CPUIdle C states for OMAP. Idea here is to capture the
   timestamp at various phases of CPU Idle and then compute the sw
   latency for various c states.  For OMAP, 32k clock is chosen as
   reference clock this as is an always on clock.  wkup domain memory
   (scratchpad memory) is used for storing timestamps.  One can see the
   worstcase latencies in below sysfs entries (after enabling
   CONFIG_CPU_IDLE_PROF in .config). This information can be used to
   correctly configure cpu idle latencies for various C states after
   adding HW latencies for each of these sw latencies.
   /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
   /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
   /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
  
   THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
  
   Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
   Cc: linaro-...@lists.linaro.org
 
  While I have many problems with the implementation details, I won't go
  into them because in general this is the wrong direction for kernel
  instrumentation.
 
  This approach adds quite a bit overhead to the idle path itself.  With
  all the reads/writes from/to the scratchpad(?) and all the
 multiplications
  and divides in every idle path, as well as the wait-for-idlest in both
  the sleep and resume paths.  The additional overhead added is non
 trivial.
 
  Basically, I'd like get away from custom instrumentation and measurement
  coded inside the kernel itself.  This kind of code never stops growing
  and morphing into ugliness, and rarely scales well when new SoCs are
  added.
 
  With ftrace/perf, we can add tracepoints at specific points and use
  external tools to extract and analyze the delays, latencys etc.
 
  The point is to keep the minimum possible in the kernel: just the
  tracepoints we're interested in.   The rest (calculations, averages,
  analysis, etc.) does not need to be in the kernel and can be done easier
  and with more powerful tools outside the kernel.
 
 Kevin,
 
 I agree. We discussed this a little in our weekly meeting. Vishwa's main
 concern was the lack of ability to instrument the last bit of SRAM code.
 
 I have a feeling that even with caches on when we enter this code, we
 won't
 see too much variance in the latency to execute this bit of code. Vishwa
 is
 going to confirm that now. If that hypothesis is true, we can indeed move
 to
 using tracepoints in the idle path and use external tools to track latency.
There will be difference with and without caches but the delta latency will be 
constant with caches and without caches. Another important point is
he lowest level code should be just profiled once and for worst CPU/BUS clock 
speed.
 
 Even if it isn't true, the rest of the idle path could still contain
 tracepoints.
 
I also think this would be better approach considering a generic solution.

Regards,
Santosh

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


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-09-02 Thread Jean Pihet
Hi Amit, Santosh,

On Thu, Sep 2, 2010 at 10:11 AM, Shilimkar, Santosh
santosh.shilim...@ti.com wrote:
...
  The point is to keep the minimum possible in the kernel: just the
  tracepoints we're interested in.   The rest (calculations, averages,
  analysis, etc.) does not need to be in the kernel and can be done easier
  and with more powerful tools outside the kernel.

 Kevin,

 I agree. We discussed this a little in our weekly meeting. Vishwa's main
 concern was the lack of ability to instrument the last bit of SRAM code.

 I have a feeling that even with caches on when we enter this code, we
 won't
 see too much variance in the latency to execute this bit of code. Vishwa
 is
 going to confirm that now. If that hypothesis is true, we can indeed move
 to
 using tracepoints in the idle path and use external tools to track latency.
I agree. Can you confirm this asap?
I am looking at the instrumentation tracepoints now. I think it would
be ideal to provide multiple tracepoints in both sleep and wake-up
paths.

 There will be difference with and without caches but the delta latency will 
 be constant with caches and without caches. Another important point is
 he lowest level code should be just profiled once and for worst CPU/BUS clock 
 speed.
Ok.

 Even if it isn't true, the rest of the idle path could still contain
 tracepoints.
I am looking at the best way to introduce tracepoints in the low level
code, in case it is needed.

 I also think this would be better approach considering a generic solution.
Good!


 Regards,
 Santosh


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


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-09-02 Thread Kevin Hilman
Amit Kucheria amit.kuche...@linaro.org writes:

 On 10 Aug 27, Kevin Hilman wrote:
 vishwanath.sripa...@linaro.org writes:
 
  From: Vishwanath BS vishwanath.sripa...@linaro.org
 
  This patch has instrumentation code for measuring latencies for
  various CPUIdle C states for OMAP. Idea here is to capture the
  timestamp at various phases of CPU Idle and then compute the sw
  latency for various c states.  For OMAP, 32k clock is chosen as
  reference clock this as is an always on clock.  wkup domain memory
  (scratchpad memory) is used for storing timestamps.  One can see the
  worstcase latencies in below sysfs entries (after enabling
  CONFIG_CPU_IDLE_PROF in .config). This information can be used to
  correctly configure cpu idle latencies for various C states after
  adding HW latencies for each of these sw latencies.
  /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
 
  THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
 
  Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
  Cc: linaro-...@lists.linaro.org
 
 While I have many problems with the implementation details, I won't go
 into them because in general this is the wrong direction for kernel
 instrumentation.
 
 This approach adds quite a bit overhead to the idle path itself.  With
 all the reads/writes from/to the scratchpad(?) and all the multiplications
 and divides in every idle path, as well as the wait-for-idlest in both
 the sleep and resume paths.  The additional overhead added is non trivial.
 
 Basically, I'd like get away from custom instrumentation and measurement
 coded inside the kernel itself.  This kind of code never stops growing
 and morphing into ugliness, and rarely scales well when new SoCs are
 added.
 
 With ftrace/perf, we can add tracepoints at specific points and use
 external tools to extract and analyze the delays, latencys etc.
 
 The point is to keep the minimum possible in the kernel: just the
 tracepoints we're interested in.   The rest (calculations, averages,
 analysis, etc.) does not need to be in the kernel and can be done easier
 and with more powerful tools outside the kernel.

 Kevin,

 I agree. We discussed this a little in our weekly meeting. Vishwa's main
 concern was the lack of ability to instrument the last bit of SRAM code.

 I have a feeling that even with caches on when we enter this code, we won't
 see too much variance in the latency to execute this bit of code. Vishwa is
 going to confirm that now. If that hypothesis is true, we can indeed move to
 using tracepoints in the idle path and use external tools to track latency.

 Even if it isn't true, the rest of the idle path could still contain 
 tracepoints.

Yes.

As Santosh pointed out, that low-level code be a fixed latency and can
likely be profiled once.

That being said, it should still be possible to trace the low-level code.
Jean Pihet and I discussed implementing a fake tracepoint in SRAM
during that part of the execution which could then be copied out later.
This would minimize the custom tracing code and allow us to continue to
use userspace tools to analyze the entire path.

Jean is investigating this now.

Kevin


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


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-31 Thread Silesh C V
On Tue, Aug 31, 2010 at 10:28 AM, Sripathy, Vishwanath
vishwanath...@ti.com wrote:


 -Original Message-
 From: Silesh C V [mailto:sailes...@gmail.com]
 Sent: Tuesday, August 31, 2010 9:53 AM
 To: Sripathy, Vishwanath
 Cc: Kevin Hilman; vishwanath.sripa...@linaro.org; linux-omap@vger.kernel.org;
 linaro-...@lists.linaro.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

 Hi Vishwa,

 On Mon, Aug 30, 2010 at 6:29 PM, Sripathy, Vishwanath
 vishwanath...@ti.com wrote:
  Kevin,
 
  -Original Message-
  From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
  ow...@vger.kernel.org] On Behalf Of Kevin Hilman
  Sent: Saturday, August 28, 2010 12:45 AM
  To: vishwanath.sripa...@linaro.org
  Cc: linux-omap@vger.kernel.org; linaro-...@lists.linaro.org
  Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
  vishwanath.sripa...@linaro.org writes:
 
   From: Vishwanath BS vishwanath.sripa...@linaro.org
  
   This patch has instrumentation code for measuring latencies for
   various CPUIdle C states for OMAP. Idea here is to capture the
   timestamp at various phases of CPU Idle and then compute the sw
   latency for various c states.  For OMAP, 32k clock is chosen as
   reference clock this as is an always on clock.  wkup domain memory
   (scratchpad memory) is used for storing timestamps.  One can see the
   worstcase latencies in below sysfs entries (after enabling
   CONFIG_CPU_IDLE_PROF in .config). This information can be used to
   correctly configure cpu idle latencies for various C states after
   adding HW latencies for each of these sw latencies.
   /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
   /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
   /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
  
   THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
  
   Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
   Cc: linaro-...@lists.linaro.org
 
  While I have many problems with the implementation details, I won't go
  into them because in general this is the wrong direction for kernel
  instrumentation.
 
  This approach adds quite a bit overhead to the idle path itself.  With
  all the reads/writes from/to the scratchpad(?) and all the multiplications
  and divides in every idle path, as well as the wait-for-idlest in both
  the sleep and resume paths.  The additional overhead added is non trivial.
 
  Basically, I'd like get away from custom instrumentation and measurement
  coded inside the kernel itself.  This kind of code never stops growing
  and morphing into ugliness, and rarely scales well when new SoCs are
  added.
 
  With ftrace/perf, we can add tracepoints at specific points and use
  external tools to extract and analyze the delays, latencys etc.
 
  The point is to keep the minimum possible in the kernel: just the
  tracepoints we're interested in.   The rest (calculations, averages,
  analysis, etc.) does not need to be in the kernel and can be done easier
  and with more powerful tools outside the kernel.
  The challenge here is that we need to take time stamp at the fag end of 
  CPU Idle
 which means we have no access to DDR, MMU/Caches are disabled etc (on OMAP3).
 So I am not sure if we will be able to use ftrace/perf kind of tools here. 
 If we choose
 to exclude assembly code part for measurement, then we will be omitting major
 contributor to CPU Idle latency namely ARM context save/restoration part.
 
  Also these calculations are done only when we enable CPUIDLE profiling 
  feature.
  In the normal production system, these will not come into picture at all. 
  So I am
 not sure latencies involved in these calculations are still an issue when 
 we are just
 doing profiling.


 There are two other issues when we use 32k timer for latency measurement.

 snip
 +
 +       /* take care of overflow */
 +       if (postidle_time  preidle_time)
 +               postidle_time += (u32) 0x;
 +       if (wkup_time  sleep_time)
 +               wkup_time += (u32) 0x;
 +
 snip

 1.We are checking postidle_time  preidle_time to find out whether
 there had been an
    over flow or not. There can be situations in which the timer
 overflows and still we have
    a greater postidle_time.

 2. We are doing the correction for one overflow. What happens if the
 timer overflows for
    a second or third time. Can we keep track of the number of
 overflows and then do the
    correction accordingly?

 Unfortunately, there is no way to check if overflow happens more than once in 
 32k timer and as you said, theoretically it's possible that if timer 
 overflows more than once, these calculation will wrong. Having said that, do 
 you really see any usecase where system will idle for more than 37 hours in 
 single cpuidle execution to cause timer overflow?


I am not sure. But can we completely write off such a possibility ?


Regards,
Silesh


 Vishwa

 Regards,
 Silesh

 
  Regards
  Vishwa

RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-31 Thread Sripathy, Vishwanath


 -Original Message-
 From: sailes...@gmail.com [mailto:sailes...@gmail.com] On Behalf Of C V, 
 Silesh
 Sent: Tuesday, August 31, 2010 12:27 PM
 To: Sripathy, Vishwanath
 Cc: Kevin Hilman; vishwanath.sripa...@linaro.org; linux-omap@vger.kernel.org;
 linaro-...@lists.linaro.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
 On Tue, Aug 31, 2010 at 10:28 AM, Sripathy, Vishwanath
 vishwanath...@ti.com wrote:
 
 
  -Original Message-
  From: Silesh C V [mailto:sailes...@gmail.com]
  Sent: Tuesday, August 31, 2010 9:53 AM
  To: Sripathy, Vishwanath
  Cc: Kevin Hilman; vishwanath.sripa...@linaro.org; 
  linux-omap@vger.kernel.org;
  linaro-...@lists.linaro.org
  Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
  Hi Vishwa,
 
  On Mon, Aug 30, 2010 at 6:29 PM, Sripathy, Vishwanath
  vishwanath...@ti.com wrote:
   Kevin,
  
   -Original Message-
   From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
   ow...@vger.kernel.org] On Behalf Of Kevin Hilman
   Sent: Saturday, August 28, 2010 12:45 AM
   To: vishwanath.sripa...@linaro.org
   Cc: linux-omap@vger.kernel.org; linaro-...@lists.linaro.org
   Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
  
   vishwanath.sripa...@linaro.org writes:
  
From: Vishwanath BS vishwanath.sripa...@linaro.org
   
This patch has instrumentation code for measuring latencies for
various CPUIdle C states for OMAP. Idea here is to capture the
timestamp at various phases of CPU Idle and then compute the sw
latency for various c states.  For OMAP, 32k clock is chosen as
reference clock this as is an always on clock.  wkup domain memory
(scratchpad memory) is used for storing timestamps.  One can see the
worstcase latencies in below sysfs entries (after enabling
CONFIG_CPU_IDLE_PROF in .config). This information can be used to
correctly configure cpu idle latencies for various C states after
adding HW latencies for each of these sw latencies.
/sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
/sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
/sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
   
THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
   
Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
Cc: linaro-...@lists.linaro.org
  
   While I have many problems with the implementation details, I won't go
   into them because in general this is the wrong direction for kernel
   instrumentation.
  
   This approach adds quite a bit overhead to the idle path itself.  With
   all the reads/writes from/to the scratchpad(?) and all the 
   multiplications
   and divides in every idle path, as well as the wait-for-idlest in both
   the sleep and resume paths.  The additional overhead added is non 
   trivial.
  
   Basically, I'd like get away from custom instrumentation and measurement
   coded inside the kernel itself.  This kind of code never stops growing
   and morphing into ugliness, and rarely scales well when new SoCs are
   added.
  
   With ftrace/perf, we can add tracepoints at specific points and use
   external tools to extract and analyze the delays, latencys etc.
  
   The point is to keep the minimum possible in the kernel: just the
   tracepoints we're interested in.   The rest (calculations, averages,
   analysis, etc.) does not need to be in the kernel and can be done easier
   and with more powerful tools outside the kernel.
   The challenge here is that we need to take time stamp at the fag end of 
   CPU
 Idle
  which means we have no access to DDR, MMU/Caches are disabled etc (on
 OMAP3).
  So I am not sure if we will be able to use ftrace/perf kind of tools here. 
  If we
 choose
  to exclude assembly code part for measurement, then we will be omitting 
  major
  contributor to CPU Idle latency namely ARM context save/restoration part.
  
   Also these calculations are done only when we enable CPUIDLE profiling 
   feature.
   In the normal production system, these will not come into picture at 
   all. So I
 am
  not sure latencies involved in these calculations are still an issue when 
  we are
 just
  doing profiling.
 
 
  There are two other issues when we use 32k timer for latency measurement.
 
  snip
  +
  +       /* take care of overflow */
  +       if (postidle_time  preidle_time)
  +               postidle_time += (u32) 0x;
  +       if (wkup_time  sleep_time)
  +               wkup_time += (u32) 0x;
  +
  snip
 
  1.We are checking postidle_time  preidle_time to find out whether
  there had been an
     over flow or not. There can be situations in which the timer
  overflows and still we have
     a greater postidle_time.
 
  2. We are doing the correction for one overflow. What happens if the
  timer overflows for
     a second or third time. Can we keep track of the number of
  overflows and then do the
     correction accordingly?
 
  Unfortunately

RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-30 Thread Sripathy, Vishwanath
Kevin,

 -Original Message-
 From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
 ow...@vger.kernel.org] On Behalf Of Kevin Hilman
 Sent: Saturday, August 28, 2010 12:45 AM
 To: vishwanath.sripa...@linaro.org
 Cc: linux-omap@vger.kernel.org; linaro-...@lists.linaro.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
 vishwanath.sripa...@linaro.org writes:
 
  From: Vishwanath BS vishwanath.sripa...@linaro.org
 
  This patch has instrumentation code for measuring latencies for
  various CPUIdle C states for OMAP. Idea here is to capture the
  timestamp at various phases of CPU Idle and then compute the sw
  latency for various c states.  For OMAP, 32k clock is chosen as
  reference clock this as is an always on clock.  wkup domain memory
  (scratchpad memory) is used for storing timestamps.  One can see the
  worstcase latencies in below sysfs entries (after enabling
  CONFIG_CPU_IDLE_PROF in .config). This information can be used to
  correctly configure cpu idle latencies for various C states after
  adding HW latencies for each of these sw latencies.
  /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
 
  THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
 
  Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
  Cc: linaro-...@lists.linaro.org
 
 While I have many problems with the implementation details, I won't go
 into them because in general this is the wrong direction for kernel
 instrumentation.
 
 This approach adds quite a bit overhead to the idle path itself.  With
 all the reads/writes from/to the scratchpad(?) and all the multiplications
 and divides in every idle path, as well as the wait-for-idlest in both
 the sleep and resume paths.  The additional overhead added is non trivial.
 
 Basically, I'd like get away from custom instrumentation and measurement
 coded inside the kernel itself.  This kind of code never stops growing
 and morphing into ugliness, and rarely scales well when new SoCs are
 added.
 
 With ftrace/perf, we can add tracepoints at specific points and use
 external tools to extract and analyze the delays, latencys etc.
 
 The point is to keep the minimum possible in the kernel: just the
 tracepoints we're interested in.   The rest (calculations, averages,
 analysis, etc.) does not need to be in the kernel and can be done easier
 and with more powerful tools outside the kernel.
The challenge here is that we need to take time stamp at the fag end of CPU 
Idle which means we have no access to DDR, MMU/Caches are disabled etc (on 
OMAP3). So I am not sure if we will be able to use ftrace/perf kind of tools 
here. If we choose to exclude assembly code part for measurement, then we will 
be omitting major contributor to CPU Idle latency namely ARM context 
save/restoration part. 

Also these calculations are done only when we enable CPUIDLE profiling feature. 
In the normal production system, these will not come into picture at all. So I 
am not sure latencies involved in these calculations are still an issue when we 
are just doing profiling.

Regards
Vishwa
 
 Kevin
 
 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-30 Thread Silesh C V
Hi Vishwa,

On Mon, Aug 30, 2010 at 6:29 PM, Sripathy, Vishwanath
vishwanath...@ti.com wrote:
 Kevin,

 -Original Message-
 From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
 ow...@vger.kernel.org] On Behalf Of Kevin Hilman
 Sent: Saturday, August 28, 2010 12:45 AM
 To: vishwanath.sripa...@linaro.org
 Cc: linux-omap@vger.kernel.org; linaro-...@lists.linaro.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

 vishwanath.sripa...@linaro.org writes:

  From: Vishwanath BS vishwanath.sripa...@linaro.org
 
  This patch has instrumentation code for measuring latencies for
  various CPUIdle C states for OMAP. Idea here is to capture the
  timestamp at various phases of CPU Idle and then compute the sw
  latency for various c states.  For OMAP, 32k clock is chosen as
  reference clock this as is an always on clock.  wkup domain memory
  (scratchpad memory) is used for storing timestamps.  One can see the
  worstcase latencies in below sysfs entries (after enabling
  CONFIG_CPU_IDLE_PROF in .config). This information can be used to
  correctly configure cpu idle latencies for various C states after
  adding HW latencies for each of these sw latencies.
  /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
 
  THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
 
  Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
  Cc: linaro-...@lists.linaro.org

 While I have many problems with the implementation details, I won't go
 into them because in general this is the wrong direction for kernel
 instrumentation.

 This approach adds quite a bit overhead to the idle path itself.  With
 all the reads/writes from/to the scratchpad(?) and all the multiplications
 and divides in every idle path, as well as the wait-for-idlest in both
 the sleep and resume paths.  The additional overhead added is non trivial.

 Basically, I'd like get away from custom instrumentation and measurement
 coded inside the kernel itself.  This kind of code never stops growing
 and morphing into ugliness, and rarely scales well when new SoCs are
 added.

 With ftrace/perf, we can add tracepoints at specific points and use
 external tools to extract and analyze the delays, latencys etc.

 The point is to keep the minimum possible in the kernel: just the
 tracepoints we're interested in.   The rest (calculations, averages,
 analysis, etc.) does not need to be in the kernel and can be done easier
 and with more powerful tools outside the kernel.
 The challenge here is that we need to take time stamp at the fag end of CPU 
 Idle which means we have no access to DDR, MMU/Caches are disabled etc (on 
 OMAP3). So I am not sure if we will be able to use ftrace/perf kind of tools 
 here. If we choose to exclude assembly code part for measurement, then we 
 will be omitting major contributor to CPU Idle latency namely ARM context 
 save/restoration part.

 Also these calculations are done only when we enable CPUIDLE profiling 
 feature.
 In the normal production system, these will not come into picture at all. So 
 I am not sure latencies involved in these calculations are still an issue 
 when we are just doing profiling.


There are two other issues when we use 32k timer for latency measurement.

snip
+
+   /* take care of overflow */
+   if (postidle_time  preidle_time)
+   postidle_time += (u32) 0x;
+   if (wkup_time  sleep_time)
+   wkup_time += (u32) 0x;
+
snip

1.We are checking postidle_time  preidle_time to find out whether
there had been an
   over flow or not. There can be situations in which the timer
overflows and still we have
   a greater postidle_time.

2. We are doing the correction for one overflow. What happens if the
timer overflows for
   a second or third time. Can we keep track of the number of
overflows and then do the
   correction accordingly?

Regards,
Silesh


 Regards
 Vishwa

 Kevin

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

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


RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-30 Thread Sripathy, Vishwanath


 -Original Message-
 From: Silesh C V [mailto:sailes...@gmail.com]
 Sent: Tuesday, August 31, 2010 9:53 AM
 To: Sripathy, Vishwanath
 Cc: Kevin Hilman; vishwanath.sripa...@linaro.org; linux-omap@vger.kernel.org;
 linaro-...@lists.linaro.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
 Hi Vishwa,
 
 On Mon, Aug 30, 2010 at 6:29 PM, Sripathy, Vishwanath
 vishwanath...@ti.com wrote:
  Kevin,
 
  -Original Message-
  From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
  ow...@vger.kernel.org] On Behalf Of Kevin Hilman
  Sent: Saturday, August 28, 2010 12:45 AM
  To: vishwanath.sripa...@linaro.org
  Cc: linux-omap@vger.kernel.org; linaro-...@lists.linaro.org
  Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
  vishwanath.sripa...@linaro.org writes:
 
   From: Vishwanath BS vishwanath.sripa...@linaro.org
  
   This patch has instrumentation code for measuring latencies for
   various CPUIdle C states for OMAP. Idea here is to capture the
   timestamp at various phases of CPU Idle and then compute the sw
   latency for various c states.  For OMAP, 32k clock is chosen as
   reference clock this as is an always on clock.  wkup domain memory
   (scratchpad memory) is used for storing timestamps.  One can see the
   worstcase latencies in below sysfs entries (after enabling
   CONFIG_CPU_IDLE_PROF in .config). This information can be used to
   correctly configure cpu idle latencies for various C states after
   adding HW latencies for each of these sw latencies.
   /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
   /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
   /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
  
   THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
  
   Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
   Cc: linaro-...@lists.linaro.org
 
  While I have many problems with the implementation details, I won't go
  into them because in general this is the wrong direction for kernel
  instrumentation.
 
  This approach adds quite a bit overhead to the idle path itself.  With
  all the reads/writes from/to the scratchpad(?) and all the multiplications
  and divides in every idle path, as well as the wait-for-idlest in both
  the sleep and resume paths.  The additional overhead added is non trivial.
 
  Basically, I'd like get away from custom instrumentation and measurement
  coded inside the kernel itself.  This kind of code never stops growing
  and morphing into ugliness, and rarely scales well when new SoCs are
  added.
 
  With ftrace/perf, we can add tracepoints at specific points and use
  external tools to extract and analyze the delays, latencys etc.
 
  The point is to keep the minimum possible in the kernel: just the
  tracepoints we're interested in.   The rest (calculations, averages,
  analysis, etc.) does not need to be in the kernel and can be done easier
  and with more powerful tools outside the kernel.
  The challenge here is that we need to take time stamp at the fag end of CPU 
  Idle
 which means we have no access to DDR, MMU/Caches are disabled etc (on OMAP3).
 So I am not sure if we will be able to use ftrace/perf kind of tools here. If 
 we choose
 to exclude assembly code part for measurement, then we will be omitting major
 contributor to CPU Idle latency namely ARM context save/restoration part.
 
  Also these calculations are done only when we enable CPUIDLE profiling 
  feature.
  In the normal production system, these will not come into picture at all. 
  So I am
 not sure latencies involved in these calculations are still an issue when we 
 are just
 doing profiling.
 
 
 There are two other issues when we use 32k timer for latency measurement.
 
 snip
 +
 +   /* take care of overflow */
 +   if (postidle_time  preidle_time)
 +   postidle_time += (u32) 0x;
 +   if (wkup_time  sleep_time)
 +   wkup_time += (u32) 0x;
 +
 snip
 
 1.We are checking postidle_time  preidle_time to find out whether
 there had been an
over flow or not. There can be situations in which the timer
 overflows and still we have
a greater postidle_time.
 
 2. We are doing the correction for one overflow. What happens if the
 timer overflows for
a second or third time. Can we keep track of the number of
 overflows and then do the
correction accordingly?

Unfortunately, there is no way to check if overflow happens more than once in 
32k timer and as you said, theoretically it's possible that if timer overflows 
more than once, these calculation will wrong. Having said that, do you really 
see any usecase where system will idle for more than 37 hours in single cpuidle 
execution to cause timer overflow?

Vishwa
 
 Regards,
 Silesh
 
 
  Regards
  Vishwa
 
  Kevin
 
  --
  To unsubscribe from this list: send the line unsubscribe linux-omap in
  the body of a message to majord...@vger.kernel.org
  More majordomo info

Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Jean Pihet
Hi,

On Sat, Aug 28, 2010 at 12:08 AM,  vishwanath.sripa...@linaro.org wrote:
 From: Vishwanath BS vishwanath.sripa...@linaro.org

 This patch has instrumentation code for measuring latencies for
 various CPUIdle C states for OMAP. Idea here is to capture the
 timestamp at various phases of CPU Idle and then compute the sw
 latency for various c states. For OMAP, 32k clock is chosen as
 reference clock this as is an always on clock. wkup domain memory
 (scratchpad memory) is used for storing timestamps. One can see the
 worstcase latencies in below sysfs entries (after enabling 
 CONFIG_CPU_IDLE_PROF
 in .config). This information can be used to correctly configure cpu idle
 latencies for various C states after adding HW latencies for each of
 these sw latencies.
 /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency

 THis patch is tested on OMAP ZOOM3 using kevin's pm branch.

 Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
 Cc: linaro-...@lists.linaro.org
 ---
...


 +#ifdef CONFIG_CPU_IDLE_PROF
 +       sleep_time = omap3_sram_get_sleep_time();
 +       wkup_time = omap3_sram_get_wkup_time();
 +
 +       /* take care of overflow */
 +       if (postidle_time  preidle_time)
 +               postidle_time += (u32) 0x;
 +       if (wkup_time  sleep_time)
 +               wkup_time += (u32) 0x;
 +
 +       idle_time = postidle_time - preidle_time;
 +       total_sleep_time = wkup_time -  sleep_time;
 +       latency = idle_time - total_sleep_time;
 +       sleep_time = omap3_sram_get_sleep_time();
 +       wkup_time = omap3_sram_get_wkup_time();
Is it needed to re-read the sleep_time and wkup_time values from the scratchpad?
What about the 32k timer overflow? Could that cause the sleep_latency
and/or wkup_latency to be 0?

 +
 +       /* calculate average latency after ignoring sprious ones */
 +       if ((total_sleep_time  0)  (latency  state-actual_latency)
 +                (latency = 0)) {
 +               state-actual_latency = CONVERT_32K_USEC(latency);
 +               latency = (sleep_time - preidle_time);
Risk of overflow?

 +               state-sleep_latency = CONVERT_32K_USEC(latency);
 +               latency = postidle_time - wkup_time;
Risk of overflow?

 +               state-wkup_latency = CONVERT_32K_USEC(latency);
 +       }
 +#endif
 +
        return ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * USEC_PER_SEC;
  }


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


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Silesh C V
g 28, 2010 at 3:38 AM,  vishwanath.sripa...@linaro.org wrote:
 From: Vishwanath BS vishwanath.sripa...@linaro.org

 This patch has instrumentation code for measuring latencies for
 various CPUIdle C states for OMAP. Idea here is to capture the
 timestamp at various phases of CPU Idle and then compute the sw
 latency for various c states. For OMAP, 32k clock is chosen as
 reference clock this as is an always on clock. wkup domain memory
 (scratchpad memory) is used for storing timestamps. One can see the
 worstcase latencies in below sysfs entries (after enabling 
 CONFIG_CPU_IDLE_PROF
 in .config). This information can be used to correctly configure cpu idle
 latencies for various C states after adding HW latencies for each of
 these sw latencies.
 /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency

 THis patch is tested on OMAP ZOOM3 using kevin's pm branch.

 Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
 Cc: linaro-...@lists.linaro.org
 ---
  arch/arm/mach-omap2/cpuidle34xx.c |   58 --
  arch/arm/mach-omap2/pm.h          |    5 ++
  arch/arm/mach-omap2/sleep34xx.S   |  121 
 +
  drivers/cpuidle/Kconfig           |    5 ++
  drivers/cpuidle/sysfs.c           |   16 +-
  include/linux/cpuidle.h           |    3 +
  6 files changed, 202 insertions(+), 6 deletions(-)

 diff --git a/arch/arm/mach-omap2/cpuidle34xx.c 
 b/arch/arm/mach-omap2/cpuidle34xx.c
 index 3d3d035..398bef8
 --- a/arch/arm/mach-omap2/cpuidle34xx.c
 +++ b/arch/arm/mach-omap2/cpuidle34xx.c
 @@ -25,6 +25,7 @@
  #include linux/sched.h
  #include linux/cpuidle.h

 +#include linux/clk.h
  #include plat/prcm.h
  #include plat/irqs.h
  #include plat/powerdomain.h
 @@ -86,6 +87,11 @@ static struct cpuidle_params cpuidle_params_table[] = {
        {1, 1, 3, 30},
  };

 +#ifdef CONFIG_CPU_IDLE_PROF
 +static struct clk *clk_32k;
 +#define CONVERT_32K_USEC(lat) (lat * (USEC_PER_SEC/clk_get_rate(clk_32k)))
 +#endif
 +
  static int omap3_idle_bm_check(void)
  {
        if (!omap3_can_sleep())
 @@ -115,21 +121,28 @@ static int _cpuidle_deny_idle(struct powerdomain *pwrdm,
  * Called from the CPUidle framework to program the device to the
  * specified target state selected by the governor.
  */
 +
  static int omap3_enter_idle(struct cpuidle_device *dev,
                        struct cpuidle_state *state)
  {
        struct omap3_processor_cx *cx = cpuidle_get_statedata(state);
        struct timespec ts_preidle, ts_postidle, ts_idle;
        u32 mpu_state = cx-mpu_state, core_state = cx-core_state;
 +#ifdef CONFIG_CPU_IDLE_PROF
 +       int idle_time, latency;
 +       long sleep_time, wkup_time, total_sleep_time;
 +       long preidle_time, postidle_time;
 +#endif

        current_cx_state = *cx;

 -       /* Used to keep track of the total time in idle */
 -       getnstimeofday(ts_preidle);
 -
        local_irq_disable();
        local_fiq_disable();
 -
 +       /* Used to keep track of the total time in idle */
 +       getnstimeofday(ts_preidle);
 +#ifdef CONFIG_CPU_IDLE_PROF
 +       preidle_time = omap3_sram_get_32k_tick();
 +#endif
        pwrdm_set_next_pwrst(mpu_pd, mpu_state);
        pwrdm_set_next_pwrst(core_pd, core_state);

 @@ -153,9 +166,39 @@ return_sleep_time:
        getnstimeofday(ts_postidle);
        ts_idle = timespec_sub(ts_postidle, ts_preidle);

 +#ifdef CONFIG_CPU_IDLE_PROF
 +       postidle_time = omap3_sram_get_32k_tick();
 +#endif
        local_irq_enable();
        local_fiq_enable();

 +#ifdef CONFIG_CPU_IDLE_PROF
 +       sleep_time = omap3_sram_get_sleep_time();
 +       wkup_time = omap3_sram_get_wkup_time();
 +
 +       /* take care of overflow */
 +       if (postidle_time  preidle_time)
 +               postidle_time += (u32) 0x;
 +       if (wkup_time  sleep_time)
 +               wkup_time += (u32) 0x;
 +
 +       idle_time = postidle_time - preidle_time;
 +       total_sleep_time = wkup_time -  sleep_time;
 +       latency = idle_time - total_sleep_time;
 +       sleep_time = omap3_sram_get_sleep_time();
 +       wkup_time = omap3_sram_get_wkup_time();
 +
 +       /* calculate average latency after ignoring sprious ones */
 +       if ((total_sleep_time  0)  (latency  state-actual_latency)
 +                (latency = 0)) {
 +               state-actual_latency = CONVERT_32K_USEC(latency);
 +               latency = (sleep_time - preidle_time);
 +               state-sleep_latency = CONVERT_32K_USEC(latency);
 +               latency = postidle_time - wkup_time;
 +               state-wkup_latency = CONVERT_32K_USEC(latency);
 +       }
 +#endif
 +
        return ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * USEC_PER_SEC;
  }

 @@ -423,7 +466,9 @@ int __init omap3_idle_init(void)
        struct omap3_processor_cx *cx;
        struct cpuidle_state *state;
        struct cpuidle_device 

RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Sripathy, Vishwanath


 -Original Message-
 From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
 ow...@vger.kernel.org] On Behalf Of Jean Pihet
 Sent: Friday, August 27, 2010 3:17 PM
 To: vishwanath.sripa...@linaro.org
 Cc: linux-omap@vger.kernel.org; linaro-...@lists.linaro.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
 Hi,
 
 On Sat, Aug 28, 2010 at 12:08 AM,  vishwanath.sripa...@linaro.org wrote:
  From: Vishwanath BS vishwanath.sripa...@linaro.org
 
  This patch has instrumentation code for measuring latencies for
  various CPUIdle C states for OMAP. Idea here is to capture the
  timestamp at various phases of CPU Idle and then compute the sw
  latency for various c states. For OMAP, 32k clock is chosen as
  reference clock this as is an always on clock. wkup domain memory
  (scratchpad memory) is used for storing timestamps. One can see the
  worstcase latencies in below sysfs entries (after enabling 
  CONFIG_CPU_IDLE_PROF
  in .config). This information can be used to correctly configure cpu idle
  latencies for various C states after adding HW latencies for each of
  these sw latencies.
  /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
 
  THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
 
  Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
  Cc: linaro-...@lists.linaro.org
  ---
 ...
 
 
  +#ifdef CONFIG_CPU_IDLE_PROF
  +       sleep_time = omap3_sram_get_sleep_time();
  +       wkup_time = omap3_sram_get_wkup_time();
  +
  +       /* take care of overflow */
  +       if (postidle_time  preidle_time)
  +               postidle_time += (u32) 0x;
  +       if (wkup_time  sleep_time)
  +               wkup_time += (u32) 0x;
  +
  +       idle_time = postidle_time - preidle_time;
  +       total_sleep_time = wkup_time -  sleep_time;
  +       latency = idle_time - total_sleep_time;
  +       sleep_time = omap3_sram_get_sleep_time();
  +       wkup_time = omap3_sram_get_wkup_time();
 Is it needed to re-read the sleep_time and wkup_time values from the 
 scratchpad?

Sleep and wake up time stamps were taken just before and after executing wfi 
and stored in scratchpad wkup memory. These values are used while computing 
actual latency.

 What about the 32k timer overflow? Could that cause the sleep_latency
 and/or wkup_latency to be 0?
Overflow issues are taken care while computing idle_time and total_sleep_time 
in code below.
+   if (postidle_time  preidle_time)
 +   postidle_time += (u32) 0x;
 +   if (wkup_time  sleep_time)
 +   wkup_time += (u32) 0x;
 
  +
  +       /* calculate average latency after ignoring sprious ones */
  +       if ((total_sleep_time  0)  (latency  state-actual_latency)
  +                (latency = 0)) {
  +               state-actual_latency = CONVERT_32K_USEC(latency);
  +               latency = (sleep_time - preidle_time);
 Risk of overflow?
Yes I just realized that overflow can cause sleep_latency and wkup_latency to 
turn negative. Thanks for pointing it. Will fix it in next version. 
 
  +               state-sleep_latency = CONVERT_32K_USEC(latency);
  +               latency = postidle_time - wkup_time;
 Risk of overflow?
Agreed. Will fix it. 

Vishwa
 
  +               state-wkup_latency = CONVERT_32K_USEC(latency);
  +       }
  +#endif
  +
         return ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * 
  USEC_PER_SEC;
   }
 
 
 Jean
 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Sripathy, Vishwanath


 -Original Message-
 From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
 ow...@vger.kernel.org] On Behalf Of C V, Silesh
 Sent: Friday, August 27, 2010 3:28 PM
 To: vishwanath.sripa...@linaro.org
 Cc: linux-omap@vger.kernel.org; linaro-...@lists.linaro.org
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

 g 28, 2010 at 3:38 AM,  vishwanath.sripa...@linaro.org wrote:
  From: Vishwanath BS vishwanath.sripa...@linaro.org
 
  This patch has instrumentation code for measuring latencies for
  various CPUIdle C states for OMAP. Idea here is to capture the
  timestamp at various phases of CPU Idle and then compute the sw
  latency for various c states. For OMAP, 32k clock is chosen as
  reference clock this as is an always on clock. wkup domain memory
  (scratchpad memory) is used for storing timestamps. One can see the
  worstcase latencies in below sysfs entries (after enabling 
  CONFIG_CPU_IDLE_PROF
  in .config). This information can be used to correctly configure cpu idle
  latencies for various C states after adding HW latencies for each of
  these sw latencies.
  /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
 
  THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
 
  Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
  Cc: linaro-...@lists.linaro.org
  ---
   arch/arm/mach-omap2/cpuidle34xx.c |   58 --
   arch/arm/mach-omap2/pm.h  |5 ++
   arch/arm/mach-omap2/sleep34xx.S   |  121
 +
   drivers/cpuidle/Kconfig   |5 ++
   drivers/cpuidle/sysfs.c   |   16 +-
   include/linux/cpuidle.h   |3 +
   6 files changed, 202 insertions(+), 6 deletions(-)
 
  diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-
 omap2/cpuidle34xx.c
  index 3d3d035..398bef8
  --- a/arch/arm/mach-omap2/cpuidle34xx.c
  +++ b/arch/arm/mach-omap2/cpuidle34xx.c
  @@ -25,6 +25,7 @@
   #include linux/sched.h
   #include linux/cpuidle.h
 
  +#include linux/clk.h
   #include plat/prcm.h
   #include plat/irqs.h
   #include plat/powerdomain.h
  @@ -86,6 +87,11 @@ static struct cpuidle_params cpuidle_params_table[] = {
 {1, 1, 3, 30},
   };
 
  +#ifdef CONFIG_CPU_IDLE_PROF
  +static struct clk *clk_32k;
  +#define CONVERT_32K_USEC(lat) (lat * (USEC_PER_SEC/clk_get_rate(clk_32k)))
  +#endif
  +
   static int omap3_idle_bm_check(void)
   {
 if (!omap3_can_sleep())
  @@ -115,21 +121,28 @@ static int _cpuidle_deny_idle(struct powerdomain
 *pwrdm,
   * Called from the CPUidle framework to program the device to the
   * specified target state selected by the governor.
   */
  +
   static int omap3_enter_idle(struct cpuidle_device *dev,
 struct cpuidle_state *state)
   {
 struct omap3_processor_cx *cx = cpuidle_get_statedata(state);
 struct timespec ts_preidle, ts_postidle, ts_idle;
 u32 mpu_state = cx-mpu_state, core_state = cx-core_state;
  +#ifdef CONFIG_CPU_IDLE_PROF
  +   int idle_time, latency;
  +   long sleep_time, wkup_time, total_sleep_time;
  +   long preidle_time, postidle_time;
  +#endif
 
 current_cx_state = *cx;
 
  -   /* Used to keep track of the total time in idle */
  -   getnstimeofday(ts_preidle);
  -
 local_irq_disable();
 local_fiq_disable();
  -
  +   /* Used to keep track of the total time in idle */
  +   getnstimeofday(ts_preidle);
  +#ifdef CONFIG_CPU_IDLE_PROF
  +   preidle_time = omap3_sram_get_32k_tick();
  +#endif
 pwrdm_set_next_pwrst(mpu_pd, mpu_state);
 pwrdm_set_next_pwrst(core_pd, core_state);
 
  @@ -153,9 +166,39 @@ return_sleep_time:
 getnstimeofday(ts_postidle);
 ts_idle = timespec_sub(ts_postidle, ts_preidle);
 
  +#ifdef CONFIG_CPU_IDLE_PROF
  +   postidle_time = omap3_sram_get_32k_tick();
  +#endif
 local_irq_enable();
 local_fiq_enable();
 
  +#ifdef CONFIG_CPU_IDLE_PROF
  +   sleep_time = omap3_sram_get_sleep_time();
  +   wkup_time = omap3_sram_get_wkup_time();
  +
  +   /* take care of overflow */
  +   if (postidle_time  preidle_time)
  +   postidle_time += (u32) 0x;
  +   if (wkup_time  sleep_time)
  +   wkup_time += (u32) 0x;
  +
  +   idle_time = postidle_time - preidle_time;
  +   total_sleep_time = wkup_time -  sleep_time;
  +   latency = idle_time - total_sleep_time;
  +   sleep_time = omap3_sram_get_sleep_time();
  +   wkup_time = omap3_sram_get_wkup_time();
  +
  +   /* calculate average latency after ignoring sprious ones */
  +   if ((total_sleep_time  0)  (latency  state-actual_latency)
  +(latency = 0)) {
  +   state-actual_latency = CONVERT_32K_USEC(latency);
  +   latency = (sleep_time

Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Cousson, Benoit

Hi Vishwa,

On 8/28/2010 12:08 AM, vishwanath.sripa...@linaro.org wrote:

From: Vishwanath BSvishwanath.sripa...@linaro.org

This patch has instrumentation code for measuring latencies for
various CPUIdle C states for OMAP. Idea here is to capture the
timestamp at various phases of CPU Idle and then compute the sw
latency for various c states. For OMAP, 32k clock is chosen as
reference clock this as is an always on clock. wkup domain memory
(scratchpad memory) is used for storing timestamps. One can see the
worstcase latencies in below sysfs entries (after enabling CONFIG_CPU_IDLE_PROF
in .config). This information can be used to correctly configure cpu idle
latencies for various C states after adding HW latencies for each of
these sw latencies.
/sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
/sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
/sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency


FYI, Jean is currently working on using standard Linux probes in order 
to instrument CPUIdle / CPUfreq. I'm not sure it is doable, but it might 
better to use standard method to do that instead of purely OMAP3 
specific stuff. This code will not scale easily on OMAP4.


Do you have a dump of the latency you measured do far?


THis patch is tested on OMAP ZOOM3 using kevin's pm branch.

Signed-off-by: Vishwanath BSvishwanath.sripa...@linaro.org
Cc: linaro-...@lists.linaro.org
---
  arch/arm/mach-omap2/cpuidle34xx.c |   58 --
  arch/arm/mach-omap2/pm.h  |5 ++
  arch/arm/mach-omap2/sleep34xx.S   |  121 +
  drivers/cpuidle/Kconfig   |5 ++
  drivers/cpuidle/sysfs.c   |   16 +-
  include/linux/cpuidle.h   |3 +
  6 files changed, 202 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-omap2/cpuidle34xx.c 
b/arch/arm/mach-omap2/cpuidle34xx.c
index 3d3d035..398bef8
--- a/arch/arm/mach-omap2/cpuidle34xx.c
+++ b/arch/arm/mach-omap2/cpuidle34xx.c
@@ -25,6 +25,7 @@
  #includelinux/sched.h
  #includelinux/cpuidle.h

+#includelinux/clk.h
  #includeplat/prcm.h
  #includeplat/irqs.h
  #includeplat/powerdomain.h
@@ -86,6 +87,11 @@ static struct cpuidle_params cpuidle_params_table[] = {
 {1, 1, 3, 30},
  };

+#ifdef CONFIG_CPU_IDLE_PROF


Cannot you use _PROFILING instead? _PROF does not sound very meaningful 
for my point of view.



+static struct clk *clk_32k;
+#define CONVERT_32K_USEC(lat) (lat * (USEC_PER_SEC/clk_get_rate(clk_32k)))
+#endif
+
  static int omap3_idle_bm_check(void)
  {
 if (!omap3_can_sleep())
@@ -115,21 +121,28 @@ static int _cpuidle_deny_idle(struct powerdomain *pwrdm,
   * Called from the CPUidle framework to program the device to the
   * specified target state selected by the governor.
   */
+
  static int omap3_enter_idle(struct cpuidle_device *dev,
 struct cpuidle_state *state)
  {
 struct omap3_processor_cx *cx = cpuidle_get_statedata(state);
 struct timespec ts_preidle, ts_postidle, ts_idle;
 u32 mpu_state = cx-mpu_state, core_state = cx-core_state;
+#ifdef CONFIG_CPU_IDLE_PROF
+   int idle_time, latency;
+   long sleep_time, wkup_time, total_sleep_time;
+   long preidle_time, postidle_time;
+#endif

 current_cx_state = *cx;

-   /* Used to keep track of the total time in idle */
-   getnstimeofday(ts_preidle);
-
 local_irq_disable();
 local_fiq_disable();
-
+   /* Used to keep track of the total time in idle */
+   getnstimeofday(ts_preidle);
+#ifdef CONFIG_CPU_IDLE_PROF
+   preidle_time = omap3_sram_get_32k_tick();
+#endif
 pwrdm_set_next_pwrst(mpu_pd, mpu_state);
 pwrdm_set_next_pwrst(core_pd, core_state);

@@ -153,9 +166,39 @@ return_sleep_time:
 getnstimeofday(ts_postidle);
 ts_idle = timespec_sub(ts_postidle, ts_preidle);

+#ifdef CONFIG_CPU_IDLE_PROF
+   postidle_time = omap3_sram_get_32k_tick();
+#endif
 local_irq_enable();
 local_fiq_enable();

+#ifdef CONFIG_CPU_IDLE_PROF
+   sleep_time = omap3_sram_get_sleep_time();
+   wkup_time = omap3_sram_get_wkup_time();
+
+   /* take care of overflow */
+   if (postidle_time  preidle_time)
+   postidle_time += (u32) 0x;
+   if (wkup_time  sleep_time)
+   wkup_time += (u32) 0x;
+
+   idle_time = postidle_time - preidle_time;
+   total_sleep_time = wkup_time -  sleep_time;
+   latency = idle_time - total_sleep_time;
+   sleep_time = omap3_sram_get_sleep_time();
+   wkup_time = omap3_sram_get_wkup_time();
+
+   /* calculate average latency after ignoring sprious ones */
+   if ((total_sleep_time  0)  (latency  state-actual_latency)
+  (latency= 0)) {
+   state-actual_latency = CONVERT_32K_USEC(latency);
+   latency = (sleep_time - preidle_time);
+   state-sleep_latency = CONVERT_32K_USEC(latency);
+   latency = 

Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Jean Pihet
Benoit,

On Fri, Aug 27, 2010 at 12:25 PM, Cousson, Benoit b-cous...@ti.com wrote:
 This patch has instrumentation code for measuring latencies for
 various CPUIdle C states for OMAP. Idea here is to capture the
 timestamp at various phases of CPU Idle and then compute the sw
 latency for various c states. For OMAP, 32k clock is chosen as
 reference clock this as is an always on clock. wkup domain memory
 (scratchpad memory) is used for storing timestamps. One can see the
 worstcase latencies in below sysfs entries (after enabling
 CONFIG_CPU_IDLE_PROF
 in .config). This information can be used to correctly configure cpu idle
 latencies for various C states after adding HW latencies for each of
 these sw latencies.
 /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency

 FYI, Jean is currently working on using standard Linux probes in order to
 instrument CPUIdle / CPUfreq. I'm not sure it is doable, but it might better
 to use standard method to do that instead of purely OMAP3 specific stuff.
 This code will not scale easily on OMAP4.
The proposed code looks OK to me since it is exporting the cpuidle
latency figures through the generic cpuidle driver (in
drivers/cpuidle/sysfs.c, via
/sys/devices/system/cpu/cpu0/cpuidle/staten/).
Once that code gets approved I can (and will) add some trace points in
it, so that all PM related events can be traced vs time.



 Do you have a dump of the latency you measured do far?

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


RE: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Shilimkar, Santosh
Benoit,
 -Original Message-
 From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
 ow...@vger.kernel.org] On Behalf Of Cousson, Benoit
 Sent: Friday, August 27, 2010 3:56 PM
 To: vishwanath.sripa...@linaro.org; Sripathy, Vishwanath
 Cc: linux-omap@vger.kernel.org; linaro-...@lists.linaro.org; Jean Pihet;
 Chalhoub, Nicole; Bour, Vincent
 Subject: Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement
 
 Hi Vishwa,
 
 On 8/28/2010 12:08 AM, vishwanath.sripa...@linaro.org wrote:
  From: Vishwanath BSvishwanath.sripa...@linaro.org
 
  This patch has instrumentation code for measuring latencies for
  various CPUIdle C states for OMAP. Idea here is to capture the
  timestamp at various phases of CPU Idle and then compute the sw
  latency for various c states. For OMAP, 32k clock is chosen as
  reference clock this as is an always on clock. wkup domain memory
  (scratchpad memory) is used for storing timestamps. One can see the
  worstcase latencies in below sysfs entries (after enabling
 CONFIG_CPU_IDLE_PROF
  in .config). This information can be used to correctly configure cpu
 idle
  latencies for various C states after adding HW latencies for each of
  these sw latencies.
  /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
  /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
 
 FYI, Jean is currently working on using standard Linux probes in order
 to instrument CPUIdle / CPUfreq. I'm not sure it is doable, but it might
 better to use standard method to do that instead of purely OMAP3
 specific stuff. This code will not scale easily on OMAP4.
 
Just discussed how to scale this for all OMAPs. Firstly we need to
get this code to common place instead of tying it to OMAP3/OMAP4 
specific low level code. Since on OMAP3, we can push C-functions
on SRAM and for OMAP4 we don't have any limitation, all this
code can be converted to C. 

Vishwa is planning to attempt that in next version.

Regards,
santosh
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Kevin Hilman
vishwanath.sripa...@linaro.org writes:

 From: Vishwanath BS vishwanath.sripa...@linaro.org

 This patch has instrumentation code for measuring latencies for
 various CPUIdle C states for OMAP. Idea here is to capture the
 timestamp at various phases of CPU Idle and then compute the sw
 latency for various c states.  For OMAP, 32k clock is chosen as
 reference clock this as is an always on clock.  wkup domain memory
 (scratchpad memory) is used for storing timestamps.  One can see the
 worstcase latencies in below sysfs entries (after enabling
 CONFIG_CPU_IDLE_PROF in .config). This information can be used to
 correctly configure cpu idle latencies for various C states after
 adding HW latencies for each of these sw latencies.
 /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency

 THis patch is tested on OMAP ZOOM3 using kevin's pm branch.

 Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
 Cc: linaro-...@lists.linaro.org

While I have many problems with the implementation details, I won't go
into them because in general this is the wrong direction for kernel
instrumentation.

This approach adds quite a bit overhead to the idle path itself.  With
all the reads/writes from/to the scratchpad(?) and all the multiplications
and divides in every idle path, as well as the wait-for-idlest in both
the sleep and resume paths.  The additional overhead added is non trivial.

Basically, I'd like get away from custom instrumentation and measurement
coded inside the kernel itself.  This kind of code never stops growing
and morphing into ugliness, and rarely scales well when new SoCs are
added.

With ftrace/perf, we can add tracepoints at specific points and use
external tools to extract and analyze the delays, latencys etc.

The point is to keep the minimum possible in the kernel: just the
tracepoints we're interested in.   The rest (calculations, averages,
analysis, etc.) does not need to be in the kernel and can be done easier
and with more powerful tools outside the kernel.

Kevin

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


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Amit Kucheria
On 10 Aug 28, vishwanath.sripa...@linaro.org wrote:
 From: Vishwanath BS vishwanath.sripa...@linaro.org
 
 This patch has instrumentation code for measuring latencies for
 various CPUIdle C states for OMAP. Idea here is to capture the
 timestamp at various phases of CPU Idle and then compute the sw
 latency for various c states. For OMAP, 32k clock is chosen as
 reference clock this as is an always on clock. wkup domain memory
 (scratchpad memory) is used for storing timestamps. One can see the
 worstcase latencies in below sysfs entries (after enabling 
 CONFIG_CPU_IDLE_PROF
 in .config). This information can be used to correctly configure cpu idle
 latencies for various C states after adding HW latencies for each of
 these sw latencies.
 /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
 
 THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
 
 Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
 Cc: linaro-...@lists.linaro.org
 ---
  arch/arm/mach-omap2/cpuidle34xx.c |   58 --
  arch/arm/mach-omap2/pm.h  |5 ++
  arch/arm/mach-omap2/sleep34xx.S   |  121 
 +
  drivers/cpuidle/Kconfig   |5 ++
  drivers/cpuidle/sysfs.c   |   16 +-
  include/linux/cpuidle.h   |3 +
  6 files changed, 202 insertions(+), 6 deletions(-)

Vishwa,

You should perhaps cc Len Brown and LKML for V2 to get acceptance for the new
counters in cpuidle

Regards,
Amit
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] OMAP CPUIDLE: CPU Idle latency measurement

2010-08-27 Thread Kevin Hilman
Amit Kucheria amit.kuche...@linaro.org writes:

 On 10 Aug 28, vishwanath.sripa...@linaro.org wrote:
 From: Vishwanath BS vishwanath.sripa...@linaro.org
 
 This patch has instrumentation code for measuring latencies for
 various CPUIdle C states for OMAP. Idea here is to capture the
 timestamp at various phases of CPU Idle and then compute the sw
 latency for various c states. For OMAP, 32k clock is chosen as
 reference clock this as is an always on clock. wkup domain memory
 (scratchpad memory) is used for storing timestamps. One can see the
 worstcase latencies in below sysfs entries (after enabling 
 CONFIG_CPU_IDLE_PROF
 in .config). This information can be used to correctly configure cpu idle
 latencies for various C states after adding HW latencies for each of
 these sw latencies.
 /sys/devices/system/cpu/cpu0/cpuidle/staten/actual_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/sleep_latency
 /sys/devices/system/cpu/cpu0/cpuidle/staten/wkup_latency
 
 THis patch is tested on OMAP ZOOM3 using kevin's pm branch.
 
 Signed-off-by: Vishwanath BS vishwanath.sripa...@linaro.org
 Cc: linaro-...@lists.linaro.org
 ---
  arch/arm/mach-omap2/cpuidle34xx.c |   58 --
  arch/arm/mach-omap2/pm.h  |5 ++
  arch/arm/mach-omap2/sleep34xx.S   |  121 
 +
  drivers/cpuidle/Kconfig   |5 ++
  drivers/cpuidle/sysfs.c   |   16 +-
  include/linux/cpuidle.h   |3 +
  6 files changed, 202 insertions(+), 6 deletions(-)

 You should perhaps cc Len Brown and LKML for V2 to get acceptance for the new
 counters in cpuidle

Before a v2, we need to have some discussions about the general
direction of how to best do PM instrumentation.  As I said in my review
of this patch[1], I am not a fan of the current approach.

Kevin

[1] http://marc.info/?l=linux-omapm=128293652216542w=2

NOTE: This post may not have made it to linaro-dev since it's moderated,
  an I wasn't subscribed when I posted this, but am now.
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html