Re: [PATCH] drm/meson: fix shutdown crash when component not probed
On 30/04/2021 10:27, Neil Armstrong wrote: > When main component is not probed, by example when the dw-hdmi module is > not loaded yet or in probe defer, the following crash appears on shutdown: > > Unable to handle kernel NULL pointer dereference at virtual address > 0038 > ... > pc : meson_drv_shutdown+0x24/0x50 > lr : platform_drv_shutdown+0x20/0x30 > ... > Call trace: > meson_drv_shutdown+0x24/0x50 > platform_drv_shutdown+0x20/0x30 > device_shutdown+0x158/0x360 > kernel_restart_prepare+0x38/0x48 > kernel_restart+0x18/0x68 > __do_sys_reboot+0x224/0x250 > __arm64_sys_reboot+0x24/0x30 > ... > > Simply check if the priv struct has been allocated before using it. > > Fixes: fa0c16caf3d7 ("drm: meson_drv add shutdown function") > Reported-by: Stefan Agner > Signed-off-by: Neil Armstrong > --- > drivers/gpu/drm/meson/meson_drv.c | 9 + > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/meson/meson_drv.c > b/drivers/gpu/drm/meson/meson_drv.c > index 453d8b4c5763..07fcd12dca16 100644 > --- a/drivers/gpu/drm/meson/meson_drv.c > +++ b/drivers/gpu/drm/meson/meson_drv.c > @@ -485,11 +485,12 @@ static int meson_probe_remote(struct platform_device > *pdev, > static void meson_drv_shutdown(struct platform_device *pdev) > { > struct meson_drm *priv = dev_get_drvdata(>dev); > - struct drm_device *drm = priv->drm; > > - DRM_DEBUG_DRIVER("\n"); > - drm_kms_helper_poll_fini(drm); > - drm_atomic_helper_shutdown(drm); > + if (!priv) > + return; > + > + drm_kms_helper_poll_fini(priv->drm); > + drm_atomic_helper_shutdown(priv->drm); > } > > static int meson_drv_probe(struct platform_device *pdev) > Applied to drm-misc-fixes Neil
Re: [PATCH] drm/meson: fix shutdown crash when component not probed
Hi Martin, On 20/05/2021 22:25, Martin Blumenstingl wrote: > Hi Neil, > > since this has not received any Reviewed-by yet I tried my best to > review it myself > > On Fri, Apr 30, 2021 at 10:28 AM Neil Armstrong > wrote: > [...] >> --- a/drivers/gpu/drm/meson/meson_drv.c >> +++ b/drivers/gpu/drm/meson/meson_drv.c >> @@ -485,11 +485,12 @@ static int meson_probe_remote(struct platform_device >> *pdev, >> static void meson_drv_shutdown(struct platform_device *pdev) >> { >> struct meson_drm *priv = dev_get_drvdata(>dev); > this part made it hard for me because I was wondering where the > matching dev_set_drvdata call is > it turns out platform_set_drvdata is used instead, meaning for me it > would have been easier to understand if platform_get_drvdata was used > here > that's however nothing which has changed with this patch OK sure, indeed, but since it's the same... but yeah it may be an issue if platform_set_drvdata changes. > >> - struct drm_device *drm = priv->drm; >> >> - DRM_DEBUG_DRIVER("\n"); >> - drm_kms_helper_poll_fini(drm); >> - drm_atomic_helper_shutdown(drm); >> + if (!priv) >> + return; >> + >> + drm_kms_helper_poll_fini(priv->drm); >> + drm_atomic_helper_shutdown(priv->drm); >> } > then this part finally made sense to me (as non-drm person), as > platform_set_drvdata comes near the end of meson_drv_bind_master (so > any errors would cause the drvdata to be NULL). > > with this I can also give me: > Reviewed-by: Martin Blumenstingl > in addition to my: > Tested-by: Martin Blumenstingl Thanks ! > > Can you please queue this up for -fixes or do we need to ask someone to do it? Yes, the drm-misc-next & drm-misc-fixes are aleays opened and merged each week in the corresponding drm-next and drm-fixes branches, so we can push patches at anytime without thinking about the merge window (except drm-misc-fixes merged back with -rc1). Neil > > > Best regards, > Martin >
Re: [PATCH] drm/meson: fix shutdown crash when component not probed
Hi Neil, since this has not received any Reviewed-by yet I tried my best to review it myself On Fri, Apr 30, 2021 at 10:28 AM Neil Armstrong wrote: [...] > --- a/drivers/gpu/drm/meson/meson_drv.c > +++ b/drivers/gpu/drm/meson/meson_drv.c > @@ -485,11 +485,12 @@ static int meson_probe_remote(struct platform_device > *pdev, > static void meson_drv_shutdown(struct platform_device *pdev) > { > struct meson_drm *priv = dev_get_drvdata(>dev); this part made it hard for me because I was wondering where the matching dev_set_drvdata call is it turns out platform_set_drvdata is used instead, meaning for me it would have been easier to understand if platform_get_drvdata was used here that's however nothing which has changed with this patch > - struct drm_device *drm = priv->drm; > > - DRM_DEBUG_DRIVER("\n"); > - drm_kms_helper_poll_fini(drm); > - drm_atomic_helper_shutdown(drm); > + if (!priv) > + return; > + > + drm_kms_helper_poll_fini(priv->drm); > + drm_atomic_helper_shutdown(priv->drm); > } then this part finally made sense to me (as non-drm person), as platform_set_drvdata comes near the end of meson_drv_bind_master (so any errors would cause the drvdata to be NULL). with this I can also give me: Reviewed-by: Martin Blumenstingl in addition to my: Tested-by: Martin Blumenstingl Can you please queue this up for -fixes or do we need to ask someone to do it? Best regards, Martin
Re: [PATCH] drm/meson: fix shutdown crash when component not probed
On Fri, Apr 30, 2021 at 10:28 AM Neil Armstrong wrote: > > When main component is not probed, by example when the dw-hdmi module is > not loaded yet or in probe defer, the following crash appears on shutdown: > > Unable to handle kernel NULL pointer dereference at virtual address > 0038 > ... > pc : meson_drv_shutdown+0x24/0x50 > lr : platform_drv_shutdown+0x20/0x30 > ... > Call trace: > meson_drv_shutdown+0x24/0x50 > platform_drv_shutdown+0x20/0x30 > device_shutdown+0x158/0x360 > kernel_restart_prepare+0x38/0x48 > kernel_restart+0x18/0x68 > __do_sys_reboot+0x224/0x250 > __arm64_sys_reboot+0x24/0x30 > ... > > Simply check if the priv struct has been allocated before using it. > > Fixes: fa0c16caf3d7 ("drm: meson_drv add shutdown function") > Reported-by: Stefan Agner > Signed-off-by: Neil Armstrong Tested-by: Martin Blumenstingl ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH] drm/meson: fix shutdown crash when component not probed
When main component is not probed, by example when the dw-hdmi module is not loaded yet or in probe defer, the following crash appears on shutdown: Unable to handle kernel NULL pointer dereference at virtual address 0038 ... pc : meson_drv_shutdown+0x24/0x50 lr : platform_drv_shutdown+0x20/0x30 ... Call trace: meson_drv_shutdown+0x24/0x50 platform_drv_shutdown+0x20/0x30 device_shutdown+0x158/0x360 kernel_restart_prepare+0x38/0x48 kernel_restart+0x18/0x68 __do_sys_reboot+0x224/0x250 __arm64_sys_reboot+0x24/0x30 ... Simply check if the priv struct has been allocated before using it. Fixes: fa0c16caf3d7 ("drm: meson_drv add shutdown function") Reported-by: Stefan Agner Signed-off-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_drv.c | 9 + 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c index 453d8b4c5763..07fcd12dca16 100644 --- a/drivers/gpu/drm/meson/meson_drv.c +++ b/drivers/gpu/drm/meson/meson_drv.c @@ -485,11 +485,12 @@ static int meson_probe_remote(struct platform_device *pdev, static void meson_drv_shutdown(struct platform_device *pdev) { struct meson_drm *priv = dev_get_drvdata(>dev); - struct drm_device *drm = priv->drm; - DRM_DEBUG_DRIVER("\n"); - drm_kms_helper_poll_fini(drm); - drm_atomic_helper_shutdown(drm); + if (!priv) + return; + + drm_kms_helper_poll_fini(priv->drm); + drm_atomic_helper_shutdown(priv->drm); } static int meson_drv_probe(struct platform_device *pdev) -- 2.25.1 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel