[PATCH] drm/msm/dsi: add protection against NULL dsi device
Abhinav Kumar
abhinavk at codeaurora.org
Thu Mar 7 22:02:03 UTC 2019
On 2019-03-07 13:59, Sean Paul wrote:
> On Wed, Mar 06, 2019 at 05:28:54PM -0800, Abhinav Kumar wrote:
>> When panel probe happens after DSI probe, the DSI probe
>> is deferred as per current design. In the probe defer path
>> dsi device is destroyed. This NULL dsi device could be
>> deferenced by the panel probe in the mipi_dsi_attach path.
>>
>> Check for NULL dsi device before accessing it.
>
> It would be really nice to sort all of this out in a manner that's not
> sprinkling NULL checks around the driver. I spent 5 minutes looking
> around and
> couldn't really make sense of how all of these pieces interact, but
> this seems
> like it might be an architectural problem (perhaps since dpu was using
> its own
> panel stuff instead of drm_panel?).
>
> Anyways, it'd be nice to fix that.
>
> In the meantime, could you please add a big comment like the !dev check
> in this
> function explaining how this situation can come to pass? That way the
> knowledge
> isn't lost and whoever comes along to clean up all of these probe
> checks will
> have some clue as to what's going on.
>
> Sean
[Abhinav] Sure Sean, will add a detailed comment to explain the scenario
>
>>
>> Reported-by: Jeffrey Hugo <jhugo at codeaurora.org>
>> Tested-by: Jeffrey Hugo <jhugo at codeaurora.org>
>> Signed-off-by: Abhinav Kumar <abhinavk at codeaurora.org>
>> ---
>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c
>> b/drivers/gpu/drm/msm/dsi/dsi_manager.c
>> index 80aa634..cc2569d 100644
>> --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
>> +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
>> @@ -769,7 +769,7 @@ bool msm_dsi_manager_cmd_xfer_trigger(int id, u32
>> dma_base, u32 len)
>> void msm_dsi_manager_attach_dsi_device(int id, u32 device_flags)
>> {
>> struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
>> - struct drm_device *dev = msm_dsi->dev;
>> + struct drm_device *dev = msm_dsi ? msm_dsi->dev : NULL;
>> struct msm_drm_private *priv;
>> struct msm_kms *kms;
>> struct drm_encoder *encoder;
>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
>> Forum,
>> a Linux Foundation Collaborative Project
>>
More information about the dri-devel
mailing list