Messages in this thread Patch in this message | | | Date | Thu, 17 Jan 2008 18:52:03 -0500 | From | Kyle McMartin <> | Subject | [mm patch] i915: fix invalid opcode exception on cpus without clflush |
| |
i915_flush_ttm was unconditionally executing a clflush instruction to (obviously) flush the cache. Instead, check if the cpu supports clflush, and if not, fall back to calling wbinvd to flush the entire cache.
Signed-off-by: Kyle McMartin <kmcmartin@redhat.com>
--- a/drivers/char/drm/i915_buffer.c +++ b/drivers/char/drm/i915_buffer.c @@ -286,7 +286,18 @@ void i915_flush_ttm(struct drm_ttm *ttm) return; DRM_MEMORYBARRIER(); + +#ifdef CONFIG_X86_32 + /* Hopefully nobody has built an x86-64 processor without clflush */ + if (!cpu_has_clflush) { + wbinvd(); + DRM_MEMORYBARRIER(); + return; + } +#endif + for (i = ttm->num_pages - 1; i >= 0; i--) drm_cache_flush_page(drm_ttm_get_page(ttm, i)); + DRM_MEMORYBARRIER(); }
| |