Commit 2e8ef6a5 authored by Alex Deucher's avatar Alex Deucher

drm/amdgpu: add cached GPU fault structure to vm struct

When we get a GPU page fault, cache the fault for later
analysis.

Cc: samuel.pitoiset@gmail.com
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Acked-by: default avatarGuchun Chen <guchun.chen@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ec4d770b
......@@ -2730,3 +2730,34 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m)
total_done_objs);
}
#endif
/**
* amdgpu_vm_update_fault_cache - update cached fault into.
* @adev: amdgpu device pointer
* @pasid: PASID of the VM
* @addr: Address of the fault
* @status: GPUVM fault status register
* @vmhub: which vmhub got the fault
*
* Cache the fault info for later use by userspace in debugging.
*/
void amdgpu_vm_update_fault_cache(struct amdgpu_device *adev,
unsigned int pasid,
uint64_t addr,
uint32_t status,
unsigned int vmhub)
{
struct amdgpu_vm *vm;
unsigned long flags;
xa_lock_irqsave(&adev->vm_manager.pasids, flags);
vm = xa_load(&adev->vm_manager.pasids, pasid);
if (vm) {
vm->fault_info.addr = addr;
vm->fault_info.status = status;
vm->fault_info.vmhub = vmhub;
}
xa_unlock_irqrestore(&adev->vm_manager.pasids, flags);
}
......@@ -252,6 +252,15 @@ struct amdgpu_vm_update_funcs {
struct dma_fence **fence);
};
struct amdgpu_vm_fault_info {
/* fault address */
uint64_t addr;
/* fault status register */
uint32_t status;
/* which vmhub? gfxhub, mmhub, etc. */
unsigned int vmhub;
};
struct amdgpu_vm {
/* tree of virtual addresses mapped */
struct rb_root_cached va;
......@@ -343,6 +352,9 @@ struct amdgpu_vm {
/* Memory partition number, -1 means any partition */
int8_t mem_id;
/* cached fault info */
struct amdgpu_vm_fault_info fault_info;
};
struct amdgpu_vm_manager {
......@@ -554,4 +566,10 @@ static inline void amdgpu_vm_eviction_unlock(struct amdgpu_vm *vm)
mutex_unlock(&vm->eviction_lock);
}
void amdgpu_vm_update_fault_cache(struct amdgpu_device *adev,
unsigned int pasid,
uint64_t addr,
uint32_t status,
unsigned int vmhub);
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment