From dc5c2811696ff3157e3ddd868eb921153590663b Mon Sep 17 00:00:00 2001 From: Pierre Willenbrock Date: Sat, 10 Nov 2007 19:49:57 +0100 Subject: [PATCH] some workaround for kernel BUGs --- shared-core/i915_dma.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index 4b97a39..a7f8449 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c @@ -447,6 +447,10 @@ int i915_emit_mi_flush(struct drm_device *dev, uint32_t flush) i915_kernel_lost_context(dev); + if(dev_priv->ring.virtual_start == NULL) { + printk(KERN_ERR "DRM: i915: failed to retrieve ring\n"); + return -EFAULT; + } BEGIN_LP_RING(4); OUT_RING(flush_cmd); OUT_RING(0); @@ -588,6 +592,10 @@ static void i915_do_dispatch_flip(struct drm_device * dev, int plane, int sync) DRM_DEBUG("plane=%d current_page=%d dspbase=0x%x\n", plane, current_page, dspbase); + if(dev_priv->ring.virtual_start == NULL) { + printk(KERN_ERR "DRM: i915: failed to retrieve ring\n"); + return; + } BEGIN_LP_RING(4); OUT_RING(sync ? 0 : (MI_WAIT_FOR_EVENT | (plane ? MI_WAIT_FOR_PLANE_B_FLIP : @@ -610,6 +618,11 @@ void i915_dispatch_flip(struct drm_device * dev, int planes, int sync) DRM_DEBUG("planes=0x%x pfCurrentPage=%d\n", planes, dev_priv->sarea_priv->pf_current_page); + if(dev_priv->ring.virtual_start == NULL) { + printk(KERN_ERR "DRM: i915: failed to retrieve ring\n"); + return; + } + i915_emit_mi_flush(dev, MI_READ_FLUSH | MI_EXE_FLUSH); for (i = 0; i < 2; i++) @@ -1157,6 +1170,11 @@ static int i915_do_cleanup_pageflip(struct drm_device * dev) planes |= 1 << i; } + if(dev_priv->ring.virtual_start == NULL) { + printk(KERN_ERR "DRM: i915: failed to retrieve ring\n"); + return -EFAULT; + } + if (planes) i915_dispatch_flip(dev, planes, 0); @@ -1402,6 +1420,10 @@ void i915_driver_lastclose(struct drm_device * dev) { drm_i915_private_t *dev_priv = dev->dev_private; + if(dev_priv->ring.virtual_start == NULL) { + printk(KERN_WARNING "DRM: i915: Missing ring\n"); + } + if (drm_getsarea(dev) && dev_priv->sarea_priv) i915_do_cleanup_pageflip(dev); if (dev_priv->agp_heap) -- 1.5.3.7