[PATCH 4/9] drm/xe/xe_gt: Always call xe_force_wake_put/get in pairs
Nirmoy Das
nirmoy.das at intel.com
Tue Jun 4 11:02:20 UTC 2024
xe_force_wake_get() increments the domain ref regardless of success
or failure so call xe_force_wake_put() even on failure to keep ref
count accurate.
Signed-off-by: Nirmoy Das <nirmoy.das at intel.com>
---
drivers/gpu/drm/xe/xe_gt.c | 27 +++++++++++----------------
drivers/gpu/drm/xe/xe_gt_debugfs.c | 10 ++++------
2 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 4e11662b78bd..8c899e203c45 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -363,7 +363,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
if (!xe_gt_is_media_type(gt)) {
err = xe_ggtt_init(gt_to_tile(gt)->mem.ggtt);
if (err)
- goto err_force_wake;
+ goto err_dump_pat;
if (IS_SRIOV_PF(gt_to_xe(gt)))
xe_lmtt_init(>_to_tile(gt)->sriov.pf.lmtt);
}
@@ -376,16 +376,16 @@ static int gt_fw_domain_init(struct xe_gt *gt)
err = xe_hw_engines_init_early(gt);
if (err)
- goto err_force_wake;
+ goto err_dump_pat;
err = xe_hw_engine_class_sysfs_init(gt);
if (err)
- goto err_force_wake;
+ goto err_dump_pat;
/* Initialize CCS mode sysfs after early initialization of HW engines */
err = xe_gt_ccs_mode_sysfs_init(gt);
if (err)
- goto err_force_wake;
+ goto err_dump_pat;
/*
* Stash hardware-reported version. Since this register does not exist
@@ -398,10 +398,10 @@ static int gt_fw_domain_init(struct xe_gt *gt)
return 0;
-err_force_wake:
+err_dump_pat:
dump_pat_on_error(gt);
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
err_hw_fence_irq:
+ xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
for (i = 0; i < XE_ENGINE_CLASS_MAX; ++i)
xe_hw_fence_irq_finish(>->fence_irq[i]);
@@ -414,7 +414,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if (err)
- goto err_hw_fence_irq;
+ goto err_force_wake;
xe_gt_mcr_set_implicit_defaults(gt);
xe_reg_sr_apply_mmio(>->reg_sr, gt);
@@ -485,7 +485,6 @@ static int all_fw_domain_init(struct xe_gt *gt)
err_force_wake:
xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
-err_hw_fence_irq:
for (i = 0; i < XE_ENGINE_CLASS_MAX; ++i)
xe_hw_fence_irq_finish(>->fence_irq[i]);
@@ -502,7 +501,7 @@ int xe_gt_init_hwconfig(struct xe_gt *gt)
err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
if (err)
- goto out;
+ goto out_fw;
xe_gt_mcr_init_early(gt);
xe_pat_init(gt);
@@ -520,7 +519,6 @@ int xe_gt_init_hwconfig(struct xe_gt *gt)
out_fw:
xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
-out:
return err;
}
@@ -682,7 +680,7 @@ static int gt_reset(struct xe_gt *gt)
err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if (err)
- goto err_msg;
+ goto err_out;
xe_uc_gucrc_disable(>->uc);
xe_uc_stop_prepare(>->uc);
@@ -710,7 +708,6 @@ static int gt_reset(struct xe_gt *gt)
err_out:
XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
-err_msg:
XE_WARN_ON(xe_uc_start(>->uc));
xe_pm_runtime_put(gt_to_xe(gt));
err_fail:
@@ -758,7 +755,7 @@ int xe_gt_suspend(struct xe_gt *gt)
err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if (err)
- goto err_msg;
+ goto err_force_wake;
err = xe_uc_suspend(>->uc);
if (err)
@@ -773,7 +770,6 @@ int xe_gt_suspend(struct xe_gt *gt)
err_force_wake:
XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
-err_msg:
xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
return err;
@@ -786,7 +782,7 @@ int xe_gt_resume(struct xe_gt *gt)
xe_gt_dbg(gt, "resuming\n");
err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if (err)
- goto err_msg;
+ goto err_force_wake;
err = do_gt_restart(gt);
if (err)
@@ -801,7 +797,6 @@ int xe_gt_resume(struct xe_gt *gt)
err_force_wake:
XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
-err_msg:
xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
return err;
diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
index 66f897a9b6ca..9d98818045a7 100644
--- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
@@ -91,15 +91,13 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
xe_pm_runtime_get(xe);
err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (err) {
- xe_pm_runtime_put(xe);
- return err;
- }
+ if (err)
+ goto err_out;
for_each_hw_engine(hwe, gt, id)
xe_hw_engine_print(hwe, p);
-
- err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+err_out:
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
xe_pm_runtime_put(xe);
if (err)
return err;
--
2.42.0
More information about the Intel-xe
mailing list