Re: [PATCH] mfd: speedup twl4030 irq response time and decrease irq disable time

2010-09-27 Thread Ming Lei
2010/9/22  tom.leim...@gmail.com:
 From: Ming Lei tom.leim...@gmail.com

 This patch sets scheduler policy of twl4030 irq thread
 (twl4030_irq_thread) as SCHED_FIFO to speedup irq response
 time, just like taken by kernel threaded irq in irq_thread
 (kernel/irq/manage.c). Also higher priority than that of
 threaded irq is taken to avoid preemption from twl4030
 subchips's threaded irq handler, so pih irq disable time may
 be decreased.

 The pih irq is disabled in handle_twl4030_pih which may
 wakeup twl4030 irq thread, and the pih irq will be enabled
 again until complete of all sih irqs' handling in twl4030
 irq thread.

 Also for each one interrupt line of twl4030 subchip, only
 two irq events can be buffered by twl4030(4.4.2.3 of TPS65950 TRM).

Ping...

 Signed-off-by: Ming Lei tom.leim...@gmail.com
 Cc: Samuel Ortiz sa...@linux.intel.com
 Cc: Santosh Shilimkar santosh.shilim...@ti.com
 Cc: Balaji T K balaj...@ti.com
 Cc: Rajendra Nayak rna...@ti.com
 Cc: Kevin Hilman khil...@deeprootsystems.com
 Cc: linux-ker...@vger.kernel.org
 ---
  drivers/mfd/twl4030-irq.c |   10 +-
  1 files changed, 9 insertions(+), 1 deletions(-)

 diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
 index 097f24d..d1e0d80 100644
 --- a/drivers/mfd/twl4030-irq.c
 +++ b/drivers/mfd/twl4030-irq.c
 @@ -286,8 +286,16 @@ static int twl4030_irq_thread(void *data)
        long irq = (long)data;
        static unsigned i2c_errors;
        static const unsigned max_i2c_errors = 100;
 -
 -
 +       struct sched_param param = {
 +               .sched_priority = MAX_USER_RT_PRIO/2 + 10,
 +       };
 +
 +       /* Take higher priority than threaded irq to make us immune of
 +        * preemption from twl4030 subchips's threaded irq handler, then
 +        * we can complete all SIH irqs' handling and enable PIH irq
 +        * again asap.
 +        * */
 +       sched_setscheduler(current, SCHED_FIFO, param);
        current-flags |= PF_NOFREEZE;

        while (!kthread_should_stop()) {
 --
 1.6.2.5




thanks,

-- 
Lei Ming
--
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] mfd: speedup twl4030 irq response time and decrease irq disable time

2010-09-27 Thread Samuel Ortiz
Hi Tom,

On Wed, Sep 22, 2010 at 09:49:31AM +0800, tom.leim...@gmail.com wrote:
 From: Ming Lei tom.leim...@gmail.com
 
 This patch sets scheduler policy of twl4030 irq thread
 (twl4030_irq_thread) as SCHED_FIFO to speedup irq response
 time, just like taken by kernel threaded irq in irq_thread
 (kernel/irq/manage.c). Also higher priority than that of
 threaded irq is taken to avoid preemption from twl4030
 subchips's threaded irq handler, so pih irq disable time may
 be decreased.
Wouldn't converting your twl4030_irq_thread() to the threaded IRQ framework
fix that problem ?


 The pih irq is disabled in handle_twl4030_pih which may
 wakeup twl4030 irq thread, and the pih irq will be enabled
 again until complete of all sih irqs' handling in twl4030
 irq thread.
 
 Also for each one interrupt line of twl4030 subchip, only
 two irq events can be buffered by twl4030(4.4.2.3 of TPS65950 TRM).
Could you explain how is that related to the patch below ?

Cheers,
Samuel.



 Signed-off-by: Ming Lei tom.leim...@gmail.com
 Cc: Samuel Ortiz sa...@linux.intel.com
 Cc: Santosh Shilimkar santosh.shilim...@ti.com
 Cc: Balaji T K balaj...@ti.com
 Cc: Rajendra Nayak rna...@ti.com
 Cc: Kevin Hilman khil...@deeprootsystems.com
 Cc: linux-ker...@vger.kernel.org
 ---
  drivers/mfd/twl4030-irq.c |   10 +-
  1 files changed, 9 insertions(+), 1 deletions(-)
 
 diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
 index 097f24d..d1e0d80 100644
 --- a/drivers/mfd/twl4030-irq.c
 +++ b/drivers/mfd/twl4030-irq.c
 @@ -286,8 +286,16 @@ static int twl4030_irq_thread(void *data)
   long irq = (long)data;
   static unsigned i2c_errors;
   static const unsigned max_i2c_errors = 100;
 -
 -
 + struct sched_param param = {
 + .sched_priority = MAX_USER_RT_PRIO/2 + 10,
 + };
 +
 + /* Take higher priority than threaded irq to make us immune of
 +  * preemption from twl4030 subchips's threaded irq handler, then
 +  * we can complete all SIH irqs' handling and enable PIH irq
 +  * again asap.
 +  * */
 + sched_setscheduler(current, SCHED_FIFO, param);
   current-flags |= PF_NOFREEZE;
  
   while (!kthread_should_stop()) {
 -- 
 1.6.2.5
 

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
--
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] mfd: speedup twl4030 irq response time and decrease irq disable time

2010-09-27 Thread Ming Lei
Hi Samuel,

 Thanks for your comment.

2010/9/27 Samuel Ortiz sa...@linux.intel.com:
 Hi Tom,

 On Wed, Sep 22, 2010 at 09:49:31AM +0800, tom.leim...@gmail.com wrote:
 From: Ming Lei tom.leim...@gmail.com

 This patch sets scheduler policy of twl4030 irq thread
 (twl4030_irq_thread) as SCHED_FIFO to speedup irq response
 time, just like taken by kernel threaded irq in irq_thread
 (kernel/irq/manage.c). Also higher priority than that of
 threaded irq is taken to avoid preemption from twl4030
 subchips's threaded irq handler, so pih irq disable time may
 be decreased.
 Wouldn't converting your twl4030_irq_thread() to the threaded IRQ framework
 fix that problem ?

IRQ_DISABLED flag is set by disable_irq_nosync called from PIH handler,
then thread function can't be executed in irq thread function, so we can't
convert this to threaded IRQ framework simply.


 The pih irq is disabled in handle_twl4030_pih which may
 wakeup twl4030 irq thread, and the pih irq will be enabled
 again until complete of all sih irqs' handling in twl4030
 irq thread.

 Also for each one interrupt line of twl4030 subchip, only
 two irq events can be buffered by twl4030(4.4.2.3 of TPS65950 TRM).
 Could you explain how is that related to the patch below ?

We need to decrease PIH irq disable time as far as possible to
make twl4030 subchip happy, or else some irqs may be lost, right?

This patch will decrease PIH irq disable time:

- set schedule policy of twl4030_irq_thread as SCHED_FIFO, so
it will get running timeslice quicker than before

   - set priority of  twl4030_irq_thread higher than irq_thread of
subchips to prevent it from being preempted by subchips' irq thread.


-- 
Lei Ming
--
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] mfd: speedup twl4030 irq response time and decrease irq disable time

2010-09-27 Thread Mark Brown
On Tue, Sep 28, 2010 at 08:25:24AM +0800, Ming Lei wrote:
 2010/9/27 Samuel Ortiz sa...@linux.intel.com:

  Wouldn't converting your twl4030_irq_thread() to the threaded IRQ framework
  fix that problem ?

 IRQ_DISABLED flag is set by disable_irq_nosync called from PIH handler,
 then thread function can't be executed in irq thread function, so we can't
 convert this to threaded IRQ framework simply.

Have you raised this issue with the genirq guys?  This sounds like
something that the core infrastructure should be able to cope with.
--
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] mfd: speedup twl4030 irq response time and decrease irq disable time

2010-09-27 Thread Ming Lei
CC genirq guys

2010/9/28 Mark Brown broo...@opensource.wolfsonmicro.com:
 On Tue, Sep 28, 2010 at 08:25:24AM +0800, Ming Lei wrote:
 2010/9/27 Samuel Ortiz sa...@linux.intel.com:

  Wouldn't converting your twl4030_irq_thread() to the threaded IRQ framework
  fix that problem ?

 IRQ_DISABLED flag is set by disable_irq_nosync called from PIH handler,
 then thread function can't be executed in irq thread function, so we can't
 convert this to threaded IRQ framework simply.

 Have you raised this issue with the genirq guys?  This sounds like
 something that the core infrastructure should be able to cope with.


Even genirq guys can help us to convert to irq thread framework, I
don't think there is good way to set priority for one irq thread.

For twl4030, if we can make twl4030_irq_thread to run at higher
priority than that of other irq thread, the PIH irq disable time can be
decreased further since other irq thread waken up by twl4030_irq_thread
can preempt the running of twl4030_irq_thread, and the PIH irq will be
enabled until complete of twl4030_irq_thread.

thanks,
-- 
Lei Ming
--
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] mfd: speedup twl4030 irq response time and decrease irq disable time

2010-09-27 Thread Mark Brown
On Tue, Sep 28, 2010 at 01:01:32PM +0800, Ming Lei wrote:
 2010/9/28 Mark Brown broo...@opensource.wolfsonmicro.com:

  Have you raised this issue with the genirq guys?  This sounds like
  something that the core infrastructure should be able to cope with.

 Even genirq guys can help us to convert to irq thread framework, I
 don't think there is good way to set priority for one irq thread.

What I'm saying is that this sounds like something it's reasonable to
want to do so if there's no way currently to get high priority handling
of timing sensitive interrupt controllers it'd be good if there could
be.
--
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