diff options
author | Dave Airlie <airlied@redhat.com> | 2011-12-20 09:43:53 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-12-20 09:43:53 -0500 |
commit | 1fbe6f625f69e48c4001051dc1431afc704acfaa (patch) | |
tree | 826b741201a2e09a627ed350c6ff36935f5cff79 /drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | |
parent | 0cecdd818cd79d092e36e70dfe3a71f2878d6b96 (diff) | |
parent | 384703b8e6cd4c8ef08512e596024e028c91c339 (diff) |
Merge tag 'v3.2-rc6' of /home/airlied/devel/kernel/linux-2.6 into drm-core-next
Merge in the upstream tree to bring in the mainline fixes.
Conflicts:
drivers/gpu/drm/exynos/exynos_drm_fbdev.c
drivers/gpu/drm/nouveau/nouveau_sgdma.c
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_kms.c')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index 0585987f2945..1748a7142aca 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | |||
@@ -105,6 +105,10 @@ int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, | |||
105 | struct vmw_dma_buffer *dmabuf = NULL; | 105 | struct vmw_dma_buffer *dmabuf = NULL; |
106 | int ret; | 106 | int ret; |
107 | 107 | ||
108 | /* A lot of the code assumes this */ | ||
109 | if (handle && (width != 64 || height != 64)) | ||
110 | return -EINVAL; | ||
111 | |||
108 | if (handle) { | 112 | if (handle) { |
109 | ret = vmw_user_surface_lookup_handle(dev_priv, tfile, | 113 | ret = vmw_user_surface_lookup_handle(dev_priv, tfile, |
110 | handle, &surface); | 114 | handle, &surface); |
@@ -410,8 +414,9 @@ static int do_surface_dirty_sou(struct vmw_private *dev_priv, | |||
410 | top = clips->y1; | 414 | top = clips->y1; |
411 | bottom = clips->y2; | 415 | bottom = clips->y2; |
412 | 416 | ||
413 | clips_ptr = clips; | 417 | /* skip the first clip rect */ |
414 | for (i = 1; i < num_clips; i++, clips_ptr += inc) { | 418 | for (i = 1, clips_ptr = clips + inc; |
419 | i < num_clips; i++, clips_ptr += inc) { | ||
415 | left = min_t(int, left, (int)clips_ptr->x1); | 420 | left = min_t(int, left, (int)clips_ptr->x1); |
416 | right = max_t(int, right, (int)clips_ptr->x2); | 421 | right = max_t(int, right, (int)clips_ptr->x2); |
417 | top = min_t(int, top, (int)clips_ptr->y1); | 422 | top = min_t(int, top, (int)clips_ptr->y1); |
@@ -1331,7 +1336,10 @@ int vmw_kms_close(struct vmw_private *dev_priv) | |||
1331 | * drm_encoder_cleanup which takes the lock we deadlock. | 1336 | * drm_encoder_cleanup which takes the lock we deadlock. |
1332 | */ | 1337 | */ |
1333 | drm_mode_config_cleanup(dev_priv->dev); | 1338 | drm_mode_config_cleanup(dev_priv->dev); |
1334 | vmw_kms_close_legacy_display_system(dev_priv); | 1339 | if (dev_priv->sou_priv) |
1340 | vmw_kms_close_screen_object_display(dev_priv); | ||
1341 | else | ||
1342 | vmw_kms_close_legacy_display_system(dev_priv); | ||
1335 | return 0; | 1343 | return 0; |
1336 | } | 1344 | } |
1337 | 1345 | ||
@@ -1809,7 +1817,8 @@ int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data, | |||
1809 | } | 1817 | } |
1810 | 1818 | ||
1811 | rects_size = arg->num_outputs * sizeof(struct drm_vmw_rect); | 1819 | rects_size = arg->num_outputs * sizeof(struct drm_vmw_rect); |
1812 | rects = kzalloc(rects_size, GFP_KERNEL); | 1820 | rects = kcalloc(arg->num_outputs, sizeof(struct drm_vmw_rect), |
1821 | GFP_KERNEL); | ||
1813 | if (unlikely(!rects)) { | 1822 | if (unlikely(!rects)) { |
1814 | ret = -ENOMEM; | 1823 | ret = -ENOMEM; |
1815 | goto out_unlock; | 1824 | goto out_unlock; |
@@ -1824,10 +1833,10 @@ int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data, | |||
1824 | } | 1833 | } |
1825 | 1834 | ||
1826 | for (i = 0; i < arg->num_outputs; ++i) { | 1835 | for (i = 0; i < arg->num_outputs; ++i) { |
1827 | if (rects->x < 0 || | 1836 | if (rects[i].x < 0 || |
1828 | rects->y < 0 || | 1837 | rects[i].y < 0 || |
1829 | rects->x + rects->w > mode_config->max_width || | 1838 | rects[i].x + rects[i].w > mode_config->max_width || |
1830 | rects->y + rects->h > mode_config->max_height) { | 1839 | rects[i].y + rects[i].h > mode_config->max_height) { |
1831 | DRM_ERROR("Invalid GUI layout.\n"); | 1840 | DRM_ERROR("Invalid GUI layout.\n"); |
1832 | ret = -EINVAL; | 1841 | ret = -EINVAL; |
1833 | goto out_free; | 1842 | goto out_free; |