diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 6d2180cf3da5..1d4b51c53874 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -3263,6 +3263,7 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev, | |||
3263 | struct drm_i915_private *dev_priv = dev->dev_private; | 3263 | struct drm_i915_private *dev_priv = dev->dev_private; |
3264 | struct drm_i915_gem_object *obj; | 3264 | struct drm_i915_gem_object *obj; |
3265 | struct address_space *mapping; | 3265 | struct address_space *mapping; |
3266 | u32 mask; | ||
3266 | 3267 | ||
3267 | obj = kzalloc(sizeof(*obj), GFP_KERNEL); | 3268 | obj = kzalloc(sizeof(*obj), GFP_KERNEL); |
3268 | if (obj == NULL) | 3269 | if (obj == NULL) |
@@ -3273,8 +3274,15 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev, | |||
3273 | return NULL; | 3274 | return NULL; |
3274 | } | 3275 | } |
3275 | 3276 | ||
3277 | mask = GFP_HIGHUSER | __GFP_RECLAIMABLE; | ||
3278 | if (IS_CRESTLINE(dev) || IS_BROADWATER(dev)) { | ||
3279 | /* 965gm cannot relocate objects above 4GiB. */ | ||
3280 | mask &= ~__GFP_HIGHMEM; | ||
3281 | mask |= __GFP_DMA32; | ||
3282 | } | ||
3283 | |||
3276 | mapping = obj->base.filp->f_path.dentry->d_inode->i_mapping; | 3284 | mapping = obj->base.filp->f_path.dentry->d_inode->i_mapping; |
3277 | mapping_set_gfp_mask(mapping, GFP_HIGHUSER | __GFP_RECLAIMABLE); | 3285 | mapping_set_gfp_mask(mapping, mask); |
3278 | 3286 | ||
3279 | i915_gem_info_add_obj(dev_priv, size); | 3287 | i915_gem_info_add_obj(dev_priv, size); |
3280 | 3288 | ||