OSDN Git Service

drm/i915/dsb: fix cmd_buf being wrongly set
authorLucas De Marchi <lucas.demarchi@intel.com>
Wed, 27 Nov 2019 22:11:21 +0000 (14:11 -0800)
committerLucas De Marchi <lucas.demarchi@intel.com>
Mon, 2 Dec 2019 18:06:25 +0000 (10:06 -0800)
The "err" label is not really "err", but rather "out" since the return
path is shared between error condition and normal path. This broke when
commit 03cea61076f0 ("drm/i915/dsb: fix extra warning on error path
handling") added a "dsb->cmd_buf = NULL;" there, making DSB to stop
working since now all writes would pass-through via mmio.

Remove the set to NULL since it's actually not needed: we only set it if
all steps are successful. While at it, rename the label so this confusion
doesn't happen again.

Fixes: 03cea61076f0 ("drm/i915/dsb: fix extra warning on error path handling")
Resolves: https://gitlab.freedesktop.org/drm/intel/issues/8
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191127221119.384754-1-lucas.demarchi@intel.com
drivers/gpu/drm/i915/display/intel_dsb.c

index 5bf67bd..ada006a 100644 (file)
@@ -116,34 +116,34 @@ intel_dsb_get(struct intel_crtc *crtc)
        obj = i915_gem_object_create_internal(i915, DSB_BUF_SIZE);
        if (IS_ERR(obj)) {
                DRM_ERROR("Gem object creation failed\n");
-               goto err;
+               goto out;
        }
 
        vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, 0);
        if (IS_ERR(vma)) {
                DRM_ERROR("Vma creation failed\n");
                i915_gem_object_put(obj);
-               goto err;
+               goto out;
        }
 
        buf = i915_gem_object_pin_map(vma->obj, I915_MAP_WC);
        if (IS_ERR(buf)) {
                DRM_ERROR("Command buffer creation failed\n");
-               goto err;
+               goto out;
        }
 
        dsb->id = DSB1;
        dsb->vma = vma;
        dsb->cmd_buf = buf;
 
-err:
+out:
        /*
-        * Set cmd_buf to NULL so the writes pass-through, but leave the
-        * dangling refcount to be removed later by the corresponding
-        * intel_dsb_put(): the important error message will already be
-        * logged above.
+        * On error dsb->cmd_buf will continue to be NULL, making the writes
+        * pass-through. Leave the dangling ref to be removed later by the
+        * corresponding intel_dsb_put(): the important error message will
+        * already be logged above.
         */
-       dsb->cmd_buf = NULL;
+
        intel_runtime_pm_put(&i915->runtime_pm, wakeref);
 
        return dsb;