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); > + } > +}
