diff options
author | Dave Airlie <airlied@redhat.com> | 2014-10-01 05:27:01 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2014-10-01 05:27:01 -0400 |
commit | c5939a7360a69fc415bcfff6b10ced5227495a48 (patch) | |
tree | 1b9c7796fbeeba17e0e184a755354482de976af7 | |
parent | 1dadba87cba20989c5a5a56f2a86fe6672e37c30 (diff) | |
parent | 1b11629737ca5414b0310d35e01a125cfde1ba4d (diff) |
Merge tag 'topic/core-stuff-2014-09-29' of git://anongit.freedesktop.org/drm-intel into drm-next
Ok, here's the update core-stuff pull request with the locking fixup patch
fixed up with another patch.
* tag 'topic/core-stuff-2014-09-29' of git://anongit.freedesktop.org/drm-intel:
drm: Drop grab fpriv->fbs_lock in drm_fb_release
drm/udl: use container_of to resolve udl_fbdev from drm_fb_helper
drm/ast: use container_of to resolve ast_fbdev from drm_fb_helper
drm/gma500: use container_of to resolve psb_fbdev from drm_fb_helper
drm/qxl: use container_of to resolve qxl_fbdev from drm_fb_helper
drm/nouveau: use container_of to resolve nouveau_plane from drm_plane
drm/nouveau: use container_of to resolve nouveau_fbdev from drm_fb_helper
drm/radeon: use container_of to resolve radeon_fbdev from drm_fb_helper
drm/mgag200: use container_of to resolve mga_fbdev from drm_fb_helper
drm/cirrus: use container_of to resolve cirrus_fbdev from drm_fb_helper
drm: Improve debug output for drm_wait_one_vblank
drm: Fixup locking for universal cursor planes
drm: Don't update vblank timestamp when the counter didn't change
-rw-r--r-- | drivers/gpu/drm/ast/ast_fb.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/cirrus/cirrus_fbdev.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 63 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_irq.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/framebuffer.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/mgag200/mgag200_fb.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/dispnv04/overlay.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_fbcon.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_fb.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_fb.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/udl/udl_fb.c | 3 |
11 files changed, 75 insertions, 34 deletions
diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c index cba45c774552..5c60ae524c45 100644 --- a/drivers/gpu/drm/ast/ast_fb.c +++ b/drivers/gpu/drm/ast/ast_fb.c | |||
@@ -186,7 +186,8 @@ static int astfb_create_object(struct ast_fbdev *afbdev, | |||
186 | static int astfb_create(struct drm_fb_helper *helper, | 186 | static int astfb_create(struct drm_fb_helper *helper, |
187 | struct drm_fb_helper_surface_size *sizes) | 187 | struct drm_fb_helper_surface_size *sizes) |
188 | { | 188 | { |
189 | struct ast_fbdev *afbdev = (struct ast_fbdev *)helper; | 189 | struct ast_fbdev *afbdev = |
190 | container_of(helper, struct ast_fbdev, helper); | ||
190 | struct drm_device *dev = afbdev->helper.dev; | 191 | struct drm_device *dev = afbdev->helper.dev; |
191 | struct drm_mode_fb_cmd2 mode_cmd; | 192 | struct drm_mode_fb_cmd2 mode_cmd; |
192 | struct drm_framebuffer *fb; | 193 | struct drm_framebuffer *fb; |
diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c b/drivers/gpu/drm/cirrus/cirrus_fbdev.c index 2a135f253e29..d231b1c317af 100644 --- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c +++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c | |||
@@ -160,7 +160,8 @@ static int cirrusfb_create_object(struct cirrus_fbdev *afbdev, | |||
160 | static int cirrusfb_create(struct drm_fb_helper *helper, | 160 | static int cirrusfb_create(struct drm_fb_helper *helper, |
161 | struct drm_fb_helper_surface_size *sizes) | 161 | struct drm_fb_helper_surface_size *sizes) |
162 | { | 162 | { |
163 | struct cirrus_fbdev *gfbdev = (struct cirrus_fbdev *)helper; | 163 | struct cirrus_fbdev *gfbdev = |
164 | container_of(helper, struct cirrus_fbdev, helper); | ||
164 | struct drm_device *dev = gfbdev->helper.dev; | 165 | struct drm_device *dev = gfbdev->helper.dev; |
165 | struct cirrus_device *cdev = gfbdev->helper.dev->dev_private; | 166 | struct cirrus_device *cdev = gfbdev->helper.dev->dev_private; |
166 | struct fb_info *info; | 167 | struct fb_info *info; |
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index ecd4e0b4c525..e79c8d3700d8 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
@@ -2263,21 +2263,19 @@ out: | |||
2263 | * | 2263 | * |
2264 | * src_{x,y,w,h} are provided in 16.16 fixed point format | 2264 | * src_{x,y,w,h} are provided in 16.16 fixed point format |
2265 | */ | 2265 | */ |
2266 | static int setplane_internal(struct drm_plane *plane, | 2266 | static int __setplane_internal(struct drm_plane *plane, |
2267 | struct drm_crtc *crtc, | 2267 | struct drm_crtc *crtc, |
2268 | struct drm_framebuffer *fb, | 2268 | struct drm_framebuffer *fb, |
2269 | int32_t crtc_x, int32_t crtc_y, | 2269 | int32_t crtc_x, int32_t crtc_y, |
2270 | uint32_t crtc_w, uint32_t crtc_h, | 2270 | uint32_t crtc_w, uint32_t crtc_h, |
2271 | /* src_{x,y,w,h} values are 16.16 fixed point */ | 2271 | /* src_{x,y,w,h} values are 16.16 fixed point */ |
2272 | uint32_t src_x, uint32_t src_y, | 2272 | uint32_t src_x, uint32_t src_y, |
2273 | uint32_t src_w, uint32_t src_h) | 2273 | uint32_t src_w, uint32_t src_h) |
2274 | { | 2274 | { |
2275 | struct drm_device *dev = plane->dev; | ||
2276 | int ret = 0; | 2275 | int ret = 0; |
2277 | unsigned int fb_width, fb_height; | 2276 | unsigned int fb_width, fb_height; |
2278 | int i; | 2277 | int i; |
2279 | 2278 | ||
2280 | drm_modeset_lock_all(dev); | ||
2281 | /* No fb means shut it down */ | 2279 | /* No fb means shut it down */ |
2282 | if (!fb) { | 2280 | if (!fb) { |
2283 | plane->old_fb = plane->fb; | 2281 | plane->old_fb = plane->fb; |
@@ -2345,10 +2343,28 @@ out: | |||
2345 | if (plane->old_fb) | 2343 | if (plane->old_fb) |
2346 | drm_framebuffer_unreference(plane->old_fb); | 2344 | drm_framebuffer_unreference(plane->old_fb); |
2347 | plane->old_fb = NULL; | 2345 | plane->old_fb = NULL; |
2348 | drm_modeset_unlock_all(dev); | ||
2349 | 2346 | ||
2350 | return ret; | 2347 | return ret; |
2348 | } | ||
2349 | |||
2350 | static int setplane_internal(struct drm_plane *plane, | ||
2351 | struct drm_crtc *crtc, | ||
2352 | struct drm_framebuffer *fb, | ||
2353 | int32_t crtc_x, int32_t crtc_y, | ||
2354 | uint32_t crtc_w, uint32_t crtc_h, | ||
2355 | /* src_{x,y,w,h} values are 16.16 fixed point */ | ||
2356 | uint32_t src_x, uint32_t src_y, | ||
2357 | uint32_t src_w, uint32_t src_h) | ||
2358 | { | ||
2359 | int ret; | ||
2360 | |||
2361 | drm_modeset_lock_all(plane->dev); | ||
2362 | ret = __setplane_internal(plane, crtc, fb, | ||
2363 | crtc_x, crtc_y, crtc_w, crtc_h, | ||
2364 | src_x, src_y, src_w, src_h); | ||
2365 | drm_modeset_unlock_all(plane->dev); | ||
2351 | 2366 | ||
2367 | return ret; | ||
2352 | } | 2368 | } |
2353 | 2369 | ||
2354 | /** | 2370 | /** |
@@ -2714,6 +2730,7 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc, | |||
2714 | int ret = 0; | 2730 | int ret = 0; |
2715 | 2731 | ||
2716 | BUG_ON(!crtc->cursor); | 2732 | BUG_ON(!crtc->cursor); |
2733 | WARN_ON(crtc->cursor->crtc != crtc && crtc->cursor->crtc != NULL); | ||
2717 | 2734 | ||
2718 | /* | 2735 | /* |
2719 | * Obtain fb we'll be using (either new or existing) and take an extra | 2736 | * Obtain fb we'll be using (either new or existing) and take an extra |
@@ -2733,11 +2750,9 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc, | |||
2733 | fb = NULL; | 2750 | fb = NULL; |
2734 | } | 2751 | } |
2735 | } else { | 2752 | } else { |
2736 | mutex_lock(&dev->mode_config.mutex); | ||
2737 | fb = crtc->cursor->fb; | 2753 | fb = crtc->cursor->fb; |
2738 | if (fb) | 2754 | if (fb) |
2739 | drm_framebuffer_reference(fb); | 2755 | drm_framebuffer_reference(fb); |
2740 | mutex_unlock(&dev->mode_config.mutex); | ||
2741 | } | 2756 | } |
2742 | 2757 | ||
2743 | if (req->flags & DRM_MODE_CURSOR_MOVE) { | 2758 | if (req->flags & DRM_MODE_CURSOR_MOVE) { |
@@ -2759,7 +2774,7 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc, | |||
2759 | * setplane_internal will take care of deref'ing either the old or new | 2774 | * setplane_internal will take care of deref'ing either the old or new |
2760 | * framebuffer depending on success. | 2775 | * framebuffer depending on success. |
2761 | */ | 2776 | */ |
2762 | ret = setplane_internal(crtc->cursor, crtc, fb, | 2777 | ret = __setplane_internal(crtc->cursor, crtc, fb, |
2763 | crtc_x, crtc_y, crtc_w, crtc_h, | 2778 | crtc_x, crtc_y, crtc_w, crtc_h, |
2764 | 0, 0, src_w, src_h); | 2779 | 0, 0, src_w, src_h); |
2765 | 2780 | ||
@@ -2795,10 +2810,12 @@ static int drm_mode_cursor_common(struct drm_device *dev, | |||
2795 | * If this crtc has a universal cursor plane, call that plane's update | 2810 | * If this crtc has a universal cursor plane, call that plane's update |
2796 | * handler rather than using legacy cursor handlers. | 2811 | * handler rather than using legacy cursor handlers. |
2797 | */ | 2812 | */ |
2798 | if (crtc->cursor) | ||
2799 | return drm_mode_cursor_universal(crtc, req, file_priv); | ||
2800 | |||
2801 | drm_modeset_lock_crtc(crtc); | 2813 | drm_modeset_lock_crtc(crtc); |
2814 | if (crtc->cursor) { | ||
2815 | ret = drm_mode_cursor_universal(crtc, req, file_priv); | ||
2816 | goto out; | ||
2817 | } | ||
2818 | |||
2802 | if (req->flags & DRM_MODE_CURSOR_BO) { | 2819 | if (req->flags & DRM_MODE_CURSOR_BO) { |
2803 | if (!crtc->funcs->cursor_set && !crtc->funcs->cursor_set2) { | 2820 | if (!crtc->funcs->cursor_set && !crtc->funcs->cursor_set2) { |
2804 | ret = -ENXIO; | 2821 | ret = -ENXIO; |
@@ -3383,7 +3400,16 @@ void drm_fb_release(struct drm_file *priv) | |||
3383 | struct drm_device *dev = priv->minor->dev; | 3400 | struct drm_device *dev = priv->minor->dev; |
3384 | struct drm_framebuffer *fb, *tfb; | 3401 | struct drm_framebuffer *fb, *tfb; |
3385 | 3402 | ||
3386 | mutex_lock(&priv->fbs_lock); | 3403 | /* |
3404 | * When the file gets released that means no one else can access the fb | ||
3405 | * list any more, so no need to grab fpriv->fbs_lock. And we need to to | ||
3406 | * avoid upsetting lockdep since the universal cursor code adds a | ||
3407 | * framebuffer while holding mutex locks. | ||
3408 | * | ||
3409 | * Note that a real deadlock between fpriv->fbs_lock and the modeset | ||
3410 | * locks is impossible here since no one else but this function can get | ||
3411 | * at it any more. | ||
3412 | */ | ||
3387 | list_for_each_entry_safe(fb, tfb, &priv->fbs, filp_head) { | 3413 | list_for_each_entry_safe(fb, tfb, &priv->fbs, filp_head) { |
3388 | 3414 | ||
3389 | mutex_lock(&dev->mode_config.fb_lock); | 3415 | mutex_lock(&dev->mode_config.fb_lock); |
@@ -3396,7 +3422,6 @@ void drm_fb_release(struct drm_file *priv) | |||
3396 | /* This will also drop the fpriv->fbs reference. */ | 3422 | /* This will also drop the fpriv->fbs reference. */ |
3397 | drm_framebuffer_remove(fb); | 3423 | drm_framebuffer_remove(fb); |
3398 | } | 3424 | } |
3399 | mutex_unlock(&priv->fbs_lock); | ||
3400 | } | 3425 | } |
3401 | 3426 | ||
3402 | /** | 3427 | /** |
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 80ff94ada75e..5ef03c216a27 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c | |||
@@ -126,6 +126,9 @@ static void drm_update_vblank_count(struct drm_device *dev, int crtc) | |||
126 | DRM_DEBUG("updating vblank count on crtc %d, missed %d\n", | 126 | DRM_DEBUG("updating vblank count on crtc %d, missed %d\n", |
127 | crtc, diff); | 127 | crtc, diff); |
128 | 128 | ||
129 | if (diff == 0) | ||
130 | return; | ||
131 | |||
129 | /* Reinitialize corresponding vblank timestamp if high-precision query | 132 | /* Reinitialize corresponding vblank timestamp if high-precision query |
130 | * available. Skip this step if query unsupported or failed. Will | 133 | * available. Skip this step if query unsupported or failed. Will |
131 | * reinitialize delayed at next vblank interrupt in that case. | 134 | * reinitialize delayed at next vblank interrupt in that case. |
@@ -1074,7 +1077,7 @@ void drm_wait_one_vblank(struct drm_device *dev, int crtc) | |||
1074 | u32 last; | 1077 | u32 last; |
1075 | 1078 | ||
1076 | ret = drm_vblank_get(dev, crtc); | 1079 | ret = drm_vblank_get(dev, crtc); |
1077 | if (WARN_ON(ret)) | 1080 | if (WARN(ret, "vblank not available on crtc %i, ret=%i\n", crtc, ret)) |
1078 | return; | 1081 | return; |
1079 | 1082 | ||
1080 | last = drm_vblank_count(dev, crtc); | 1083 | last = drm_vblank_count(dev, crtc); |
@@ -1083,7 +1086,7 @@ void drm_wait_one_vblank(struct drm_device *dev, int crtc) | |||
1083 | last != drm_vblank_count(dev, crtc), | 1086 | last != drm_vblank_count(dev, crtc), |
1084 | msecs_to_jiffies(100)); | 1087 | msecs_to_jiffies(100)); |
1085 | 1088 | ||
1086 | WARN_ON(ret == 0); | 1089 | WARN(ret == 0, "vblank wait timed out on crtc %i\n", crtc); |
1087 | 1090 | ||
1088 | drm_vblank_put(dev, crtc); | 1091 | drm_vblank_put(dev, crtc); |
1089 | } | 1092 | } |
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c index d0dd3bea8aa5..ddd90ddbc200 100644 --- a/drivers/gpu/drm/gma500/framebuffer.c +++ b/drivers/gpu/drm/gma500/framebuffer.c | |||
@@ -540,7 +540,8 @@ static void psbfb_gamma_get(struct drm_crtc *crtc, u16 *red, | |||
540 | static int psbfb_probe(struct drm_fb_helper *helper, | 540 | static int psbfb_probe(struct drm_fb_helper *helper, |
541 | struct drm_fb_helper_surface_size *sizes) | 541 | struct drm_fb_helper_surface_size *sizes) |
542 | { | 542 | { |
543 | struct psb_fbdev *psb_fbdev = (struct psb_fbdev *)helper; | 543 | struct psb_fbdev *psb_fbdev = |
544 | container_of(helper, struct psb_fbdev, psb_fb_helper); | ||
544 | struct drm_device *dev = psb_fbdev->psb_fb_helper.dev; | 545 | struct drm_device *dev = psb_fbdev->psb_fb_helper.dev; |
545 | struct drm_psb_private *dev_priv = dev->dev_private; | 546 | struct drm_psb_private *dev_priv = dev->dev_private; |
546 | int bytespp; | 547 | int bytespp; |
diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c b/drivers/gpu/drm/mgag200/mgag200_fb.c index 5451dc58eff1..4415af3666ab 100644 --- a/drivers/gpu/drm/mgag200/mgag200_fb.c +++ b/drivers/gpu/drm/mgag200/mgag200_fb.c | |||
@@ -158,7 +158,8 @@ static int mgag200fb_create_object(struct mga_fbdev *afbdev, | |||
158 | static int mgag200fb_create(struct drm_fb_helper *helper, | 158 | static int mgag200fb_create(struct drm_fb_helper *helper, |
159 | struct drm_fb_helper_surface_size *sizes) | 159 | struct drm_fb_helper_surface_size *sizes) |
160 | { | 160 | { |
161 | struct mga_fbdev *mfbdev = (struct mga_fbdev *)helper; | 161 | struct mga_fbdev *mfbdev = |
162 | container_of(helper, struct mga_fbdev, helper); | ||
162 | struct drm_device *dev = mfbdev->helper.dev; | 163 | struct drm_device *dev = mfbdev->helper.dev; |
163 | struct drm_mode_fb_cmd2 mode_cmd; | 164 | struct drm_mode_fb_cmd2 mode_cmd; |
164 | struct mga_device *mdev = dev->dev_private; | 165 | struct mga_device *mdev = dev->dev_private; |
diff --git a/drivers/gpu/drm/nouveau/dispnv04/overlay.c b/drivers/gpu/drm/nouveau/dispnv04/overlay.c index b36afcbbc83f..1e9056a8df94 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/overlay.c +++ b/drivers/gpu/drm/nouveau/dispnv04/overlay.c | |||
@@ -97,7 +97,8 @@ nv10_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, | |||
97 | uint32_t src_w, uint32_t src_h) | 97 | uint32_t src_w, uint32_t src_h) |
98 | { | 98 | { |
99 | struct nvif_device *dev = &nouveau_drm(plane->dev)->device; | 99 | struct nvif_device *dev = &nouveau_drm(plane->dev)->device; |
100 | struct nouveau_plane *nv_plane = (struct nouveau_plane *)plane; | 100 | struct nouveau_plane *nv_plane = |
101 | container_of(plane, struct nouveau_plane, base); | ||
101 | struct nouveau_framebuffer *nv_fb = nouveau_framebuffer(fb); | 102 | struct nouveau_framebuffer *nv_fb = nouveau_framebuffer(fb); |
102 | struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); | 103 | struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); |
103 | struct nouveau_bo *cur = nv_plane->cur; | 104 | struct nouveau_bo *cur = nv_plane->cur; |
@@ -173,7 +174,8 @@ static int | |||
173 | nv10_disable_plane(struct drm_plane *plane) | 174 | nv10_disable_plane(struct drm_plane *plane) |
174 | { | 175 | { |
175 | struct nvif_device *dev = &nouveau_drm(plane->dev)->device; | 176 | struct nvif_device *dev = &nouveau_drm(plane->dev)->device; |
176 | struct nouveau_plane *nv_plane = (struct nouveau_plane *)plane; | 177 | struct nouveau_plane *nv_plane = |
178 | container_of(plane, struct nouveau_plane, base); | ||
177 | 179 | ||
178 | nvif_wr32(dev, NV_PVIDEO_STOP, 1); | 180 | nvif_wr32(dev, NV_PVIDEO_STOP, 1); |
179 | if (nv_plane->cur) { | 181 | if (nv_plane->cur) { |
@@ -224,7 +226,8 @@ nv_set_property(struct drm_plane *plane, | |||
224 | struct drm_property *property, | 226 | struct drm_property *property, |
225 | uint64_t value) | 227 | uint64_t value) |
226 | { | 228 | { |
227 | struct nouveau_plane *nv_plane = (struct nouveau_plane *)plane; | 229 | struct nouveau_plane *nv_plane = |
230 | container_of(plane, struct nouveau_plane, base); | ||
228 | 231 | ||
229 | if (property == nv_plane->props.colorkey) | 232 | if (property == nv_plane->props.colorkey) |
230 | nv_plane->colorkey = value; | 233 | nv_plane->colorkey = value; |
@@ -344,7 +347,8 @@ nv04_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, | |||
344 | uint32_t src_w, uint32_t src_h) | 347 | uint32_t src_w, uint32_t src_h) |
345 | { | 348 | { |
346 | struct nvif_device *dev = &nouveau_drm(plane->dev)->device; | 349 | struct nvif_device *dev = &nouveau_drm(plane->dev)->device; |
347 | struct nouveau_plane *nv_plane = (struct nouveau_plane *)plane; | 350 | struct nouveau_plane *nv_plane = |
351 | container_of(plane, struct nouveau_plane, base); | ||
348 | struct nouveau_framebuffer *nv_fb = nouveau_framebuffer(fb); | 352 | struct nouveau_framebuffer *nv_fb = nouveau_framebuffer(fb); |
349 | struct nouveau_bo *cur = nv_plane->cur; | 353 | struct nouveau_bo *cur = nv_plane->cur; |
350 | uint32_t overlay = 1; | 354 | uint32_t overlay = 1; |
@@ -423,7 +427,8 @@ static int | |||
423 | nv04_disable_plane(struct drm_plane *plane) | 427 | nv04_disable_plane(struct drm_plane *plane) |
424 | { | 428 | { |
425 | struct nvif_device *dev = &nouveau_drm(plane->dev)->device; | 429 | struct nvif_device *dev = &nouveau_drm(plane->dev)->device; |
426 | struct nouveau_plane *nv_plane = (struct nouveau_plane *)plane; | 430 | struct nouveau_plane *nv_plane = |
431 | container_of(plane, struct nouveau_plane, base); | ||
427 | 432 | ||
428 | nvif_mask(dev, NV_PVIDEO_OVERLAY, 1, 0); | 433 | nvif_mask(dev, NV_PVIDEO_OVERLAY, 1, 0); |
429 | nvif_wr32(dev, NV_PVIDEO_OE_STATE, 0); | 434 | nvif_wr32(dev, NV_PVIDEO_OE_STATE, 0); |
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c index f0ae10ca3ba9..dc1753c368e3 100644 --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c | |||
@@ -308,7 +308,8 @@ static int | |||
308 | nouveau_fbcon_create(struct drm_fb_helper *helper, | 308 | nouveau_fbcon_create(struct drm_fb_helper *helper, |
309 | struct drm_fb_helper_surface_size *sizes) | 309 | struct drm_fb_helper_surface_size *sizes) |
310 | { | 310 | { |
311 | struct nouveau_fbdev *fbcon = (struct nouveau_fbdev *)helper; | 311 | struct nouveau_fbdev *fbcon = |
312 | container_of(helper, struct nouveau_fbdev, helper); | ||
312 | struct drm_device *dev = fbcon->dev; | 313 | struct drm_device *dev = fbcon->dev; |
313 | struct nouveau_drm *drm = nouveau_drm(dev); | 314 | struct nouveau_drm *drm = nouveau_drm(dev); |
314 | struct nvif_device *device = &drm->device; | 315 | struct nvif_device *device = &drm->device; |
diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c index df567888bb1e..3d7c1d00a424 100644 --- a/drivers/gpu/drm/qxl/qxl_fb.c +++ b/drivers/gpu/drm/qxl/qxl_fb.c | |||
@@ -625,7 +625,8 @@ static int qxl_fb_find_or_create_single( | |||
625 | struct drm_fb_helper *helper, | 625 | struct drm_fb_helper *helper, |
626 | struct drm_fb_helper_surface_size *sizes) | 626 | struct drm_fb_helper_surface_size *sizes) |
627 | { | 627 | { |
628 | struct qxl_fbdev *qfbdev = (struct qxl_fbdev *)helper; | 628 | struct qxl_fbdev *qfbdev = |
629 | container_of(helper, struct qxl_fbdev, helper); | ||
629 | int new_fb = 0; | 630 | int new_fb = 0; |
630 | int ret; | 631 | int ret; |
631 | 632 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c index 94b0f2aa3d7c..0ea1db83d573 100644 --- a/drivers/gpu/drm/radeon/radeon_fb.c +++ b/drivers/gpu/drm/radeon/radeon_fb.c | |||
@@ -189,7 +189,8 @@ out_unref: | |||
189 | static int radeonfb_create(struct drm_fb_helper *helper, | 189 | static int radeonfb_create(struct drm_fb_helper *helper, |
190 | struct drm_fb_helper_surface_size *sizes) | 190 | struct drm_fb_helper_surface_size *sizes) |
191 | { | 191 | { |
192 | struct radeon_fbdev *rfbdev = (struct radeon_fbdev *)helper; | 192 | struct radeon_fbdev *rfbdev = |
193 | container_of(helper, struct radeon_fbdev, helper); | ||
193 | struct radeon_device *rdev = rfbdev->rdev; | 194 | struct radeon_device *rdev = rfbdev->rdev; |
194 | struct fb_info *info; | 195 | struct fb_info *info; |
195 | struct drm_framebuffer *fb = NULL; | 196 | struct drm_framebuffer *fb = NULL; |
diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c index d1da339843ca..8cbcb4589bd3 100644 --- a/drivers/gpu/drm/udl/udl_fb.c +++ b/drivers/gpu/drm/udl/udl_fb.c | |||
@@ -472,7 +472,8 @@ udl_framebuffer_init(struct drm_device *dev, | |||
472 | static int udlfb_create(struct drm_fb_helper *helper, | 472 | static int udlfb_create(struct drm_fb_helper *helper, |
473 | struct drm_fb_helper_surface_size *sizes) | 473 | struct drm_fb_helper_surface_size *sizes) |
474 | { | 474 | { |
475 | struct udl_fbdev *ufbdev = (struct udl_fbdev *)helper; | 475 | struct udl_fbdev *ufbdev = |
476 | container_of(helper, struct udl_fbdev, helper); | ||
476 | struct drm_device *dev = ufbdev->helper.dev; | 477 | struct drm_device *dev = ufbdev->helper.dev; |
477 | struct fb_info *info; | 478 | struct fb_info *info; |
478 | struct device *device = dev->dev; | 479 | struct device *device = dev->dev; |