diff options
author | Dave Airlie <airlied@gmail.com> | 2011-01-11 20:39:48 -0500 |
---|---|---|
committer | Dave Airlie <airlied@gmail.com> | 2011-01-11 20:39:48 -0500 |
commit | d15eda5c6edff4987af6f4423af0bab0c3251e74 (patch) | |
tree | 87400cdc5f74d1258b6456b88beaf6fc3dc5f97a /drivers/char | |
parent | a46f3108b1cd8bf11d46ac8a5f30df6f6dbdf738 (diff) |
i915/gtt: fix ordering causing DMAR errors on object teardown.
Previous to the last GTT rework we always rewrote the GTT then unmapped the
object, somehow this got reversed in the rework in 2.6.37-rc5 timeframe.
This fix needs to go to stable in an alternate form since the code changed.
This fixes DMAR reports on my Ironlake HP2540p.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/agp/intel-gtt.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c index b7c0c7ee67c8..e921b693412b 100644 --- a/drivers/char/agp/intel-gtt.c +++ b/drivers/char/agp/intel-gtt.c | |||
@@ -1000,14 +1000,14 @@ static int intel_fake_agp_remove_entries(struct agp_memory *mem, | |||
1000 | if (mem->page_count == 0) | 1000 | if (mem->page_count == 0) |
1001 | return 0; | 1001 | return 0; |
1002 | 1002 | ||
1003 | intel_gtt_clear_range(pg_start, mem->page_count); | ||
1004 | |||
1003 | if (intel_private.base.needs_dmar) { | 1005 | if (intel_private.base.needs_dmar) { |
1004 | intel_gtt_unmap_memory(mem->sg_list, mem->num_sg); | 1006 | intel_gtt_unmap_memory(mem->sg_list, mem->num_sg); |
1005 | mem->sg_list = NULL; | 1007 | mem->sg_list = NULL; |
1006 | mem->num_sg = 0; | 1008 | mem->num_sg = 0; |
1007 | } | 1009 | } |
1008 | 1010 | ||
1009 | intel_gtt_clear_range(pg_start, mem->page_count); | ||
1010 | |||
1011 | return 0; | 1011 | return 0; |
1012 | } | 1012 | } |
1013 | 1013 | ||