From: David Brownell <david-b@pacbell.net>
To: Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org, tglx@linutronix.de
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
me@felipebalbi.com, dmitry.torokhov@gmail.com,
sameo@openedhand.com
Subject: [patch/rfc 2/2] twl4030: use new handle_threaded_irq() flow handler
Date: Tue, 17 Mar 2009 19:22:25 -0700 [thread overview]
Message-ID: <200903171922.25647.david-b@pacbell.net> (raw)
In-Reply-To: <200903171914.53688.david-b@pacbell.net>
From: David Brownell <dbrownell@users.sourceforge.net>
Make the toplevel twl4030 irq dispatch code use the new
handle_threaded_irq() flow handler. Also, minor cleanup,
use the newish generic_handle_irq_desc().
Since that flow handler guarantees the IRQ handlers are
called only in a normal (sleeping) thread context, remove
some of the workarounds for the lockdep goofage whereby
it breaks various drivers by forcing IRQF_DISABLED on.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
---
drivers/mfd/twl4030-irq.c | 15 +++++----------
drivers/rtc/rtc-twl4030.c | 8 --------
drivers/usb/otg/twl4030-usb.c | 8 --------
3 files changed, 5 insertions(+), 26 deletions(-)
--- a/drivers/mfd/twl4030-irq.c
+++ b/drivers/mfd/twl4030-irq.c
@@ -215,7 +215,6 @@ static int twl4030_irq_thread(void *data
}
/* these handlers deal with the relevant SIH irq status */
- local_irq_disable();
for (module_irq = twl4030_irq_base;
pih_isr;
pih_isr >>= 1, module_irq++) {
@@ -235,10 +234,9 @@ static int twl4030_irq_thread(void *data
note_interrupt(module_irq, d,
IRQ_NONE);
else
- d->handle_irq(module_irq, d);
+ generic_handle_irq_desc(module_irq, d);
}
}
- local_irq_enable();
desc->chip->unmask(irq);
}
@@ -578,7 +576,7 @@ static inline int sih_read_isr(const str
}
/*
- * Generic handler for SIH interrupts ... we "know" this is called
+ * Generic handler for SIH interrupts ... we know this is called
* in task context, with IRQs enabled.
*/
static void handle_twl4030_sih(unsigned irq, struct irq_desc *desc)
@@ -588,10 +586,7 @@ static void handle_twl4030_sih(unsigned
int isr;
/* reading ISR acks the IRQs, using clear-on-read mode */
- local_irq_enable();
isr = sih_read_isr(sih);
- local_irq_disable();
-
if (isr < 0) {
pr_err("twl4030: %s SIH, read ISR error %d\n",
sih->name, isr);
@@ -658,7 +653,7 @@ int twl4030_sih_setup(int module)
irq = irq_base + i;
set_irq_chip_and_handler(irq, &twl4030_sih_irq_chip,
- handle_edge_irq);
+ handle_threaded_irq);
set_irq_chip_data(irq, agent);
activate_irq(irq);
}
@@ -666,7 +661,7 @@ int twl4030_sih_setup(int module)
status = irq_base;
twl4030_irq_next += i;
- /* replace generic PIH handler (handle_simple_irq) */
+ /* replace generic PIH handler (handle_threaded_irq) */
irq = sih_mod + twl4030_irq_base;
set_irq_data(irq, agent);
set_irq_chained_handler(irq, handle_twl4030_sih);
@@ -719,7 +714,7 @@ int twl_init_irq(int irq_num, unsigned i
for (i = irq_base; i < irq_end; i++) {
set_irq_chip_and_handler(i, &twl4030_irq_chip,
- handle_simple_irq);
+ handle_threaded_irq);
activate_irq(i);
}
twl4030_irq_next = i;
--- a/drivers/rtc/rtc-twl4030.c
+++ b/drivers/rtc/rtc-twl4030.c
@@ -325,14 +325,6 @@ static irqreturn_t twl4030_rtc_interrupt
int res;
u8 rd_reg;
-#ifdef CONFIG_LOCKDEP
- /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
- * we don't want and can't tolerate. Although it might be
- * friendlier not to borrow this thread context...
- */
- local_irq_enable();
-#endif
-
res = twl4030_rtc_read_u8(&rd_reg, REG_RTC_STATUS_REG);
if (res)
goto out;
--- a/drivers/usb/otg/twl4030-usb.c
+++ b/drivers/usb/otg/twl4030-usb.c
@@ -517,14 +517,6 @@ static irqreturn_t twl4030_usb_irq(int i
struct twl4030_usb *twl = _twl;
int status;
-#ifdef CONFIG_LOCKDEP
- /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
- * we don't want and can't tolerate. Although it might be
- * friendlier not to borrow this thread context...
- */
- local_irq_enable();
-#endif
-
status = twl4030_usb_linkstat(twl);
if (status != USB_LINK_UNKNOWN) {
next prev parent reply other threads:[~2009-03-18 3:07 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-27 19:28 [PATCH 1/2] input: misc: add twl4030-pwrbutton driver Felipe Balbi
2009-02-27 19:28 ` [PATCH 2/2] mfd: twl4030: add twl4030-pwrbutton as our child Felipe Balbi
2009-02-27 20:36 ` Andrew Morton
2009-02-27 21:58 ` David Brownell
2009-02-27 22:09 ` Felipe Balbi
2009-02-27 22:12 ` Andrew Morton
2009-02-27 23:20 ` David Brownell
2009-02-27 23:42 ` Andrew Morton
2009-07-22 19:27 ` Trilok Soni
2009-07-22 22:25 ` David Brownell
2009-02-27 20:33 ` [PATCH 1/2] input: misc: add twl4030-pwrbutton driver Andrew Morton
2009-02-27 20:37 ` Felipe Balbi
2009-02-27 21:50 ` lockdep and threaded IRQs (was: [PATCH 1/2] input: misc: add twl4030-pwrbutton driver) David Brownell
2009-02-27 22:09 ` Andrew Morton
2009-02-27 23:18 ` lockdep and threaded IRQs (was: ...) David Brownell
2009-02-27 23:32 ` Andrew Morton
2009-02-28 0:01 ` Andrew Morton
2009-02-28 2:30 ` David Brownell
2009-02-28 2:39 ` Andrew Morton
2009-02-28 4:46 ` David Brownell
2009-02-28 5:12 ` Andrew Morton
2009-02-28 6:17 ` David Brownell
2009-02-28 11:13 ` Thomas Gleixner
2009-02-28 12:16 ` David Brownell
2009-02-28 16:42 ` Thomas Gleixner
2009-02-28 20:02 ` David Brownell
2009-02-28 20:55 ` Thomas Gleixner
2009-02-28 21:13 ` Thomas Gleixner
2009-02-28 22:37 ` David Brownell
2009-02-28 22:05 ` David Brownell
2009-03-01 9:43 ` Thomas Gleixner
2009-03-01 22:54 ` David Brownell
2009-03-02 13:16 ` Peter Zijlstra
2009-03-02 21:04 ` David Brownell
2009-03-02 21:16 ` Peter Zijlstra
2009-03-02 21:29 ` Andrew Morton
2009-03-02 21:37 ` David Brownell
2009-03-02 21:41 ` Peter Zijlstra
2009-03-02 22:09 ` David Brownell
2009-03-02 22:19 ` Peter Zijlstra
2009-03-02 22:40 ` David Brownell
2009-03-02 22:51 ` Peter Zijlstra
2009-03-02 23:29 ` David Brownell
2009-03-03 7:45 ` Peter Zijlstra
2009-03-02 22:46 ` lockdep and threaded IRQs David Miller
2009-03-02 22:57 ` Andrew Morton
2009-03-02 23:07 ` Peter Zijlstra
2009-03-02 23:02 ` Peter Zijlstra
2009-03-02 23:35 ` lockdep and threaded IRQs (was: ...) Alan Cox
2009-03-01 22:11 ` David Brownell
2009-02-28 11:48 ` lockdep and threaded IRQs Stefan Richter
2009-02-28 20:19 ` David Brownell
2009-02-28 21:10 ` Stefan Richter
2009-03-02 13:16 ` lockdep and threaded IRQs (was: ...) Peter Zijlstra
2009-03-02 22:10 ` David Brownell
2009-03-02 22:25 ` Peter Zijlstra
2009-03-02 23:20 ` David Brownell
2009-03-02 23:26 ` Ingo Molnar
2009-03-02 23:42 ` David Brownell
2009-03-02 23:53 ` Ingo Molnar
2009-03-03 0:33 ` David Brownell
2009-03-03 0:44 ` Ingo Molnar
2009-03-03 2:37 ` David Brownell
2009-03-03 9:27 ` Peter Zijlstra
2009-03-03 9:45 ` Ingo Molnar
2009-03-03 9:47 ` Alan Cox
2009-03-03 10:03 ` Ingo Molnar
2009-03-03 10:30 ` Alan Cox
2009-03-03 10:39 ` Peter Zijlstra
2009-03-03 10:48 ` Ingo Molnar
2009-03-03 11:13 ` Alan Cox
2009-03-03 11:33 ` Ingo Molnar
2009-03-03 11:19 ` Ingo Molnar
2009-03-18 1:04 ` David Brownell
2009-03-18 2:00 ` David Brownell
2009-03-18 2:14 ` [patch/rfc 0/2] handle_threaded_irq() David Brownell
2009-03-18 2:19 ` [patch/rfc 1/2] GENIRQ: add handle_threaded_irq() flow handler David Brownell
2009-03-18 12:00 ` Felipe Balbi
2009-03-18 18:31 ` David Brownell
2009-03-18 18:32 ` Felipe Balbi
2009-03-18 2:22 ` David Brownell [this message]
2009-03-03 11:53 ` lockdep and threaded IRQs (was: ...) Thomas Gleixner
2009-03-05 2:49 ` David Brownell
2009-03-06 14:40 ` Thomas Gleixner
2009-03-18 3:06 ` David Brownell
2009-03-02 23:48 ` David Brownell
2009-03-02 23:58 ` Ingo Molnar
2009-03-02 15:13 ` [PATCH] genirq: assert that irq handlers are indeed run in hardirq context Peter Zijlstra
2009-03-02 19:48 ` David Brownell
2009-03-02 22:01 ` [tip:irq/genirq] genirq: assert that irq handlers are indeed running " Peter Zijlstra
2009-03-02 23:15 ` Peter Zijlstra
2009-04-10 7:11 ` Eric Miao
2009-04-10 9:57 ` Thomas Gleixner
2009-02-28 11:20 ` lockdep and threaded IRQs Stefan Richter
2009-02-28 20:10 ` David Brownell
2009-02-28 5:51 ` [PATCH 1/2] input: misc: add twl4030-pwrbutton driver Trilok Soni
2009-02-28 12:05 ` [PATCH] mfd: twl4030: add twl4030-pwrbutton as our child Felipe Balbi
2009-02-28 22:23 ` [PATCH 1/2] input: misc: add twl4030-pwrbutton driver Dmitry Torokhov
2009-03-01 0:30 ` Felipe Balbi
2009-03-01 0:58 ` Dmitry Torokhov
2009-03-01 14:40 ` Felipe Balbi
2009-03-04 9:00 ` Dmitry Torokhov
2009-03-04 10:12 ` Felipe Balbi
2009-03-05 1:38 ` David Brownell
2009-03-05 23:54 ` David Brownell
2009-03-06 9:43 ` Dmitry Torokhov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200903171922.25647.david-b@pacbell.net \
--to=david-b@pacbell.net \
--cc=a.p.zijlstra@chello.nl \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=me@felipebalbi.com \
--cc=mingo@elte.hu \
--cc=sameo@openedhand.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox