]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915: move pending_fb_pin to struct intel_display
authorJani Nikula <jani.nikula@intel.com>
Mon, 3 Mar 2025 11:27:04 +0000 (13:27 +0200)
committerJani Nikula <jani.nikula@intel.com>
Wed, 5 Mar 2025 10:48:22 +0000 (12:48 +0200)
pending_fb_pin is more about display than GPU reset. Move it to struct
intel_display. The restore sub-struct already contains reset related
members, so move it there.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ff779ae318610e6f6813474bcaa53851ffff909d.1741001054.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_display_core.h
drivers/gpu/drm/i915/display/intel_display_reset.c
drivers/gpu/drm/i915/display/intel_dpt.c
drivers/gpu/drm/i915/display/intel_fb_pin.c
drivers/gpu/drm/i915/display/intel_overlay.c
drivers/gpu/drm/i915/i915_gpu_error.h

index 554870d2494b31f5c3763275f3f1b4becfb0e5b7..1970d4c150906387dd2762d22d74a5131977b8d4 100644 (file)
@@ -512,6 +512,8 @@ struct intel_display {
                /* restore state for suspend/resume and display reset */
                struct drm_atomic_state *modeset_state;
                struct drm_modeset_acquire_ctx reset_ctx;
+               /* modeset stuck tracking for reset */
+               atomic_t pending_fb_pin;
                u32 saveDSPARB;
                u32 saveSWF0[16];
                u32 saveSWF1[16];
index c1e448e8a26e05c7b97969f78c90c75d9d2add1b..cef9536c461ca6fca15e77d19b654c6fd1575b24 100644 (file)
@@ -42,7 +42,7 @@ void intel_display_reset_prepare(struct intel_display *display)
        smp_mb__after_atomic();
        wake_up_bit(&to_gt(dev_priv)->reset.flags, I915_RESET_MODESET);
 
-       if (atomic_read(&dev_priv->gpu_error.pending_fb_pin)) {
+       if (atomic_read(&display->restore.pending_fb_pin)) {
                drm_dbg_kms(display->drm,
                            "Modeset potentially stuck, unbreaking through wedging\n");
                intel_gt_set_wedged(to_gt(dev_priv));
index fca7294b1def8810f1c326a5d9bbc1a706e04473..0d8ebe38226ea148e9564a492a4a04185167734b 100644 (file)
@@ -125,6 +125,7 @@ struct i915_vma *intel_dpt_pin_to_ggtt(struct i915_address_space *vm,
                                       unsigned int alignment)
 {
        struct drm_i915_private *i915 = vm->i915;
+       struct intel_display *display = &i915->display;
        struct i915_dpt *dpt = i915_vm_to_dpt(vm);
        intel_wakeref_t wakeref;
        struct i915_vma *vma;
@@ -137,7 +138,7 @@ struct i915_vma *intel_dpt_pin_to_ggtt(struct i915_address_space *vm,
                pin_flags |= PIN_MAPPABLE;
 
        wakeref = intel_runtime_pm_get(&i915->runtime_pm);
-       atomic_inc(&i915->gpu_error.pending_fb_pin);
+       atomic_inc(&display->restore.pending_fb_pin);
 
        for_i915_gem_ww(&ww, err, true) {
                err = i915_gem_object_lock(dpt->obj, &ww);
@@ -167,7 +168,7 @@ struct i915_vma *intel_dpt_pin_to_ggtt(struct i915_address_space *vm,
 
        dpt->obj->mm.dirty = true;
 
-       atomic_dec(&i915->gpu_error.pending_fb_pin);
+       atomic_dec(&display->restore.pending_fb_pin);
        intel_runtime_pm_put(&i915->runtime_pm, wakeref);
 
        return err ? ERR_PTR(err) : vma;
index 204e7e3e48cac684339891a31a9532879a929f6d..30ac9b089ad665149e344b32dedd6f9ec3676042 100644 (file)
@@ -25,6 +25,7 @@ intel_fb_pin_to_dpt(const struct drm_framebuffer *fb,
                    struct i915_address_space *vm)
 {
        struct drm_device *dev = fb->dev;
+       struct intel_display *display = to_intel_display(dev);
        struct drm_i915_private *dev_priv = to_i915(dev);
        struct drm_gem_object *_obj = intel_fb_bo(fb);
        struct drm_i915_gem_object *obj = to_intel_bo(_obj);
@@ -42,7 +43,7 @@ intel_fb_pin_to_dpt(const struct drm_framebuffer *fb,
        if (WARN_ON(!i915_gem_object_is_framebuffer(obj)))
                return ERR_PTR(-EINVAL);
 
-       atomic_inc(&dev_priv->gpu_error.pending_fb_pin);
+       atomic_inc(&display->restore.pending_fb_pin);
 
        for_i915_gem_ww(&ww, ret, true) {
                ret = i915_gem_object_lock(obj, &ww);
@@ -97,7 +98,7 @@ intel_fb_pin_to_dpt(const struct drm_framebuffer *fb,
 
        i915_vma_get(vma);
 err:
-       atomic_dec(&dev_priv->gpu_error.pending_fb_pin);
+       atomic_dec(&display->restore.pending_fb_pin);
 
        return vma;
 }
@@ -112,6 +113,7 @@ intel_fb_pin_to_ggtt(const struct drm_framebuffer *fb,
                     unsigned long *out_flags)
 {
        struct drm_device *dev = fb->dev;
+       struct intel_display *display = to_intel_display(dev);
        struct drm_i915_private *dev_priv = to_i915(dev);
        struct drm_gem_object *_obj = intel_fb_bo(fb);
        struct drm_i915_gem_object *obj = to_intel_bo(_obj);
@@ -136,7 +138,7 @@ intel_fb_pin_to_ggtt(const struct drm_framebuffer *fb,
         */
        wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
 
-       atomic_inc(&dev_priv->gpu_error.pending_fb_pin);
+       atomic_inc(&display->restore.pending_fb_pin);
 
        /*
         * Valleyview is definitely limited to scanning out the first
@@ -212,7 +214,7 @@ err:
        if (ret)
                vma = ERR_PTR(ret);
 
-       atomic_dec(&dev_priv->gpu_error.pending_fb_pin);
+       atomic_dec(&display->restore.pending_fb_pin);
        intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
        return vma;
 }
index 5c1b20af2a0759be649dd6a5c7c28297488568d3..aff9a3455c1b74586c79f3129faa7969abfc6750 100644 (file)
@@ -800,7 +800,6 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
                                      struct drm_intel_overlay_put_image *params)
 {
        struct intel_display *display = overlay->display;
-       struct drm_i915_private *dev_priv = to_i915(display->drm);
        struct overlay_registers __iomem *regs = overlay->regs;
        u32 swidth, swidthsw, sheight, ostride;
        enum pipe pipe = overlay->crtc->pipe;
@@ -815,7 +814,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
        if (ret != 0)
                return ret;
 
-       atomic_inc(&dev_priv->gpu_error.pending_fb_pin);
+       atomic_inc(&display->restore.pending_fb_pin);
 
        vma = intel_overlay_pin_fb(new_bo);
        if (IS_ERR(vma)) {
@@ -903,7 +902,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
 out_unpin:
        i915_vma_unpin(vma);
 out_pin_section:
-       atomic_dec(&dev_priv->gpu_error.pending_fb_pin);
+       atomic_dec(&display->restore.pending_fb_pin);
 
        return ret;
 }
index 78a8928562a99d05628a601a7dffda329e862eb8..749e1c55613e839e73902640f88de2460184d501 100644 (file)
@@ -224,8 +224,6 @@ struct i915_gpu_error {
        /* Protected by the above dev->gpu_error.lock. */
        struct i915_gpu_coredump *first_error;
 
-       atomic_t pending_fb_pin;
-
        /** Number of times the device has been reset (global) */
        atomic_t reset_count;