Commit 225d02cb authored by Matthew Brost's avatar Matthew Brost
Browse files

drm/xe: Issue GGTT invalidation under lock in ggtt_node_remove



Async work (e.g., GuC queue teardowns) can call ggtt_node_remove, so the
operation must be performed under the GGTT lock to ensure the GGTT
online check remains stable. GGTT insertion and removal are heavyweight
operations (e.g., queue create/destroy), so the additional serialization
cost is negligible compared to ensuring correctness.

Fixes: 4f3a998a ("drm/xe: Open-code GGTT MMIO access protection")
Signed-off-by: default avatarMatthew Brost <matthew.brost@intel.com>
Reviewed-by: default avatarDnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
Link: https://patch.msgid.link/20260326011207.62373-1-matthew.brost@intel.com
parent 1600b49b
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -481,15 +481,10 @@ static void ggtt_node_remove(struct xe_ggtt_node *node)
		xe_ggtt_clear(ggtt, xe_ggtt_node_addr(node), xe_ggtt_node_size(node));
	drm_mm_remove_node(&node->base);
	node->base.size = 0;
	mutex_unlock(&ggtt->lock);

	if (!bound)
		goto free_node;

	if (node->invalidate_on_remove)
	if (bound && node->invalidate_on_remove)
		xe_ggtt_invalidate(ggtt);
	mutex_unlock(&ggtt->lock);

free_node:
	ggtt_node_fini(node);
}