On Wed, Feb 11, 2026 at 12:22 AM Boris Brezillon
<[email protected]> wrote:
[...]
> +void panthor_vm_update_bo_reclaim_lru_locked(struct panthor_gem_object *bo)
> +{
> +       struct panthor_device *ptdev = container_of(bo->base.dev, struct 
> panthor_device, base);
> +       struct panthor_vm *vm = NULL;
> +       struct drm_gpuvm_bo *vm_bo;
> +
> +       dma_resv_assert_held(bo->base.resv);
> +       lockdep_assert_held(&bo->base.gpuva.lock);
> +
> +       drm_gem_for_each_gpuvm_bo(vm_bo, &bo->base) {
> +               /* We're only supposed to have one vm_bo in the list if we 
> get there. */
A bo that is validated in one vm but evicted in another is considered
PANTHOR_GEM_GPU_MAPPED_PRIVATE by is_gpu_mapped. We should check for
vm_bo->evicted too.


> +               drm_WARN_ON(&ptdev->base, vm);
> +               vm = container_of(vm_bo->vm, struct panthor_vm, base);
> +
> +               mutex_lock(&ptdev->reclaim.lock);
> +               drm_gem_lru_move_tail_locked(&vm->reclaim.lru, &bo->base);
> +               if (list_empty(&vm->reclaim.lru_node))
> +                       list_move(&vm->reclaim.lru_node, &ptdev->reclaim.vms);
> +               mutex_unlock(&ptdev->reclaim.lock);
> +       }
> +}

Reply via email to