]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/gpu/drm/drm_atomic.c
drm/amd/display: Use plane pointer to avoid line breaks
[mirror_ubuntu-bionic-kernel.git] / drivers / gpu / drm / drm_atomic.c
index 2fd383d7253a0db87a569458a017a4d155aef51b..562494873ca55773c17150302f04e20407a524b2 100644 (file)
@@ -163,13 +163,6 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)
                crtc->funcs->atomic_destroy_state(crtc,
                                                  state->crtcs[i].state);
 
-               if (state->crtcs[i].commit) {
-                       kfree(state->crtcs[i].commit->event);
-                       state->crtcs[i].commit->event = NULL;
-                       drm_crtc_commit_put(state->crtcs[i].commit);
-               }
-
-               state->crtcs[i].commit = NULL;
                state->crtcs[i].ptr = NULL;
                state->crtcs[i].state = NULL;
        }
@@ -189,9 +182,6 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)
        for (i = 0; i < state->num_private_objs; i++) {
                struct drm_private_obj *obj = state->private_objs[i].ptr;
 
-               if (!obj)
-                       continue;
-
                obj->funcs->atomic_destroy_state(obj,
                                                 state->private_objs[i].state);
                state->private_objs[i].ptr = NULL;
@@ -199,6 +189,10 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)
        }
        state->num_private_objs = 0;
 
+       if (state->fake_commit) {
+               drm_crtc_commit_put(state->fake_commit);
+               state->fake_commit = NULL;
+       }
 }
 EXPORT_SYMBOL(drm_atomic_state_default_clear);
 
@@ -721,7 +715,7 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
        struct drm_mode_config *config = &dev->mode_config;
 
        if (property == config->prop_fb_id) {
-               struct drm_framebuffer *fb = drm_framebuffer_lookup(dev, val);
+               struct drm_framebuffer *fb = drm_framebuffer_lookup(dev, NULL, val);
                drm_atomic_set_fb_for_plane(state, fb);
                if (fb)
                        drm_framebuffer_put(fb);
@@ -737,7 +731,7 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
                        return -EINVAL;
 
        } else if (property == config->prop_crtc_id) {
-               struct drm_crtc *crtc = drm_crtc_find(dev, val);
+               struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val);
                return drm_atomic_set_crtc_for_plane(state, crtc);
        } else if (property == config->prop_crtc_x) {
                state->crtc_x = U642I64(val);
@@ -1152,7 +1146,7 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
        struct drm_mode_config *config = &dev->mode_config;
 
        if (property == config->prop_crtc_id) {
-               struct drm_crtc *crtc = drm_crtc_find(dev, val);
+               struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val);
                return drm_atomic_set_crtc_for_connector(state, crtc);
        } else if (property == config->dpms_property) {
                /* setting DPMS property requires special handling, which
@@ -2237,7 +2231,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
                        (arg->flags & DRM_MODE_PAGE_FLIP_EVENT))
                return -EINVAL;
 
-       drm_modeset_acquire_init(&ctx, 0);
+       drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
 
        state = drm_atomic_state_alloc(dev);
        if (!state)
@@ -2262,7 +2256,7 @@ retry:
                        goto out;
                }
 
-               obj = drm_mode_object_find(dev, obj_id, DRM_MODE_OBJECT_ANY);
+               obj = drm_mode_object_find(dev, file_priv, obj_id, DRM_MODE_OBJECT_ANY);
                if (!obj) {
                        ret = -ENOENT;
                        goto out;
@@ -2350,8 +2344,9 @@ out:
 
        if (ret == -EDEADLK) {
                drm_atomic_state_clear(state);
-               drm_modeset_backoff(&ctx);
-               goto retry;
+               ret = drm_modeset_backoff(&ctx);
+               if (!ret)
+                       goto retry;
        }
 
        drm_atomic_state_put(state);