From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: <intel-xe@lists.freedesktop.org>,
Matt Roper <matthew.d.roper@intel.com>,
Francois Dugast <francois.dugast@intel.com>,
Maarten Lankhorst <dev@lankhorst.se>
Subject: Re: [PATCH 1/7] drm/xe: Fix xe_display_fini() calls
Date: Mon, 3 Feb 2025 15:32:48 -0500 [thread overview]
Message-ID: <Z6En8FB8DY9zQjoH@intel.com> (raw)
In-Reply-To: <20250131223140.4144292-2-lucas.demarchi@intel.com>
On Fri, Jan 31, 2025 at 02:31:34PM -0800, Lucas De Marchi wrote:
> xe_display_fini() undoes things from xe_display_init() (technically from
> intel_display_driver_probe()). Those `goto err` in xe_device_probe()
> were wrong and being accumulated over time.
>
> Commit 65e366ace5ee ("drm/xe/display: Use a single early init call for
> display") made it easier to fix now that we don't have xe_display_* init
> calls spread on xe_device_probe(). Change xe_display_init() to use
> devm_add_action_or_reset() that will finalize display in the right
> order.
>
> While at it, also add a newline and comment about calling
> xe_driver_flr_fini.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>
> Cc: Maarten Lankhorst <dev@lankhorst.se>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> drivers/gpu/drm/xe/display/xe_display.c | 22 ++++++++++++----------
> drivers/gpu/drm/xe/display/xe_display.h | 2 --
> drivers/gpu/drm/xe/xe_device.c | 19 ++++++++++---------
> 3 files changed, 22 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> index 651799c946ace..302f533af037d 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -161,27 +161,29 @@ int xe_display_init_early(struct xe_device *xe)
> return err;
> }
>
> -int xe_display_init(struct xe_device *xe)
> +static void xe_display_fini(void *arg)
> {
> + struct xe_device *xe = arg;
> struct intel_display *display = &xe->display;
>
> - if (!xe->info.probe_display)
> - return 0;
> -
> - return intel_display_driver_probe(display);
> + intel_hpd_poll_fini(xe);
> + intel_hdcp_component_fini(display);
> + intel_audio_deinit(display);
> }
>
> -void xe_display_fini(struct xe_device *xe)
> +int xe_display_init(struct xe_device *xe)
> {
> struct intel_display *display = &xe->display;
> + int err;
>
> if (!xe->info.probe_display)
> - return;
> + return 0;
>
> - intel_hpd_poll_fini(xe);
> + err = intel_display_driver_probe(display);
> + if (err)
> + return err;
>
> - intel_hdcp_component_fini(display);
> - intel_audio_deinit(display);
> + return devm_add_action_or_reset(xe->drm.dev, xe_display_fini, xe);
> }
>
> void xe_display_register(struct xe_device *xe)
> diff --git a/drivers/gpu/drm/xe/display/xe_display.h b/drivers/gpu/drm/xe/display/xe_display.h
> index e2a99624f7064..685dc74402fb8 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.h
> +++ b/drivers/gpu/drm/xe/display/xe_display.h
> @@ -22,7 +22,6 @@ int xe_display_probe(struct xe_device *xe);
>
> int xe_display_init_early(struct xe_device *xe);
> int xe_display_init(struct xe_device *xe);
> -void xe_display_fini(struct xe_device *xe);
>
> void xe_display_register(struct xe_device *xe);
> void xe_display_unregister(struct xe_device *xe);
> @@ -54,7 +53,6 @@ static inline int xe_display_probe(struct xe_device *xe) { return 0; }
>
> static inline int xe_display_init_early(struct xe_device *xe) { return 0; }
> static inline int xe_display_init(struct xe_device *xe) { return 0; }
> -static inline void xe_display_fini(struct xe_device *xe) {}
>
> static inline void xe_display_register(struct xe_device *xe) {}
> static inline void xe_display_unregister(struct xe_device *xe) {}
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 8a2763e8a6e27..589bbe21c32b4 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -734,6 +734,7 @@ static int probe_has_flat_ccs(struct xe_device *xe)
> "Flat CCS has been disabled in bios, May lead to performance impact");
>
> xe_force_wake_put(gt_to_fw(gt), fw_ref);
> +
> return 0;
> }
>
> @@ -802,22 +803,26 @@ int xe_device_probe(struct xe_device *xe)
> err = xe_devcoredump_init(xe);
> if (err)
> return err;
> +
> + /*
> + * From here on, if a step fails, make sure a Driver-FLR is triggereed
> + */
> err = devm_add_action_or_reset(xe->drm.dev, xe_driver_flr_fini, xe);
> if (err)
> return err;
>
> err = probe_has_flat_ccs(xe);
> if (err)
> - goto err;
> + return err;
>
> err = xe_vram_probe(xe);
> if (err)
> - goto err;
> + return err;
>
> for_each_tile(tile, xe, id) {
> err = xe_tile_init_noalloc(tile);
> if (err)
> - goto err;
> + return err;
> }
>
> /* Allocate and map stolen after potential VRAM resize */
> @@ -831,12 +836,12 @@ int xe_device_probe(struct xe_device *xe)
> */
> err = xe_display_init_early(xe);
> if (err)
> - goto err;
> + return err;
>
> for_each_tile(tile, xe, id) {
> err = xe_tile_init(tile);
> if (err)
> - goto err;
> + return err;
> }
>
> err = xe_irq_install(xe);
> @@ -896,8 +901,6 @@ int xe_device_probe(struct xe_device *xe)
> break;
> }
>
> -err:
> - xe_display_fini(xe);
> return err;
> }
>
> @@ -918,8 +921,6 @@ void xe_device_remove(struct xe_device *xe)
>
> xe_device_remove_display(xe);
>
> - xe_display_fini(xe);
> -
> xe_oa_fini(xe);
>
> xe_heci_gsc_fini(xe);
> --
> 2.48.0
>
next prev parent reply other threads:[~2025-02-03 20:33 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-31 22:31 [PATCH 0/7] Cleanup error handling on probe Lucas De Marchi
2025-01-31 22:31 ` [PATCH 1/7] drm/xe: Fix xe_display_fini() calls Lucas De Marchi
2025-02-03 20:32 ` Rodrigo Vivi [this message]
2025-01-31 22:31 ` [PATCH 2/7] drm/xe: Fix error handling in xe_irq_install() Lucas De Marchi
2025-02-03 20:36 ` Rodrigo Vivi
2025-01-31 22:31 ` [PATCH 3/7] drm/xe: Fix xe_tile_init_noalloc() error propagation Lucas De Marchi
2025-02-03 14:21 ` Francois Dugast
2025-01-31 22:31 ` [PATCH 4/7] drm/xe: Stop ignoring errors from xe_ttm_stolen_mgr_init() Lucas De Marchi
2025-02-03 14:10 ` Francois Dugast
2025-01-31 22:31 ` [PATCH 5/7] drm/xe: Cleanup unwind of gt initialization Lucas De Marchi
2025-02-01 6:24 ` Raag Jadav
2025-02-01 15:55 ` Lucas De Marchi
2025-02-02 8:09 ` Raag Jadav
2025-01-31 22:31 ` [PATCH 6/7] drm/xe: Cleanup extra calls to xe_hw_fence_irq_finish() Lucas De Marchi
2025-02-03 21:46 ` Rodrigo Vivi
2025-01-31 22:31 ` [PATCH 7/7] drm/xe: Move oa fini to xe_oa Lucas De Marchi
2025-01-31 22:37 ` ✓ CI.Patch_applied: success for Cleanup error handling on probe Patchwork
2025-01-31 22:37 ` ✓ CI.checkpatch: " Patchwork
2025-01-31 22:38 ` ✓ CI.KUnit: " Patchwork
2025-01-31 22:55 ` ✓ CI.Build: " Patchwork
2025-01-31 22:57 ` ✓ CI.Hooks: " Patchwork
2025-01-31 22:59 ` ✓ CI.checksparse: " Patchwork
2025-01-31 23:32 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-02-01 8:05 ` ✗ Xe.CI.Full: " Patchwork
2025-02-03 18:39 ` [PATCH 0/7] " Lucas De Marchi
2025-02-04 8:58 ` Tvrtko Ursulin
2025-02-04 14:50 ` Lucas De Marchi
2025-02-04 18:10 ` Tvrtko Ursulin
2025-02-04 22:42 ` Rodrigo Vivi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z6En8FB8DY9zQjoH@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=dev@lankhorst.se \
--cc=francois.dugast@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=lucas.demarchi@intel.com \
--cc=matthew.d.roper@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.