|
@@ -439,8 +439,6 @@ static int vmw_fb_compute_depth(struct fb_var_screeninfo *var,
|
|
static int vmwgfx_set_config_internal(struct drm_mode_set *set)
|
|
static int vmwgfx_set_config_internal(struct drm_mode_set *set)
|
|
{
|
|
{
|
|
struct drm_crtc *crtc = set->crtc;
|
|
struct drm_crtc *crtc = set->crtc;
|
|
- struct drm_framebuffer *fb;
|
|
|
|
- struct drm_crtc *tmp;
|
|
|
|
struct drm_modeset_acquire_ctx *ctx;
|
|
struct drm_modeset_acquire_ctx *ctx;
|
|
struct drm_device *dev = set->crtc->dev;
|
|
struct drm_device *dev = set->crtc->dev;
|
|
int ret;
|
|
int ret;
|
|
@@ -448,29 +446,7 @@ static int vmwgfx_set_config_internal(struct drm_mode_set *set)
|
|
ctx = dev->mode_config.acquire_ctx;
|
|
ctx = dev->mode_config.acquire_ctx;
|
|
|
|
|
|
restart:
|
|
restart:
|
|
- /*
|
|
|
|
- * NOTE: ->set_config can also disable other crtcs (if we steal all
|
|
|
|
- * connectors from it), hence we need to refcount the fbs across all
|
|
|
|
- * crtcs. Atomic modeset will have saner semantics ...
|
|
|
|
- */
|
|
|
|
- drm_for_each_crtc(tmp, dev)
|
|
|
|
- tmp->primary->old_fb = tmp->primary->fb;
|
|
|
|
-
|
|
|
|
- fb = set->fb;
|
|
|
|
-
|
|
|
|
ret = crtc->funcs->set_config(set, ctx);
|
|
ret = crtc->funcs->set_config(set, ctx);
|
|
- if (ret == 0) {
|
|
|
|
- crtc->primary->crtc = crtc;
|
|
|
|
- crtc->primary->fb = fb;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- drm_for_each_crtc(tmp, dev) {
|
|
|
|
- if (tmp->primary->fb)
|
|
|
|
- drm_framebuffer_get(tmp->primary->fb);
|
|
|
|
- if (tmp->primary->old_fb)
|
|
|
|
- drm_framebuffer_put(tmp->primary->old_fb);
|
|
|
|
- tmp->primary->old_fb = NULL;
|
|
|
|
- }
|
|
|
|
|
|
|
|
if (ret == -EDEADLK) {
|
|
if (ret == -EDEADLK) {
|
|
dev->mode_config.acquire_ctx = NULL;
|
|
dev->mode_config.acquire_ctx = NULL;
|