Hi Tom, On Wed, Sep 22, 2010 at 09:49:31AM +0800, tom.leiming@xxxxxxxxx wrote: > From: Ming Lei <tom.leiming@xxxxxxxxx> > > 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.leiming@xxxxxxxxx> > Cc: Samuel Ortiz <sameo@xxxxxxxxxxxxxxx> > Cc: Santosh Shilimkar <santosh.shilimkar@xxxxxx> > Cc: Balaji T K <balajitk@xxxxxx> > Cc: Rajendra Nayak <rnayak@xxxxxx> > Cc: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> > Cc: linux-kernel@xxxxxxxxxxxxxxx > --- > 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, ¶m); > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html