Files
linux/include/linux
Marc Zyngier 1b7047edfc genirq: Allow the irqchip state of an IRQ to be save/restored
There is a number of cases where a kernel subsystem may want to
introspect the state of an interrupt at the irqchip level:

- When a peripheral is shared between virtual machines,
  its interrupt state becomes part of the guest's state,
  and must be switched accordingly. KVM on arm/arm64 requires
  this for its guest-visible timer
- Some GPIO controllers seem to require peeking into the
  interrupt controller they are connected to to report
  their internal state

This seem to be a pattern that is common enough for the core code
to try and support this without too many horrible hacks. Introduce
a pair of accessors (irq_get_irqchip_state/irq_set_irqchip_state)
to retrieve the bits that can be of interest to another subsystem:
pending, active, and masked.

- irq_get_irqchip_state returns the state of the interrupt according
  to a parameter set to IRQCHIP_STATE_PENDING, IRQCHIP_STATE_ACTIVE,
  IRQCHIP_STATE_MASKED or IRQCHIP_STATE_LINE_LEVEL.
- irq_set_irqchip_state similarly sets the state of the interrupt.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Reviewed-by: Bjorn Andersson <bjorn.andersson@sonymobile.com>
Tested-by: Bjorn Andersson <bjorn.andersson@sonymobile.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Phong Vo <pvo@apm.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Tin Huynh <tnhuynh@apm.com>
Cc: Y Vo <yvo@apm.com>
Cc: Toan Le <toanle@apm.com>
Cc: Bjorn Andersson <bjorn@kryo.se>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Arnd Bergmann <arnd@arndb.de>
Link: http://lkml.kernel.org/r/1426676484-21812-2-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2015-04-08 23:28:28 +02:00
..
2015-02-19 13:31:40 +03:00
2014-09-22 16:48:47 +09:00
2014-11-24 17:24:08 -05:00
2014-12-15 18:19:03 -08:00
2015-03-03 14:14:26 +00:00
2015-01-29 10:49:28 +02:00
2015-03-11 15:56:59 -07:00
2014-12-18 19:08:10 -08:00
2015-02-12 18:54:15 -08:00
2014-12-19 22:55:06 +01:00
2014-07-08 13:36:52 -07:00
2015-01-21 19:21:30 +01:00
2014-11-10 09:27:30 -07:00
2014-04-01 23:19:14 -04:00
2014-12-31 13:06:50 -05:00
2014-10-09 11:35:48 +03:00
2014-10-08 16:01:41 -04:00
2015-01-25 23:17:28 -05:00
2014-04-18 14:20:48 +02:00
2014-08-06 18:01:24 -07:00
2014-05-20 10:30:40 +09:00
2015-02-18 15:08:33 +01:00
2014-06-06 16:08:13 -07:00
2015-01-27 11:09:13 +01:00
2014-09-29 15:37:01 -04:00
2014-06-02 14:56:01 -07:00
2014-03-13 12:11:00 +10:30
2015-01-15 10:34:54 +01:00
2015-01-15 10:34:54 +01:00
2015-02-13 21:21:36 -08:00
2015-02-17 14:34:51 -08:00
2014-07-22 21:55:45 +01:00
2014-12-18 09:39:51 +01:00
2015-01-04 23:11:43 -05:00
2014-05-27 17:38:11 -07:00
2014-10-09 22:25:58 -04:00
2015-02-11 17:06:02 -08:00
2014-10-24 00:14:36 +02:00
2014-03-04 13:51:06 -05:00
2014-04-01 23:19:10 -04:00
2014-04-07 10:59:19 -07:00
2014-11-04 13:29:38 +00:00
2014-07-09 14:58:37 +01:00
2015-01-25 23:17:28 -05:00
2015-02-17 14:34:52 -08:00
2015-01-06 11:01:13 -08:00
2015-02-16 17:56:03 -08:00
2014-08-08 15:57:26 -07:00
2014-08-08 15:57:31 -07:00
2015-02-13 21:21:41 -08:00
2015-01-22 15:10:56 +01:00
2015-01-03 14:32:57 -05:00
2014-06-12 00:21:11 -04:00
2015-02-13 21:21:35 -08:00
2014-06-04 16:53:57 -07:00
2014-08-08 15:57:24 -07:00
2014-06-04 16:53:56 -07:00
2015-02-17 22:21:11 -05:00
2014-09-23 21:40:48 -07:00
2014-11-28 16:08:16 +01:00
2014-09-16 15:02:55 -06:00
2014-12-09 12:05:24 +02:00
2014-04-07 16:35:53 -07:00
2014-06-04 16:53:57 -07:00
2014-12-15 23:49:28 +02:00