drm/amdgpu: add recent pagefault info in vm_manager
authorSunil Khatri <sunil.khatri@amd.com>
Thu, 7 Mar 2024 16:01:50 +0000 (21:31 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 20 Mar 2024 17:37:36 +0000 (13:37 -0400)
Currently page fault information is stored per
vm and which could be freed or stale during
reset. Add it pagefault information in the
vm_manager which is a global space for vm's
and remains valid across.

Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h

index 4299ce386322e7cea27232ae05a1222f62f5a850..81fb3465e19757fac0b7981dc83bfeacff47520f 100644 (file)
@@ -2924,6 +2924,14 @@ void amdgpu_vm_update_fault_cache(struct amdgpu_device *adev,
        if (vm && status) {
                vm->fault_info.addr = addr;
                vm->fault_info.status = status;
+               /*
+                * Update the fault information globally for later usage
+                * when vm could be stale or freed.
+                */
+               adev->vm_manager.fault_info.addr = addr;
+               adev->vm_manager.fault_info.vmhub = vmhub;
+               adev->vm_manager.fault_info.status = status;
+
                if (AMDGPU_IS_GFXHUB(vmhub)) {
                        vm->fault_info.vmhub = AMDGPU_VMHUB_TYPE_GFX;
                        vm->fault_info.vmhub |=
index 047ec1930d1243e5a9e0d9fcb03b99d800a6858d..8efa8422f4f7147d89f042259cfbc7c13e0fcd7e 100644 (file)
@@ -422,6 +422,8 @@ struct amdgpu_vm_manager {
         * look up VM of a page fault
         */
        struct xarray                           pasids;
+       /* Global registration of recent page fault information */
+       struct amdgpu_vm_fault_info     fault_info;
 };
 
 struct amdgpu_bo_va_mapping;