drm/atomic: Update old_fb after setting a property.
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Wed, 24 Jun 2015 06:59:24 +0000 (08:59 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 2 Jul 2015 15:00:49 +0000 (17:00 +0200)
This change updates the old_fb pointer only after acquiring the plane lock,
if there are no properties the fb cannot have been changed either, so
this works out correctly.

Found in a discussion with Rob Clark.

Cc: Rob Clark <robdclark@gmail.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/drm_atomic.c

index f6f2fb58eb37f583f6568964f9ad8aab8be75968..bd7f723c708ee66782d2321678a796243aac79bd 100644 (file)
@@ -1472,12 +1472,6 @@ retry:
                        goto fail;
                }
 
-               if (obj->type == DRM_MODE_OBJECT_PLANE) {
-                       plane = obj_to_plane(obj);
-                       plane_mask |= (1 << drm_plane_index(plane));
-                       plane->old_fb = plane->fb;
-               }
-
                if (get_user(count_props, count_props_ptr + copied_objs)) {
                        ret = -EFAULT;
                        goto fail;
@@ -1514,6 +1508,12 @@ retry:
 
                        copied_props++;
                }
+
+               if (obj->type == DRM_MODE_OBJECT_PLANE && count_props) {
+                       plane = obj_to_plane(obj);
+                       plane_mask |= (1 << drm_plane_index(plane));
+                       plane->old_fb = plane->fb;
+               }
        }
 
        if (arg->flags & DRM_MODE_PAGE_FLIP_EVENT) {