set_property_legacy() increments property ref-counter before
DRM_MODESET_LOCK_ALL_BEGIN()'s modeset_lock_retry label.
However the ref-counter decrement is misplaced - it's performed
before DRM_MODESET_LOCK_ALL_END() checks for -EDEADLK and jumps
to modeset_lock_retry label, creating ref-counter underflow.

Fixes: 9bcaa3fe58ab ("drm: Replace drm_modeset_lock/unlock_all with 
DRM_MODESET_LOCK_ALL_* helpers")
Cc: [email protected]
Signed-off-by: Sergey Senozhatsky <[email protected]>
---
 drivers/gpu/drm/drm_mode_object.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_mode_object.c 
b/drivers/gpu/drm/drm_mode_object.c
index 21fc9deda437..11f0044f4782 100644
--- a/drivers/gpu/drm/drm_mode_object.c
+++ b/drivers/gpu/drm/drm_mode_object.c
@@ -549,8 +549,8 @@ static int set_property_legacy(struct drm_mode_object *obj,
                                                  prop, prop_value);
                break;
        }
-       drm_property_change_valid_put(prop, ref);
        DRM_MODESET_LOCK_ALL_END(dev, ctx, ret);
+       drm_property_change_valid_put(prop, ref);
 
        return ret;
 }
-- 
2.55.0.rc0.786.g65d90a0328-goog

Reply via email to