diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_fb.c')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c index 870967a97c15..e7304188a784 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | |||
@@ -144,6 +144,13 @@ static int vmw_fb_check_var(struct fb_var_screeninfo *var, | |||
144 | return -EINVAL; | 144 | return -EINVAL; |
145 | } | 145 | } |
146 | 146 | ||
147 | if (!vmw_kms_validate_mode_vram(vmw_priv, | ||
148 | info->fix.line_length, | ||
149 | var->yoffset + var->yres)) { | ||
150 | DRM_ERROR("Requested geom can not fit in framebuffer\n"); | ||
151 | return -EINVAL; | ||
152 | } | ||
153 | |||
147 | return 0; | 154 | return 0; |
148 | } | 155 | } |
149 | 156 | ||
@@ -205,6 +212,9 @@ static void vmw_fb_dirty_flush(struct vmw_fb_par *par) | |||
205 | SVGAFifoCmdUpdate body; | 212 | SVGAFifoCmdUpdate body; |
206 | } *cmd; | 213 | } *cmd; |
207 | 214 | ||
215 | if (vmw_priv->suspended) | ||
216 | return; | ||
217 | |||
208 | spin_lock_irqsave(&par->dirty.lock, flags); | 218 | spin_lock_irqsave(&par->dirty.lock, flags); |
209 | if (!par->dirty.active) { | 219 | if (!par->dirty.active) { |
210 | spin_unlock_irqrestore(&par->dirty.lock, flags); | 220 | spin_unlock_irqrestore(&par->dirty.lock, flags); |
@@ -602,6 +612,7 @@ int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv, | |||
602 | { | 612 | { |
603 | struct ttm_buffer_object *bo = &vmw_bo->base; | 613 | struct ttm_buffer_object *bo = &vmw_bo->base; |
604 | struct ttm_placement ne_placement = vmw_vram_ne_placement; | 614 | struct ttm_placement ne_placement = vmw_vram_ne_placement; |
615 | struct drm_mm_node *mm_node; | ||
605 | int ret = 0; | 616 | int ret = 0; |
606 | 617 | ||
607 | ne_placement.lpfn = bo->num_pages; | 618 | ne_placement.lpfn = bo->num_pages; |
@@ -615,6 +626,12 @@ int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv, | |||
615 | if (unlikely(ret != 0)) | 626 | if (unlikely(ret != 0)) |
616 | goto err_unlock; | 627 | goto err_unlock; |
617 | 628 | ||
629 | mm_node = bo->mem.mm_node; | ||
630 | if (bo->mem.mem_type == TTM_PL_VRAM && | ||
631 | mm_node->start < bo->num_pages) | ||
632 | (void) ttm_bo_validate(bo, &vmw_sys_placement, false, | ||
633 | false, false); | ||
634 | |||
618 | ret = ttm_bo_validate(bo, &ne_placement, false, false, false); | 635 | ret = ttm_bo_validate(bo, &ne_placement, false, false, false); |
619 | 636 | ||
620 | /* Could probably bug on */ | 637 | /* Could probably bug on */ |