On Wed, Feb 11, 2026 at 5:29 AM Pierre-Eric Pelloux-Prayer <[email protected]> wrote: > > 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]> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c | 13 ++++++++++--- > drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.h | 9 +++++++++ > 2 files changed, 19 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c > index 0bf85ab43204..d0af8a294abf 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.c > @@ -387,6 +387,7 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool > skip_vram_check, > { > struct drm_device *dev = adev_to_drm(adev); > struct amdgpu_coredump_info *coredump; > + size_t size = sizeof(*coredump); > struct drm_sched_job *s_job; > u64 total_ring_size, ring_count; > struct amdgpu_ring *ring; > @@ -395,10 +396,10 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool > skip_vram_check, > if (adev->coredump_in_progress) > return; > > - if (adev->coredump_in_progress) > - return; > + if (job && job->pasid) > + size += sizeof(struct amdgpu_coredump_ib_info) * job->num_ibs; > > - coredump = kzalloc(sizeof(*coredump), GFP_NOWAIT); > + coredump = kzalloc(size, GFP_NOWAIT); > if (!coredump) > return; > > @@ -406,6 +407,7 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool > skip_vram_check, > > coredump->skip_vram_check = skip_vram_check; > coredump->reset_vram_lost = vram_lost; > + coredump->pasid = job->pasid; > > if (job && job->pasid) { > struct amdgpu_task_info *ti; > @@ -415,6 +417,11 @@ void amdgpu_coredump(struct amdgpu_device *adev, bool > skip_vram_check, > coredump->reset_task_info = *ti; > amdgpu_vm_put_task_info(ti); > } > + coredump->num_ibs = job->num_ibs; > + for (i = 0; i < job->num_ibs; ++i) { > + coredump->ibs[i].gpu_addr = job->ibs[i].gpu_addr; > + coredump->ibs[i].ib_size_dw = job->ibs[i].length_dw; > + } > } > > if (job) { > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.h > index 1c3d22356cc7..49486d1f6a5d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dev_coredump.h > @@ -38,6 +38,11 @@ struct amdgpu_coredump_ring { > u32 offset; > }; > > +struct amdgpu_coredump_ib_info { > + uint64_t gpu_addr; > + u32 ib_size_dw; > +}; > + > struct amdgpu_coredump_info { > struct amdgpu_device *adev; > struct amdgpu_task_info reset_task_info; > @@ -58,6 +63,10 @@ struct amdgpu_coredump_info { > */ > ssize_t formatted_size; > char *formatted; > + > + unsigned int pasid; > + int num_ibs; > + struct amdgpu_coredump_ib_info ibs[] __counted_by(num_ibs); > }; > #endif > > -- > 2.43.0 >
