Skip to content

Commit 32ab301

Browse files
peppsacalexdeucher
authored andcommitted
drm/amdgpu: store ib info for devcoredump
Store the basic state of IBs so we can read it back in the amdgpu_devcoredump_format function. Signed-off-by: Pierre-Eric Pelloux-Prayer <[email protected]> Reviewed-by: Alex Deucher <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 1b135c6 commit 32ab301

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
401401
{
402402
struct drm_device *dev = adev_to_drm(adev);
403403
struct amdgpu_coredump_info *coredump;
404+
size_t size = sizeof(*coredump);
404405
struct drm_sched_job *s_job;
405406
u64 total_ring_size, ring_count;
406407
struct amdgpu_ring *ring;
@@ -410,12 +411,16 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
410411
if (work_pending(&adev->coredump_work))
411412
return;
412413

413-
coredump = kzalloc_obj(*coredump, GFP_NOWAIT);
414+
if (job && job->pasid)
415+
size += sizeof(struct amdgpu_coredump_ib_info) * job->num_ibs;
416+
417+
coredump = kzalloc(size, GFP_NOWAIT);
414418
if (!coredump)
415419
return;
416420

417421
coredump->skip_vram_check = skip_vram_check;
418422
coredump->reset_vram_lost = vram_lost;
423+
coredump->pasid = job->pasid;
419424

420425
if (job && job->pasid) {
421426
struct amdgpu_task_info *ti;
@@ -425,6 +430,11 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool skip_vram_check,
425430
coredump->reset_task_info = *ti;
426431
amdgpu_vm_put_task_info(ti);
427432
}
433+
coredump->num_ibs = job->num_ibs;
434+
for (i = 0; i < job->num_ibs; ++i) {
435+
coredump->ibs[i].gpu_addr = job->ibs[i].gpu_addr;
436+
coredump->ibs[i].ib_size_dw = job->ibs[i].length_dw;
437+
}
428438
}
429439

430440
if (job) {

drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ struct amdgpu_coredump_ring {
3838
u32 offset;
3939
};
4040

41+
struct amdgpu_coredump_ib_info {
42+
uint64_t gpu_addr;
43+
u32 ib_size_dw;
44+
};
45+
4146
struct amdgpu_coredump_info {
4247
struct amdgpu_device *adev;
4348
struct amdgpu_task_info reset_task_info;
@@ -56,6 +61,10 @@ struct amdgpu_coredump_info {
5661
*/
5762
ssize_t formatted_size;
5863
char *formatted;
64+
65+
unsigned int pasid;
66+
int num_ibs;
67+
struct amdgpu_coredump_ib_info ibs[] __counted_by(num_ibs);
5968
};
6069
#endif
6170

0 commit comments

Comments
 (0)