mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	drm/msm: Fix failure paths in msm_drm_init()
Ensure that we do drm_dev_put() when there is an early return in msm_drm_init(). Signed-off-by: Akhil P Oommen <quic_akhilpo@quicinc.com> Patchwork: https://patchwork.freedesktop.org/patch/515606/ Link: https://lore.kernel.org/r/20221221203925.v2.2.I49dfc3654040be61702e491f1aa63d3a5f308852@changeid Signed-off-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
		
							parent
							
								
									dbeedbcb26
								
							
						
					
					
						commit
						8636500300
					
				
					 2 changed files with 10 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -129,6 +129,9 @@ void msm_disp_snapshot_destroy(struct drm_device *drm_dev)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	priv = drm_dev->dev_private;
 | 
			
		||||
	if (!priv->kms)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	kms = priv->kms;
 | 
			
		||||
 | 
			
		||||
	if (kms->dump_worker)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -150,6 +150,9 @@ static void msm_irq_uninstall(struct drm_device *dev)
 | 
			
		|||
	struct msm_drm_private *priv = dev->dev_private;
 | 
			
		||||
	struct msm_kms *kms = priv->kms;
 | 
			
		||||
 | 
			
		||||
	if (!priv->kms)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	kms->funcs->irq_uninstall(kms);
 | 
			
		||||
	if (kms->irq_requested)
 | 
			
		||||
		free_irq(kms->irq, dev);
 | 
			
		||||
| 
						 | 
				
			
			@ -267,8 +270,6 @@ static int msm_drm_uninit(struct device *dev)
 | 
			
		|||
	component_unbind_all(dev, ddev);
 | 
			
		||||
 | 
			
		||||
	ddev->dev_private = NULL;
 | 
			
		||||
	drm_dev_put(ddev);
 | 
			
		||||
 | 
			
		||||
	destroy_workqueue(priv->wq);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -441,12 +442,12 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 | 
			
		|||
 | 
			
		||||
	ret = msm_init_vram(ddev);
 | 
			
		||||
	if (ret)
 | 
			
		||||
		return ret;
 | 
			
		||||
		goto err_drm_dev_put;
 | 
			
		||||
 | 
			
		||||
	/* Bind all our sub-components: */
 | 
			
		||||
	ret = component_bind_all(dev, ddev);
 | 
			
		||||
	if (ret)
 | 
			
		||||
		return ret;
 | 
			
		||||
		goto err_drm_dev_put;
 | 
			
		||||
 | 
			
		||||
	dma_set_max_seg_size(dev, UINT_MAX);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -541,6 +542,8 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 | 
			
		|||
 | 
			
		||||
err_msm_uninit:
 | 
			
		||||
	msm_drm_uninit(dev);
 | 
			
		||||
err_drm_dev_put:
 | 
			
		||||
	drm_dev_put(ddev);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue