diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 11681501d7b1..a77ce9983f69 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -879,9 +879,12 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data, | |||
879 | ret = i915_gem_shmem_pread(dev, obj, args, file); | 879 | ret = i915_gem_shmem_pread(dev, obj, args, file); |
880 | 880 | ||
881 | /* pread for non shmem backed objects */ | 881 | /* pread for non shmem backed objects */ |
882 | if (ret == -EFAULT || ret == -ENODEV) | 882 | if (ret == -EFAULT || ret == -ENODEV) { |
883 | intel_runtime_pm_get(to_i915(dev)); | ||
883 | ret = i915_gem_gtt_pread(dev, obj, args->size, | 884 | ret = i915_gem_gtt_pread(dev, obj, args->size, |
884 | args->offset, args->data_ptr); | 885 | args->offset, args->data_ptr); |
886 | intel_runtime_pm_put(to_i915(dev)); | ||
887 | } | ||
885 | 888 | ||
886 | out: | 889 | out: |
887 | drm_gem_object_unreference(&obj->base); | 890 | drm_gem_object_unreference(&obj->base); |
@@ -1306,7 +1309,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, | |||
1306 | * textures). Fallback to the shmem path in that case. */ | 1309 | * textures). Fallback to the shmem path in that case. */ |
1307 | } | 1310 | } |
1308 | 1311 | ||
1309 | if (ret == -EFAULT) { | 1312 | if (ret == -EFAULT || ret == -ENOSPC) { |
1310 | if (obj->phys_handle) | 1313 | if (obj->phys_handle) |
1311 | ret = i915_gem_phys_pwrite(obj, args, file); | 1314 | ret = i915_gem_phys_pwrite(obj, args, file); |
1312 | else if (i915_gem_object_has_struct_page(obj)) | 1315 | else if (i915_gem_object_has_struct_page(obj)) |
@@ -3169,6 +3172,8 @@ static void i915_gem_reset_engine_cleanup(struct intel_engine_cs *engine) | |||
3169 | } | 3172 | } |
3170 | 3173 | ||
3171 | intel_ring_init_seqno(engine, engine->last_submitted_seqno); | 3174 | intel_ring_init_seqno(engine, engine->last_submitted_seqno); |
3175 | |||
3176 | engine->i915->gt.active_engines &= ~intel_engine_flag(engine); | ||
3172 | } | 3177 | } |
3173 | 3178 | ||
3174 | void i915_gem_reset(struct drm_device *dev) | 3179 | void i915_gem_reset(struct drm_device *dev) |
@@ -3186,6 +3191,7 @@ void i915_gem_reset(struct drm_device *dev) | |||
3186 | 3191 | ||
3187 | for_each_engine(engine, dev_priv) | 3192 | for_each_engine(engine, dev_priv) |
3188 | i915_gem_reset_engine_cleanup(engine); | 3193 | i915_gem_reset_engine_cleanup(engine); |
3194 | mod_delayed_work(dev_priv->wq, &dev_priv->gt.idle_work, 0); | ||
3189 | 3195 | ||
3190 | i915_gem_context_reset(dev); | 3196 | i915_gem_context_reset(dev); |
3191 | 3197 | ||