Skip to content

drm/msm: use correct lifetime devices for devm_drm_bridge_add

Dmitry Baryshkov requested to merge lumag/msm-old:msm-next-lumag into msm-next

While reworking the drm/msm driver to use devm_drm_bridge_add() I didn't notice that the drm_bridge instances are allocated with the drm_device used as a lifetime parameter instead of corresponding platform_device. This mostly works fine, in rare cases of device reprobing resulting in the oops such as the following:

Call trace:
 of_drm_find_bridge+0x54/0xa4
 drm_of_find_panel_or_bridge+0xb8/0xdc
 devm_drm_of_get_bridge+0x3c/0x8c
 msm_dsi_manager_ext_bridge_init+0x4c/0x19c
 msm_dsi_modeset_init+0x70/0x118
 _dpu_kms_drm_obj_init+0xec/0x6f0
 dpu_kms_hw_init+0x310/0x458
 msm_drm_kms_init+0x84/0x328
 msm_drm_bind+0x230/0x43c
 try_to_bring_up_aggregate_device+0x164/0x1d0
 __component_add+0xa8/0x170
 component_add+0x14/0x20
 dsi_dev_attach+0x20/0x2c
 dsi_host_attach+0x9c/0x144
 devm_mipi_dsi_attach+0x34/0xb4
 lt9611uxc_attach_dsi.isra.0+0x84/0xfc
 lt9611uxc_probe+0x5ac/0x66c
 i2c_device_probe+0x148/0x290
 really_probe+0x148/0x2ac
 __driver_probe_device+0x78/0x12c
 driver_probe_device+0x3c/0x160
 __device_attach_driver+0xb8/0x138
 bus_for_each_drv+0x80/0xdc
 __device_attach+0x9c/0x188
 device_initial_probe+0x14/0x20
 bus_probe_device+0xac/0xb0
 deferred_probe_work_func+0x8c/0xc8
 process_one_work+0x1ec/0x51c
 worker_thread+0x1ec/0x3e4
 kthread+0x120/0x124
 ret_from_fork+0x10/0x20
Edited by Rob Clark

Merge request reports