aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Grodzovsky <andrey.grodzovsky@amd.com>2018-06-28 22:55:27 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-07-10 15:17:37 -0400
commitefaa96463929684ceca4be96d0959e9ced1fa093 (patch)
treefa714819d6b888f1b867bfbaf45575d961799e6e
parent2aa37bf58838fd0251e0e6819767ffc8a83eac38 (diff)
drm/amdgpu: Present amdgpu_task_info in VM_FAULTS.
Extract and present the reposnsible process and thread when VM_FAULT happens. v2: Use getter and setter functions. Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Acked-by: Jim Qu <Jim.Qu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c9
3 files changed, 18 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 1bc02816989d..9881a1e55df3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -187,6 +187,10 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
187 if (p->uf_entry.robj) 187 if (p->uf_entry.robj)
188 p->job->uf_addr = uf_offset; 188 p->job->uf_addr = uf_offset;
189 kfree(chunk_array); 189 kfree(chunk_array);
190
191 /* Use this opportunity to fill in task info for the vm */
192 amdgpu_vm_set_task_info(vm);
193
190 return 0; 194 return 0;
191 195
192free_all_kdata: 196free_all_kdata:
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index 1edbe6b477b5..a86332f36c3e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -44,7 +44,6 @@
44 44
45#include "amdgpu_atombios.h" 45#include "amdgpu_atombios.h"
46 46
47
48static void gmc_v8_0_set_gmc_funcs(struct amdgpu_device *adev); 47static void gmc_v8_0_set_gmc_funcs(struct amdgpu_device *adev);
49static void gmc_v8_0_set_irq_funcs(struct amdgpu_device *adev); 48static void gmc_v8_0_set_irq_funcs(struct amdgpu_device *adev);
50static int gmc_v8_0_wait_for_idle(void *handle); 49static int gmc_v8_0_wait_for_idle(void *handle);
@@ -1447,8 +1446,13 @@ static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev,
1447 gmc_v8_0_set_fault_enable_default(adev, false); 1446 gmc_v8_0_set_fault_enable_default(adev, false);
1448 1447
1449 if (printk_ratelimit()) { 1448 if (printk_ratelimit()) {
1450 dev_err(adev->dev, "GPU fault detected: %d 0x%08x\n", 1449 struct amdgpu_task_info task_info = { 0 };
1451 entry->src_id, entry->src_data[0]); 1450
1451 amdgpu_vm_get_task_info(adev, entry->pasid, &task_info);
1452
1453 dev_err(adev->dev, "GPU fault detected: %d 0x%08x for process %s pid %d thread %s pid %d\n",
1454 entry->src_id, entry->src_data[0], task_info.process_name,
1455 task_info.tgid, task_info.task_name, task_info.pid);
1452 dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n", 1456 dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n",
1453 addr); 1457 addr);
1454 dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", 1458 dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 3c0a85d4e4ab..7f238149ba54 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -257,11 +257,16 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev,
257 } 257 }
258 258
259 if (printk_ratelimit()) { 259 if (printk_ratelimit()) {
260 struct amdgpu_task_info task_info = { 0 };
261
262 amdgpu_vm_get_task_info(adev, entry->pasid, &task_info);
263
260 dev_err(adev->dev, 264 dev_err(adev->dev,
261 "[%s] VMC page fault (src_id:%u ring:%u vmid:%u pasid:%u)\n", 265 "[%s] VMC page fault (src_id:%u ring:%u vmid:%u pasid:%u, for process %s pid %d thread %s pid %d\n)\n",
262 entry->vmid_src ? "mmhub" : "gfxhub", 266 entry->vmid_src ? "mmhub" : "gfxhub",
263 entry->src_id, entry->ring_id, entry->vmid, 267 entry->src_id, entry->ring_id, entry->vmid,
264 entry->pasid); 268 entry->pasid, task_info.process_name, task_info.tgid,
269 task_info.task_name, task_info.pid);
265 dev_err(adev->dev, " at page 0x%016llx from %d\n", 270 dev_err(adev->dev, " at page 0x%016llx from %d\n",
266 addr, entry->client_id); 271 addr, entry->client_id);
267 if (!amdgpu_sriov_vf(adev)) 272 if (!amdgpu_sriov_vf(adev))