diff --git a/drm-i915-fix-pipelined-fencing.patch b/drm-i915-fix-pipelined-fencing.patch new file mode 100644 index 000000000..b6c016c54 --- /dev/null +++ b/drm-i915-fix-pipelined-fencing.patch @@ -0,0 +1,80 @@ +From 3b936797f5e4623ae1b80a5f0c4df30a17360bf5 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Thu, 17 Mar 2011 15:23:22 +0000 +Subject: [PATCH] drm/i915: Fix pipelined fencing + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34584 +Cc: Andy Whitcroft +Cc: Daniel Vetter +Signed-off-by: Chris Wilson +--- + drivers/gpu/drm/i915/i915_gem.c | 46 ++++++++++++++++---------------------- + 1 files changed, 19 insertions(+), 27 deletions(-) + +diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c +index 36e66cc..10378a3 100644 +--- a/drivers/gpu/drm/i915/i915_gem.c ++++ b/drivers/gpu/drm/i915/i915_gem.c +@@ -2544,8 +2544,25 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj, + reg = &dev_priv->fence_regs[obj->fence_reg]; + list_move_tail(®->lru_list, &dev_priv->mm.fence_list); + +- if (!obj->fenced_gpu_access && !obj->last_fenced_seqno) +- pipelined = NULL; ++ if (obj->tiling_changed) { ++ ret = i915_gem_object_flush_fence(obj, ++ pipelined, ++ interruptible); ++ if (ret) ++ return ret; ++ ++ if (!obj->fenced_gpu_access && !obj->last_fenced_seqno) ++ pipelined = NULL; ++ ++ if (pipelined) { ++ reg->setup_seqno = ++ i915_gem_next_request_seqno(dev, pipelined); ++ obj->last_fenced_seqno = reg->setup_seqno; ++ obj->last_fenced_ring = pipelined; ++ } ++ ++ goto update; ++ } + + if (!pipelined) { + if (reg->setup_seqno) { +@@ -2568,31 +2585,6 @@ i915_gem_object_get_fence(struct drm_i915_gem_object *obj, + interruptible); + if (ret) + return ret; +- } else if (obj->tiling_changed) { +- if (obj->fenced_gpu_access) { +- if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) { +- ret = i915_gem_flush_ring(obj->base.dev, obj->ring, +- 0, obj->base.write_domain); +- if (ret) +- return ret; +- } +- +- obj->fenced_gpu_access = false; +- } +- } +- +- if (!obj->fenced_gpu_access && !obj->last_fenced_seqno) +- pipelined = NULL; +- BUG_ON(!pipelined && reg->setup_seqno); +- +- if (obj->tiling_changed) { +- if (pipelined) { +- reg->setup_seqno = +- i915_gem_next_request_seqno(dev, pipelined); +- obj->last_fenced_seqno = reg->setup_seqno; +- obj->last_fenced_ring = pipelined; +- } +- goto update; + } + + return 0; +-- +1.5.6.5 + diff --git a/kernel.spec b/kernel.spec index 201973982..8dce0b1a0 100644 --- a/kernel.spec +++ b/kernel.spec @@ -51,7 +51,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be prepended with "0.", so # for example a 3 here will become 0.3 # -%global baserelease 4 +%global baserelease 5 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -672,6 +672,8 @@ Patch1555: fix_xen_guest_on_old_EC2.patch Patch1810: drm-nouveau-updates.patch Patch1819: drm-intel-big-hammer.patch # intel drm is all merged upstream +# fix for 945G corruption will hit stable eventually +Patch1821: drm-i915-fix-pipelined-fencing.patch Patch1824: drm-intel-next.patch # make sure the lvds comes back on lid open Patch1825: drm-intel-make-lvds-work.patch @@ -1306,6 +1308,7 @@ ApplyPatch drm-intel-big-hammer.patch ApplyPatch drm-intel-make-lvds-work.patch ApplyPatch linux-2.6-intel-iommu-igfx.patch ApplyPatch drm-intel-edp-fixes.patch +ApplyPatch drm-i915-fix-pipelined-fencing.patch # rhbz#681285 (i965: crash in brw_wm_surface_state.c::prepare_wm_surfaces() # where intelObj->mt == NULL) #ApplyPatch drm-i915-gen4-has-non-power-of-two-strides.patch @@ -1970,6 +1973,9 @@ fi # and build. %changelog +* Wed Mar 23 2011 Dave Airlie 2.6.38-5 +- i915: add fix for 945G misrendering terminal + * Tue Mar 22 2011 Ben Skeggs 2.6.38-4 - nouveau: implement missing bios opcode 0x5c (rhbz#688569) - nouveau: a couple of minor fixes from nouveau git