Skip to content

Commit

Permalink
Revert "drm: Resurrect atomic rmfb code, v3"
Browse files Browse the repository at this point in the history
This reverts commit 1592364.

This apparantly causes some regressions so pull it out for now.

Signed-off-by: Dave Airlie <airlied@redhat.com>
  • Loading branch information
Dave Airlie committed Feb 17, 2017
1 parent 08293fe commit 9ca7035
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 114 deletions.
106 changes: 0 additions & 106 deletions drivers/gpu/drm/drm_atomic.c
Original file line number Diff line number Diff line change
Expand Up @@ -2046,112 +2046,6 @@ static void complete_crtc_signaling(struct drm_device *dev,
kfree(fence_state);
}

int drm_atomic_remove_fb(struct drm_framebuffer *fb)
{
struct drm_modeset_acquire_ctx ctx;
struct drm_device *dev = fb->dev;
struct drm_atomic_state *state;
struct drm_plane *plane;
struct drm_connector *conn;
struct drm_connector_state *conn_state;
int i, ret = 0;
unsigned plane_mask, disable_crtcs = false;

state = drm_atomic_state_alloc(dev);
if (!state)
return -ENOMEM;

drm_modeset_acquire_init(&ctx, 0);
state->acquire_ctx = &ctx;

retry:
plane_mask = 0;
ret = drm_modeset_lock_all_ctx(dev, &ctx);
if (ret)
goto unlock;

drm_for_each_plane(plane, dev) {
struct drm_plane_state *plane_state;

if (plane->state->fb != fb)
continue;

plane_state = drm_atomic_get_plane_state(state, plane);
if (IS_ERR(plane_state)) {
ret = PTR_ERR(plane_state);
goto unlock;
}

/*
* Some drivers do not support keeping crtc active with the
* primary plane disabled. If we fail to commit with -EINVAL
* then we will try to perform the same commit but with all
* crtc's disabled for primary planes as well.
*/
if (disable_crtcs && plane_state->crtc->primary == plane) {
struct drm_crtc_state *crtc_state;

crtc_state = drm_atomic_get_existing_crtc_state(state, plane_state->crtc);

ret = drm_atomic_add_affected_connectors(state, plane_state->crtc);
if (ret)
goto unlock;

crtc_state->active = false;
ret = drm_atomic_set_mode_for_crtc(crtc_state, NULL);
if (ret)
goto unlock;
}

drm_atomic_set_fb_for_plane(plane_state, NULL);
ret = drm_atomic_set_crtc_for_plane(plane_state, NULL);
if (ret)
goto unlock;

plane_mask |= BIT(drm_plane_index(plane));

plane->old_fb = plane->fb;
}

/* This list is only not empty when disable_crtcs is set. */
for_each_connector_in_state(state, conn, conn_state, i) {
ret = drm_atomic_set_crtc_for_connector(conn_state, NULL);

if (ret)
goto unlock;
}

if (plane_mask)
ret = drm_atomic_commit(state);

unlock:
if (plane_mask)
drm_atomic_clean_old_fb(dev, plane_mask, ret);

if (ret == -EDEADLK) {
drm_modeset_backoff(&ctx);
goto retry;
}

drm_atomic_state_put(state);

if (ret == -EINVAL && !disable_crtcs) {
disable_crtcs = true;

state = drm_atomic_state_alloc(dev);
if (state) {
state->acquire_ctx = &ctx;
goto retry;
}
ret = -ENOMEM;
}

drm_modeset_drop_locks(&ctx);
drm_modeset_acquire_fini(&ctx);

return ret;
}

int drm_mode_atomic_ioctl(struct drm_device *dev,
void *data, struct drm_file *file_priv)
{
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/drm_crtc_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,6 @@ int drm_atomic_get_property(struct drm_mode_object *obj,
struct drm_property *property, uint64_t *val);
int drm_mode_atomic_ioctl(struct drm_device *dev,
void *data, struct drm_file *file_priv);
int drm_atomic_remove_fb(struct drm_framebuffer *fb);


/* drm_plane.c */
Expand Down
7 changes: 0 additions & 7 deletions drivers/gpu/drm/drm_framebuffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -773,12 +773,6 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb)
* in this manner.
*/
if (drm_framebuffer_read_refcount(fb) > 1) {
if (drm_drv_uses_atomic_modeset(dev)) {
int ret = drm_atomic_remove_fb(fb);
WARN(ret, "atomic remove_fb failed with %i\n", ret);
goto out;
}

drm_modeset_lock_all(dev);
/* remove from any CRTC */
drm_for_each_crtc(crtc, dev) {
Expand All @@ -796,7 +790,6 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb)
drm_modeset_unlock_all(dev);
}

out:
drm_framebuffer_unreference(fb);
}
EXPORT_SYMBOL(drm_framebuffer_remove);
Expand Down

0 comments on commit 9ca7035

Please sign in to comment.