|
@@ -469,8 +469,11 @@ static int __drm_mode_set_config_internal(struct drm_mode_set *set,
|
|
* connectors from it), hence we need to refcount the fbs across all
|
|
* connectors from it), hence we need to refcount the fbs across all
|
|
* crtcs. Atomic modeset will have saner semantics ...
|
|
* crtcs. Atomic modeset will have saner semantics ...
|
|
*/
|
|
*/
|
|
- drm_for_each_crtc(tmp, crtc->dev)
|
|
|
|
- tmp->primary->old_fb = tmp->primary->fb;
|
|
|
|
|
|
+ drm_for_each_crtc(tmp, crtc->dev) {
|
|
|
|
+ struct drm_plane *plane = tmp->primary;
|
|
|
|
+
|
|
|
|
+ plane->old_fb = plane->fb;
|
|
|
|
+ }
|
|
|
|
|
|
fb = set->fb;
|
|
fb = set->fb;
|
|
|
|
|
|
@@ -481,11 +484,13 @@ static int __drm_mode_set_config_internal(struct drm_mode_set *set,
|
|
}
|
|
}
|
|
|
|
|
|
drm_for_each_crtc(tmp, crtc->dev) {
|
|
drm_for_each_crtc(tmp, crtc->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;
|
|
|
|
|
|
+ struct drm_plane *plane = tmp->primary;
|
|
|
|
+
|
|
|
|
+ if (plane->fb)
|
|
|
|
+ drm_framebuffer_get(plane->fb);
|
|
|
|
+ if (plane->old_fb)
|
|
|
|
+ drm_framebuffer_put(plane->old_fb);
|
|
|
|
+ plane->old_fb = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
return ret;
|
|
return ret;
|