forked from mirrors/linux
		
	drm/amdgpu: fix gart.bo pin_count leak
gmc_v{9,10}_0_gart_disable() isn't called matched with
correspoding gart_enbale function in SRIOV case. This will
lead to gart.bo pin_count leak on driver unload.
Cc: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Leslie Shi <Yuliang.Shi@amd.com>
Signed-off-by: Guchun Chen <guchun.chen@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
			
			
This commit is contained in:
		
							parent
							
								
									05812b971c
								
							
						
					
					
						commit
						66805763a9
					
				
					 2 changed files with 4 additions and 2 deletions
				
			
		| 
						 | 
					@ -1098,6 +1098,8 @@ static int gmc_v10_0_hw_fini(void *handle)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 | 
						struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						gmc_v10_0_gart_disable(adev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (amdgpu_sriov_vf(adev)) {
 | 
						if (amdgpu_sriov_vf(adev)) {
 | 
				
			||||||
		/* full access mode, so don't touch any GMC register */
 | 
							/* full access mode, so don't touch any GMC register */
 | 
				
			||||||
		DRM_DEBUG("For SRIOV client, shouldn't do anything.\n");
 | 
							DRM_DEBUG("For SRIOV client, shouldn't do anything.\n");
 | 
				
			||||||
| 
						 | 
					@ -1106,7 +1108,6 @@ static int gmc_v10_0_hw_fini(void *handle)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
 | 
						amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
 | 
				
			||||||
	amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 | 
						amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 | 
				
			||||||
	gmc_v10_0_gart_disable(adev);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1794,6 +1794,8 @@ static int gmc_v9_0_hw_fini(void *handle)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 | 
						struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						gmc_v9_0_gart_disable(adev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (amdgpu_sriov_vf(adev)) {
 | 
						if (amdgpu_sriov_vf(adev)) {
 | 
				
			||||||
		/* full access mode, so don't touch any GMC register */
 | 
							/* full access mode, so don't touch any GMC register */
 | 
				
			||||||
		DRM_DEBUG("For SRIOV client, shouldn't do anything.\n");
 | 
							DRM_DEBUG("For SRIOV client, shouldn't do anything.\n");
 | 
				
			||||||
| 
						 | 
					@ -1802,7 +1804,6 @@ static int gmc_v9_0_hw_fini(void *handle)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
 | 
						amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
 | 
				
			||||||
	amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 | 
						amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 | 
				
			||||||
	gmc_v9_0_gart_disable(adev);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue