Patch "gpio: rcar: Check for irq_set_irq_wake() failures" has been added to the 4.1-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
gpio: rcar: Check for irq_set_irq_wake() failures
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
gpio-rcar-check-for-irq_set_irq_wake-failures.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
501ef0f95a57e7c32138733c468394a52244c85bMon Sep 17 00:00:00 2001
From: Geert Uytterhoeven <[email protected]>
Date: Thu, 21 May 2015 13:21:37 +0200
Subject: gpio: rcar: Check for irq_set_irq_wake() failures
From: Geert Uytterhoeven <[email protected]>
commit 501ef0f95a57e7c32138733c468394a52244c85b upstream.
If an interrupt controller doesn't support wake-up configuration, irq_set_irq_wake() returns an error code. Then any subsequent call trying to deconfigure wake-up will cause an imbalance, and a warning will be printed:
WARNING: CPU: 1 PID: 1341 at kernel/irq/manage.c:540 irq_set_irq_wake+0x9c/0xf8()
Unbalanced IRQ 26 wake disableTo fix this, refrain from any further parent interrupt controller (de)configuration if irq_set_irq_wake() failed.
Alternative fixes would be:
- calling "gic_set_irqchip_flags(IRQCHIP_SKIP_SET_WAKE)" from the platform code,
- setting "gic_chip.flags = IRQCHIP_SKIP_SET_WAKE" in the GIC driver code,
but these were withheld as the GIC hardware doesn't really support wake-up interrupts.
--- drivers/gpio/gpio-rcar.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
drivers/gpio/gpio-rcar.c +10 -1
@@ -177,8 +177,17 @@ static int gpio_rcar_irq_set_wake(structstruct gpio_chip *gc =irq_data_get_irq_chip_data (d); struct gpio_rcar_priv *p = container_of(gc, struct gpio_rcar_priv, gpio_chip); +int error; -irq_set_irq_wake (p->irq_parent, on); +if (p->irq_parent) { + error =irq_set_irq_wake (p->irq_parent, on); +if (error) { +dev_dbg (&p->pdev->dev, +"irq %u doesn't support irq_set_wake\n" , + p->irq_parent); + p->irq_parent =0 ; + } + }if (!p->clk)return 0 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/gpio-rcar-check-for-irq_set_irq_wake-failures.patch