drm_bridge_clear_and_put() is simpler to write and it prevents any potential future use-after-free.
Unified · Split
| @@ -1988,9 +1988,7 @@ of_find_panel_or_bridge: · 1987 unmodified lines | |||
| 1988 | return 0; | 1988 | return 0; |
| 1989 | 1989 | ||
| 1990 | err_release_next_bridge: | 1990 | err_release_next_bridge: |
| 1991 | drm_bridge_put(dsi->bridge.next_bridge); | 1991 | drm_bridge_clear_and_put(&dsi->bridge.next_bridge); |
| 1992 | dsi->bridge.next_bridge = NULL; | ||
| 1993 | |||
| 1994 | if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO)) | 1992 | if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO)) |
| 1995 | samsung_dsim_unregister_te_irq(dsi); | 1993 | samsung_dsim_unregister_te_irq(dsi); |
| 1996 | err_remove_bridge: | 1994 | err_remove_bridge: |
| @@ -2007,8 +2005,7 @@ static int samsung_dsim_host_detach(struct mipi_dsi_host *host, · 10 unmodified lines | |||
| 2007 | if (pdata->host_ops && pdata->host_ops->detach) | 2005 | if (pdata->host_ops && pdata->host_ops->detach) |
| 2008 | pdata->host_ops->detach(dsi, device); | 2006 | pdata->host_ops->detach(dsi, device); |
| 2009 | 2007 | ||
| 2010 | drm_bridge_put(dsi->bridge.next_bridge); | 2008 | drm_bridge_clear_and_put(&dsi->bridge.next_bridge); |
| 2011 | dsi->bridge.next_bridge = NULL; | ||
| 2012 | 2009 | ||
| 2013 | samsung_dsim_unregister_te_irq(dsi); | 2010 | samsung_dsim_unregister_te_irq(dsi); |
| 2014 | 2011 | ||