Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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 <pierre-eric.pelloux-prayer@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Pierre-Eric Pelloux-Prayer and committed by
Alex Deucher
32ab301b 1b135c6d

+20 -1
+11 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c
··· 401 401 { 402 402 struct drm_device *dev = adev_to_drm(adev); 403 403 struct amdgpu_coredump_info *coredump; 404 + size_t size = sizeof(*coredump); 404 405 struct drm_sched_job *s_job; 405 406 u64 total_ring_size, ring_count; 406 407 struct amdgpu_ring *ring; ··· 411 410 if (work_pending(&adev->coredump_work)) 412 411 return; 413 412 414 - coredump = kzalloc_obj(*coredump, GFP_NOWAIT); 413 + if (job && job->pasid) 414 + size += sizeof(struct amdgpu_coredump_ib_info) * job->num_ibs; 415 + 416 + coredump = kzalloc(size, GFP_NOWAIT); 415 417 if (!coredump) 416 418 return; 417 419 418 420 coredump->skip_vram_check = skip_vram_check; 419 421 coredump->reset_vram_lost = vram_lost; 422 + coredump->pasid = job->pasid; 420 423 421 424 if (job && job->pasid) { 422 425 struct amdgpu_task_info *ti; ··· 429 424 if (ti) { 430 425 coredump->reset_task_info = *ti; 431 426 amdgpu_vm_put_task_info(ti); 427 + } 428 + coredump->num_ibs = job->num_ibs; 429 + for (i = 0; i < job->num_ibs; ++i) { 430 + coredump->ibs[i].gpu_addr = job->ibs[i].gpu_addr; 431 + coredump->ibs[i].ib_size_dw = job->ibs[i].length_dw; 432 432 } 433 433 } 434 434
+9
drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.h
··· 38 38 u32 offset; 39 39 }; 40 40 41 + struct amdgpu_coredump_ib_info { 42 + uint64_t gpu_addr; 43 + u32 ib_size_dw; 44 + }; 45 + 41 46 struct amdgpu_coredump_info { 42 47 struct amdgpu_device *adev; 43 48 struct amdgpu_task_info reset_task_info; ··· 61 56 */ 62 57 ssize_t formatted_size; 63 58 char *formatted; 59 + 60 + unsigned int pasid; 61 + int num_ibs; 62 + struct amdgpu_coredump_ib_info ibs[] __counted_by(num_ibs); 64 63 }; 65 64 #endif 66 65