diff options
| -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 | ||
