]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/gpu/drm/i915/i915_gem.c
drm/i915: Don't allow objects to get bound while VT switched.
[linux-2.6-omap-h63xx.git] / drivers / gpu / drm / i915 / i915_gem.c
index cc2ca5561feb5add0ebac9bd6d3a7d58e4008c4c..14afc23a0e240301744151f10de5dd464d8f24cc 100644 (file)
@@ -1623,6 +1623,8 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment)
        struct drm_mm_node *free_space;
        int page_count, ret;
 
+       if (dev_priv->mm.suspended)
+               return -EBUSY;
        if (alignment == 0)
                alignment = PAGE_SIZE;
        if (alignment & (PAGE_SIZE - 1)) {
@@ -2641,7 +2643,7 @@ i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment)
        if (obj_priv->gtt_space == NULL) {
                ret = i915_gem_object_bind_to_gtt(obj, alignment);
                if (ret != 0) {
-                       if (ret != -ERESTARTSYS)
+                       if (ret != -EBUSY && ret != -ERESTARTSYS)
                                DRM_ERROR("Failure to bind: %d", ret);
                        return ret;
                }
@@ -3219,20 +3221,21 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
                dev_priv->mm.wedged = 0;
        }
 
-       ret = i915_gem_init_ringbuffer(dev);
-       if (ret != 0)
-               return ret;
-
        dev_priv->mm.gtt_mapping = io_mapping_create_wc(dev->agp->base,
                                                        dev->agp->agp_info.aper_size
                                                        * 1024 * 1024);
 
        mutex_lock(&dev->struct_mutex);
+       dev_priv->mm.suspended = 0;
+
+       ret = i915_gem_init_ringbuffer(dev);
+       if (ret != 0)
+               return ret;
+
        BUG_ON(!list_empty(&dev_priv->mm.active_list));
        BUG_ON(!list_empty(&dev_priv->mm.flushing_list));
        BUG_ON(!list_empty(&dev_priv->mm.inactive_list));
        BUG_ON(!list_empty(&dev_priv->mm.request_list));
-       dev_priv->mm.suspended = 0;
        mutex_unlock(&dev->struct_mutex);
 
        drm_irq_install(dev);