diff --git a/linux-core/i915_gem.c b/linux-core/i915_gem.c index b287089..6ccf0d5 100644 --- a/linux-core/i915_gem.c +++ b/linux-core/i915_gem.c @@ -42,27 +42,38 @@ i915_gem_object_set_domain(struct drm_gem_object *obj, uint32_t write_domain); int -i915_gem_init_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv) +i915_gem_do_init(struct drm_device *dev, unsigned long start, unsigned long end) { struct drm_i915_private *dev_priv = dev->dev_private; - struct drm_i915_gem_init *args = data; mutex_lock(&dev->struct_mutex); - if (args->gtt_start >= args->gtt_end || - (args->gtt_start & (PAGE_SIZE - 1)) != 0 || - (args->gtt_end & (PAGE_SIZE - 1)) != 0) { + if (start >= end || + (start & (PAGE_SIZE - 1)) != 0 || + (end & (PAGE_SIZE - 1)) != 0) { mutex_unlock(&dev->struct_mutex); return -EINVAL; } - drm_memrange_init(&dev_priv->mm.gtt_space, args->gtt_start, - args->gtt_end - args->gtt_start); + drm_memrange_init(&dev_priv->mm.gtt_space, start, + end - start); mutex_unlock(&dev->struct_mutex); - return 0; +} + +int +i915_gem_init_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + struct drm_i915_gem_init *args = data; + + /* In modesetting we'll do the init ourselves */ + if (drm_core_check_feature(dev, DRIVER_MODESET)) + return 0; + + return i915_gem_do_init(dev, args->gtt_start, args->gtt_end); } static void