2017-12-29 16:06:22

by Stefan Schake

[permalink] [raw]
Subject: [PATCH] drm/vc4: Move IRQ enable to PM path

We were calling enable_irq on bind, where it was already enabled previously
by the IRQ helper. Additionally, dev->irq is not set correctly until after
postinstall and so was always zero here, triggering a warning in 4.15.
Fix both by moving the enable to the power management resume path, where we
know there was a previous disable invocation during suspend.

Fixes: 253696ccd613 ("drm/vc4: Account for interrupts in flight")
Signed-off-by: Stefan Schake <[email protected]>
---
I tested replacing the enable/disable dance with just synchronize_irq,
but that only made the original kernel OOPS more sporadic.

drivers/gpu/drm/vc4/vc4_irq.c | 3 ---
drivers/gpu/drm/vc4/vc4_v3d.c | 3 +++
2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c
index 26eddbb..3dd62d7 100644
--- a/drivers/gpu/drm/vc4/vc4_irq.c
+++ b/drivers/gpu/drm/vc4/vc4_irq.c
@@ -209,9 +209,6 @@
{
struct vc4_dev *vc4 = to_vc4_dev(dev);

- /* Undo the effects of a previous vc4_irq_uninstall. */
- enable_irq(dev->irq);
-
/* Enable both the render done and out of memory interrupts. */
V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS);

diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c
index 622cd43..493f392b 100644
--- a/drivers/gpu/drm/vc4/vc4_v3d.c
+++ b/drivers/gpu/drm/vc4/vc4_v3d.c
@@ -327,6 +327,9 @@ static int vc4_v3d_runtime_resume(struct device *dev)
return ret;

vc4_v3d_init_hw(vc4->dev);
+
+ /* We disabled the IRQ as part of vc4_irq_uninstall in suspend. */
+ enable_irq(vc4->dev->irq);
vc4_irq_postinstall(vc4->dev);

return 0;
--
1.9.1


2017-12-30 20:03:29

by Stefan Wahren

[permalink] [raw]
Subject: Re: [PATCH] drm/vc4: Move IRQ enable to PM path


> Stefan Schake <[email protected]> hat am 29. Dezember 2017 um 17:05 geschrieben:
>
>
> We were calling enable_irq on bind, where it was already enabled previously
> by the IRQ helper. Additionally, dev->irq is not set correctly until after
> postinstall and so was always zero here, triggering a warning in 4.15.
> Fix both by moving the enable to the power management resume path, where we
> know there was a previous disable invocation during suspend.
>
> Fixes: 253696ccd613 ("drm/vc4: Account for interrupts in flight")
> Signed-off-by: Stefan Schake <[email protected]>

Tested-by: Stefan Wahren <[email protected]>

2018-01-04 00:28:21

by Eric Anholt

[permalink] [raw]
Subject: Re: [PATCH] drm/vc4: Move IRQ enable to PM path

Stefan Schake <[email protected]> writes:

> We were calling enable_irq on bind, where it was already enabled previously
> by the IRQ helper. Additionally, dev->irq is not set correctly until after
> postinstall and so was always zero here, triggering a warning in 4.15.
> Fix both by moving the enable to the power management resume path, where we
> know there was a previous disable invocation during suspend.
>
> Fixes: 253696ccd613 ("drm/vc4: Account for interrupts in flight")
> Signed-off-by: Stefan Schake <[email protected]>
> ---
> I tested replacing the enable/disable dance with just synchronize_irq,
> but that only made the original kernel OOPS more sporadic.

Reviewed and applied. Thanks!

Somewhere on the infinite TODO list is to stop using the DRM IRQ helpers
and just install our IRQ handler on our own, which I think would have
avoided this trouble.


Attachments:
signature.asc (832.00 B)