diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index cc2ca5561feb..14afc23a0e24 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -1623,6 +1623,8 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment) | |||
1623 | struct drm_mm_node *free_space; | 1623 | struct drm_mm_node *free_space; |
1624 | int page_count, ret; | 1624 | int page_count, ret; |
1625 | 1625 | ||
1626 | if (dev_priv->mm.suspended) | ||
1627 | return -EBUSY; | ||
1626 | if (alignment == 0) | 1628 | if (alignment == 0) |
1627 | alignment = PAGE_SIZE; | 1629 | alignment = PAGE_SIZE; |
1628 | if (alignment & (PAGE_SIZE - 1)) { | 1630 | if (alignment & (PAGE_SIZE - 1)) { |
@@ -2641,7 +2643,7 @@ i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment) | |||
2641 | if (obj_priv->gtt_space == NULL) { | 2643 | if (obj_priv->gtt_space == NULL) { |
2642 | ret = i915_gem_object_bind_to_gtt(obj, alignment); | 2644 | ret = i915_gem_object_bind_to_gtt(obj, alignment); |
2643 | if (ret != 0) { | 2645 | if (ret != 0) { |
2644 | if (ret != -ERESTARTSYS) | 2646 | if (ret != -EBUSY && ret != -ERESTARTSYS) |
2645 | DRM_ERROR("Failure to bind: %d", ret); | 2647 | DRM_ERROR("Failure to bind: %d", ret); |
2646 | return ret; | 2648 | return ret; |
2647 | } | 2649 | } |
@@ -3219,20 +3221,21 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data, | |||
3219 | dev_priv->mm.wedged = 0; | 3221 | dev_priv->mm.wedged = 0; |
3220 | } | 3222 | } |
3221 | 3223 | ||
3222 | ret = i915_gem_init_ringbuffer(dev); | ||
3223 | if (ret != 0) | ||
3224 | return ret; | ||
3225 | |||
3226 | dev_priv->mm.gtt_mapping = io_mapping_create_wc(dev->agp->base, | 3224 | dev_priv->mm.gtt_mapping = io_mapping_create_wc(dev->agp->base, |
3227 | dev->agp->agp_info.aper_size | 3225 | dev->agp->agp_info.aper_size |
3228 | * 1024 * 1024); | 3226 | * 1024 * 1024); |
3229 | 3227 | ||
3230 | mutex_lock(&dev->struct_mutex); | 3228 | mutex_lock(&dev->struct_mutex); |
3229 | dev_priv->mm.suspended = 0; | ||
3230 | |||
3231 | ret = i915_gem_init_ringbuffer(dev); | ||
3232 | if (ret != 0) | ||
3233 | return ret; | ||
3234 | |||
3231 | BUG_ON(!list_empty(&dev_priv->mm.active_list)); | 3235 | BUG_ON(!list_empty(&dev_priv->mm.active_list)); |
3232 | BUG_ON(!list_empty(&dev_priv->mm.flushing_list)); | 3236 | BUG_ON(!list_empty(&dev_priv->mm.flushing_list)); |
3233 | BUG_ON(!list_empty(&dev_priv->mm.inactive_list)); | 3237 | BUG_ON(!list_empty(&dev_priv->mm.inactive_list)); |
3234 | BUG_ON(!list_empty(&dev_priv->mm.request_list)); | 3238 | BUG_ON(!list_empty(&dev_priv->mm.request_list)); |
3235 | dev_priv->mm.suspended = 0; | ||
3236 | mutex_unlock(&dev->struct_mutex); | 3239 | mutex_unlock(&dev->struct_mutex); |
3237 | 3240 | ||
3238 | drm_irq_install(dev); | 3241 | drm_irq_install(dev); |