diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 75061b305b8c..15d2d93aaca9 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -2241,6 +2241,7 @@ i915_gem_object_get_pages(struct drm_gem_object *obj, | |||
2241 | page = read_cache_page_gfp(mapping, i, | 2241 | page = read_cache_page_gfp(mapping, i, |
2242 | GFP_HIGHUSER | | 2242 | GFP_HIGHUSER | |
2243 | __GFP_COLD | | 2243 | __GFP_COLD | |
2244 | __GFP_RECLAIMABLE | | ||
2244 | gfpmask); | 2245 | gfpmask); |
2245 | if (IS_ERR(page)) | 2246 | if (IS_ERR(page)) |
2246 | goto err_pages; | 2247 | goto err_pages; |
@@ -4739,6 +4740,16 @@ i915_gem_load(struct drm_device *dev) | |||
4739 | list_add(&dev_priv->mm.shrink_list, &shrink_list); | 4740 | list_add(&dev_priv->mm.shrink_list, &shrink_list); |
4740 | spin_unlock(&shrink_list_lock); | 4741 | spin_unlock(&shrink_list_lock); |
4741 | 4742 | ||
4743 | /* On GEN3 we really need to make sure the ARB C3 LP bit is set */ | ||
4744 | if (IS_GEN3(dev)) { | ||
4745 | u32 tmp = I915_READ(MI_ARB_STATE); | ||
4746 | if (!(tmp & MI_ARB_C3_LP_WRITE_ENABLE)) { | ||
4747 | /* arb state is a masked write, so set bit + bit in mask */ | ||
4748 | tmp = MI_ARB_C3_LP_WRITE_ENABLE | (MI_ARB_C3_LP_WRITE_ENABLE << MI_ARB_MASK_SHIFT); | ||
4749 | I915_WRITE(MI_ARB_STATE, tmp); | ||
4750 | } | ||
4751 | } | ||
4752 | |||
4742 | /* Old X drivers will take 0-2 for front, back, depth buffers */ | 4753 | /* Old X drivers will take 0-2 for front, back, depth buffers */ |
4743 | if (!drm_core_check_feature(dev, DRIVER_MODESET)) | 4754 | if (!drm_core_check_feature(dev, DRIVER_MODESET)) |
4744 | dev_priv->fence_reg_start = 3; | 4755 | dev_priv->fence_reg_start = 3; |
@@ -4975,7 +4986,7 @@ i915_gpu_is_active(struct drm_device *dev) | |||
4975 | } | 4986 | } |
4976 | 4987 | ||
4977 | static int | 4988 | static int |
4978 | i915_gem_shrink(int nr_to_scan, gfp_t gfp_mask) | 4989 | i915_gem_shrink(struct shrinker *shrink, int nr_to_scan, gfp_t gfp_mask) |
4979 | { | 4990 | { |
4980 | drm_i915_private_t *dev_priv, *next_dev; | 4991 | drm_i915_private_t *dev_priv, *next_dev; |
4981 | struct drm_i915_gem_object *obj_priv, *next_obj; | 4992 | struct drm_i915_gem_object *obj_priv, *next_obj; |