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: Christian König <christian.koenig@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4750918978
commit
0291150d3c
|
@ -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,
|
||||
entry->timestamp))
|
||||
return 1; /* This also prevents sending it to KFD */
|
||||
if (retry_fault) {
|
||||
/* Returning 1 here also prevents sending the IV to the KFD */
|
||||
|
||||
/* 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 */
|
||||
/* 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;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
|
|
Loading…
Reference in New Issue