On 13.10.25 10:58, Jesse.Zhang wrote: > The `ttm_resource_manager_usage()` function currently assumes `man->bdev` is > non-NULL when accessing `man->bdev->lru_lock`. > However, in scenarios where the resource manager is not fully initialized > (e.g., APU platforms that lack dedicated VRAM, or incomplete manager setup), > `man->bdev` may remain NULL. This leads to a NULL pointer dereference when > attempting to acquire the `lru_lock`, triggering kernel OOPS. > > Fix this by adding an explicit safety check for `man->bdev` before accessing > its members: > - Use `WARN_ON_ONCE(!man->bdev)` to emit a one-time warning (a soft > assertion) when `man->bdev` is NULL. This helps catch invalid usage patterns > during debugging without breaking production workflows. > - Return 0 immediately if `man->bdev` is NULL, as a non-initialized manager > cannot have valid resource usage to report. > > Suggested-by: Christian König <[email protected]> > Suggested-by: Lijo Lazar <[email protected]> > Signed-off-by: Jesse Zhang <[email protected]>
Reviewed-by: Christian König <[email protected]> @Arun could you push this one to drm-misc-next if nobody objects? Thanks in advance, Christian > --- > drivers/gpu/drm/ttm/ttm_resource.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/gpu/drm/ttm/ttm_resource.c > b/drivers/gpu/drm/ttm/ttm_resource.c > index e2c82ad07eb4..d93d1bef6768 100644 > --- a/drivers/gpu/drm/ttm/ttm_resource.c > +++ b/drivers/gpu/drm/ttm/ttm_resource.c > @@ -587,6 +587,9 @@ uint64_t ttm_resource_manager_usage(struct > ttm_resource_manager *man) > { > uint64_t usage; > > + if (WARN_ON_ONCE(!man->bdev)) > + return 0; > + > spin_lock(&man->bdev->lru_lock); > usage = man->usage; > spin_unlock(&man->bdev->lru_lock);
