From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: <intel-gfx@lists.freedesktop.org>,
<intel-xe@lists.freedesktop.org>, <lucas.demarchi@intel.com>
Subject: Re: [PATCH 1/3] drm/i915/display: allocate struct intel_display dynamically
Date: Wed, 21 May 2025 09:31:31 -0400 [thread overview]
Message-ID: <aC3Vs2JyYtr7Crlw@intel.com> (raw)
In-Reply-To: <8828decba861006fdb10171c5e83c6d898ce0a52.1747822630.git.jani.nikula@intel.com>
On Wed, May 21, 2025 at 01:21:46PM +0300, Jani Nikula wrote:
> Allocate struct intel_display dynamically in
> intel_display_device_probe() and free in intel_display_device_remove().
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
\o/
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display_device.c | 10 +++++++++-
> drivers/gpu/drm/i915/i915_driver.c | 13 +++++++------
> drivers/gpu/drm/i915/i915_drv.h | 1 -
> drivers/gpu/drm/i915/selftests/mock_gem_device.c | 11 ++++++++---
> drivers/gpu/drm/xe/display/xe_display.c | 11 +++++++----
> drivers/gpu/drm/xe/xe_device_types.h | 1 -
> 6 files changed, 31 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c
> index 90d714598664..1d8c2036d967 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_device.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_device.c
> @@ -1621,13 +1621,17 @@ static void display_platforms_or(struct intel_display_platforms *dst,
>
> struct intel_display *intel_display_device_probe(struct pci_dev *pdev)
> {
> - struct intel_display *display = to_intel_display(pdev);
> + struct intel_display *display;
> const struct intel_display_device_info *info;
> struct intel_display_ip_ver ip_ver = {};
> const struct platform_desc *desc;
> const struct subplatform_desc *subdesc;
> enum intel_step step;
>
> + display = kzalloc(sizeof(*display), GFP_KERNEL);
> + if (!display)
> + return ERR_PTR(-ENOMEM);
> +
> /* Add drm device backpointer as early as possible. */
> display->drm = pci_get_drvdata(pdev);
>
> @@ -1708,7 +1712,11 @@ struct intel_display *intel_display_device_probe(struct pci_dev *pdev)
>
> void intel_display_device_remove(struct intel_display *display)
> {
> + if (!display)
> + return;
> +
> intel_display_params_free(&display->params);
> + kfree(display);
> }
>
> static void __intel_display_device_info_runtime_init(struct intel_display *display)
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index 950b7ad8d675..d33b0eb83a4f 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -293,6 +293,8 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
> intel_sbi_fini(dev_priv);
>
> i915_params_free(&dev_priv->params);
> +
> + intel_display_device_remove(display);
> }
>
> /**
> @@ -735,6 +737,7 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
> const struct intel_device_info *match_info =
> (struct intel_device_info *)ent->driver_data;
> struct drm_i915_private *i915;
> + struct intel_display *display;
>
> i915 = devm_drm_dev_alloc(&pdev->dev, &i915_drm_driver,
> struct drm_i915_private, drm);
> @@ -749,10 +752,11 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
> /* Set up device info and initial runtime info. */
> intel_device_info_driver_create(i915, pdev->device, match_info);
>
> - /* TODO: Allocate display dynamically. */
> - i915->display = &i915->__display;
> + display = intel_display_device_probe(pdev);
> + if (IS_ERR(display))
> + return ERR_CAST(display);
>
> - intel_display_device_probe(pdev);
> + i915->display = display;
>
> return i915;
> }
> @@ -911,7 +915,6 @@ void i915_driver_remove(struct drm_i915_private *i915)
> static void i915_driver_release(struct drm_device *dev)
> {
> struct drm_i915_private *dev_priv = to_i915(dev);
> - struct intel_display *display = dev_priv->display;
> struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
> intel_wakeref_t wakeref;
>
> @@ -934,8 +937,6 @@ static void i915_driver_release(struct drm_device *dev)
> intel_runtime_pm_driver_release(rpm);
>
> i915_driver_late_release(dev_priv);
> -
> - intel_display_device_remove(display);
> }
>
> static int i915_driver_open(struct drm_device *dev, struct drm_file *file)
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 0841988c4a67..fd0274ec9c2c 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -178,7 +178,6 @@ struct drm_i915_private {
> struct drm_device drm;
>
> struct intel_display *display;
> - struct intel_display __display; /* Transitional. Do not use directly. */
>
> /* FIXME: Device release actions should all be moved to drmm_ */
> bool do_release;
> diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> index 0ea12c68cedb..dab2b71a2a8f 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> @@ -141,6 +141,7 @@ struct drm_i915_private *mock_gem_device(void)
> static struct dev_iommu fake_iommu = { .priv = (void *)-1 };
> #endif
> struct drm_i915_private *i915;
> + struct intel_display *display;
> struct pci_dev *pdev;
> int ret;
>
> @@ -180,10 +181,11 @@ struct drm_i915_private *mock_gem_device(void)
> /* Set up device info and initial runtime info. */
> intel_device_info_driver_create(i915, pdev->device, &mock_info);
>
> - /* TODO: Allocate display dynamically. */
> - i915->display = &i915->__display;
> + display = intel_display_device_probe(pdev);
> + if (IS_ERR(display))
> + goto err_device;
>
> - intel_display_device_probe(pdev);
> + i915->display = display;
>
> dev_pm_domain_set(&pdev->dev, &pm_domain);
> pm_runtime_enable(&pdev->dev);
> @@ -260,6 +262,7 @@ struct drm_i915_private *mock_gem_device(void)
> intel_gt_driver_late_release_all(i915);
> intel_memory_regions_driver_release(i915);
> drm_mode_config_cleanup(&i915->drm);
> +err_device:
> mock_destroy_device(i915);
>
> return NULL;
> @@ -269,6 +272,8 @@ void mock_destroy_device(struct drm_i915_private *i915)
> {
> struct device *dev = i915->drm.dev;
>
> + intel_display_device_remove(i915->display);
> +
> devres_release_group(dev, NULL);
> put_device(dev);
> }
> diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> index 1e59b6dd2c3b..e3e5d41db29d 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -529,14 +529,17 @@ int xe_display_probe(struct xe_device *xe)
> if (!xe->info.probe_display)
> goto no_display;
>
> - /* TODO: Allocate display dynamically. */
> - xe->display = &xe->__display;
> -
> display = intel_display_device_probe(pdev);
> + if (IS_ERR(display))
> + return PTR_ERR(display);
>
> err = drmm_add_action_or_reset(&xe->drm, display_device_remove, display);
> - if (err)
> + if (err) {
> + intel_display_device_remove(display);
> return err;
> + }
> +
> + xe->display = display;
>
> if (has_display(xe))
> return 0;
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index 902b2e30b3b9..7659222703d2 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -593,7 +593,6 @@ struct xe_device {
> * migrating to the right sub-structs
> */
> struct intel_display *display;
> - struct intel_display __display; /* Transitional. Do not use directly. */
>
> struct dram_info {
> bool wm_lv_0_adjust_needed;
> --
> 2.39.5
>
next prev parent reply other threads:[~2025-05-21 13:58 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-21 10:21 [PATCH 0/3] drm/i915 & drm/xe: allocate struct intel_display dynamically Jani Nikula
2025-05-21 10:21 ` [PATCH 1/3] drm/i915/display: " Jani Nikula
2025-05-21 13:31 ` Rodrigo Vivi [this message]
2025-05-21 15:33 ` Lucas De Marchi
2025-05-21 10:21 ` [PATCH 2/3] drm/i915: stop including display/intel_display_{core, limits}.h from i915_drv.h Jani Nikula
2025-05-21 10:21 ` [PATCH 3/3] drm/xe: stop including intel_display_{core, device}.h from xe_device_types.h Jani Nikula
2025-05-21 16:35 ` Lucas De Marchi
2025-05-21 12:18 ` ✓ CI.Patch_applied: success for drm/i915 & drm/xe: allocate struct intel_display dynamically Patchwork
2025-05-21 12:18 ` ✓ CI.checkpatch: " Patchwork
2025-05-21 12:20 ` ✓ CI.KUnit: " Patchwork
2025-05-21 12:30 ` ✓ CI.Build: " Patchwork
2025-05-21 12:33 ` ✓ CI.Hooks: " Patchwork
2025-05-21 12:34 ` ✗ CI.checksparse: warning " Patchwork
2025-05-21 13:04 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-05-21 13:30 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2025-05-21 13:48 ` ✓ i915.CI.BAT: success " Patchwork
2025-05-21 15:49 ` ✓ i915.CI.Full: " Patchwork
2025-05-22 2:15 ` ✗ Xe.CI.Full: failure " Patchwork
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=aC3Vs2JyYtr7Crlw@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=lucas.demarchi@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.