[PATCH v6 09/11] drm/amdgpu: validate the shared bo for tracking usage size
Liang, Prike
Prike.Liang at amd.com
Fri Jul 11 13:43:18 UTC 2025
[Public]
> -----Original Message-----
> From: Koenig, Christian <Christian.Koenig at amd.com>
> Sent: Friday, July 11, 2025 8:14 PM
> To: Liang, Prike <Prike.Liang at amd.com>; amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
> Subject: Re: [PATCH v6 09/11] drm/amdgpu: validate the shared bo for tracking
> usage size
>
> On 11.07.25 11:39, Prike Liang wrote:
> > It requires validating the shared BO before updating its usage size;
> > otherwise, there is a potential NULL pointer error when the BO
> > released improperly.
>
> Clear NAK to that. You are obviously working around a bug elsewhere.
Yes, this is a workaround for the userq PT deference imbalance issue and will drop that.
> Regards,
> Christian.
>
> >
> > Signed-off-by: Prike Liang <Prike.Liang at amd.com>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 25 +++++++++++++++++++++----
> > 1 file changed, 21 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> > index f042372d9f2e..a574effdd3ec 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> > @@ -321,12 +321,26 @@ static void amdgpu_vm_bo_reset_state_machine(struct
> amdgpu_vm *vm)
> > */
> > static void amdgpu_vm_update_shared(struct amdgpu_vm_bo_base *base)
> > {
> > - struct amdgpu_vm *vm = base->vm;
> > - struct amdgpu_bo *bo = base->bo;
> > - uint64_t size = amdgpu_bo_size(bo);
> > - uint32_t bo_memtype = amdgpu_bo_mem_stats_placement(bo);
> > + struct amdgpu_vm *vm;
> > + struct amdgpu_bo *bo;
> > + uint64_t size = 0;
> > + uint32_t bo_memtype = TTM_PL_SYSTEM;
> > bool shared;
> >
> > + if (likely(base)) {
> > + vm = base->vm;
> > + bo = base->bo;
> > + } else {
> > + return;
> > + }
> > +
> > + if (likely(bo)) {
> > + size = amdgpu_bo_size(bo);
> > + bo_memtype = amdgpu_bo_mem_stats_placement(bo);
> > + } else {
> > + return;
> > + }
> > +
> > spin_lock(&vm->status_lock);
> > shared = drm_gem_object_is_shared_for_memory_stats(&bo->tbo.base);
> > if (base->shared != shared) {
> > @@ -353,6 +367,9 @@ void amdgpu_vm_bo_update_shared(struct amdgpu_bo
> > *bo) {
> > struct amdgpu_vm_bo_base *base;
> >
> > + if (unlikely(!bo))
> > + return;
> > +
> > for (base = bo->vm_bo; base; base = base->next)
> > amdgpu_vm_update_shared(base);
> > }
More information about the amd-gfx
mailing list