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