Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f9d4084 authored by Monk Liu's avatar Monk Liu Committed by Alex Deucher
Browse files

drm/amdgpu:cleanup force_completion



cleanups, now only operate on the given ring

Signed-off-by: default avatarMonk Liu <Monk.Liu@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d1f6dc1a
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -2872,7 +2872,7 @@ int amdgpu_sriov_gpu_reset(struct amdgpu_device *adev, struct amdgpu_job *job)
		amd_sched_hw_job_reset(&ring->sched);

		/* after all hw jobs are reset, hw fence is meaningless, so force_completion */
		amdgpu_fence_driver_force_completion_ring(ring);
		amdgpu_fence_driver_force_completion(ring);
	}

	/* request to take full control of GPU before re-initialization  */
@@ -2991,9 +2991,9 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev)
			continue;
		kthread_park(ring->sched.thread);
		amd_sched_hw_job_reset(&ring->sched);
	}
		/* after all hw jobs are reset, hw fence is meaningless, so force_completion */
	amdgpu_fence_driver_force_completion(adev);
		amdgpu_fence_driver_force_completion(ring);
	}

	need_full_reset = amdgpu_need_full_reset(adev);

+7 −22
Original line number Diff line number Diff line
@@ -499,7 +499,7 @@ void amdgpu_fence_driver_fini(struct amdgpu_device *adev)
		r = amdgpu_fence_wait_empty(ring);
		if (r) {
			/* no need to trigger GPU reset as we are unloading */
			amdgpu_fence_driver_force_completion(adev);
			amdgpu_fence_driver_force_completion(ring);
		}
		amdgpu_irq_put(adev, ring->fence_drv.irq_src,
			       ring->fence_drv.irq_type);
@@ -534,7 +534,7 @@ void amdgpu_fence_driver_suspend(struct amdgpu_device *adev)
		r = amdgpu_fence_wait_empty(ring);
		if (r) {
			/* delay GPU reset to resume */
			amdgpu_fence_driver_force_completion(adev);
			amdgpu_fence_driver_force_completion(ring);
		}

		/* disable the interrupt */
@@ -571,30 +571,15 @@ void amdgpu_fence_driver_resume(struct amdgpu_device *adev)
}

/**
 * amdgpu_fence_driver_force_completion - force all fence waiter to complete
 * amdgpu_fence_driver_force_completion - force signal latest fence of ring
 *
 * @adev: amdgpu device pointer
 * @ring: fence of the ring to signal
 *
 * In case of GPU reset failure make sure no process keep waiting on fence
 * that will never complete.
 */
void amdgpu_fence_driver_force_completion(struct amdgpu_device *adev)
{
	int i;

	for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
		struct amdgpu_ring *ring = adev->rings[i];
		if (!ring || !ring->fence_drv.initialized)
			continue;

		amdgpu_fence_write(ring, ring->fence_drv.sync_seq);
	}
}

void amdgpu_fence_driver_force_completion_ring(struct amdgpu_ring *ring)
void amdgpu_fence_driver_force_completion(struct amdgpu_ring *ring)
{
	if (ring)
	amdgpu_fence_write(ring, ring->fence_drv.sync_seq);
	amdgpu_fence_process(ring);
}

/*
+1 −2
Original line number Diff line number Diff line
@@ -79,8 +79,7 @@ struct amdgpu_fence_driver {

int amdgpu_fence_driver_init(struct amdgpu_device *adev);
void amdgpu_fence_driver_fini(struct amdgpu_device *adev);
void amdgpu_fence_driver_force_completion(struct amdgpu_device *adev);
void amdgpu_fence_driver_force_completion_ring(struct amdgpu_ring *ring);
void amdgpu_fence_driver_force_completion(struct amdgpu_ring *ring);

int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring,
				  unsigned num_hw_submission);