rpms/kernel/F-10 drm-modesetting-radeon.patch, 1.58, 1.59 drm-next.patch, 1.6, 1.7 kernel.spec, 1.1148, 1.1149
Dave Airlie
airlied at fedoraproject.org
Mon Nov 17 08:32:07 UTC 2008
Author: airlied
Update of /cvs/pkgs/rpms/kernel/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv27263
Modified Files:
drm-modesetting-radeon.patch drm-next.patch kernel.spec
Log Message:
* Mon Nov 17 2008 Dave Airlie <airlied at redhat.com> 2.6.27.5-113
- drm - intel rebase from upstream - radeon fix memory sizing and zeroing
drm-modesetting-radeon.patch:
View full diff with command:
/usr/bin/cvs -f diff -kk -u -N -r 1.58 -r 1.59 drm-modesetting-radeon.patch
Index: drm-modesetting-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-10/drm-modesetting-radeon.patch,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -r1.58 -r1.59
--- drm-modesetting-radeon.patch 14 Nov 2008 12:25:43 -0000 1.58
+++ drm-modesetting-radeon.patch 17 Nov 2008 08:32:00 -0000 1.59
@@ -1,52 +1,90 @@
-commit 7a18b8c8e13e786da7f5258c9dd4c989f65912ce
+commit edeaa3c729dbd36549313240578ff5237d432b8a
+Author: Dave Airlie <airlied at redhat.com>
+Date: Mon Nov 17 18:14:28 2008 +1000
+
+ radeon: turn of VRAM zeroing by default for now - needs work
+
+commit 9cb412b0c26cf9030ff83402e8e3c8a409ba81fe
+Author: Dave Airlie <airlied at redhat.com>
+Date: Mon Nov 17 16:59:00 2008 +1000
+
+ drm: make 800x600 be standard not 640x480
+
+commit 2b2157aa0f0a959fc4901627083ccf29f08eec53
+Author: Dave Airlie <airlied at redhat.com>
+Date: Mon Nov 17 09:03:36 2008 +1000
+
+ radeon: fix return value for no relocs
+
+commit 5923ab41edd35d28fc2e2c09a4a19509b1c57446
+Author: Dave Airlie <airlied at redhat.com>
+Date: Mon Nov 17 09:03:01 2008 +1000
+
+ ttm: add discard for VRAM buffers
+
+commit 9d4eb07f155cde0648888efb6a4b6e1e4596e786
+Author: Dave Airlie <airlied at dhcp-1-203.bne.redhat.com>
+Date: Fri Nov 14 15:52:32 2008 +1000
+
+ drm: fix the exit path of the bo unlocking
+
+commit 6ea5a728bb6081d876e982a6754bd883557b9fa3
+Author: Dave Airlie <airlied at dhcp-1-203.bne.redhat.com>
+Date: Fri Nov 14 15:51:44 2008 +1000
+
+ radeon: fixup relocate to work on locate write buffers in VRAM first.
+
+ Fixup failure paths and make EAGAIN work
+
+commit a7d881ccf0f7a099ba1b2b38d880df8bddc610a2
Author: Dave Airlie <airlied at redhat.com>
Date: Thu Nov 13 17:22:26 2008 +1100
radeon: fix some issues since last rebase
-commit 0b82eaa4c7edb0051aa75fbe83ce1c5ad8a32ecb
+commit d6568c59bd20f95e9ade0c28018ed0063fda240f
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Nov 12 09:01:14 2008 +1000
radeon: fix more build
-commit 57f078dac6cf77eaf37f61c761b0558f15332a53
+commit 3f90df7abcb0c88dca52b7287f7675f26d8fa34b
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Nov 12 08:59:04 2008 +1000
radeon: fix compile
-commit cfc56c533c22b5234f9a9ca4a5d8be8a25093f9d
+commit fe3e14dd8da2fd7f4566b32e1e42349089dd9966
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Nov 12 08:58:55 2008 +1000
i915: fix master bits
-commit 64ee3e3283e938d784b4ced21eb746e92456ac05
+commit 927c18a7e25921dd80a8c503259017ff44345437
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Nov 10 15:39:25 2008 +1000
radeon: fix dumbness in cp ring check
-commit e83b549396f6f63fae374b665f7193624f04cf0e
+commit 04db227571a0a71bb2b6e0781a736fcfe7d5d6c1
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Nov 10 14:26:11 2008 +1000
radeon: add gart useable size to report to userspace
-commit 010e8c3c0a5f11548d1c7c9bdecb09d8085c1153
+commit 535b93cc86a15d616e03ea1f835fe46ba30dc736
Author: Dave Airlie <airlied at redhat.com>
Date: Sun Nov 9 20:34:49 2008 +1000
radeon: fix powerpc oops on rv280
-commit 751b6360f554064038cd54d4ab6c58551bb0b137
+commit 2894f0654cbae1f21924978d7616263d372b974e
Author: Dave Airlie <airlied at redhat.com>
Date: Sun Nov 9 10:23:43 2008 +1000
radeon: upgrade atom headers
-commit 206573818c9bd2007045bd2b00b8d69f25f19129
+commit 5e5d4afda733b61984b81c34ca99488b69d80d89
Author: Dave Airlie <airlied at redhat.com>
Date: Sat Nov 8 14:39:41 2008 +1000
@@ -55,13 +93,13 @@
For some reason reading the SCRATCH reg from RAM causes some race to occur.
Hopefully fix this.
-commit 8df6f9b1cd12c07e64e3c9e7eeb7e0a4ebb8e918
+commit ddbc65e2d9ae672ee47493934d3c73c13a17423b
Author: Dave Airlie <airlied at redhat.com>
Date: Sat Nov 8 11:31:03 2008 +1000
drm/radeon: add dpms connector functions
-commit 9865e4cd640cc400eeb82de5f03faf27271194f0
+commit 7301aabea9a13ff5fa92c97127581d78e656bb09
Author: Dave Airlie <airlied at redhat.com>
Date: Fri Nov 7 16:22:22 2008 +1000
@@ -69,13 +107,13 @@
fixes cursor on second head
-commit b4b5ac74e5ae7e903a9fef36f8fed8f2fed8e4d7
+commit 06e72c30a166a0786464b2aac26c32533231c666
Author: Dave Airlie <airlied at redhat.com>
Date: Fri Nov 7 16:21:03 2008 +1000
modesetting: set the crtc x,y after the mode base change
-commit f6f60747b33c49583058aec7742651ae4e2a1dd5
+commit 2bf8bd4aa80b64dfe2b0a491b8376ed24354ff5f
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Nov 5 10:23:35 2008 +1000
@@ -83,19 +121,19 @@
This allows re-use of uc/wc marked pages
-commit 506a5fc4d024831984cf03d600b00542e0590232
+commit 2c3b398237b44831696f1125655e1f675df3076c
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Nov 5 10:22:27 2008 +1000
radeon: fix ring tail overflow issue since alignment
-commit d55c23ee1aafdb58b56cd7f79265b807db451630
+commit d6c0947428be7af618990d7db93b4b1b9403bca7
Author: Dave Airlie <airlied at redhat.com>
Date: Tue Nov 4 13:18:02 2008 +1000
radeon: disable HDP read cache for now
-commit 735a1e806cce1bed41ed88f037996d8e79a05f68
+commit 63527c82f569bf726666716f674f034d826c2e0e
Author: Dave Airlie <airlied at redhat.com>
Date: Tue Nov 4 12:02:55 2008 +1000
@@ -103,25 +141,25 @@
Also set the fetch size to what tcore/fglrx uses.
-commit 6fbaca28b0f758ea4b0dab4465fe3327731b8a61
+commit 4a49fb763b2fb3f1f7de8cfa30d34e9a6da22069
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Nov 3 15:43:08 2008 +1000
radeon: fixup vram visible calculation to take a/c pinned objects for now
-commit cab768070068a23104669b297bde69afd376c948
+commit ba94d70d0bcbbce6ad16adbc5e811baa00dc31c5
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Nov 3 09:56:02 2008 +1100
radeon: if modesetting state is unknown make it known so pm-utils can use it
-commit 8f3d7f72514fdfc6d08af57d3eb524c9298f3c29
+commit 50f5435a1be89f68096d700b3d001f1dab0863be
Author: Dave Airlie <airlied at redhat.com>
Date: Fri Oct 31 14:40:12 2008 +1000
radeon: fix ROP values for the paint ROP
-commit b8f49e9742218522a4055c9ea785985e785dd594
+commit 459586927351eb9d8ab93b1ab2b8215b1de3ec43
Author: Dave Airlie <airlied at redhat.com>
Date: Thu Oct 30 14:00:39 2008 +1000
@@ -129,49 +167,49 @@
This speeds things up a bit
-commit 6661d4b5cc27f7cb68e02422757bda9ff484f858
+commit 76580a7eed651717f0a6dbf53d1fef3e704382be
Author: Dave Airlie <airlied at redhat.com>
[...1967 lines suppressed...]
+
+ return 0;
+fail:
++ mutex_lock(&dev->struct_mutex);
+ drm_gem_object_unreference(obj);
++ mutex_unlock(&dev->struct_mutex);
+
+ return ret;
+}
@@ -31767,7 +31862,7 @@
+ return 0;
+}
+
-+static void radeon_gem_ib_free(struct drm_radeon_cs_parser *parser)
++static void radeon_gem_ib_free(struct drm_radeon_cs_parser *parser, int error)
+{
+ struct drm_device *dev = parser->dev;
+ drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -31777,18 +31872,27 @@
+
+ for (i = 0; i < RADEON_NUM_IB; i++) {
+ if (dev_priv->ib_objs[i]->kmap.virtual == parser->ib) {
-+ /* emit a fence object */
-+ ret = drm_fence_buffer_objects(dev, NULL, 0, NULL, &fence);
-+ dev_priv->irq_emitted = 0;
-+ if (ret) {
++
++ if (error) {
+ drm_putback_buffer_objects(dev);
++ dev_priv->ib_alloc_bitmap &= ~(1 << i);
++ parser->ib = NULL;
++ parser->card_offset = 0;
++ break;
++ } else {
++ /* emit a fence object */
++ ret = drm_fence_buffer_objects(dev, NULL, 0, NULL, &fence);
++ dev_priv->irq_emitted = 0;
++ if (ret) {
++ drm_putback_buffer_objects(dev);
++ }
++ /* dereference the fence object */
++ if (fence)
++ drm_fence_usage_deref_unlocked(&fence);
++ break;
+ }
-+ /* dereference the fence object */
-+ if (fence)
-+ drm_fence_usage_deref_unlocked(&fence);
+ }
+ }
-+
+}
+
+static int radeon_gem_ib_destroy(struct drm_device *dev)
@@ -31812,10 +31916,9 @@
+
+static int radeon_gem_find_reloc(struct drm_radeon_cs_parser *parser,
+ uint32_t offset, uint32_t *handle,
-+ uint32_t *read_domains, uint32_t *write_domain)
++ uint32_t *retval)
+{
+ struct drm_device *dev = parser->dev;
-+ drm_radeon_private_t *dev_priv = dev->dev_private;
+ struct drm_radeon_kernel_chunk *reloc_chunk = &parser->chunks[parser->reloc_index];
+
+ if (!reloc_chunk->kdata)
@@ -31825,10 +31928,36 @@
+ DRM_ERROR("Offset larger than chunk %d %d\n", offset, reloc_chunk->length_dw);
+ return -EINVAL;
+ }
-+
++
+ *handle = reloc_chunk->kdata[offset];
-+ *read_domains = reloc_chunk->kdata[offset + 1];
-+ *write_domain = reloc_chunk->kdata[offset + 2];
++ *retval = reloc_chunk->kdata[offset + 3];
++ return 0;
++}
++
++static int radeon_gem_do_relocate(struct drm_gem_object *obj, uint32_t read_domains,
++ uint32_t write_domain, uint32_t *offset)
++{
++ struct drm_device *dev = obj->dev;
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ struct drm_radeon_gem_object *obj_priv;
++ uint32_t flags;
++ int ret;
++
++ obj_priv = obj->driver_private;
++ ret = radeon_gem_set_domain(obj, read_domains, write_domain, &flags, false);
++ if (ret)
++ return ret;
++
++ obj_priv->bo->mem.flags &= ~DRM_BO_FLAG_CLEAN;
++ obj_priv->bo->mem.proposed_flags &= ~DRM_BO_FLAG_CLEAN;
++
++ if (offset) {
++ if (flags == DRM_BO_FLAG_MEM_VRAM)
++ *offset = obj_priv->bo->offset + dev_priv->fb_location;
++ else if (flags == DRM_BO_FLAG_MEM_TT)
++ *offset = obj_priv->bo->offset + dev_priv->gart_vm_start;
++ }
++
+ return 0;
+}
+
@@ -31841,7 +31970,7 @@
+ uint32_t read_domains, write_domain;
+ struct drm_gem_object *obj;
+ int flags = 0;
-+ int ret;
++ int ret = 0;
+ struct drm_radeon_gem_object *obj_priv;
+
+ if (parser->reloc_index == -1) {
@@ -31850,35 +31979,65 @@
+ return -EINVAL;
+ read_domains = reloc[2];
+ write_domain = reloc[3];
++
++ ret = radeon_gem_do_relocate(obj, read_domains, write_domain, offset);
++
++ mutex_lock(&dev->struct_mutex);
++ drm_gem_object_unreference(obj);
++ mutex_unlock(&dev->struct_mutex);
++
+ } else {
+ uint32_t handle;
-+
+ /* have to lookup handle in other chunk */
-+ ret = radeon_gem_find_reloc(parser, reloc[1], &handle, &read_domains, &write_domain);
-+ if (ret < 0)
-+ return ret;
-+
-+ obj = drm_gem_object_lookup(dev, parser->file_priv, handle);
-+ if (!obj)
-+ return -EINVAL;
++ ret = radeon_gem_find_reloc(parser, reloc[1], &handle, offset);
+ }
++ return ret;
++}
+
-+ obj_priv = obj->driver_private;
-+ radeon_gem_set_domain(obj, read_domains, write_domain, &flags, false);
+
-+ obj_priv->bo->mem.flags &= ~DRM_BO_FLAG_CLEAN;
-+ obj_priv->bo->mem.proposed_flags &= ~DRM_BO_FLAG_CLEAN;
++int radeon_gem_prelocate(struct drm_radeon_cs_parser *parser)
++{
++ struct drm_device *dev = parser->dev;
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ struct drm_radeon_kernel_chunk *reloc_chunk = &parser->chunks[parser->reloc_index];
++ struct drm_gem_object *obj;
++ int pass_id;
++ int i;
++ int ret;
++
++ /* no relocs - return now */
++ if (!reloc_chunk->kdata)
++ return 0;
+
-+ if (flags == DRM_BO_FLAG_MEM_VRAM)
-+ *offset = obj_priv->bo->offset + dev_priv->fb_location;
-+ else if (flags == DRM_BO_FLAG_MEM_TT)
-+ *offset = obj_priv->bo->offset + dev_priv->gart_vm_start;
++ for (pass_id = 0; pass_id < 2; pass_id++) {
++ /* traverse the reloc chunk */
++ for (i = 0; i < reloc_chunk->length_dw; i += 4) {
++
++ if (pass_id == 0)
++ reloc_chunk->kdata[i + 3] = 0;
+
-+ /* BAD BAD BAD - LINKED LIST THE OBJS and UNREF ONCE IB is SUBMITTED */
-+ drm_gem_object_unreference(obj);
++ if (pass_id == 1 && reloc_chunk->kdata[i + 3])
++ continue;
++
++ /* first pass get all write domains */
++ if (((pass_id == 0) && reloc_chunk->kdata[i + 2]) ||
++ ((pass_id == 1) && reloc_chunk->kdata[i + 1])) {
++ obj = drm_gem_object_lookup(dev, parser->file_priv, reloc_chunk->kdata[i]);
++ if (!obj)
++ return -EINVAL;
++ ret = radeon_gem_do_relocate(obj, reloc_chunk->kdata[i + 1], reloc_chunk->kdata[i + 2],
++ &reloc_chunk->kdata[i + 3]);
++ mutex_lock(&dev->struct_mutex);
++ drm_gem_object_unreference(obj);
++ mutex_unlock(&dev->struct_mutex);
++ if (ret)
++ return ret;
++ }
++ }
++ }
+ return 0;
+}
-+
++
+/* allocate 1MB of 64k IBs the the kernel can keep mapped */
+static int radeon_gem_ib_init(struct drm_device *dev)
+{
drm-next.patch:
Index: drm-next.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-10/drm-next.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- drm-next.patch 13 Nov 2008 06:51:06 -0000 1.6
+++ drm-next.patch 17 Nov 2008 08:32:01 -0000 1.7
@@ -1,4 +1,4 @@
-commit 44078e77a4901e91836b5f9f0fae28d8fac2a17d
+commit 894540f219ca3d87be7acbe7833d86119b624fa5
Author: Keith Packard <keithp at keithp.com>
Date: Fri Jun 20 00:08:06 2008 -0700
@@ -14,7 +14,7 @@
Signed-off-by: Dave Airlie <airlied at redhat.com>
(cherry picked from commit 395e0ddc44005ced5e4fed9bfc2e4bdf63d37627)
-commit 79dd949af73e830f6929b0faf7f3eb409a481166
+commit 7b2a72df0e653c49327dc90651120e848cad6d28
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Nov 3 11:07:28 2008 +1000
@@ -25,7 +25,7 @@
Signed-off-by: Dave Airlie <airlied at redhat.com>
-commit beb6264cb9eb4f78f9b2754d4a577330f09d108e
+commit 852f6a210d90848774673a08d03bf85a7b8fffdb
Author: Dave Airlie <airlied at redhat.com>
Date: Wed Nov 12 15:00:33 2008 +1000
@@ -33,7 +33,7 @@
Signed-off-by: Eric Anholt <eric at anholt.net>
-commit e94cd33277b4f95be8d0a19f3fe32e8daef9ce94
+commit 147d7004520f5c6a8b77f16614bd1d699909d9b4
Author: Eric Anholt <eric at anholt.net>
Date: Tue Nov 4 15:50:30 2008 -0800
@@ -51,7 +51,7 @@
Signed-off-by: Eric Anholt <eric at anholt.net>
-commit 3437c28f678abfa0e7ebe78176b268cbf0732e81
+commit 022490db8d14abd18a83b8bb93fdbe2a5ae4e064
Author: Keith Packard <keithp at keithp.com>
Date: Tue Nov 4 02:03:27 2008 -0800
@@ -8972,10 +8972,10 @@
+ return 0;
+}
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
-index df03611..654d42f 100644
+index df03611..047b9d7 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
-@@ -31,260 +31,220 @@
+@@ -31,259 +31,213 @@
#include "i915_drm.h"
#include "i915_drv.h"
@@ -9289,63 +9289,61 @@
struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- u16 temp;
+- u32 pipea_stats, pipeb_stats;
+ u32 iir, new_iir;
- u32 pipea_stats, pipeb_stats;
++ u32 pipea_stats = 0, pipeb_stats = 0;
+ int vblank = 0;
+ unsigned long irqflags;
-+
-+ atomic_inc(&dev_priv->irq_received);
-+
-+ iir = I915_READ(IIR);
- pipea_stats = I915_READ(I915REG_PIPEASTAT);
- pipeb_stats = I915_READ(I915REG_PIPEBSTAT);
-+ if (iir == 0)
-+ return IRQ_NONE;
++ atomic_inc(&dev_priv->irq_received);
- temp = I915_READ16(I915REG_INT_IDENTITY_R);
-+ do {
-+ pipea_stats = 0;
-+ pipeb_stats = 0;
-+ /*
-+ * Clear the PIPE(A|B)STAT regs before the IIR
-+ */
-+ if (iir & I915_DISPLAY_PIPE_A_EVENT_INTERRUPT) {
-+ spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
-+ pipea_stats = I915_READ(PIPEASTAT);
-+ I915_WRITE(PIPEASTAT, pipea_stats);
-+ spin_unlock_irqrestore(&dev_priv->user_irq_lock,
-+ irqflags);
-+ }
++ iir = I915_READ(IIR);
- temp &= (USER_INT_FLAG | VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG);
-+ if (iir & I915_DISPLAY_PIPE_B_EVENT_INTERRUPT) {
-+ spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
-+ pipeb_stats = I915_READ(PIPEBSTAT);
-+ I915_WRITE(PIPEBSTAT, pipeb_stats);
-+ spin_unlock_irqrestore(&dev_priv->user_irq_lock,
-+ irqflags);
-+ }
++ if (iir == 0)
++ return IRQ_NONE;
- DRM_DEBUG("%s flag=%08x\n", __FUNCTION__, temp);
-+ I915_WRITE(IIR, iir);
-+ new_iir = I915_READ(IIR); /* Flush posted writes */
++msi_interrupt_again:
++ /*
++ * Clear the PIPE(A|B)STAT regs before the IIR
++ */
++ if (iir & I915_DISPLAY_PIPE_A_EVENT_INTERRUPT) {
++ spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
++ pipea_stats = I915_READ(PIPEASTAT);
++ I915_WRITE(PIPEASTAT, pipea_stats);
++ spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);
++ }
- if (temp == 0)
- return IRQ_NONE;
-+ if (dev_priv->sarea_priv)
-+ dev_priv->sarea_priv->last_dispatch =
-+ READ_BREADCRUMB(dev_priv);
++ if (iir & I915_DISPLAY_PIPE_B_EVENT_INTERRUPT) {
++ spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
++ pipeb_stats = I915_READ(PIPEBSTAT);
++ I915_WRITE(PIPEBSTAT, pipeb_stats);
++ spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);
++ }
- I915_WRITE16(I915REG_INT_IDENTITY_R, temp);
- (void) I915_READ16(I915REG_INT_IDENTITY_R);
- DRM_READMEMORYBARRIER();
--
++ I915_WRITE(IIR, iir);
++ new_iir = 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 (temp & USER_INT_FLAG)
-- DRM_WAKEUP(&dev_priv->irq_queue);
--
++ if (iir & I915_USER_INTERRUPT) {
++ dev_priv->mm.irq_gem_seqno = i915_get_gem_seqno(dev);
+ DRM_WAKEUP(&dev_priv->irq_queue);
++ }
+
- if (temp & (VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG)) {
- int vblank_pipe = dev_priv->vblank_pipe;
-
@@ -9373,47 +9371,38 @@
- I915_WRITE(I915REG_PIPEBSTAT,
- pipeb_stats|I915_VBLANK_INTERRUPT_ENABLE|
- I915_VBLANK_CLEAR);
-- }
-+ if (iir & I915_USER_INTERRUPT) {
-+ dev_priv->mm.irq_gem_seqno = i915_get_gem_seqno(dev);
-+ DRM_WAKEUP(&dev_priv->irq_queue);
-+ }
-+
-+ if (pipea_stats & I915_VBLANK_INTERRUPT_STATUS) {
-+ vblank++;
-+ drm_handle_vblank(dev, 0);
-+ }
++ if (pipea_stats & I915_VBLANK_INTERRUPT_STATUS) {
++ vblank++;
++ drm_handle_vblank(dev, 0);
++ }
+
-+ if (pipeb_stats & I915_VBLANK_INTERRUPT_STATUS) {
-+ vblank++;
-+ drm_handle_vblank(dev, 1);
-+ }
++ if (pipeb_stats & I915_VBLANK_INTERRUPT_STATUS) {
++ vblank++;
++ drm_handle_vblank(dev, 1);
++ }
+
-+ if ((pipeb_stats & I915_LEGACY_BLC_EVENT_STATUS) ||
-+ (iir & I915_ASLE_INTERRUPT))
-+ opregion_asle_intr(dev);
-+
-+ /* With MSI, interrupts are only generated when iir
-+ * transitions from zero to nonzero. If another bit got
-+ * set while we were handling the existing iir bits, then
-+ * we would never get another interrupt.
-+ *
-+ * This is fine on non-MSI as well, as if we hit this path
-+ * we avoid exiting the interrupt handler only to generate
-+ * another one.
-+ *
-+ * Note that for MSI this could cause a stray interrupt report
-+ * if an interrupt landed in the time between writing IIR and
-+ * the posting read. This should be rare enough to never
-+ * trigger the 99% of 100,000 interrupts test for disabling
-+ * stray interrupts.
-+ */
++ if ((pipeb_stats & I915_LEGACY_BLC_EVENT_STATUS) ||
++ (iir & I915_ASLE_INTERRUPT))
++ opregion_asle_intr(dev);
++
++ /* With MSI, interrupts are only generated when iir transitions from
++ * zero to nonzero. If another bit got set while we were handling
++ * the existing iir bits, then we would never get another interrupt.
++ * This is fine on non-MSI as well, as if we hit this path we avoid
++ * exiting the interrupt handler only to generate another one.
++ *
++ * Note that for MSI this could cause a stray interrupt report if an
++ * interrupt landed in the time between writing IIR and the posting
++ * read. This should be rare enough to never trigger the 99% of
++ * 100,000 interrupts test for disabling stray interrupts.
++ */
++ if (new_iir != 0) {
+ iir = new_iir;
-+ } while (iir != 0);
++ goto msi_interrupt_again;
+ }
return IRQ_HANDLED;
- }
-@@ -298,23 +258,45 @@ static int i915_emit_irq(struct drm_device * dev)
+@@ -298,23 +252,45 @@ static int i915_emit_irq(struct drm_device * dev)
DRM_DEBUG("\n");
@@ -9468,7 +9457,7 @@
static int i915_wait_irq(struct drm_device * dev, int irq_nr)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-@@ -323,55 +305,34 @@ static int i915_wait_irq(struct drm_device * dev, int irq_nr)
+@@ -323,55 +299,34 @@ static int i915_wait_irq(struct drm_device * dev, int irq_nr)
DRM_DEBUG("irq_nr=%d breadcrumb=%d\n", irq_nr,
READ_BREADCRUMB(dev_priv));
@@ -9537,7 +9526,7 @@
/* Needs the lock as it touches the ring.
*/
int i915_irq_emit(struct drm_device *dev, void *data,
-@@ -381,14 +342,15 @@ int i915_irq_emit(struct drm_device *dev, void *data,
+@@ -381,14 +336,15 @@ int i915_irq_emit(struct drm_device *dev, void *data,
drm_i915_irq_emit_t *emit = data;
int result;
@@ -9555,7 +9544,7 @@
if (DRM_COPY_TO_USER(emit->irq_seq, &result, sizeof(int))) {
DRM_ERROR("copy_to_user\n");
-@@ -414,18 +376,38 @@ int i915_irq_wait(struct drm_device *dev, void *data,
+@@ -414,18 +370,38 @@ int i915_irq_wait(struct drm_device *dev, void *data,
return i915_wait_irq(dev, irqwait->irq_seq);
}
@@ -9602,7 +9591,7 @@
}
/* Set the vblank monitor pipe
-@@ -434,22 +416,12 @@ int i915_vblank_pipe_set(struct drm_device *dev, void *data,
+@@ -434,22 +410,12 @@ int i915_vblank_pipe_set(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
drm_i915_private_t *dev_priv = dev->dev_private;
@@ -9625,7 +9614,7 @@
return 0;
}
-@@ -458,19 +430,13 @@ int i915_vblank_pipe_get(struct drm_device *dev, void *data,
+@@ -458,19 +424,13 @@ int i915_vblank_pipe_get(struct drm_device *dev, void *data,
{
drm_i915_private_t *dev_priv = dev->dev_private;
drm_i915_vblank_pipe_t *pipe = data;
@@ -9646,7 +9635,7 @@
return 0;
}
-@@ -481,104 +447,21 @@ int i915_vblank_pipe_get(struct drm_device *dev, void *data,
+@@ -481,104 +441,21 @@ int i915_vblank_pipe_get(struct drm_device *dev, void *data,
int i915_vblank_swap(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
@@ -9766,7 +9755,7 @@
}
/* drm_dma.h hooks
-@@ -587,37 +470,65 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
+@@ -587,37 +464,65 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-10/kernel.spec,v
retrieving revision 1.1148
retrieving revision 1.1149
diff -u -r1.1148 -r1.1149
--- kernel.spec 14 Nov 2008 12:25:44 -0000 1.1148
+++ kernel.spec 17 Nov 2008 08:32:02 -0000 1.1149
@@ -1921,6 +1921,9 @@
%kernel_variant_files -k vmlinux %{with_kdump} kdump
%changelog
+* Mon Nov 17 2008 Dave Airlie <airlied at redhat.com> 2.6.27.5-113
+- drm - intel rebase from upstream - radeon fix memory sizing and zeroing
+
* Fri Nov 14 2008 Dave Airlie <airlied at redhat.com> 2.6.27.5-112
- radeon - backout patch is over zealous in error handling
More information about the scm-commits
mailing list