stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* FAILED: patch "[PATCH] pinctrl: qcom: Assign irq_eoi conditionally" failed to apply to 5.4-stable tree
@ 2020-03-16 11:34 gregkh
  2020-03-18 16:40 ` Sasha Levin
  0 siblings, 1 reply; 3+ messages in thread
From: gregkh @ 2020-03-16 11:34 UTC (permalink / raw)
  To: linus.walleij, bjorn.andersson, david, ilina, maz, swboyd; +Cc: stable


The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <stable@vger.kernel.org>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 1cada2f307665e208a486d7ac2294ed9a6f74a6f Mon Sep 17 00:00:00 2001
From: Linus Walleij <linus.walleij@linaro.org>
Date: Mon, 9 Mar 2020 16:26:04 +0100
Subject: [PATCH] pinctrl: qcom: Assign irq_eoi conditionally

The hierarchical parts of MSM pinctrl/GPIO is only
used when the device tree has a "wakeup-parent" as
a phandle, but the .irq_eoi is anyway assigned leading
to semantic problems on elder Qualcomm chipsets.

When the drivers/mfd/qcom-pm8xxx.c driver calls
chained_irq_exit() that call will in turn call chip->irq_eoi()
which is set to irq_chip_eoi_parent() by default on a
hierachical IRQ chip, and the parent is pinctrl-msm.c
so that will in turn unconditionally call
irq_chip_eoi_parent() again, but its parent is invalid
so we get the following crash:

 Unnable to handle kernel NULL pointer dereference at
 virtual address 00000010
 pgd = (ptrval)
 [00000010] *pgd=00000000
 Internal error: Oops: 5 [#1] PREEMPT SMP ARM
 (...)
 PC is at irq_chip_eoi_parent+0x4/0x10
 LR is at pm8xxx_irq_handler+0x1b4/0x2d8

If we solve this crash by avoiding to call up to
irq_chip_eoi_parent(), the machine will hang and get
reset by the watchdog, because of semantic issues,
probably inside irq_chip.

As a solution, just assign the .irq_eoi conditionally if
we are actually using a wakeup parent.

Cc: David Heidelberg <david@ixit.cz>
Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Lina Iyer <ilina@codeaurora.org>
Cc: Stephen Boyd <swboyd@chromium.org>
Cc: stable@vger.kernel.org
Fixes: e35a6ae0eb3a ("pinctrl/msm: Setup GPIO chip in hierarchy")
Link: https://lore.kernel.org/r/20200306121221.1231296-1-linus.walleij@linaro.org
Link: https://lore.kernel.org/r/20200309125207.571840-1-linus.walleij@linaro.org
Link: https://lore.kernel.org/r/20200309152604.585112-1-linus.walleij@linaro.org
Tested-by: David Heidelberg <david@ixit.cz>
Acked-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index 9a8daa256a32..1a948c3f54b7 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -1104,7 +1104,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
 	pctrl->irq_chip.irq_mask = msm_gpio_irq_mask;
 	pctrl->irq_chip.irq_unmask = msm_gpio_irq_unmask;
 	pctrl->irq_chip.irq_ack = msm_gpio_irq_ack;
-	pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
 	pctrl->irq_chip.irq_set_type = msm_gpio_irq_set_type;
 	pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;
 	pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;
@@ -1118,7 +1117,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
 		if (!chip->irq.parent_domain)
 			return -EPROBE_DEFER;
 		chip->irq.child_to_parent_hwirq = msm_gpio_wakeirq;
-
+		pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
 		/*
 		 * Let's skip handling the GPIOs, if the parent irqchip
 		 * is handling the direct connect IRQ of the GPIO.


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: FAILED: patch "[PATCH] pinctrl: qcom: Assign irq_eoi conditionally" failed to apply to 5.4-stable tree
  2020-03-16 11:34 FAILED: patch "[PATCH] pinctrl: qcom: Assign irq_eoi conditionally" failed to apply to 5.4-stable tree gregkh
@ 2020-03-18 16:40 ` Sasha Levin
  2020-03-18 16:53   ` Greg KH
  0 siblings, 1 reply; 3+ messages in thread
From: Sasha Levin @ 2020-03-18 16:40 UTC (permalink / raw)
  To: gregkh; +Cc: linus.walleij, bjorn.andersson, david, ilina, maz, swboyd, stable

On Mon, Mar 16, 2020 at 12:34:09PM +0100, gregkh@linuxfoundation.org wrote:
>
>The patch below does not apply to the 5.4-stable tree.
>If someone wants it applied there, or to any other stable or longterm
>tree, then please email the backport, including the original git commit
>id to <stable@vger.kernel.org>.
>
>thanks,
>
>greg k-h
>
>------------------ original commit in Linus's tree ------------------
>
>From 1cada2f307665e208a486d7ac2294ed9a6f74a6f Mon Sep 17 00:00:00 2001
>From: Linus Walleij <linus.walleij@linaro.org>
>Date: Mon, 9 Mar 2020 16:26:04 +0100
>Subject: [PATCH] pinctrl: qcom: Assign irq_eoi conditionally
>
>The hierarchical parts of MSM pinctrl/GPIO is only
>used when the device tree has a "wakeup-parent" as
>a phandle, but the .irq_eoi is anyway assigned leading
>to semantic problems on elder Qualcomm chipsets.
>
>When the drivers/mfd/qcom-pm8xxx.c driver calls
>chained_irq_exit() that call will in turn call chip->irq_eoi()
>which is set to irq_chip_eoi_parent() by default on a
>hierachical IRQ chip, and the parent is pinctrl-msm.c
>so that will in turn unconditionally call
>irq_chip_eoi_parent() again, but its parent is invalid
>so we get the following crash:
>
> Unnable to handle kernel NULL pointer dereference at
> virtual address 00000010
> pgd = (ptrval)
> [00000010] *pgd=00000000
> Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> (...)
> PC is at irq_chip_eoi_parent+0x4/0x10
> LR is at pm8xxx_irq_handler+0x1b4/0x2d8
>
>If we solve this crash by avoiding to call up to
>irq_chip_eoi_parent(), the machine will hang and get
>reset by the watchdog, because of semantic issues,
>probably inside irq_chip.
>
>As a solution, just assign the .irq_eoi conditionally if
>we are actually using a wakeup parent.
>
>Cc: David Heidelberg <david@ixit.cz>
>Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
>Cc: Lina Iyer <ilina@codeaurora.org>
>Cc: Stephen Boyd <swboyd@chromium.org>
>Cc: stable@vger.kernel.org
>Fixes: e35a6ae0eb3a ("pinctrl/msm: Setup GPIO chip in hierarchy")

This shouldn't go in 5.4, e35a6ae0eb3a is not there.

-- 
Thanks,
Sasha

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: FAILED: patch "[PATCH] pinctrl: qcom: Assign irq_eoi conditionally" failed to apply to 5.4-stable tree
  2020-03-18 16:40 ` Sasha Levin
@ 2020-03-18 16:53   ` Greg KH
  0 siblings, 0 replies; 3+ messages in thread
From: Greg KH @ 2020-03-18 16:53 UTC (permalink / raw)
  To: Sasha Levin
  Cc: linus.walleij, bjorn.andersson, david, ilina, maz, swboyd, stable

On Wed, Mar 18, 2020 at 12:40:23PM -0400, Sasha Levin wrote:
> On Mon, Mar 16, 2020 at 12:34:09PM +0100, gregkh@linuxfoundation.org wrote:
> > 
> > The patch below does not apply to the 5.4-stable tree.
> > If someone wants it applied there, or to any other stable or longterm
> > tree, then please email the backport, including the original git commit
> > id to <stable@vger.kernel.org>.
> > 
> > thanks,
> > 
> > greg k-h
> > 
> > ------------------ original commit in Linus's tree ------------------
> > 
> > > From 1cada2f307665e208a486d7ac2294ed9a6f74a6f Mon Sep 17 00:00:00 2001
> > From: Linus Walleij <linus.walleij@linaro.org>
> > Date: Mon, 9 Mar 2020 16:26:04 +0100
> > Subject: [PATCH] pinctrl: qcom: Assign irq_eoi conditionally
> > 
> > The hierarchical parts of MSM pinctrl/GPIO is only
> > used when the device tree has a "wakeup-parent" as
> > a phandle, but the .irq_eoi is anyway assigned leading
> > to semantic problems on elder Qualcomm chipsets.
> > 
> > When the drivers/mfd/qcom-pm8xxx.c driver calls
> > chained_irq_exit() that call will in turn call chip->irq_eoi()
> > which is set to irq_chip_eoi_parent() by default on a
> > hierachical IRQ chip, and the parent is pinctrl-msm.c
> > so that will in turn unconditionally call
> > irq_chip_eoi_parent() again, but its parent is invalid
> > so we get the following crash:
> > 
> > Unnable to handle kernel NULL pointer dereference at
> > virtual address 00000010
> > pgd = (ptrval)
> > [00000010] *pgd=00000000
> > Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> > (...)
> > PC is at irq_chip_eoi_parent+0x4/0x10
> > LR is at pm8xxx_irq_handler+0x1b4/0x2d8
> > 
> > If we solve this crash by avoiding to call up to
> > irq_chip_eoi_parent(), the machine will hang and get
> > reset by the watchdog, because of semantic issues,
> > probably inside irq_chip.
> > 
> > As a solution, just assign the .irq_eoi conditionally if
> > we are actually using a wakeup parent.
> > 
> > Cc: David Heidelberg <david@ixit.cz>
> > Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> > Cc: Lina Iyer <ilina@codeaurora.org>
> > Cc: Stephen Boyd <swboyd@chromium.org>
> > Cc: stable@vger.kernel.org
> > Fixes: e35a6ae0eb3a ("pinctrl/msm: Setup GPIO chip in hierarchy")
> 
> This shouldn't go in 5.4, e35a6ae0eb3a is not there.

Ah, grep failed me, there is another reference to that commit id in a
5.4.y release.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-03-18 16:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-16 11:34 FAILED: patch "[PATCH] pinctrl: qcom: Assign irq_eoi conditionally" failed to apply to 5.4-stable tree gregkh
2020-03-18 16:40 ` Sasha Levin
2020-03-18 16:53   ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).