Replace the stack-allocated dma_resv in xe_pm_runtime_lockdep_prime() with a dynamically allocated one using dma_resv_alloc(). This aligns with the move away from embedded dma_resv structures and towards reference-counted dynamic allocation.
The lockdep priming function is used to establish lock ordering dependencies between runtime PM and dma_resv locks. The resv is only used temporarily for lockdep annotation and is immediately freed after use with dma_resv_put(). If allocation fails, we silently return since this is optional lockdep annotation that only affects dependency checking, not functional behavior. Signed-off-by: Christian König <[email protected]> Assisted-by: Claude:Sonnet 4 --- drivers/gpu/drm/xe/xe_pm.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c index 99562f691080..33b19bcb6f71 100644 --- a/drivers/gpu/drm/xe/xe_pm.c +++ b/drivers/gpu/drm/xe/xe_pm.c @@ -762,15 +762,20 @@ static void xe_rpm_might_enter_cb(const struct xe_device *xe) */ static void xe_pm_runtime_lockdep_prime(void) { - struct dma_resv lockdep_resv; + struct dma_resv *lockdep_resv; + + lockdep_resv = dma_resv_alloc(); + if (!lockdep_resv) + return; - dma_resv_init(&lockdep_resv); lock_map_acquire(&xe_pm_runtime_d3cold_map); /* D3Cold takes the dma_resv locks to evict bos */ - dma_resv_lock(&lockdep_resv, NULL); - dma_resv_unlock(&lockdep_resv); + dma_resv_lock(lockdep_resv, NULL); + dma_resv_unlock(lockdep_resv); lock_map_release(&xe_pm_runtime_d3cold_map); + dma_resv_put(lockdep_resv); + /* Shrinkers might like to wake up the device under reclaim. */ fs_reclaim_acquire(GFP_KERNEL); lock_map_acquire(&xe_pm_runtime_nod3cold_map); -- 2.43.0
