From d89d52d3ec86cf95dd93bb78c9b0ab537200e180 Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Thu, 9 Oct 2008 17:00:45 +0000 Subject: linux-moblin: 2.6.27-rc6 kernel That includes the fastboot patches. An eee boots in 10s with that kernel. git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5470 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- ...7-i915-Make-use-of-sarea_priv-conditional.patch | 147 +++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 meta/packages/linux/linux-moblin-2.6.27-rc6/0017-i915-Make-use-of-sarea_priv-conditional.patch (limited to 'meta/packages/linux/linux-moblin-2.6.27-rc6/0017-i915-Make-use-of-sarea_priv-conditional.patch') diff --git a/meta/packages/linux/linux-moblin-2.6.27-rc6/0017-i915-Make-use-of-sarea_priv-conditional.patch b/meta/packages/linux/linux-moblin-2.6.27-rc6/0017-i915-Make-use-of-sarea_priv-conditional.patch new file mode 100644 index 000000000..542b69dd5 --- /dev/null +++ b/meta/packages/linux/linux-moblin-2.6.27-rc6/0017-i915-Make-use-of-sarea_priv-conditional.patch @@ -0,0 +1,147 @@ +commit 69749cf99189a8a78de201ac24990c91ee111469 +Author: Kristian Høgsberg +Date: Wed Aug 20 11:20:13 2008 -0400 + + i915: Make use of sarea_priv conditional. + + We fail ioctls that depend on the sarea_priv with EINVAL. + + Signed-off-by: Kristian Høgsberg + Signed-off-by: Eric Anholt + +diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c +index 25f59c1..dbd3f49 100644 +--- a/drivers/gpu/drm/i915/i915_dma.c ++++ b/drivers/gpu/drm/i915/i915_dma.c +@@ -55,7 +55,8 @@ int i915_wait_ring(struct drm_device * dev, int n, const char *caller) + if (ring->space >= n) + return 0; + +- dev_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT; ++ if (dev_priv->sarea_priv) ++ dev_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT; + + if (ring->head != last_head) + i = 0; +@@ -128,7 +129,7 @@ void i915_kernel_lost_context(struct drm_device * dev) + if (ring->space < 0) + ring->space += ring->Size; + +- if (ring->head == ring->tail) ++ if (ring->head == ring->tail && dev_priv->sarea_priv) + dev_priv->sarea_priv->perf_boxes |= I915_BOX_RING_EMPTY; + } + +@@ -433,10 +434,11 @@ static void i915_emit_breadcrumb(struct drm_device *dev) + drm_i915_private_t *dev_priv = dev->dev_private; + RING_LOCALS; + +- dev_priv->sarea_priv->last_enqueue = ++dev_priv->counter; +- ++ dev_priv->counter++; + if (dev_priv->counter > 0x7FFFFFFFUL) +- dev_priv->sarea_priv->last_enqueue = dev_priv->counter = 1; ++ dev_priv->counter = 0; ++ if (dev_priv->sarea_priv) ++ dev_priv->sarea_priv->last_enqueue = dev_priv->counter; + + BEGIN_LP_RING(4); + OUT_RING(MI_STORE_DWORD_INDEX); +@@ -534,6 +536,9 @@ static int i915_dispatch_flip(struct drm_device * dev) + drm_i915_private_t *dev_priv = dev->dev_private; + RING_LOCALS; + ++ if (!dev_priv->sarea_priv) ++ return -EINVAL; ++ + DRM_DEBUG("%s: page=%d pfCurrentPage=%d\n", + __FUNCTION__, + dev_priv->current_page, +@@ -628,7 +633,8 @@ static int i915_batchbuffer(struct drm_device *dev, void *data, + ret = i915_dispatch_batchbuffer(dev, batch); + mutex_unlock(&dev->struct_mutex); + +- sarea_priv->last_dispatch = (int)hw_status[5]; ++ if (sarea_priv) ++ sarea_priv->last_dispatch = (int)hw_status[5]; + return ret; + } + +@@ -663,7 +669,8 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data, + return ret; + } + +- sarea_priv->last_dispatch = (int)hw_status[5]; ++ if (sarea_priv) ++ sarea_priv->last_dispatch = (int)hw_status[5]; + return 0; + } + +diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c +index d04c526..ef03a59 100644 +--- a/drivers/gpu/drm/i915/i915_irq.c ++++ b/drivers/gpu/drm/i915/i915_irq.c +@@ -427,7 +427,9 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) + I915_WRITE(IMR, dev_priv->irq_mask_reg); + (void) I915_READ(IIR); /* Flush posted writes */ + +- dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); ++ if (dev_priv->sarea_priv) ++ dev_priv->sarea_priv->last_dispatch = ++ READ_BREADCRUMB(dev_priv); + + if (iir & I915_USER_INTERRUPT) { + dev_priv->mm.irq_gem_seqno = i915_get_gem_seqno(dev); +@@ -456,10 +458,11 @@ static int i915_emit_irq(struct drm_device * dev) + + DRM_DEBUG("\n"); + +- dev_priv->sarea_priv->last_enqueue = ++dev_priv->counter; +- ++ dev_priv->counter++; + if (dev_priv->counter > 0x7FFFFFFFUL) +- dev_priv->sarea_priv->last_enqueue = dev_priv->counter = 1; ++ dev_priv->counter = 1; ++ if (dev_priv->sarea_priv) ++ dev_priv->sarea_priv->last_enqueue = dev_priv->counter; + + BEGIN_LP_RING(6); + OUT_RING(MI_STORE_DWORD_INDEX); +@@ -503,11 +506,15 @@ static int i915_wait_irq(struct drm_device * dev, int irq_nr) + READ_BREADCRUMB(dev_priv)); + + if (READ_BREADCRUMB(dev_priv) >= irq_nr) { +- dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); ++ if (dev_priv->sarea_priv) { ++ dev_priv->sarea_priv->last_dispatch = ++ READ_BREADCRUMB(dev_priv); ++ } + return 0; + } + +- dev_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT; ++ if (dev_priv->sarea_priv) ++ dev_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT; + + i915_user_irq_get(dev); + DRM_WAIT_ON(ret, dev_priv->irq_queue, 3 * DRM_HZ, +@@ -519,7 +526,9 @@ static int i915_wait_irq(struct drm_device * dev, int irq_nr) + READ_BREADCRUMB(dev_priv), (int)dev_priv->counter); + } + +- dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); ++ if (dev_priv->sarea_priv) ++ dev_priv->sarea_priv->last_dispatch = ++ READ_BREADCRUMB(dev_priv); + + return ret; + } +@@ -682,7 +691,7 @@ int i915_vblank_swap(struct drm_device *dev, void *data, + struct list_head *list; + int ret; + +- if (!dev_priv) { ++ if (!dev_priv || !dev_priv->sarea_priv) { + DRM_ERROR("%s called with no initialization\n", __func__); + return -EINVAL; + } -- cgit v1.2.3