diff options
author | Andrey Grodzovsky <andrey.grodzovsky@amd.com> | 2018-06-28 22:55:27 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-07-10 15:17:37 -0400 |
commit | efaa96463929684ceca4be96d0959e9ced1fa093 (patch) | |
tree | fa714819d6b888f1b867bfbaf45575d961799e6e | |
parent | 2aa37bf58838fd0251e0e6819767ffc8a83eac38 (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.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 9 |
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 | ||
192 | free_all_kdata: | 196 | free_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 | |||
48 | static void gmc_v8_0_set_gmc_funcs(struct amdgpu_device *adev); | 47 | static void gmc_v8_0_set_gmc_funcs(struct amdgpu_device *adev); |
49 | static void gmc_v8_0_set_irq_funcs(struct amdgpu_device *adev); | 48 | static void gmc_v8_0_set_irq_funcs(struct amdgpu_device *adev); |
50 | static int gmc_v8_0_wait_for_idle(void *handle); | 49 | static 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)) |