diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 12 | 
1 files changed, 10 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c index 69a6b6dba0a5..1d155463d044 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c @@ -1989,6 +1989,7 @@ void amdgpu_gfx_enforce_isolation_ring_begin_use(struct amdgpu_ring *ring)  {  	struct amdgpu_device *adev = ring->adev;  	u32 idx; +	bool sched_work = false;  	if (!adev->gfx.enable_cleaner_shader)  		return; @@ -2007,15 +2008,19 @@ void amdgpu_gfx_enforce_isolation_ring_begin_use(struct amdgpu_ring *ring)  	mutex_lock(&adev->enforce_isolation_mutex);  	if (adev->enforce_isolation[idx]) {  		if (adev->kfd.init_complete) -			amdgpu_gfx_kfd_sch_ctrl(adev, idx, false); +			sched_work = true;  	}  	mutex_unlock(&adev->enforce_isolation_mutex); + +	if (sched_work) +		amdgpu_gfx_kfd_sch_ctrl(adev, idx, false);  }  void amdgpu_gfx_enforce_isolation_ring_end_use(struct amdgpu_ring *ring)  {  	struct amdgpu_device *adev = ring->adev;  	u32 idx; +	bool sched_work = false;  	if (!adev->gfx.enable_cleaner_shader)  		return; @@ -2031,9 +2036,12 @@ void amdgpu_gfx_enforce_isolation_ring_end_use(struct amdgpu_ring *ring)  	mutex_lock(&adev->enforce_isolation_mutex);  	if (adev->enforce_isolation[idx]) {  		if (adev->kfd.init_complete) -			amdgpu_gfx_kfd_sch_ctrl(adev, idx, true); +			sched_work = true;  	}  	mutex_unlock(&adev->enforce_isolation_mutex); + +	if (sched_work) +		amdgpu_gfx_kfd_sch_ctrl(adev, idx, true);  }  /* | 
