Sorry for the AI slop, it DID not solve the issue.
However, newer kernels show a different error pattern, but only for
waking from hibernate.
I am closing this error and will try to submit a better diagnostic if
able for the current issue.
Thanks
On Fri, 10 Jul 2026 23:20:59 +0200 Olaf Flebbe <of@oflebbe.de> wrote:
> diff --git a/drivers/gpu/drm/ttm/ttm_resource.c
b/drivers/gpu/drm/ttm/ttm_resource.c
> index bfd9c68fcd9c..b065b1aba435 100644
> --- a/drivers/gpu/drm/ttm/ttm_resource.c
> +++ b/drivers/gpu/drm/ttm/ttm_resource.c
> @@ -352,6 +352,7 @@ void ttm_resource_init(struct ttm_buffer_object *bo,
> res->bus.is_iomem = false;
> res->bus.caching = ttm_cached;
> res->bo = bo;
> + res->flags = 0;
>
> man = ttm_manager_type(bo->bdev, place->mem_type);
> spin_lock(&bo->bdev->lru_lock);
> @@ -380,8 +381,11 @@ void ttm_resource_fini(struct
ttm_resource_manager *man,
> struct ttm_device *bdev = man->bdev;
>
> spin_lock(&bdev->lru_lock);
> + if (list_empty(&res->lru.link))
> + goto out;
> list_del_init(&res->lru.link);
> man->usage -= res->size;
> +out:
> spin_unlock(&bdev->lru_lock);
> }
> EXPORT_SYMBOL(ttm_resource_fini);
> @@ -425,17 +429,24 @@ void ttm_resource_free(struct ttm_buffer_object
*bo, struct ttm_resource **res)
> {
> struct ttm_resource_manager *man;
> struct dmem_cgroup_pool_state *pool;
> + struct ttm_resource *resource;
>
> if (!*res)
> return;
>
> + resource = *res;
> + if (test_and_set_bit(TTM_RESOURCE_FLAG_FREED, &resource->flags))
> + return;
> +
> + *res = NULL;
> +
> spin_lock(&bo->bdev->lru_lock);
> - ttm_resource_del_bulk_move(*res, bo);
> + ttm_resource_del_bulk_move(resource, bo);
> spin_unlock(&bo->bdev->lru_lock);
>
> - pool = (*res)->css;
> - man = ttm_manager_type(bo->bdev, (*res)->mem_type);
> - man->func->free(man, *res);
> + pool = resource->css;
> + man = ttm_manager_type(bo->bdev, resource->mem_type);
> + man->func->free(man, resource);
> *res = NULL;
> if (man->cg)
> dmem_cgroup_uncharge(pool, bo->base.size);
> diff --git a/include/drm/ttm/ttm_resource.h
b/include/drm/ttm/ttm_resource.h
> index a5d386583fb6..1a58c0c000c5 100644
> --- a/include/drm/ttm/ttm_resource.h
> +++ b/include/drm/ttm/ttm_resource.h
> @@ -30,6 +30,7 @@
> #include <linux/mutex.h>
> #include <linux/iosys-map.h>