Re: [PATCH] mfd: speedup twl4030 irq response time and decrease irq disable time
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
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
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
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
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
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