diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2017-06-29 23:33:37 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-07-04 12:46:16 +0200 |
commit | 9114014cf4e6df0b22d764380ae1fc54f1a7a8b2 (patch) | |
tree | 11be4a12a5d75cc271cdcaa26736e1855048acdd /include/linux/irqdesc.h | |
parent | 3a90795e1e885167209056a1a90be965add30e25 (diff) | |
download | linux-9114014cf4e6df0b22d764380ae1fc54f1a7a8b2.tar.gz linux-9114014cf4e6df0b22d764380ae1fc54f1a7a8b2.tar.bz2 linux-9114014cf4e6df0b22d764380ae1fc54f1a7a8b2.zip |
genirq: Add mutex to irq desc to serialize request/free_irq()
The irq_request/release_resources() callbacks ar currently invoked under
desc->lock with interrupts disabled. This is a source of problems on RT and
conceptually not required.
Add a seperate mutex to struct irq_desc which allows to serialize
request/free_irq(), which can be used to move the resource functions out of
the desc->lock held region.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Heiko Stuebner <heiko@sntech.de>
Cc: Julia Cartwright <julia@ni.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Brian Norris <briannorris@chromium.org>
Cc: Doug Anderson <dianders@chromium.org>
Cc: linux-rockchip@lists.infradead.org
Cc: John Keeping <john@metanate.com>
Cc: linux-gpio@vger.kernel.org
Link: http://lkml.kernel.org/r/20170629214344.039220922@linutronix.de
Diffstat (limited to 'include/linux/irqdesc.h')
-rw-r--r-- | include/linux/irqdesc.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h index d425a3a09722..3e90a094798d 100644 --- a/include/linux/irqdesc.h +++ b/include/linux/irqdesc.h @@ -3,6 +3,7 @@ #include <linux/rcupdate.h> #include <linux/kobject.h> +#include <linux/mutex.h> /* * Core internal functions to deal with irq descriptors @@ -45,6 +46,7 @@ struct pt_regs; * IRQF_FORCE_RESUME set * @rcu: rcu head for delayed free * @kobj: kobject used to represent this struct in sysfs + * @request_mutex: mutex to protect request/free before locking desc->lock * @dir: /proc/irq/ procfs entry * @debugfs_file: dentry for the debugfs file * @name: flow handler name for /proc/interrupts output @@ -96,6 +98,7 @@ struct irq_desc { struct rcu_head rcu; struct kobject kobj; #endif + struct mutex request_mutex; int parent_irq; struct module *owner; const char *name; |