drm/xe: Fix NPD in ggtt_node_remove()
authorHimal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Wed, 28 Aug 2024 09:22:29 +0000 (14:52 +0530)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Wed, 28 Aug 2024 17:15:40 +0000 (13:15 -0400)
Make sure that ggtt_node_remove() is invoked only if both node and ggtt
are not null. Move the null checks to the caller function
xe_ggtt_node_remove().

v2: Move null check below declarations (Tejas)

Fixes: 919bb54e989c ("drm/xe: Fix missing runtime outer protection for ggtt_remove_node")
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240828092229.3606503-1-himal.prasad.ghimiray@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_ggtt.c

index 86fc6afa43bd9c69e2d55d17076951dd7d40e07b..f3fca5565d320690c73bfd54fa02c3913bdb016c 100644 (file)
@@ -286,9 +286,6 @@ static void ggtt_node_remove(struct xe_ggtt_node *node)
        bool bound;
        int idx;
 
-       if (!node || !node->ggtt)
-               return;
-
        bound = drm_dev_enter(&xe->drm, &idx);
 
        mutex_lock(&ggtt->lock);
@@ -328,8 +325,14 @@ static void ggtt_node_remove_work_func(struct work_struct *work)
  */
 void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate)
 {
-       struct xe_ggtt *ggtt = node->ggtt;
-       struct xe_device *xe = tile_to_xe(ggtt->tile);
+       struct xe_ggtt *ggtt;
+       struct xe_device *xe;
+
+       if (!node || !node->ggtt)
+               return;
+
+       ggtt = node->ggtt;
+       xe = tile_to_xe(ggtt->tile);
 
        node->invalidate_on_remove = invalidate;