Re: [PATCH] drm/xe/pm: do not warn about missing runtime PM protection after hot-unplug

Matthew Auld <[email protected]> Thu, 30 Jul 2026 13:35:10 +0100
Newsgroups org.freedesktop.lists.intel-xe
Message-ID <[email protected]>
On 30/07/2026 06:36, Nitin Gote wrote:
> After hot-unplug, device_del() disables runtime PM. A deferred fd close
> can still run later during process exit and destroy remaining exec queues,
> which may call xe_pm_runtime_get_noresume().
> 
> At this point pm_runtime_get_if_in_use() fails because runtime PM has
> already been disabled, so xe_pm_runtime_get_noresume() warns with
> "Missing outer runtime PM protection". This is expected after hot-unplug
> and does not indicate a missing outer runtime PM guard from the caller.

Is the code that calls xe_pm_runtime_get_noresume(), not trying to 
protect some kind of hw access to ensure the device stays awake? I think 
post unplug hw access is not allowed outside of the devm teardown 
sequence. Did you also double check that where this fires, we don't then 
touch the hw?

> 
> Skip the warning when the DRM device is already unplugged.
> 
> Observed with new IGT core_hotunplug subtests:
>    igt@core_hotunplug@hotreplug-with-load
>    igt@core_hotunplug@hotunplug-rescan-with-load
> 
> v2: Drop the drm_dev_is_unplugged() bypass from guc_exec_queue_destroy()
>      and instead exclude hot-unplug from the WARN in
>      xe_pm_runtime_get_noresume(). (Matthew Brost)
> 
> Link: https://patchwork.freedesktop.org/patch/725773/?series=166744&rev=4
> Cc: Matthew Brost <[email protected]>
> Cc: Matthew Auld <[email protected]>
> Assisted-by: GitHub-Copilot:claude-sonnet-4.6
> Signed-off-by: Nitin Gote <[email protected]>
> ---
>   drivers/gpu/drm/xe/xe_pm.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c
> index a5289a9df8d2..a038687d5b2c 100644
> --- a/drivers/gpu/drm/xe/xe_pm.c
> +++ b/drivers/gpu/drm/xe/xe_pm.c
> @@ -10,6 +10,7 @@
>   #include <linux/suspend.h>
>   #include <linux/dmi.h>
>   
> +#include <drm/drm_drv.h>
>   #include <drm/drm_managed.h>
>   #include <drm/ttm/ttm_placement.h>
>   
> @@ -914,7 +915,9 @@ void xe_pm_runtime_get_noresume(struct xe_device *xe)
>   
>   	if (!ref) {
>   		pm_runtime_get_noresume(xe->drm.dev);
> -		drm_WARN(&xe->drm, !xe_pm_suspending_or_resuming(xe),
> +		drm_WARN(&xe->drm,
> +			 !drm_dev_is_unplugged(&xe->drm) &&
> +			 !xe_pm_suspending_or_resuming(xe),
>   			 "Missing outer runtime PM protection\n");
>   	}
>   }