Commit 0291150d authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/amdgpu: make sure retry faults are handled in a work item on Vega



Looks like we can't enabled the IH1/IH2 feature for Vega20, make sure
retry faults are handled on a separate ring anyway.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 47509189
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -525,14 +525,29 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev,
	addr = (u64)entry->src_data[0] << 12;
	addr |= ((u64)entry->src_data[1] & 0xf) << 44;

	if (retry_fault && amdgpu_gmc_filter_faults(adev, addr, entry->pasid,
	if (retry_fault) {
		/* Returning 1 here also prevents sending the IV to the KFD */

		/* Process it onyl if it's the first fault for this address */
		if (entry->ih != &adev->irq.ih_soft &&
		    amdgpu_gmc_filter_faults(adev, addr, entry->pasid,
					     entry->timestamp))
		return 1; /* This also prevents sending it to KFD */
			return 1;

		/* Delegate it to a different ring if the hardware hasn't
		 * already done it.
		 */
		if (in_interrupt()) {
			amdgpu_irq_delegate(adev, entry, 8);
			return 1;
		}

	/* If it's the first fault for this address, process it normally */
	if (retry_fault && !in_interrupt() &&
	    amdgpu_vm_handle_fault(adev, entry->pasid, addr))
		return 1; /* This also prevents sending it to KFD */
		/* Try to handle the recoverable page faults by filling page
		 * tables
		 */
		if (amdgpu_vm_handle_fault(adev, entry->pasid, addr))
			return 1;
	}

	if (!printk_ratelimit())
		return 0;