drm/xe/pf: Fix xe_gt_sriov_pf_config_print_available_ggtt()
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Fri, 19 Apr 2024 14:10:00 +0000 (16:10 +0200)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Mon, 22 Apr 2024 17:50:47 +0000 (19:50 +0200)
This function is using internal helper pf_get_spare_ggtt() that
expects PF's master mutex to be locked. Fix that.

Fixes: ac6598aed1b3 ("drm/xe/pf: Add support to configure SR-IOV VFs")
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Piotr Piórkowski <piotr.piorkowski@intel.com>
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240419141000.314-1-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c

index 0f56148777701ec09e9fc53a2f4c4ad597ccf5e8..79116ad58620411a060b4a21dd085ce246e02e51 100644 (file)
@@ -1932,14 +1932,17 @@ int xe_gt_sriov_pf_config_print_available_ggtt(struct xe_gt *gt, struct drm_prin
        const struct drm_mm *mm = &ggtt->mm;
        const struct drm_mm_node *entry;
        u64 alignment = pf_get_ggtt_alignment(gt);
-       u64 spare = pf_get_spare_ggtt(gt);
        u64 hole_min_start = xe_wopcm_size(gt_to_xe(gt));
        u64 hole_start, hole_end, hole_size;
-       u64 avail, total = 0;
+       u64 spare, avail, total = 0;
        char buf[10];
 
        xe_gt_assert(gt, IS_SRIOV_PF(gt_to_xe(gt)));
 
+       mutex_lock(xe_gt_sriov_pf_master_mutex(gt));
+
+       spare = pf_get_spare_ggtt(gt);
+
        mutex_lock(&ggtt->lock);
 
        drm_mm_for_each_hole(entry, mm, hole_start, hole_end) {
@@ -1957,6 +1960,7 @@ int xe_gt_sriov_pf_config_print_available_ggtt(struct xe_gt *gt, struct drm_prin
        }
 
        mutex_unlock(&ggtt->lock);
+       mutex_unlock(xe_gt_sriov_pf_master_mutex(gt));
 
        string_get_size(total, 1, STRING_UNITS_2, buf, sizeof(buf));
        drm_printf(p, "total:\t%llu\t(%s)\n", total, buf);