rpms/kernel/devel drm-connection-cache.patch, NONE, 1.2.2.2 linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch, NONE, 1.1.2.2 linux-2.6.31.tar.bz2.sign, NONE, 1.1.2.2 .cvsignore, 1.1014.2.29, 1.1014.2.30 config-generic, 1.238.6.38, 1.238.6.39 config-s390x, 1.11.6.4, 1.11.6.5 drm-next.patch, 1.6.6.9, 1.6.6.10 drm-nouveau.patch, 1.8.6.16, 1.8.6.17 drm-page-flip.patch, 1.2.6.4, 1.2.6.5 drm-vga-arb.patch, 1.5.2.3, 1.5.2.4 kernel.spec, 1.1294.2.64, 1.1294.2.65 linux-2.6-nfsd4-proots.patch, 1.1.2.2, 1.1.2.3 sources, 1.976.2.30, 1.976.2.31 upstream, 1.888.2.29, 1.888.2.30 xen.pvops.patch, 1.1.2.40, 1.1.2.41 drm-ddc-caching-bug.patch, 1.1.2.2, NONE drm-god-shut-up-about-edid-already.patch, 1.1.2.2, NONE drm-r600-kms.patch, 1.1.2.4, NONE drm-rv710-ucode-fix.patch, 1.1.2.2, NONE linux-2.6.30.tar.bz2.sign, 1.1.2.2, NONE patch-2.6.31-rc8-git2.bz2.sign, 1.1.2.2, NONE patch-2.6.31-rc8.bz2.sign, 1.1.2.2, NONE

myoung myoung at fedoraproject.org
Thu Sep 10 14:00:54 UTC 2009


Author: myoung

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv23154

Modified Files:
      Tag: private-myoung-dom0-branch
	.cvsignore config-generic config-s390x drm-next.patch 
	drm-nouveau.patch drm-page-flip.patch drm-vga-arb.patch 
	kernel.spec linux-2.6-nfsd4-proots.patch sources upstream 
	xen.pvops.patch 
Added Files:
      Tag: private-myoung-dom0-branch
	drm-connection-cache.patch 
	linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch 
	linux-2.6.31.tar.bz2.sign 
Removed Files:
      Tag: private-myoung-dom0-branch
	drm-ddc-caching-bug.patch 
	drm-god-shut-up-about-edid-already.patch drm-r600-kms.patch 
	drm-rv710-ucode-fix.patch linux-2.6.30.tar.bz2.sign 
	patch-2.6.31-rc8-git2.bz2.sign patch-2.6.31-rc8.bz2.sign 
Log Message:
Update pvops and get to 2.6.31


drm-connection-cache.patch:
 linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c |   12 ++++++++++++
 linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c |    9 ++++++++-
 linux-2.6.30.noarch/include/drm/drm_crtc.h            |    1 +
 linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c        |    3 ++-
 4 files changed, 23 insertions(+), 2 deletions(-)

--- NEW FILE drm-connection-cache.patch ---
diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.jx linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c
--- linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.jx	2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c	2009-09-09 09:35:24.000000000 -0400
@@ -92,6 +92,18 @@ int drm_helper_probe_single_connector_mo
 
 	connector->status = connector->funcs->detect(connector);
 
+	/* fast path if the driver tracks disconnection */
+	if (connector->status == connector_status_cached) {
+		DRM_DEBUG_KMS("%s still connected\n",
+			      drm_get_connector_name(connector));
+		list_for_each_entry_safe(mode, t, &connector->modes, head) {
+			count++;
+			mode->status = MODE_OK;
+		}
+		connector->status = connector_status_connected;
+		return count;
+	}
+
 	if (connector->status == connector_status_disconnected) {
 		DRM_DEBUG_KMS("%s is disconnected\n",
 			  drm_get_connector_name(connector));
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c.jx	2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c	2009-09-09 09:56:18.000000000 -0400
@@ -593,7 +593,14 @@ static void intel_lvds_mode_set(struct d
  */
 static enum drm_connector_status intel_lvds_detect(struct drm_connector *connector)
 {
-	return connector_status_connected;
+	static int done;
+
+	if (!done) {
+		done = 1;
+		return connector_status_connected;
+	} else {
+		return connector_status_cached;
+	}
 }
 
 /**
diff -up linux-2.6.30.noarch/include/drm/drm_crtc.h.jx linux-2.6.30.noarch/include/drm/drm_crtc.h
--- linux-2.6.30.noarch/include/drm/drm_crtc.h.jx	2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/include/drm/drm_crtc.h	2009-09-09 09:35:24.000000000 -0400
@@ -172,6 +172,7 @@ enum drm_connector_status {
 	connector_status_connected = 1,
 	connector_status_disconnected = 2,
 	connector_status_unknown = 3,
+	connector_status_cached = 4,
 };
 
 enum subpixel_order {
diff -up linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c.jx linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c
--- linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c.jx	2009-09-09 10:10:44.000000000 -0400
+++ linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c	2009-09-09 11:23:14.000000000 -0400
@@ -185,7 +185,8 @@ EXPORT_SYMBOL(drm_get_connector_name);
 
 char *drm_get_connector_status_name(enum drm_connector_status status)
 {
-	if (status == connector_status_connected)
+	if (status == connector_status_connected ||
+	    status == connector_status_cached)
 		return "connected";
 	else if (status == connector_status_disconnected)
 		return "disconnected";

linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch:
 virtio_blk.c |    1 -
 1 file changed, 1 deletion(-)

--- NEW FILE linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch ---
Subject: [for-2.6.31] virtio_blk: revert QUEUE_FLAG_VIRT addition
Date: Fri, 04 Sep 2009 20:44:42 -0000
From: Christoph Hellwig <hch at lst.de>

It seems like the addition of QUEUE_FLAG_VIRT caueses major performance
regressions for Fedora users:

	https://bugzilla.redhat.com/show_bug.cgi?id=509383
	https://bugzilla.redhat.com/show_bug.cgi?id=505695

while I can't reproduce those extreme regressions myself I think the flag
is wrong.

Rationale:

  QUEUE_FLAG_VIRT expands to QUEUE_FLAG_NONROT which casus the queue
  unplugged immediately.  This is not a good behaviour for at least
  qemu and kvm where we do have significant overhead for every
  I/O operations.  Even with all the latested speeups (native AIO,
  MSI support, zero copy) we can only get native speed for up to 128kb
  I/O requests we already are down to 66% of native performance for 4kb
  requests even on my laptop running the Intel X25-M SSD for which the
  QUEUE_FLAG_NONROT was designed.
  If we ever get virtio-blk overhead low enough that this flag makes
  sense it should only be set based on a feature flag set by the host.
	
Signed-off-by: Christoph Hellwig <hch at lst.de>
Acked-by: Jeff Moyer <jmoyer at redhat.com>

---
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Index: linux-2.6/drivers/block/virtio_blk.c
===================================================================
--- linux-2.6.orig/drivers/block/virtio_blk.c	2009-09-04 17:33:48.802523987 -0300
+++ linux-2.6/drivers/block/virtio_blk.c	2009-09-04 17:33:56.186522158 -0300
@@ -314,7 +314,6 @@ static int __devinit virtblk_probe(struc
 	}
 
 	vblk->disk->queue->queuedata = vblk;
-	queue_flag_set_unlocked(QUEUE_FLAG_VIRT, vblk->disk->queue);
 
 	if (index < 26) {
 		sprintf(vblk->disk->disk_name, "vd%c", 'a' + index % 26);


--- NEW FILE linux-2.6.31.tar.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBKqC7vyGugalF9Dw4RAldvAJwMreaHtICM+aRVeTOvxGkRdNNndACbBWCz
bLUy6e5yBTf6QYYnvkzVr5M=
=/QSU
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.1014.2.29
retrieving revision 1.1014.2.30
diff -u -p -r1.1014.2.29 -r1.1014.2.30
--- .cvsignore	3 Sep 2009 20:02:36 -0000	1.1014.2.29
+++ .cvsignore	10 Sep 2009 14:00:22 -0000	1.1014.2.30
@@ -3,7 +3,5 @@ clog
 GNUmakefile
 kernel-2.6.*.config
 temp-*
-kernel-2.6.30
-linux-2.6.30.tar.bz2
-patch-2.6.31-rc8.bz2
-patch-2.6.31-rc8-git2.bz2
+kernel-2.6.31
+linux-2.6.31.tar.bz2


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.238.6.38
retrieving revision 1.238.6.39
diff -u -p -r1.238.6.38 -r1.238.6.39
--- config-generic	5 Sep 2009 19:02:23 -0000	1.238.6.38
+++ config-generic	10 Sep 2009 14:00:23 -0000	1.238.6.39
@@ -2691,8 +2691,9 @@ CONFIG_SND_USB_US122L=m
 #
 # PCMCIA devices
 #
-# CONFIG_SND_PCMCIA is not set
-# CONFIG_SND_VXPOCKET is not set
+CONFIG_SND_PCMCIA=y
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
 
 #
 # Open Sound System
@@ -3668,7 +3669,6 @@ CONFIG_SND_SBAWE=m
 CONFIG_SND_OPL3SA2=m
 # CONFIG_SND_SGALAXY is not set
 # CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_PDAUDIOCF is not set
 CONFIG_SND_DARLA20=m
 CONFIG_SND_GINA20=m
 CONFIG_SND_LAYLA20=m


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-s390x,v
retrieving revision 1.11.6.4
retrieving revision 1.11.6.5
diff -u -p -r1.11.6.4 -r1.11.6.5
--- config-s390x	5 Aug 2009 23:00:09 -0000	1.11.6.4
+++ config-s390x	10 Sep 2009 14:00:23 -0000	1.11.6.5
@@ -1,7 +1,9 @@
 CONFIG_64BIT=y
 # CONFIG_MARCH_G5 is not set
-CONFIG_MARCH_Z900=y
+# CONFIG_MARCH_Z900 is not set
+CONFIG_MARCH_Z9_109=y
 # CONFIG_MARCH_Z990 is not set
+
 CONFIG_NR_CPUS=64
 CONFIG_COMPAT=y
 

drm-next.patch:
 b/drivers/gpu/drm/Kconfig                         |   18 
 b/drivers/gpu/drm/Makefile                        |    8 
 b/drivers/gpu/drm/drm_cache.c                     |   46 
 b/drivers/gpu/drm/drm_crtc.c                      |   77 
 b/drivers/gpu/drm/drm_crtc_helper.c               |  220 
 b/drivers/gpu/drm/drm_drv.c                       |    4 
 b/drivers/gpu/drm/drm_edid.c                      |  504 
 b/drivers/gpu/drm/drm_encoder_slave.c             |  116 
 b/drivers/gpu/drm/drm_fb_helper.c                 |  701 
 b/drivers/gpu/drm/drm_gem.c                       |   11 
 b/drivers/gpu/drm/drm_mm.c                        |   21 
 b/drivers/gpu/drm/drm_modes.c                     |  435 
 b/drivers/gpu/drm/drm_proc.c                      |   17 
 b/drivers/gpu/drm/drm_sysfs.c                     |   28 
 b/drivers/gpu/drm/i915/Makefile                   |    2 
 b/drivers/gpu/drm/i915/i915_debugfs.c             |  445 
 b/drivers/gpu/drm/i915/i915_dma.c                 |  100 
 b/drivers/gpu/drm/i915/i915_drv.c                 |    9 
 b/drivers/gpu/drm/i915/i915_drv.h                 |   62 
 b/drivers/gpu/drm/i915/i915_gem.c                 |   14 
 b/drivers/gpu/drm/i915/i915_gem_tiling.c          |   80 
 b/drivers/gpu/drm/i915/i915_irq.c                 |   21 
 b/drivers/gpu/drm/i915/i915_reg.h                 |  143 
 b/drivers/gpu/drm/i915/i915_suspend.c             |    4 
 b/drivers/gpu/drm/i915/intel_bios.c               |    8 
 b/drivers/gpu/drm/i915/intel_crt.c                |   28 
 b/drivers/gpu/drm/i915/intel_display.c            |  607 
 b/drivers/gpu/drm/i915/intel_drv.h                |    7 
 b/drivers/gpu/drm/i915/intel_fb.c                 |  737 
 b/drivers/gpu/drm/i915/intel_i2c.c                |    8 
 b/drivers/gpu/drm/i915/intel_lvds.c               |   22 
 b/drivers/gpu/drm/i915/intel_sdvo.c               |  331 
 b/drivers/gpu/drm/i915/intel_tv.c                 |   30 
 b/drivers/gpu/drm/mga/mga_dma.c                   |    4 
 b/drivers/gpu/drm/mga/mga_drv.h                   |    1 
 b/drivers/gpu/drm/mga/mga_warp.c                  |  180 
 b/drivers/gpu/drm/r128/r128_cce.c                 |  116 
 b/drivers/gpu/drm/r128/r128_drv.h                 |    8 
 b/drivers/gpu/drm/r128/r128_state.c               |   36 
 b/drivers/gpu/drm/radeon/Kconfig                  |    1 
 b/drivers/gpu/drm/radeon/Makefile                 |   43 
 b/drivers/gpu/drm/radeon/atombios.h               |   11 
 b/drivers/gpu/drm/radeon/atombios_crtc.c          |  100 
 b/drivers/gpu/drm/radeon/avivod.h                 |   60 
 b/drivers/gpu/drm/radeon/mkregtable.c             |  720 
 b/drivers/gpu/drm/radeon/r100.c                   | 1047 
 b/drivers/gpu/drm/radeon/r100_track.h             |  124 
 b/drivers/gpu/drm/radeon/r100d.h                  |   76 
 b/drivers/gpu/drm/radeon/r200.c                   |  456 
 b/drivers/gpu/drm/radeon/r300.c                   |  411 
 b/drivers/gpu/drm/radeon/r300d.h                  |   76 
 b/drivers/gpu/drm/radeon/r600.c                   | 1714 +
 b/drivers/gpu/drm/radeon/r600_blit.c              |  855 
 b/drivers/gpu/drm/radeon/r600_blit_kms.c          |  777 
 b/drivers/gpu/drm/radeon/r600_blit_shaders.c      | 1072 +
 b/drivers/gpu/drm/radeon/r600_blit_shaders.h      |   14 
 b/drivers/gpu/drm/radeon/r600_cp.c                |  541 
 b/drivers/gpu/drm/radeon/r600_cs.c                |  658 
 b/drivers/gpu/drm/radeon/r600d.h                  |  661 
 b/drivers/gpu/drm/radeon/radeon.h                 |  126 
 b/drivers/gpu/drm/radeon/radeon_asic.h            |  159 
 b/drivers/gpu/drm/radeon/radeon_atombios.c        |   79 
 b/drivers/gpu/drm/radeon/radeon_clocks.c          |   10 
 b/drivers/gpu/drm/radeon/radeon_connectors.c      |  215 
 b/drivers/gpu/drm/radeon/radeon_cp.c              |  128 
 b/drivers/gpu/drm/radeon/radeon_device.c          |  340 
 b/drivers/gpu/drm/radeon/radeon_display.c         |   18 
 b/drivers/gpu/drm/radeon/radeon_drv.c             |   21 
 b/drivers/gpu/drm/radeon/radeon_drv.h             |  146 
 b/drivers/gpu/drm/radeon/radeon_encoders.c        |  125 
 b/drivers/gpu/drm/radeon/radeon_fb.c              |  670 
 b/drivers/gpu/drm/radeon/radeon_fence.c           |   49 
 b/drivers/gpu/drm/radeon/radeon_irq_kms.c         |    1 
 b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c     |   44 
 b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c |  339 
 b/drivers/gpu/drm/radeon/radeon_legacy_tv.c       |  904 
 b/drivers/gpu/drm/radeon/radeon_mode.h            |   52 
 b/drivers/gpu/drm/radeon/radeon_object.h          |    1 
 b/drivers/gpu/drm/radeon/radeon_reg.h             |   79 
 b/drivers/gpu/drm/radeon/radeon_ring.c            |  119 
 b/drivers/gpu/drm/radeon/radeon_share.h           |   77 
 b/drivers/gpu/drm/radeon/radeon_state.c           |   18 
 b/drivers/gpu/drm/radeon/radeon_ttm.c             |   96 
 b/drivers/gpu/drm/radeon/reg_srcs/r100            |  105 
 b/drivers/gpu/drm/radeon/reg_srcs/r200            |  184 
 b/drivers/gpu/drm/radeon/reg_srcs/r300            |  729 
 b/drivers/gpu/drm/radeon/reg_srcs/rn50            |   30 
 b/drivers/gpu/drm/radeon/reg_srcs/rs600           |  729 
 b/drivers/gpu/drm/radeon/reg_srcs/rv515           |  486 
 b/drivers/gpu/drm/radeon/rs400.c                  |    2 
 b/drivers/gpu/drm/radeon/rs600.c                  |   60 
 b/drivers/gpu/drm/radeon/rs690.c                  |    1 
 b/drivers/gpu/drm/radeon/rv515.c                  |  518 
 b/drivers/gpu/drm/radeon/rv515d.h                 |  220 
 b/drivers/gpu/drm/radeon/rv770.c                  |  987 
 b/drivers/gpu/drm/radeon/rv770d.h                 |  341 
 b/drivers/gpu/drm/ttm/ttm_bo.c                    |  295 
 b/drivers/gpu/drm/ttm/ttm_bo_util.c               |    4 
 b/drivers/gpu/drm/ttm/ttm_global.c                |    4 
 b/drivers/gpu/drm/ttm/ttm_memory.c                |  508 
 b/drivers/gpu/drm/ttm/ttm_module.c                |   58 
 b/drivers/gpu/drm/ttm/ttm_tt.c                    |  104 
 b/firmware/Makefile                               |   16 
 b/firmware/WHENCE                                 |  121 
 b/firmware/matrox/g200_warp.H16                   |   28 
 b/firmware/matrox/g400_warp.H16                   |   44 
 b/firmware/r128/r128_cce.bin.ihex                 |  129 
 b/firmware/radeon/R100_cp.bin.ihex                |  130 
 b/firmware/radeon/R200_cp.bin.ihex                |  130 
 b/firmware/radeon/R300_cp.bin.ihex                |  130 
 b/firmware/radeon/R420_cp.bin.ihex                |  130 
 b/firmware/radeon/R520_cp.bin.ihex                |  130 
 b/firmware/radeon/R600_me.bin.ihex                | 1345 +
 b/firmware/radeon/R600_pfp.bin.ihex               |  145 
 b/firmware/radeon/RS600_cp.bin.ihex               |  130 
 b/firmware/radeon/RS690_cp.bin.ihex               |  130 
 b/firmware/radeon/RS780_me.bin.ihex               | 1345 +
 b/firmware/radeon/RS780_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV610_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV610_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV620_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV620_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV630_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV630_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV635_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV635_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV670_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV670_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV710_me.bin.ihex               |  341 
 b/firmware/radeon/RV710_pfp.bin.ihex              |  213 
 b/firmware/radeon/RV730_me.bin.ihex               |  341 
 b/firmware/radeon/RV730_pfp.bin.ihex              |  213 
 b/firmware/radeon/RV770_me.bin.ihex               |  341 
 b/firmware/radeon/RV770_pfp.bin.ihex              |  213 
 b/include/drm/drmP.h                              |   54 
 b/include/drm/drm_cache.h                         |   38 
 b/include/drm/drm_crtc.h                          |   16 
 b/include/drm/drm_crtc_helper.h                   |    3 
 b/include/drm/drm_encoder_slave.h                 |  162 
 b/include/drm/drm_fb_helper.h                     |   82 
 b/include/drm/drm_mm.h                            |    7 
 b/include/drm/drm_mode.h                          |   11 
 b/include/drm/drm_sysfs.h                         |   12 
 b/include/drm/ttm/ttm_bo_api.h                    |   13 
 b/include/drm/ttm/ttm_bo_driver.h                 |   94 
 b/include/drm/ttm/ttm_memory.h                    |   43 
 b/include/drm/ttm/ttm_module.h                    |    2 
 drivers/gpu/drm/i915/i915_gem_debugfs.c           |  396 
 drivers/gpu/drm/mga/mga_ucode.h                   |11645 ----------
 drivers/gpu/drm/radeon/r300.h                     |   36 
 drivers/gpu/drm/radeon/r600_microcode.h           |23297 ----------------------
 drivers/gpu/drm/radeon/radeon_microcode.h         | 1844 -
 drivers/gpu/drm/radeon/rs780.c                    |  102 
 drivers/gpu/drm/radeon/rv515r.h                   |  170 
 154 files changed, 33674 insertions(+), 41500 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.6.6.9 -r 1.6.6.10 drm-next.patchIndex: drm-next.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-next.patch,v
retrieving revision 1.6.6.9
retrieving revision 1.6.6.10
diff -u -p -r1.6.6.9 -r1.6.6.10
--- drm-next.patch	26 Aug 2009 19:58:46 -0000	1.6.6.9
+++ drm-next.patch	10 Sep 2009 14:00:23 -0000	1.6.6.10
@@ -1,393 +1,154 @@
-commit 50f153036c9d9e4ae1768d5ca9c2ad4184f7a0b7
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Fri Aug 21 13:21:01 2009 +1000
-
-    drm/radeon/kms: generate the safe register tables.
-    
-    Previously we just made these offline and included them,
-    but no reason we can't generate them at build time.
-    
-    TODO: add rs690 + r100/r200 when done.
-    should we do rs480/rs690 no tcl version?
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 759e4f83f418f4001e724042b4c0e408d615d9ec
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date:   Thu Aug 20 10:29:09 2009 +0200
-
-    drm/ttm: Fixes for "Memory accounting rework."
-    
-    ttm:
-    Fix error paths when kobject_add returns an error.
-    
-    Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 7f5f4db2d50ea1af8f160686d2e97bbfa5102b4f
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date:   Thu Aug 20 10:29:08 2009 +0200
-
-    drm/ttm: Fixes for "Make parts of a struct ttm_bo_device global"
-    
-    ttm:
-    Remove a stray debug printout.
-    Remove a re-init of the lru spinlock at device init.
-    
-    radeon:
-    Fix the size of the bo_global allocation.
-    
-    Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 51c8b4071d84d46cc100baa5931ad06b2a823c95
-Merge: a987fca... 6c30c53...
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Thu Aug 20 13:38:04 2009 +1000
-
-    Merge Linus master to drm-next
-    
-    linux-next conflict reported needed resolution.
-    
-    Conflicts:
-    	drivers/gpu/drm/drm_crtc.c
-    	drivers/gpu/drm/drm_edid.c
-    	drivers/gpu/drm/i915/intel_sdvo.c
-    	drivers/gpu/drm/radeon/radeon_ttm.c
-    	drivers/gpu/drm/ttm/ttm_bo.c
-
-commit a987fcaa805fcb24ba885c2e29fd4fdb6816f08f
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date:   Tue Aug 18 16:51:56 2009 +0200
-
-    ttm: Make parts of a struct ttm_bo_device global.
-    
-    Common resources, like memory accounting and swap lists should be
-    global and not per device. Introduce a struct ttm_bo_global to
-    accomodate this, and register it with sysfs. Add a small sysfs interface
-    to return the number of active buffer objects.
-    
-    Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
-    Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit 5fd9cbad3a4ae82c83c55b9c621d156c326724ef
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date:   Mon Aug 17 16:28:39 2009 +0200
-
-    drm/ttm: Memory accounting rework.
-    
-    Use inclusive zones to simplify accounting and its sysfs representation.
-    Use DMA32 accounting where applicable.
-    
-    Add a sysfs interface to make the heuristically determined limits
-    readable and configurable.
-    
-    Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
-    Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit e9840be8c23601285a70520b4898818f28ce8c2b
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date:   Tue Aug 18 10:27:57 2009 +0200
-
-    drm/ttm: Add a virtual ttm sysfs device.
-    
-    The device directory will be the base directory of the
-    sysfs representation of other ttm subsystems.
-    
-    Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
-    Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit 327c225bd548bf7871f116a0baa5ebdac884e452
-Author: Thomas Hellstrom <thellstrom at vmware.com>
-Date:   Mon Aug 17 16:28:37 2009 +0200
-
-    drm: Enable drm drivers to add drm sysfs devices.
-    
-    Export utility functions for drivers to add specialized devices in the
-    sysfs drm class subdirectory.
-    
-    Initially this will be needed form TTM to add a virtual device that
-    handles power management.
-    
-    Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
-    Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit a0724fcf829e5afb66159ef68cb16a805ea11b42
-Author: Pekka Paalanen <pq at iki.fi>
-Date:   Mon Aug 17 01:18:38 2009 +0300
-
-    drm/ttm: optimize bo_kmap_type values
-    
-    A micro-optimization on the function ttm_kmap_obj_virtual().
-    
-    By defining the values of enum ttm_bo_kmap_obj::bo_kmap_type to have a
-    bit indicating iomem, size of the function ttm_kmap_obj_virtual() will be
-    reduced by 16 bytes on x86_64 (gcc 4.1.2).
-    
-    ttm_kmap_obj_virtual() may be heavily used, when buffer objects are
-    accessed via wrappers, that work for both kinds of memory addresses:
-    iomem cookies and kernel virtual.
-    
-    Signed-off-by: Pekka Paalanen <pq at iki.fi>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 949ef70e2d1a5c12178875f513df34fc85d91a38
-Author: Pekka Paalanen <pq at iki.fi>
-Date:   Mon Aug 17 19:49:19 2009 +0300
-
-    drm/kms: no need to return void value (encoder)
-    
-    Cc: Francisco Jerez <currojerez at riseup.net>
-    Signed-off-by: Pekka Paalanen <pq at iki.fi>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 53bd83899f5ba6b0da8f5ef976129273854a72d4
-Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date:   Wed Jul 1 10:04:40 2009 -0700
-
-    drm: clarify scaling property names
-    
-    Now that we're using the scaling property in the Intel driver I noticed
-    that the names were a bit confusing.  I've corrected them according to
-    our discussion on IRC and the mailing list, though I've left out
-    potential new additions for a new scaling property with an integer (or
-    two) for the scaling factor.  None of the drivers implement that today,
-    but if someone wants to do it, I think it could be done with the
-    addition of a single new type and a new property to describe the
-    scaling factor in the X and Y directions.
-    
-    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
-    Acked-by: Alex Deucher <alexdeucher at gmail.com>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 776f3360de6ed246e973577828f725681120fd7a
-Author: Dave Airlie <airlied at linux.ie>
-Date:   Wed Aug 19 15:56:37 2009 +1000
-
-    drm: fixup includes in encoder slave header files.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 453a7d46dca88704ed88b364c445ff55680a8557
-Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date:   Wed Aug 19 15:51:55 2009 +1000
-
-    drm: remove root requirement from DRM_IOCTL_SET_VERSION (+ DRM_IOCTL_AUTH_MAGIC)
-    
-    Just a DRM_MASTER flag is sufficient here, though maybe this call is
-    totally deprecated anyway (xf86-video-intel still calls it though).
-    
-    (airlied: drop ioctl auth_magic as discussed on mailing list also)
-    
-    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit cfcf4738cd6b5d7bed1473acad76d6430cf1fb0a
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Thu Aug 13 13:31:54 2009 +1000
-
-    drm: fixup include file in drm_encoder_slave
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
[...78321 lines suppressed...]
++ * of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
++ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
++ * USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ *
++ **************************************************************************/
++/*
++ * Authors:
++ * Dave Airlie <airlied at redhat.com>
++ */
++
++#ifndef _DRM_CACHE_H_
++#define _DRM_CACHE_H_
++
++void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
++
++#endif
 diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
-index 7300fb8..db92a83 100644
+index 7300fb8..ae1e9e1 100644
 --- a/include/drm/drm_crtc.h
 +++ b/include/drm/drm_crtc.h
-@@ -572,6 +572,12 @@ struct drm_mode_config {
+@@ -259,6 +259,8 @@ struct drm_framebuffer {
+ 	void *fbdev;
+ 	u32 pseudo_palette[17];
+ 	struct list_head filp_head;
++	/* if you are using the helper */
++	void *helper_private;
+ };
+ 
+ struct drm_property_blob {
+@@ -572,6 +574,12 @@ struct drm_mode_config {
  	struct drm_property *tv_right_margin_property;
  	struct drm_property *tv_top_margin_property;
  	struct drm_property *tv_bottom_margin_property;
@@ -5844,7 +80615,7 @@ index 7300fb8..db92a83 100644
  
  	/* Optional properties */
  	struct drm_property *scaling_mode_property;
-@@ -736,4 +742,10 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
+@@ -736,4 +744,12 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
  extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
  				    void *data, struct drm_file *file_priv);
  extern bool drm_detect_hdmi_monitor(struct edid *edid);
@@ -5854,7 +80625,30 @@ index 7300fb8..db92a83 100644
 +extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
 +				int hdisplay, int vdisplay, int vrefresh,
 +				bool interlaced, int margins);
++extern int drm_add_modes_noedid(struct drm_connector *connector,
++				int hdisplay, int vdisplay);
  #endif /* __DRM_CRTC_H__ */
+diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
+index 6769ff6..4c8daca 100644
+--- a/include/drm/drm_crtc_helper.h
++++ b/include/drm/drm_crtc_helper.h
+@@ -79,6 +79,8 @@ struct drm_encoder_helper_funcs {
+ 	/* detect for DAC style encoders */
+ 	enum drm_connector_status (*detect)(struct drm_encoder *encoder,
+ 					    struct drm_connector *connector);
++	/* disable encoder when not in use - more explicit than dpms off */
++	void (*disable)(struct drm_encoder *encoder);
+ };
+ 
+ struct drm_connector_helper_funcs {
+@@ -98,6 +100,7 @@ extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
+ 				     int x, int y,
+ 				     struct drm_framebuffer *old_fb);
+ extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc);
++extern bool drm_helper_encoder_in_use(struct drm_encoder *encoder);
+ 
+ extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode);
+ 
 diff --git a/include/drm/drm_encoder_slave.h b/include/drm/drm_encoder_slave.h
 new file mode 100644
 index 0000000..2f65633
@@ -6023,6 +80817,117 @@ index 0000000..2f65633
 +void drm_i2c_encoder_destroy(struct drm_encoder *encoder);
 +
 +#endif
+diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
+new file mode 100644
+index 0000000..88fffbd
+--- /dev/null
++++ b/include/drm/drm_fb_helper.h
+@@ -0,0 +1,82 @@
++/*
++ * Copyright (c) 2006-2009 Red Hat Inc.
++ * Copyright (c) 2006-2008 Intel Corporation
++ * Copyright (c) 2007 Dave Airlie <airlied at linux.ie>
++ *
++ * DRM framebuffer helper functions
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that copyright
++ * notice and this permission notice appear in supporting documentation, and
++ * that the name of the copyright holders not be used in advertising or
++ * publicity pertaining to distribution of the software without specific,
++ * written prior permission.  The copyright holders make no representations
++ * about the suitability of this software for any purpose.  It is provided "as
++ * is" without express or implied warranty.
++ *
++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
++ * OF THIS SOFTWARE.
++ *
++ * Authors:
++ *      Dave Airlie <airlied at linux.ie>
++ *      Jesse Barnes <jesse.barnes at intel.com>
++ */
++#ifndef DRM_FB_HELPER_H
++#define DRM_FB_HELPER_H
++
++struct drm_fb_helper_crtc {
++	uint32_t crtc_id;
++	struct drm_mode_set mode_set;
++};
++
++struct drm_fb_helper_funcs {
++	void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green,
++			  u16 blue, int regno);
++};
++
++struct drm_fb_helper {
++	struct drm_framebuffer *fb;
++	struct drm_device *dev;
++	struct drm_display_mode *mode;
++	int crtc_count;
++	struct drm_fb_helper_crtc *crtc_info;
++	struct drm_fb_helper_funcs *funcs;
++	int conn_limit;
++	struct list_head kernel_fb_list;
++};
++
++int drm_fb_helper_single_fb_probe(struct drm_device *dev,
++				  int (*fb_create)(struct drm_device *dev,
++						   uint32_t fb_width,
++						   uint32_t fb_height,
++						   uint32_t surface_width,
++						   uint32_t surface_height,
++						   struct drm_framebuffer **fb_ptr));
++int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count,
++				  int max_conn);
++void drm_fb_helper_free(struct drm_fb_helper *helper);
++int drm_fb_helper_blank(int blank, struct fb_info *info);
++int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
++			      struct fb_info *info);
++int drm_fb_helper_set_par(struct fb_info *info);
++int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
++			    struct fb_info *info);
++int drm_fb_helper_setcolreg(unsigned regno,
++			    unsigned red,
++			    unsigned green,
++			    unsigned blue,
++			    unsigned transp,
++			    struct fb_info *info);
++
++void drm_fb_helper_restore(void);
++void drm_fb_helper_fill_var(struct fb_info *info, struct drm_framebuffer *fb,
++			    uint32_t fb_width, uint32_t fb_height);
++void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch);
++
++#endif
+diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
+index f833207..62329f9 100644
+--- a/include/drm/drm_mm.h
++++ b/include/drm/drm_mm.h
+@@ -37,6 +37,9 @@
+  * Generic range manager structs
+  */
+ #include <linux/list.h>
++#ifdef CONFIG_DEBUG_FS
++#include <linux/seq_file.h>
++#endif
+ 
+ struct drm_mm_node {
+ 	struct list_head fl_entry;
+@@ -96,4 +99,8 @@ static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)
+ 	return block->mm;
+ }
+ 
++#ifdef CONFIG_DEBUG_FS
++int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm);
++#endif
++
+ #endif
 diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
 index ae304cc..1f90841 100644
 --- a/include/drm/drm_mode.h

drm-nouveau.patch:
 drivers/gpu/drm/Kconfig                     |   45 
 drivers/gpu/drm/Makefile                    |    2 
 drivers/gpu/drm/drm_bufs.c                  |   28 
 drivers/gpu/drm/i2c/Makefile                |    4 
 drivers/gpu/drm/i2c/ch7006_drv.c            |  532 
 drivers/gpu/drm/i2c/ch7006_mode.c           |  473 
 drivers/gpu/drm/i2c/ch7006_priv.h           |  340 
 drivers/gpu/drm/nouveau/Makefile            |   27 
 drivers/gpu/drm/nouveau/nouveau_backlight.c |  155 
 drivers/gpu/drm/nouveau/nouveau_bios.c      | 5209 ++++++
 drivers/gpu/drm/nouveau/nouveau_bios.h      |  235 
 drivers/gpu/drm/nouveau/nouveau_bo.c        |  622 
 drivers/gpu/drm/nouveau/nouveau_calc.c      |  626 
 drivers/gpu/drm/nouveau/nouveau_channel.c   |  520 
 drivers/gpu/drm/nouveau/nouveau_connector.c |  747 
 drivers/gpu/drm/nouveau/nouveau_connector.h |   55 
 drivers/gpu/drm/nouveau/nouveau_crtc.h      |   95 
 drivers/gpu/drm/nouveau/nouveau_display.c   |  115 
 drivers/gpu/drm/nouveau/nouveau_dma.c       |  206 
 drivers/gpu/drm/nouveau/nouveau_dma.h       |  148 
 drivers/gpu/drm/nouveau/nouveau_drv.c       |  433 
 drivers/gpu/drm/nouveau/nouveau_drv.h       | 1202 +
 drivers/gpu/drm/nouveau/nouveau_encoder.h   |   66 
 drivers/gpu/drm/nouveau/nouveau_fb.h        |   47 
 drivers/gpu/drm/nouveau/nouveau_fbcon.c     |  355 
 drivers/gpu/drm/nouveau/nouveau_fbcon.h     |   48 
 drivers/gpu/drm/nouveau/nouveau_fence.c     |  261 
 drivers/gpu/drm/nouveau/nouveau_gem.c       |  954 +
 drivers/gpu/drm/nouveau/nouveau_hw.c        | 1077 +
 drivers/gpu/drm/nouveau/nouveau_hw.h        |  446 
 drivers/gpu/drm/nouveau/nouveau_i2c.c       |  256 
 drivers/gpu/drm/nouveau/nouveau_i2c.h       |   45 
 drivers/gpu/drm/nouveau/nouveau_ioc32.c     |   72 
 drivers/gpu/drm/nouveau/nouveau_irq.c       |  675 
 drivers/gpu/drm/nouveau/nouveau_mem.c       |  565 
 drivers/gpu/drm/nouveau/nouveau_notifier.c  |  194 
 drivers/gpu/drm/nouveau/nouveau_object.c    | 1279 +
 drivers/gpu/drm/nouveau/nouveau_reg.h       |  834 +
 drivers/gpu/drm/nouveau/nouveau_sgdma.c     |  317 
 drivers/gpu/drm/nouveau/nouveau_state.c     |  829 +
 drivers/gpu/drm/nouveau/nouveau_swmthd.h    |   33 
 drivers/gpu/drm/nouveau/nouveau_ttm.c       |  131 
 drivers/gpu/drm/nouveau/nv04_crtc.c         | 1014 +
 drivers/gpu/drm/nouveau/nv04_cursor.c       |   70 
 drivers/gpu/drm/nouveau/nv04_dac.c          |  525 
 drivers/gpu/drm/nouveau/nv04_dfp.c          |  621 
 drivers/gpu/drm/nouveau/nv04_display.c      |  293 
 drivers/gpu/drm/nouveau/nv04_fb.c           |   21 
 drivers/gpu/drm/nouveau/nv04_fbcon.c        |  292 
 drivers/gpu/drm/nouveau/nv04_fifo.c         |  295 
 drivers/gpu/drm/nouveau/nv04_graph.c        |  583 
 drivers/gpu/drm/nouveau/nv04_instmem.c      |  207 
 drivers/gpu/drm/nouveau/nv04_mc.c           |   20 
 drivers/gpu/drm/nouveau/nv04_timer.c        |   51 
 drivers/gpu/drm/nouveau/nv04_tv.c           |  304 
 drivers/gpu/drm/nouveau/nv10_fb.c           |   24 
 drivers/gpu/drm/nouveau/nv10_fifo.c         |  177 
 drivers/gpu/drm/nouveau/nv10_graph.c        |  945 +
 drivers/gpu/drm/nouveau/nv17_tv.c           |  660 
 drivers/gpu/drm/nouveau/nv17_tv.h           |  156 
 drivers/gpu/drm/nouveau/nv17_tv_modes.c     |  582 
 drivers/gpu/drm/nouveau/nv20_graph.c        |  784 
 drivers/gpu/drm/nouveau/nv40_fb.c           |   62 
 drivers/gpu/drm/nouveau/nv40_fifo.c         |  223 
 drivers/gpu/drm/nouveau/nv40_graph.c        | 2203 ++
 drivers/gpu/drm/nouveau/nv40_mc.c           |   38 
 drivers/gpu/drm/nouveau/nv50_crtc.c         |  799 +
 drivers/gpu/drm/nouveau/nv50_cursor.c       |  151 
 drivers/gpu/drm/nouveau/nv50_dac.c          |  296 
 drivers/gpu/drm/nouveau/nv50_display.c      |  905 +
 drivers/gpu/drm/nouveau/nv50_display.h      |   46 
 drivers/gpu/drm/nouveau/nv50_evo.h          |  113 
 drivers/gpu/drm/nouveau/nv50_fbcon.c        |  256 
 drivers/gpu/drm/nouveau/nv50_fifo.c         |  475 
 drivers/gpu/drm/nouveau/nv50_graph.c        |  439 
 drivers/gpu/drm/nouveau/nv50_grctx.h        |22284 ++++++++++++++++++++++++++++
 drivers/gpu/drm/nouveau/nv50_instmem.c      |  499 
 drivers/gpu/drm/nouveau/nv50_mc.c           |   40 
 drivers/gpu/drm/nouveau/nv50_sor.c          |  250 
 drivers/gpu/drm/nouveau/nvreg.h             |  535 
 drivers/gpu/drm/ttm/ttm_bo.c                |    4 
 include/drm/Kbuild                          |    1 
 include/drm/drmP.h                          |    2 
 include/drm/i2c/ch7006.h                    |   86 
 include/drm/nouveau_drm.h                   |  216 
 85 files changed, 57829 insertions(+), 21 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.8.6.16 -r 1.8.6.17 drm-nouveau.patchIndex: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-nouveau.patch,v
retrieving revision 1.8.6.16
retrieving revision 1.8.6.17
diff -u -p -r1.8.6.16 -r1.8.6.17
--- drm-nouveau.patch	26 Aug 2009 19:58:47 -0000	1.8.6.16
+++ drm-nouveau.patch	10 Sep 2009 14:00:26 -0000	1.8.6.17
@@ -1,8 +1,8 @@
 diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
-index 39b393d..49b21cc 100644
+index e4d971c..7fe8a4c 100644
 --- a/drivers/gpu/drm/Kconfig
 +++ b/drivers/gpu/drm/Kconfig
-@@ -143,3 +143,47 @@ config DRM_SAVAGE
+@@ -153,3 +153,48 @@ config DRM_SAVAGE
  	help
  	  Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
  	  chipset. If M is selected the module will be called savage.
@@ -10,6 +10,7 @@ index 39b393d..49b21cc 100644
 +config DRM_NOUVEAU
 +	tristate "Nouveau (nVidia) cards"
 +	depends on DRM
++	select DRM_KMS_HELPER
 +	select DRM_TTM
 +	select FB_CFB_FILLRECT
 +	select FB_CFB_COPYAREA
@@ -51,10 +52,10 @@ index 39b393d..49b21cc 100644
 +
 +endmenu
 diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
-index 5f0aec4..f0ef455 100644
+index 3c8827a..d22e64b 100644
 --- a/drivers/gpu/drm/Makefile
 +++ b/drivers/gpu/drm/Makefile
-@@ -27,3 +27,5 @@ obj-$(CONFIG_DRM_I915)  += i915/
+@@ -31,3 +31,5 @@ obj-$(CONFIG_DRM_I915)  += i915/
  obj-$(CONFIG_DRM_SIS)   += sis/
  obj-$(CONFIG_DRM_SAVAGE)+= savage/
  obj-$(CONFIG_DRM_VIA)	+=via/
@@ -130,10 +131,10 @@ index 0000000..6d2abaf
 +obj-$(CONFIG_DRM_I2C_CH7006) += ch7006.o
 diff --git a/drivers/gpu/drm/i2c/ch7006_drv.c b/drivers/gpu/drm/i2c/ch7006_drv.c
 new file mode 100644
-index 0000000..47421ba
+index 0000000..0a3f7a0
 --- /dev/null
 +++ b/drivers/gpu/drm/i2c/ch7006_drv.c
-@@ -0,0 +1,529 @@
+@@ -0,0 +1,532 @@
 +/*
 + * Copyright (C) 2009 Francisco Jerez.
 + * All Rights Reserved.
@@ -600,13 +601,11 @@ index 0000000..47421ba
 +				   ch7006_tv_norm);
 +	}
 +
-+	if (ch7006_scale) {
-+		if (ch7006_scale >= 0 && ch7006_scale <= 2)
-+			priv->scale = ch7006_scale;
-+		else
-+			ch7006_err(client, "Invalid scale setting \"%d\".\n",
-+				   ch7006_scale);
-+	}
++	if (ch7006_scale >= 0 && ch7006_scale <= 2)
++		priv->scale = ch7006_scale;
++	else
++		ch7006_err(client, "Invalid scale setting \"%d\".\n",
++			   ch7006_scale);
 +
 +	return 0;
 +}
@@ -651,11 +650,16 @@ index 0000000..47421ba
 +
 +char *ch7006_tv_norm = NULL;
 +module_param_named(tv_norm, ch7006_tv_norm, charp, 0600);
-+MODULE_PARM_DESC(tv_norm, "Default TV norm.");
++MODULE_PARM_DESC(tv_norm, "Default TV norm.\n"
++		 "\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, PAL-60, NTSC-M, NTSC-J.\n"
++		 "\t\tDefault: PAL");
 +
-+int ch7006_scale = 0;
++int ch7006_scale = 1;
 +module_param_named(scale, ch7006_scale, int, 0600);
-+MODULE_PARM_DESC(scale, "Default scale.");
++MODULE_PARM_DESC(scale, "Default scale.\n"
++		 "\t\tSupported: 0 -> Select video modes with a higher blanking ratio.\n"
++		 "\t\t\t1 -> Select default video modes.\n"
++		 "\t\t\t2 -> Select video modes with a lower blanking ratio.");
 +
 +MODULE_AUTHOR("Francisco Jerez <currojerez at riseup.net>");
 +MODULE_DESCRIPTION("Chrontel ch7006 TV encoder driver");
@@ -1684,10 +1688,10 @@ index 0000000..20564f8
 +}
 diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
 new file mode 100644
-index 0000000..1500eed
+index 0000000..b37ad94
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
-@@ -0,0 +1,5190 @@
+@@ -0,0 +1,5209 @@
 +/*
 + * Copyright 2005-2006 Erik Waling
 + * Copyright 2006 Stephane Marchesin
@@ -5001,7 +5005,7 @@ index 0000000..1500eed
 +
 +int
 +nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
-+			       int pxclk)
++			       uint32_t sub, int pxclk)
 +{
 +	/* The display script table is located by the BIT 'U' table.
 +	 *
@@ -5031,7 +5035,7 @@ index 0000000..1500eed
 +	uint8_t *table = &bios->data[bios->display.script_table_ptr];
 +	uint8_t *entry, *otable = NULL;
 +	uint16_t script;
-+	int i, sub;
++	int i;
 +
 +	if (!bios->display.script_table_ptr) {
 +		NV_ERROR(dev, "No pointer to output script table\n");
@@ -5102,39 +5106,19 @@ index 0000000..1500eed
 +		return 1;
 +	}
 +
-+	/* Anyone have an idea to know which to use for certain? */
-+	switch (dcbent->type) {
-+	case OUTPUT_LVDS:
-+		if (nouveau_uscript_lvds >= 0)
-+			sub = nouveau_uscript_lvds;
-+		else {
-+			/* 0x0000 0x0100 0x0200 0x0300 */
-+			if (pxclk > bios->fp.duallink_transition_clk)
-+				sub = 0x0100;
-+			else
-+				sub = 0x0000;
++	if (pxclk < -2 || pxclk > 0) {
++		/* Try to find matching script table entry */
++		for (i = 0; i < otable[5]; i++) {
++			if (ROM16(otable[table[4] + i*6]) == sub)
++				break;
 +		}
-+		break;
-+	case OUTPUT_TMDS:
-+		if (nouveau_uscript_tmds >= 0)
-+			sub = nouveau_uscript_tmds;
-+		else
-+			sub = 0x0001; /* 0x0001 0x0002 0x0105 */
-+		break;
-+	default:
-+		sub = 0x00ff; /* 0x00ff */
-+		break;
-+	}
 +
-+	for (i = 0; i < otable[5]; i++) {
-+		if (ROM16(otable[table[4] + i*6]) == sub)
-+			break;
-+	}
-+
-+	if (i == otable[5]) {
-+		NV_ERROR(dev, "Table 0x%04x not found for %d/%d, using first\n",
-+			 sub, dcbent->type, dcbent->or);
-+		i = 0;
++		if (i == otable[5]) {
++			NV_ERROR(dev, "Table 0x%04x not found for %d/%d, "
++				      "using first\n",
++				 sub, dcbent->type, dcbent->or);
++			i = 0;
++		}
 +	}
 +
 +	bios->display.head = ffs(dcbent->or) - 1;
@@ -6263,10 +6247,8 @@ index 0000000..1500eed
 +	entry->type = conn & 0xf;
 +	entry->i2c_index = (conn >> 4) & 0xf;
 +	entry->heads = (conn >> 8) & 0xf;
-+	if (bdcb->version >= 0x30)
++	if (bdcb->version >= 0x40)
 +		entry->connector = (conn >> 12) & 0xf;
-+	else
-+		entry->connector = entry->i2c_index; /* sorta */
 +	entry->bus = (conn >> 16) & 0xf;
 +	entry->location = (conn >> 20) & 0x3;
 +	entry->or = (conn >> 24) & 0xf;
@@ -6613,7 +6595,45 @@ index 0000000..1500eed
 +	return (dcb->entries ? 0 : -ENXIO);
 +}
 +
-+static void fixup_legacy_i2c(struct nvbios *bios)
++static void
++fixup_legacy_connector(struct nvbios *bios)
++{
++	struct bios_parsed_dcb *bdcb = &bios->bdcb;
++	struct parsed_dcb *dcb = &bdcb->dcb;
++	int high = 0, i;
++
++	/* DCB 3.0 also has the table in most cases, but there are some cards
++	 * where the table is filled with stub entries, and the DCB entriy
[...2860 lines suppressed...]
++		if (pxclk >= 165000)
++			script |= 0x0100;
++
++		if (nouveau_uscript_tmds >= 0) {
++			NV_INFO(dev, "override script 0x%04x with 0x%04x"
++				     "for output TMDS-%d\n", script,
++				     nouveau_uscript_tmds, or);
++			script = nouveau_uscript_tmds;
++		}
++		break;
++	case OUTPUT_ANALOG:
++		script = 0xff;
++		break;
++	default:
++		NV_ERROR(dev, "modeset on unsupported output type!\n");
++		break;
++	}
++
++	return script;
++}
++
 +static void
 +nv50_display_vblank_crtc_handler(struct drm_device *dev, int crtc)
 +{
@@ -33162,7 +32889,7 @@ index 0000000..7ddb760
 +
 +	nv_wr32(dev, 0x619494, nv_rd32(dev, 0x619494) & ~8);
 +
-+	nouveau_bios_run_display_table(dev, dcbent, -1);
++	nouveau_bios_run_display_table(dev, dcbent, 0, -1);
 +
 +ack:
 +	nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK10);
@@ -33172,10 +32899,8 @@ index 0000000..7ddb760
 +static void
 +nv50_display_unk20_handler(struct drm_device *dev)
 +{
-+	struct drm_nouveau_private *dev_priv = dev->dev_private;
-+	struct nvbios *bios = &dev_priv->VBIOS;
 +	struct dcb_entry *dcbent;
-+	uint32_t tmp, pclk;
++	uint32_t tmp, pclk, script;
 +	int head, or, ret;
 +
 +	ret = nv50_display_irq_head(dev, &head, &dcbent);
@@ -33183,30 +32908,24 @@ index 0000000..7ddb760
 +		goto ack;
 +	or = ffs(dcbent->or) - 1;
 +	pclk = nv_rd32(dev, NV50_PDISPLAY_CRTC_P(head, CLOCK)) & 0x3fffff;
++	script = nv50_display_script_select(dev, dcbent, pclk);
 +
 +	NV_DEBUG(dev, "head %d pxclk: %dKHz\n", head, pclk);
 +
-+	nouveau_bios_run_display_table(dev, dcbent, -2);
++	nouveau_bios_run_display_table(dev, dcbent, 0, -2);
 +
 +	nv50_crtc_set_clock(dev, head, pclk);
 +
-+	nouveau_bios_run_display_table(dev, dcbent, pclk);
++	nouveau_bios_run_display_table(dev, dcbent, script, pclk);
 +
 +	tmp = nv_rd32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(head));
 +	tmp &= ~0x000000f;
 +	nv_wr32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(head), tmp);
 +
 +	if (dcbent->type != OUTPUT_ANALOG) {
-+		int tclk;
-+
-+		if (dcbent->type == OUTPUT_LVDS)
-+			tclk = bios->fp.duallink_transition_clk;
-+		else
-+			tclk = 165000;
-+
 +		tmp = nv_rd32(dev, NV50_PDISPLAY_SOR_CLK_CTRL2(or));
 +		tmp &= ~0x00000f0f;
-+		if (pclk > tclk)
++		if (script & 0x0100)
 +			tmp |= 0x00000101;
 +		nv_wr32(dev, NV50_PDISPLAY_SOR_CLK_CTRL2(or), tmp);
 +	} else {
@@ -33222,14 +32941,15 @@ index 0000000..7ddb760
 +nv50_display_unk40_handler(struct drm_device *dev)
 +{
 +	struct dcb_entry *dcbent;
-+	int head, pclk, ret;
++	int head, pclk, script, ret;
 +
 +	ret = nv50_display_irq_head(dev, &head, &dcbent);
 +	if (ret)
 +		goto ack;
 +	pclk = nv_rd32(dev, NV50_PDISPLAY_CRTC_P(head, CLOCK)) & 0x3fffff;
++	script = nv50_display_script_select(dev, dcbent, pclk);
 +
-+	nouveau_bios_run_display_table(dev, dcbent, -pclk);
++	nouveau_bios_run_display_table(dev, dcbent, script, -pclk);
 +
 +ack:
 +	nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK40);
@@ -34246,10 +33966,10 @@ index 0000000..3d12e12
 +
 diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c
 new file mode 100644
-index 0000000..72db3cf
+index 0000000..108f672
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_graph.c
-@@ -0,0 +1,437 @@
+@@ -0,0 +1,439 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
 + * All Rights Reserved.
@@ -34434,8 +34154,10 @@ index 0000000..72db3cf
 +	struct nouveau_gpuobj *ramin = chan->ramin->gpuobj;
 +	struct nouveau_gpuobj *ctx;
 +	uint32_t *ctxvals = NULL;
-+	int grctx_size = 0x70000, hdr;
-+	int ret, pos;
++	uint32_t grctx_size = 0x70000;
++	int hdr;
++	int ret;
++	int pos;
 +
 +	NV_DEBUG(dev, "ch%d\n", chan->id);
 +
@@ -57530,10 +57252,10 @@ index 0000000..e0a9c3f
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c
 new file mode 100644
-index 0000000..9ae8ec3
+index 0000000..45b0ff7
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_sor.c
-@@ -0,0 +1,253 @@
+@@ -0,0 +1,250 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -57592,17 +57314,11 @@ index 0000000..9ae8ec3
 +static void nv50_sor_dpms(struct drm_encoder *drm_encoder, int mode)
 +{
 +	struct drm_device *dev = drm_encoder->dev;
-+	struct drm_nouveau_private *dev_priv = dev->dev_private;
 +	struct nouveau_encoder *encoder = nouveau_encoder(drm_encoder);
 +	uint32_t val;
 +	int or = encoder->or;
 +
-+	NV_DEBUG(dev, "or %d\n", encoder->or);
-+
-+	if (dev_priv->in_modeset) {
-+		nv50_sor_disconnect(encoder);
-+		return;
-+	}
++	NV_DEBUG(dev, "or %d mode %d\n", or, mode);
 +
 +	/* wait for it to be done */
 +	if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_CTRL(or),
@@ -57646,9 +57362,13 @@ index 0000000..9ae8ec3
 +	struct nouveau_encoder *encoder = nouveau_encoder(drm_encoder);
 +	struct nouveau_connector *connector;
 +
++	NV_DEBUG(drm_encoder->dev, "or %d\n", encoder->or);
++
 +	connector = nouveau_encoder_connector_get(encoder);
-+	if (!connector)
++	if (!connector) {
++		NV_ERROR(drm_encoder->dev, "Encoder has no connector\n");
 +		return false;
++	}
 +
 +	if (connector->scaling_mode != DRM_MODE_SCALE_NONE &&
 +	     connector->native_mode) {
@@ -57682,10 +57402,7 @@ index 0000000..9ae8ec3
 +
 +	NV_DEBUG(dev, "or %d\n", encoder->or);
 +
-+	ret = dev_priv->in_modeset;
-+	dev_priv->in_modeset = false;
 +	nv50_sor_dpms(drm_encoder, DRM_MODE_DPMS_ON);
-+	dev_priv->in_modeset = ret;
 +
 +	if (to_drm_encoder(encoder)->encoder_type != DRM_MODE_ENCODER_LVDS) {
 +		mode_ctl |= NV50_EVO_SOR_MODE_CTRL_TMDS;
@@ -57779,6 +57496,8 @@ index 0000000..9ae8ec3
 +	encoder->dcb = entry;
 +	encoder->or = ffs(entry->or) - 1;
 +
++	encoder->disconnect = nv50_sor_disconnect;
++
 +	drm_encoder_init(dev, to_drm_encoder(encoder), &nv50_sor_encoder_funcs, type);
 +	drm_encoder_helper_add(to_drm_encoder(encoder), &nv50_sor_helper_funcs);
 +
@@ -58373,7 +58092,7 @@ index b940fdf..cfa6af4 100644
  unifdef-y += via_drm.h
 +unifdef-y += nouveau_drm.h
 diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index e0f1c1f..84e2fa6 100644
+index eeefb63..1345c39 100644
 --- a/include/drm/drmP.h
 +++ b/include/drm/drmP.h
 @@ -1240,6 +1240,8 @@ extern void drm_idlelock_release(struct drm_lock_data *lock_data);

drm-page-flip.patch:
 b/drivers/gpu/drm/drm_crtc.c                            |  169 +++++++++++++++-
 b/drivers/gpu/drm/drm_crtc_helper.c                     |   12 +
 b/drivers/gpu/drm/drm_drv.c                             |    1 
 b/drivers/gpu/drm/drm_fops.c                            |   68 ++++++
 b/drivers/gpu/drm/drm_irq.c                             |   43 ++++
 b/drivers/gpu/drm/drm_stub.c                            |    1 
 b/drivers/gpu/drm/i915/i915_drv.c                       |    1 
 b/drivers/gpu/drm/i915/intel_display.c                  |   26 +-
 b/drivers/gpu/drm/radeon/radeon_display.c               |    3 
 b/include/drm/drm.h                                     |   25 ++
 b/include/drm/drmP.h                                    |   32 +++
 b/include/drm/drm_crtc.h                                |   27 ++
 b/include/drm/drm_crtc_helper.h                         |    4 
 b/include/drm/drm_mode.h                                |   16 +
 linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c |    2 
 linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c |    2 
 16 files changed, 416 insertions(+), 16 deletions(-)

Index: drm-page-flip.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-page-flip.patch,v
retrieving revision 1.2.6.4
retrieving revision 1.2.6.5
diff -u -p -r1.2.6.4 -r1.2.6.5
--- drm-page-flip.patch	26 Aug 2009 19:58:48 -0000	1.2.6.4
+++ drm-page-flip.patch	10 Sep 2009 14:00:29 -0000	1.2.6.5
@@ -1,6 +1,7 @@
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc.c.pf	2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc.c	2009-08-25 09:52:41.000000000 +1000
+diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
+index ba728ad..4b7e748 100644
+--- a/drivers/gpu/drm/drm_crtc.c
++++ b/drivers/gpu/drm/drm_crtc.c
 @@ -34,6 +34,8 @@
  #include "drmP.h"
  #include "drm_crtc.h"
@@ -10,7 +11,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  struct drm_prop_enum_list {
  	int type;
  	char *name;
-@@ -329,6 +331,34 @@ void drm_framebuffer_cleanup(struct drm_
+@@ -330,6 +332,34 @@ void drm_framebuffer_cleanup(struct drm_framebuffer *fb)
  EXPORT_SYMBOL(drm_framebuffer_cleanup);
  
  /**
@@ -45,7 +46,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
   * drm_crtc_init - Initialise a new CRTC object
   * @dev: DRM device
   * @crtc: CRTC object to init
-@@ -339,17 +369,19 @@ EXPORT_SYMBOL(drm_framebuffer_cleanup);
+@@ -340,17 +370,19 @@ EXPORT_SYMBOL(drm_framebuffer_cleanup);
   *
   * Inits a new object created as base part of an driver crtc object.
   */
@@ -66,7 +67,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	mutex_unlock(&dev->mode_config.mutex);
  }
  EXPORT_SYMBOL(drm_crtc_init);
-@@ -368,6 +400,9 @@ void drm_crtc_cleanup(struct drm_crtc *c
+@@ -369,6 +401,9 @@ void drm_crtc_cleanup(struct drm_crtc *crtc)
  {
  	struct drm_device *dev = crtc->dev;
  
@@ -76,7 +77,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	if (crtc->gamma_store) {
  		kfree(crtc->gamma_store);
  		crtc->gamma_store = NULL;
-@@ -375,6 +410,7 @@ void drm_crtc_cleanup(struct drm_crtc *c
+@@ -376,6 +411,7 @@ void drm_crtc_cleanup(struct drm_crtc *crtc)
  
  	drm_mode_object_put(dev, &crtc->base);
  	list_del(&crtc->head);
@@ -84,7 +85,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	dev->mode_config.num_crtc--;
  }
  EXPORT_SYMBOL(drm_crtc_cleanup);
-@@ -2478,3 +2514,134 @@ out:
+@@ -2479,3 +2515,134 @@ out:
  	mutex_unlock(&dev->mode_config.mutex);
  	return ret;
  }
@@ -219,10 +220,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
 +
 +	return ret;
 +}
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.pf	2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c	2009-08-25 09:52:41.000000000 +1000
-@@ -874,8 +874,10 @@ int drm_crtc_helper_set_config(struct dr
+diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
+index ff447f1..fec66f9 100644
+--- a/drivers/gpu/drm/drm_crtc_helper.c
++++ b/drivers/gpu/drm/drm_crtc_helper.c
+@@ -872,8 +872,10 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
  		old_fb = set->crtc->fb;
  		if (set->crtc->fb != set->fb)
  			set->crtc->fb = set->fb;
@@ -231,9 +233,9 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  						set->x, set->y, old_fb);
 +		mutex_unlock(&dev->struct_mutex);
  		if (ret != 0)
- 		    goto fail_set_mode;
+ 			goto fail;
  	}
-@@ -1101,3 +1103,13 @@ int drm_helper_resume_force_mode(struct 
+@@ -1095,3 +1097,13 @@ int drm_helper_resume_force_mode(struct drm_device *dev)
  	return 0;
  }
  EXPORT_SYMBOL(drm_helper_resume_force_mode);
@@ -247,10 +249,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
 +	return crtc_funcs->mode_set_base(crtc, x, y, old_fb);
 +}
 +EXPORT_SYMBOL(drm_crtc_helper_set_base);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_drv.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_drv.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_drv.c.pf	2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_drv.c	2009-08-25 09:52:41.000000000 +1000
-@@ -145,6 +145,7 @@ static struct drm_ioctl_desc drm_ioctls[
+diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
+index a75ca63..672f473 100644
+--- a/drivers/gpu/drm/drm_drv.c
++++ b/drivers/gpu/drm/drm_drv.c
+@@ -145,6 +145,7 @@ static struct drm_ioctl_desc drm_ioctls[] = {
  	DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW),
  	DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_CONTROL_ALLOW),
  	DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW),
@@ -258,10 +261,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  };
  
  #define DRM_CORE_IOCTL_COUNT	ARRAY_SIZE( drm_ioctls )
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_fops.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_fops.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_fops.c.pf	2009-08-25 09:35:48.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_fops.c	2009-08-25 09:52:41.000000000 +1000
-@@ -257,6 +257,8 @@ static int drm_open_helper(struct inode 
+diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
+index 251bc0e..dcd9c66 100644
+--- a/drivers/gpu/drm/drm_fops.c
++++ b/drivers/gpu/drm/drm_fops.c
+@@ -257,6 +257,8 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
  
  	INIT_LIST_HEAD(&priv->lhead);
  	INIT_LIST_HEAD(&priv->fbs);
@@ -270,7 +274,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  
  	if (dev->driver->driver_features & DRIVER_GEM)
  		drm_gem_open(dev, priv);
-@@ -429,6 +431,9 @@ int drm_release(struct inode *inode, str
+@@ -429,6 +431,9 @@ int drm_release(struct inode *inode, struct file *filp)
  {
  	struct drm_file *file_priv = filp->private_data;
  	struct drm_device *dev = file_priv->minor->dev;
@@ -280,7 +284,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	int retcode = 0;
  
  	lock_kernel();
-@@ -451,6 +456,19 @@ int drm_release(struct inode *inode, str
+@@ -451,6 +456,19 @@ int drm_release(struct inode *inode, struct file *filp)
  	if (file_priv->minor->master)
  		drm_master_release(dev, filp);
  
@@ -300,7 +304,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	if (dev->driver->driver_features & DRIVER_GEM)
  		drm_gem_release(dev, file_priv);
  
-@@ -544,9 +562,55 @@ int drm_release(struct inode *inode, str
+@@ -544,9 +562,55 @@ int drm_release(struct inode *inode, struct file *filp)
  }
  EXPORT_SYMBOL(drm_release);
  
@@ -358,9 +362,10 @@ diff -up linux-2.6.30.noarch/drivers/gpu
 +	return mask;
  }
  EXPORT_SYMBOL(drm_poll);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c.pf linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c.pf	2009-08-25 09:35:48.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c	2009-08-25 09:52:41.000000000 +1000
+diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
+index f85aaf2..102d19d 100644
+--- a/drivers/gpu/drm/drm_irq.c
++++ b/drivers/gpu/drm/drm_irq.c
 @@ -34,6 +34,7 @@
   */
  
@@ -369,7 +374,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  
  #include <linux/interrupt.h>	/* For task queue support */
  
-@@ -71,6 +72,44 @@ int drm_irq_by_busid(struct drm_device *
+@@ -71,6 +72,44 @@ int drm_irq_by_busid(struct drm_device *dev, void *data,
  	return 0;
  }
  
@@ -414,16 +419,16 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  static void vblank_disable_fn(unsigned long arg)
  {
  	struct drm_device *dev = (struct drm_device *)arg;
-@@ -161,6 +200,8 @@ int drm_vblank_init(struct drm_device *d
+@@ -161,6 +200,8 @@ int drm_vblank_init(struct drm_device *dev, int num_crtcs)
  		atomic_set(&dev->vblank_refcount[i], 0);
  	}
  
-+	INIT_LIST_HEAD(&dev->flip_list);
 +	INIT_WORK(&dev->flip_work, drm_flip_work_func);
++
  	dev->vblank_disable_allowed = 0;
  
  	return 0;
-@@ -626,5 +667,7 @@ void drm_handle_vblank(struct drm_device
+@@ -626,5 +667,7 @@ void drm_handle_vblank(struct drm_device *dev, int crtc)
  {
  	atomic_inc(&dev->_vblank_count[crtc]);
  	DRM_WAKEUP(&dev->vbl_queue[crtc]);
@@ -431,10 +436,23 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  }
  EXPORT_SYMBOL(drm_handle_vblank);
 +
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c.pf linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c.pf	2009-08-25 09:35:48.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c	2009-08-25 09:52:41.000000000 +1000
-@@ -203,6 +203,7 @@ static struct drm_driver driver = {
+diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
+index 55bb8a8..65c8662 100644
+--- a/drivers/gpu/drm/drm_stub.c
++++ b/drivers/gpu/drm/drm_stub.c
+@@ -220,6 +220,7 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
+ 	INIT_LIST_HEAD(&dev->ctxlist);
+ 	INIT_LIST_HEAD(&dev->vmalist);
+ 	INIT_LIST_HEAD(&dev->maplist);
++	INIT_LIST_HEAD(&dev->flip_list);
+ 
+ 	spin_lock_init(&dev->count_lock);
+ 	spin_lock_init(&dev->drw_lock);
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index dbe568c..b81305e 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -206,6 +206,7 @@ static struct drm_driver driver = {
  		 .mmap = drm_gem_mmap,
  		 .poll = drm_poll,
  		 .fasync = drm_fasync,
@@ -442,10 +460,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  #ifdef CONFIG_COMPAT
  		 .compat_ioctl = i915_compat_ioctl,
  #endif
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.pf linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.pf	2009-08-25 09:35:48.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c	2009-08-25 09:52:41.000000000 +1000
-@@ -917,6 +917,8 @@ intel_pipe_set_base(struct drm_crtc *crt
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 155719f..0d6e677 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -973,6 +973,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
  	u32 dspcntr, alignment;
  	int ret;
  
@@ -454,7 +473,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	/* no fb bound */
  	if (!crtc->fb) {
  		DRM_DEBUG("No FB bound\n");
-@@ -952,17 +954,14 @@ intel_pipe_set_base(struct drm_crtc *crt
+@@ -1008,17 +1010,14 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
  		BUG();
  	}
  
@@ -472,7 +491,15 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  		return ret;
  	}
  
-@@ -998,7 +997,6 @@ intel_pipe_set_base(struct drm_crtc *crt
+@@ -1029,7 +1028,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
+ 		ret = i915_gem_object_get_fence_reg(obj);
+ 		if (ret != 0) {
+ 			i915_gem_object_unpin(obj);
+-			mutex_unlock(&dev->struct_mutex);
+ 			return ret;
+ 		}
+ 	}
+@@ -1054,7 +1052,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
  	default:
  		DRM_ERROR("Unknown color depth\n");
  		i915_gem_object_unpin(obj);
@@ -480,7 +507,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  		return -EINVAL;
  	}
  	if (IS_I965G(dev)) {
-@@ -1026,13 +1024,11 @@ intel_pipe_set_base(struct drm_crtc *crt
+@@ -1086,17 +1083,14 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
  		I915_READ(dspbase);
  	}
  
@@ -488,14 +515,18 @@ diff -up linux-2.6.30.noarch/drivers/gpu
 -
  	if (old_fb) {
  		intel_fb = to_intel_framebuffer(old_fb);
+ 		obj_priv = intel_fb->obj->driver_private;
 +		intel_wait_for_vblank(dev);
  		i915_gem_object_unpin(intel_fb->obj);
  	}
--	mutex_unlock(&dev->struct_mutex);
+ 	intel_increase_pllclock(crtc, true);
  
+-	mutex_unlock(&dev->struct_mutex);
+-
  	if (!dev->primary->master)
  		return 0;
-@@ -2605,7 +2601,9 @@ static int intel_crtc_mode_set(struct dr
+ 
+@@ -2732,7 +2726,9 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
  	I915_WRITE(dspcntr_reg, dspcntr);
  
  	/* Flush the plane changes */
@@ -505,7 +536,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  
  	intel_update_watermarks(dev);
  
-@@ -3081,6 +3079,7 @@ static const struct drm_crtc_funcs intel
+@@ -3521,6 +3517,7 @@ static const struct drm_crtc_funcs intel_crtc_funcs = {
  	.gamma_set = intel_crtc_gamma_set,
  	.set_config = drm_crtc_helper_set_config,
  	.destroy = intel_crtc_destroy,
@@ -513,7 +544,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  };
  
  
-@@ -3093,7 +3092,7 @@ static void intel_crtc_init(struct drm_d
+@@ -3533,7 +3530,7 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
  	if (intel_crtc == NULL)
  		return;
  
@@ -522,7 +553,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  
  	drm_mode_crtc_set_gamma_size(&intel_crtc->base, 256);
  	intel_crtc->pipe = pipe;
-@@ -3327,9 +3326,18 @@ static int intel_user_framebuffer_create
+@@ -3717,9 +3714,18 @@ static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
  	return drm_gem_handle_create(file_priv, object, handle);
  }
  
@@ -541,34 +572,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  };
  
  int intel_framebuffer_create(struct drm_device *dev,
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.pf linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c
---- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.pf	2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c	2009-08-25 09:52:41.000000000 +1000
-@@ -1122,7 +1122,7 @@ nv04_crtc_create(struct drm_device *dev,
- 	nv_crtc->mode_set.connectors = (struct drm_connector **)(nv_crtc + 1);
- 	nv_crtc->mode_set.num_connectors = 0;
- 
--	drm_crtc_init(dev, &nv_crtc->base, &nv04_crtc_funcs);
-+	drm_crtc_init(dev, &nv_crtc->base, crtc_num, &nv04_crtc_funcs);
- 	drm_crtc_helper_add(&nv_crtc->base, &nv04_crtc_helper_funcs);
- 	drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256);
- 
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.pf linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c
---- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.pf	2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c	2009-08-25 09:52:41.000000000 +1000
-@@ -810,7 +810,7 @@ nv50_crtc_create(struct drm_device *dev,
- 	crtc->mode_set.connectors = (struct drm_connector **)(crtc + 1);
- 	crtc->mode_set.num_connectors = 0;
- 
--	drm_crtc_init(dev, &crtc->base, &nv50_crtc_funcs);
-+	drm_crtc_init(dev, &crtc->base, index, &nv50_crtc_funcs);
- 	drm_crtc_helper_add(&crtc->base, &nv50_crtc_helper_funcs);
- 	drm_mode_crtc_set_gamma_size(&crtc->base, 256);
- 
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_display.c.pf linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_display.c
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_display.c.pf	2009-08-25 09:35:49.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_display.c	2009-08-25 09:52:41.000000000 +1000
-@@ -171,6 +171,7 @@ static const struct drm_crtc_funcs radeo
+diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
+index f5739e2..0ec45bc 100644
+--- a/drivers/gpu/drm/radeon/radeon_display.c
++++ b/drivers/gpu/drm/radeon/radeon_display.c
+@@ -168,6 +168,7 @@ static const struct drm_crtc_funcs radeon_crtc_funcs = {
  	.gamma_set = radeon_crtc_gamma_set,
  	.set_config = drm_crtc_helper_set_config,
  	.destroy = radeon_crtc_destroy,
@@ -576,7 +584,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  };
  
  static void radeon_crtc_init(struct drm_device *dev, int index)
-@@ -183,7 +184,7 @@ static void radeon_crtc_init(struct drm_
+@@ -180,7 +181,7 @@ static void radeon_crtc_init(struct drm_device *dev, int index)
  	if (radeon_crtc == NULL)
  		return;
  
@@ -585,21 +593,131 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  
  	drm_mode_crtc_set_gamma_size(&radeon_crtc->base, 256);
  	radeon_crtc->crtc_id = index;
-diff -up linux-2.6.30.noarch/include/drm/drm_crtc_helper.h.pf linux-2.6.30.noarch/include/drm/drm_crtc_helper.h
---- linux-2.6.30.noarch/include/drm/drm_crtc_helper.h.pf	2009-06-10 13:05:27.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drm_crtc_helper.h	2009-08-25 09:52:41.000000000 +1000
-@@ -123,4 +123,8 @@ static inline void drm_connector_helper_
- }
+diff --git a/include/drm/drm.h b/include/drm/drm.h
+index 7cb50bd..1920323 100644
+--- a/include/drm/drm.h
++++ b/include/drm/drm.h
+@@ -686,6 +686,7 @@ struct drm_gem_open {
+ #define DRM_IOCTL_MODE_GETFB		DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
+ #define DRM_IOCTL_MODE_ADDFB		DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
+ #define DRM_IOCTL_MODE_RMFB		DRM_IOWR(0xAF, unsigned int)
++#define DRM_IOCTL_MODE_PAGE_FLIP	DRM_IOW( 0xB0, struct drm_mode_page_flip)
  
- extern int drm_helper_resume_force_mode(struct drm_device *dev);
+ /**
+  * Device specific ioctls should only be in their respective headers
+@@ -698,6 +699,30 @@ struct drm_gem_open {
+ #define DRM_COMMAND_BASE                0x40
+ #define DRM_COMMAND_END			0xA0
+ 
++/**
++ * Header for events written back to userspace on the drm fd.  The
++ * type defines the type of event, the length specifies the total
++ * length of the event (including the header), and user_data is
++ * typically a 64 bit value passed with the ioctl that triggered the
++ * event.  A read on the drm fd will always only return complete
++ * events, that is, if for example the read buffer is 100 bytes, and
++ * there are two 64 byte events pending, only one will be returned.
++ */
++struct drm_event {
++	__u32 type;
++	__u32 length;
++};
 +
-+extern int drm_crtc_helper_set_base(struct drm_crtc *crtc, int x, int y,
-+				    struct drm_framebuffer *old_fb);
++#define DRM_EVENT_MODE_PAGE_FLIP 0x01
 +
- #endif
-diff -up linux-2.6.30.noarch/include/drm/drm_crtc.h.pf linux-2.6.30.noarch/include/drm/drm_crtc.h
---- linux-2.6.30.noarch/include/drm/drm_crtc.h.pf	2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drm_crtc.h	2009-08-25 09:52:41.000000000 +1000
++struct drm_event_page_flip {
++	struct drm_event base;
++	__u64 user_data;
++	__u32 tv_sec;
++	__u32 tv_usec;
++	__u32 frame;
++};
++
+ /* typedef area */
+ #ifndef __KERNEL__
+ typedef struct drm_clip_rect drm_clip_rect_t;
+diff --git a/include/drm/drmP.h b/include/drm/drmP.h
+index eeefb63..5431888 100644
+--- a/include/drm/drmP.h
++++ b/include/drm/drmP.h
+@@ -426,6 +426,14 @@ struct drm_buf_entry {
+ 	struct drm_freelist freelist;
+ };
+ 
++/* Event queued up for userspace to read */
++struct drm_pending_event {
++	struct drm_event *event;
++	struct list_head link;
++	struct drm_file *file_priv;
++	void (*destroy) (struct drm_pending_event *event);
++};
++
+ /** File private data */
+ struct drm_file {
+ 	int authenticated;
+@@ -449,6 +457,9 @@ struct drm_file {
+ 	struct drm_master *master; /* master this node is currently associated with
+ 				      N.B. not always minor->master */
+ 	struct list_head fbs;
++
++	wait_queue_head_t event_wait;
++	struct list_head event_list;
+ };
+ 
+ /** Wait queue */
+@@ -897,6 +908,16 @@ struct drm_minor {
+ 	struct drm_mode_group mode_group;
+ };
+ 
++struct drm_pending_flip {
++	struct drm_pending_event pending_event;
++	struct drm_framebuffer *old_fb;
++	struct drm_crtc *crtc;
++	u32 frame;
++	int pipe;
++	struct list_head link;
++	struct drm_event_page_flip event;
++};
++
+ /**
+  * DRM device structure. This structure represent a complete card that
+  * may contain multiple heads.
+@@ -996,6 +1017,13 @@ struct drm_device {
+ 
+ 	u32 max_vblank_count;           /**< size of vblank counter register */
+ 
++	struct work_struct flip_work;
++
++	/**
++	 * List of objects waiting on flip completion
++	 */
++	struct list_head flip_list;
++
+ 	/*@} */
+ 	cycles_t ctx_start;
+ 	cycles_t lck_start;
+@@ -1132,6 +1160,8 @@ extern int drm_lastclose(struct drm_device *dev);
+ extern int drm_open(struct inode *inode, struct file *filp);
+ extern int drm_stub_open(struct inode *inode, struct file *filp);
+ extern int drm_fasync(int fd, struct file *filp, int on);
++extern ssize_t drm_read(struct file *filp, char __user *buffer,
++			size_t count, loff_t *offset);
+ extern int drm_release(struct inode *inode, struct file *filp);
+ 
+ 				/* Mapping support (drm_vm.h) */
+@@ -1298,6 +1328,8 @@ extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
+ extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
+ extern int drm_modeset_ctl(struct drm_device *dev, void *data,
+ 			   struct drm_file *file_priv);
++extern void drm_finish_pending_flip(struct drm_device *dev,
++				   struct drm_pending_flip *f, u32 frame);
+ 
+ 				/* AGP/GART support (drm_agpsupport.h) */
+ extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
+diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
+index ae1e9e1..525f770 100644
+--- a/include/drm/drm_crtc.h
++++ b/include/drm/drm_crtc.h
 @@ -238,6 +238,12 @@ struct drm_display_info {
  };
  
@@ -613,7 +731,7 @@ diff -up linux-2.6.30.noarch/include/drm
  	void (*destroy)(struct drm_framebuffer *framebuffer);
  	int (*create_handle)(struct drm_framebuffer *fb,
  			     struct drm_file *file_priv,
-@@ -288,6 +294,7 @@ struct drm_property {
+@@ -290,6 +296,7 @@ struct drm_property {
  struct drm_crtc;
  struct drm_connector;
  struct drm_encoder;
@@ -621,7 +739,7 @@ diff -up linux-2.6.30.noarch/include/drm
  
  /**
   * drm_crtc_funcs - control CRTCs for a given device
-@@ -331,17 +338,29 @@ struct drm_crtc_funcs {
+@@ -333,17 +340,29 @@ struct drm_crtc_funcs {
  	void (*destroy)(struct drm_crtc *crtc);
  
  	int (*set_config)(struct drm_mode_set *set);
@@ -651,7 +769,7 @@ diff -up linux-2.6.30.noarch/include/drm
   *
   * Each CRTC may have one or more connectors associated with it.  This structure
   * allows the CRTC to be controlled.
-@@ -359,6 +378,7 @@ struct drm_crtc {
+@@ -361,6 +380,7 @@ struct drm_crtc {
  
  	struct drm_display_mode mode;
  
@@ -659,7 +777,7 @@ diff -up linux-2.6.30.noarch/include/drm
  	int x, y;
  	struct drm_display_mode *desired_mode;
  	int desired_x, desired_y;
-@@ -368,6 +388,10 @@ struct drm_crtc {
+@@ -370,6 +390,10 @@ struct drm_crtc {
  	uint32_t gamma_size;
  	uint16_t *gamma_store;
  
@@ -670,7 +788,7 @@ diff -up linux-2.6.30.noarch/include/drm
  	/* if you are using the helper */
  	void *helper_private;
  };
-@@ -595,6 +619,7 @@ struct drm_mode_config {
+@@ -597,6 +621,7 @@ struct drm_mode_config {
  
  extern void drm_crtc_init(struct drm_device *dev,
  			  struct drm_crtc *crtc,
@@ -678,7 +796,7 @@ diff -up linux-2.6.30.noarch/include/drm
  			  const struct drm_crtc_funcs *funcs);
  extern void drm_crtc_cleanup(struct drm_crtc *crtc);
  
-@@ -742,6 +767,8 @@ extern int drm_mode_gamma_get_ioctl(stru
+@@ -744,6 +769,8 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
  extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
  				    void *data, struct drm_file *file_priv);
  extern bool drm_detect_hdmi_monitor(struct edid *edid);
@@ -687,51 +805,23 @@ diff -up linux-2.6.30.noarch/include/drm
  extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
  				int hdisplay, int vdisplay, int vrefresh,
  				bool reduced, bool interlaced);
-diff -up linux-2.6.30.noarch/include/drm/drm.h.pf linux-2.6.30.noarch/include/drm/drm.h
---- linux-2.6.30.noarch/include/drm/drm.h.pf	2009-06-10 13:05:27.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drm.h	2009-08-25 09:52:41.000000000 +1000
-@@ -686,6 +686,7 @@ struct drm_gem_open {
- #define DRM_IOCTL_MODE_GETFB		DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
- #define DRM_IOCTL_MODE_ADDFB		DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
- #define DRM_IOCTL_MODE_RMFB		DRM_IOWR(0xAF, unsigned int)
-+#define DRM_IOCTL_MODE_PAGE_FLIP	DRM_IOW( 0xB0, struct drm_mode_page_flip)
- 
- /**
-  * Device specific ioctls should only be in their respective headers
-@@ -698,6 +699,30 @@ struct drm_gem_open {
- #define DRM_COMMAND_BASE                0x40
- #define DRM_COMMAND_END			0xA0
+diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
+index 4c8daca..b5bd0b8 100644
+--- a/include/drm/drm_crtc_helper.h
++++ b/include/drm/drm_crtc_helper.h
+@@ -126,4 +126,8 @@ static inline void drm_connector_helper_add(struct drm_connector *connector,
+ }
  
-+/**
-+ * Header for events written back to userspace on the drm fd.  The
-+ * type defines the type of event, the length specifies the total
-+ * length of the event (including the header), and user_data is
-+ * typically a 64 bit value passed with the ioctl that triggered the
-+ * event.  A read on the drm fd will always only return complete
-+ * events, that is, if for example the read buffer is 100 bytes, and
-+ * there are two 64 byte events pending, only one will be returned.
-+ */
-+struct drm_event {
-+	__u32 type;
-+	__u32 length;
-+};
-+
-+#define DRM_EVENT_MODE_PAGE_FLIP 0x01
+ extern int drm_helper_resume_force_mode(struct drm_device *dev);
 +
-+struct drm_event_page_flip {
-+	struct drm_event base;
-+	__u64 user_data;
-+	__u32 tv_sec;
-+	__u32 tv_usec;
-+	__u32 frame;
-+};
++extern int drm_crtc_helper_set_base(struct drm_crtc *crtc, int x, int y,
++				    struct drm_framebuffer *old_fb);
 +
- /* typedef area */
- #ifndef __KERNEL__
- typedef struct drm_clip_rect drm_clip_rect_t;
-diff -up linux-2.6.30.noarch/include/drm/drm_mode.h.pf linux-2.6.30.noarch/include/drm/drm_mode.h
---- linux-2.6.30.noarch/include/drm/drm_mode.h.pf	2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drm_mode.h	2009-08-25 09:52:41.000000000 +1000
+ #endif
+diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
+index 1f90841..6f08a77 100644
+--- a/include/drm/drm_mode.h
++++ b/include/drm/drm_mode.h
 @@ -268,4 +268,20 @@ struct drm_mode_crtc_lut {
  	__u64 blue;
  };
@@ -753,80 +843,27 @@ diff -up linux-2.6.30.noarch/include/drm
 +};
 +
  #endif
-diff -up linux-2.6.30.noarch/include/drm/drmP.h.pf linux-2.6.30.noarch/include/drm/drmP.h
---- linux-2.6.30.noarch/include/drm/drmP.h.pf	2009-08-25 09:52:20.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drmP.h	2009-08-25 09:52:41.000000000 +1000
-@@ -426,6 +426,14 @@ struct drm_buf_entry {
- 	struct drm_freelist freelist;
- };
+diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.da linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c
+--- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.da	2009-09-08 16:07:49.000000000 +1000
++++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c	2009-09-08 16:08:09.000000000 +1000
+@@ -993,7 +993,7 @@ nv04_crtc_create(struct drm_device *dev,
+ 	nv_crtc->index = crtc_num;
+ 	nv_crtc->last_dpms = NV_DPMS_CLEARED;
  
-+/* Event queued up for userspace to read */
-+struct drm_pending_event {
-+	struct drm_event *event;
-+	struct list_head link;
-+	struct drm_file *file_priv;
-+	void (*destroy) (struct drm_pending_event *event);
-+};
-+
- /** File private data */
- struct drm_file {
- 	int authenticated;
-@@ -449,6 +457,9 @@ struct drm_file {
- 	struct drm_master *master; /* master this node is currently associated with
- 				      N.B. not always minor->master */
- 	struct list_head fbs;
-+
-+	wait_queue_head_t event_wait;
-+	struct list_head event_list;
- };
- 
- /** Wait queue */
-@@ -897,6 +908,16 @@ struct drm_minor {
- 	struct drm_mode_group mode_group;
- };
- 
-+struct drm_pending_flip {
-+	struct drm_pending_event pending_event;
-+	struct drm_framebuffer *old_fb;
-+	struct drm_crtc *crtc;
-+	u32 frame;
-+	int pipe;
-+	struct list_head link;
-+	struct drm_event_page_flip event;
-+};
-+
- /**
-  * DRM device structure. This structure represent a complete card that
-  * may contain multiple heads.
-@@ -996,6 +1017,13 @@ struct drm_device {
- 
- 	u32 max_vblank_count;           /**< size of vblank counter register */
+-	drm_crtc_init(dev, &nv_crtc->base, &nv04_crtc_funcs);
++	drm_crtc_init(dev, &nv_crtc->base, crtc_num, &nv04_crtc_funcs);
+ 	drm_crtc_helper_add(&nv_crtc->base, &nv04_crtc_helper_funcs);
+ 	drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256);
  
-+	struct work_struct flip_work;
-+
-+	/**
-+	 * List of objects waiting on flip completion
-+	 */
-+	struct list_head flip_list;
-+
- 	/*@} */
- 	cycles_t ctx_start;
- 	cycles_t lck_start;
-@@ -1132,6 +1160,8 @@ extern int drm_lastclose(struct drm_devi
- extern int drm_open(struct inode *inode, struct file *filp);
- extern int drm_stub_open(struct inode *inode, struct file *filp);
- extern int drm_fasync(int fd, struct file *filp, int on);
-+extern ssize_t drm_read(struct file *filp, char __user *buffer,
-+			size_t count, loff_t *offset);
- extern int drm_release(struct inode *inode, struct file *filp);
+diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.da linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c
+--- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.da	2009-09-08 16:07:49.000000000 +1000
++++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c	2009-09-08 16:08:09.000000000 +1000
+@@ -777,7 +777,7 @@ nv50_crtc_create(struct drm_device *dev,
+ 	crtc->set_dither = nv50_crtc_set_dither;
+ 	crtc->set_scale = nv50_crtc_set_scale;
  
- 				/* Mapping support (drm_vm.h) */
-@@ -1300,6 +1330,8 @@ extern void drm_vblank_pre_modeset(struc
- extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
- extern int drm_modeset_ctl(struct drm_device *dev, void *data,
- 			   struct drm_file *file_priv);
-+extern void drm_finish_pending_flip(struct drm_device *dev,
-+				   struct drm_pending_flip *f, u32 frame);
+-	drm_crtc_init(dev, &crtc->base, &nv50_crtc_funcs);
++	drm_crtc_init(dev, &crtc->base, index, &nv50_crtc_funcs);
+ 	drm_crtc_helper_add(&crtc->base, &nv50_crtc_helper_funcs);
+ 	drm_mode_crtc_set_gamma_size(&crtc->base, 256);
  
- 				/* AGP/GART support (drm_agpsupport.h) */
- extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);

drm-vga-arb.patch:
 drivers/gpu/drm/drm_irq.c              |   27 +++++++++++++++++++++++++++
 drivers/gpu/drm/i915/i915_dma.c        |   20 ++++++++++++++++++++
 drivers/gpu/drm/i915/i915_drv.h        |    1 +
 drivers/gpu/drm/i915/i915_reg.h        |    1 +
 drivers/gpu/drm/i915/intel_display.c   |   17 +++++++++++++++++
 drivers/gpu/drm/i915/intel_drv.h       |    1 +
 drivers/gpu/drm/radeon/r100.c          |   14 ++++++++++++++
 drivers/gpu/drm/radeon/r600.c          |   14 ++++++++++++++
 drivers/gpu/drm/radeon/r600d.h         |    1 +
 drivers/gpu/drm/radeon/radeon.h        |    2 ++
 drivers/gpu/drm/radeon/radeon_asic.h   |   12 ++++++++++++
 drivers/gpu/drm/radeon/radeon_device.c |   19 +++++++++++++++++++
 include/drm/drmP.h                     |    4 +++-
 13 files changed, 132 insertions(+), 1 deletion(-)

Index: drm-vga-arb.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-vga-arb.patch,v
retrieving revision 1.5.2.3
retrieving revision 1.5.2.4
diff -u -p -r1.5.2.3 -r1.5.2.4
--- drm-vga-arb.patch	26 Aug 2009 19:58:48 -0000	1.5.2.3
+++ drm-vga-arb.patch	10 Sep 2009 14:00:29 -0000	1.5.2.4
@@ -1,7 +1,29 @@
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c.da linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c
---- linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_irq.c	2009-08-25 09:57:03.000000000 +1000
-@@ -38,6 +38,7 @@
+From ba0d10c754ca30de35063a5e14c92bb7328a9f32 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied at redhat.com>
+Date: Tue, 8 Sep 2009 13:54:31 +1000
+Subject: [PATCH] drm-vga-arb.patch
+
+---
+ drivers/gpu/drm/drm_irq.c              |   27 +++++++++++++++++++++++++++
+ drivers/gpu/drm/i915/i915_dma.c        |   20 ++++++++++++++++++++
+ drivers/gpu/drm/i915/i915_drv.h        |    1 +
+ drivers/gpu/drm/i915/i915_reg.h        |    1 +
+ drivers/gpu/drm/i915/intel_display.c   |   17 +++++++++++++++++
+ drivers/gpu/drm/i915/intel_drv.h       |    1 +
+ drivers/gpu/drm/radeon/r100.c          |   14 ++++++++++++++
+ drivers/gpu/drm/radeon/r600.c          |   14 ++++++++++++++
+ drivers/gpu/drm/radeon/r600d.h         |    1 +
+ drivers/gpu/drm/radeon/radeon.h        |    2 ++
+ drivers/gpu/drm/radeon/radeon_asic.h   |   12 ++++++++++++
+ drivers/gpu/drm/radeon/radeon_device.c |   19 +++++++++++++++++++
+ include/drm/drmP.h                     |    3 +++
+ 13 files changed, 132 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
+index f85aaf2..0a6f0b3 100644
+--- a/drivers/gpu/drm/drm_irq.c
++++ b/drivers/gpu/drm/drm_irq.c
+@@ -37,6 +37,7 @@
  
  #include <linux/interrupt.h>	/* For task queue support */
  
@@ -9,7 +31,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  /**
   * Get interrupt from bus id.
   *
-@@ -212,6 +213,26 @@ err:
+@@ -171,6 +172,26 @@ err:
  }
  EXPORT_SYMBOL(drm_vblank_init);
  
@@ -36,7 +58,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  /**
   * Install IRQ handler.
   *
-@@ -272,6 +293,9 @@ int drm_irq_install(struct drm_device *d
+@@ -231,6 +252,9 @@ int drm_irq_install(struct drm_device *dev)
  		return ret;
  	}
  
@@ -46,7 +68,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	/* After installing handler */
  	ret = dev->driver->irq_postinstall(dev);
  	if (ret < 0) {
-@@ -320,6 +344,9 @@ int drm_irq_uninstall(struct drm_device 
+@@ -279,6 +303,9 @@ int drm_irq_uninstall(struct drm_device * dev)
  
  	DRM_DEBUG("irq=%d\n", dev->pdev->irq);
  
@@ -56,10 +78,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	dev->driver->irq_uninstall(dev);
  
  	free_irq(dev->pdev->irq, dev);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_dma.c.da linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_dma.c
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_dma.c.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_dma.c	2009-08-25 09:57:03.000000000 +1000
-@@ -32,6 +32,7 @@
+diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
+index 9909505..5a49a18 100644
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
+@@ -33,6 +33,7 @@
  #include "intel_drv.h"
  #include "i915_drm.h"
  #include "i915_drv.h"
@@ -67,7 +90,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  
  /* Really want an OS-independent resettable timer.  Would like to have
   * this loop run for (eg) 3 sec, but have the timer reset every time
-@@ -979,6 +980,19 @@ static int i915_probe_agp(struct drm_dev
+@@ -1012,6 +1013,19 @@ static int i915_probe_agp(struct drm_device *dev, uint32_t *aperture_size,
  	return 0;
  }
  
@@ -87,7 +110,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  static int i915_load_modeset_init(struct drm_device *dev,
  				  unsigned long prealloc_size,
  				  unsigned long agp_size)
-@@ -1024,6 +1038,11 @@ static int i915_load_modeset_init(struct
+@@ -1057,6 +1071,11 @@ static int i915_load_modeset_init(struct drm_device *dev,
  	if (ret)
  		DRM_INFO("failed to find VBIOS tables\n");
  
@@ -99,7 +122,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	ret = drm_irq_install(dev);
  	if (ret)
  		goto destroy_ringbuffer;
-@@ -1284,6 +1303,7 @@ int i915_driver_unload(struct drm_device
+@@ -1324,6 +1343,7 @@ int i915_driver_unload(struct drm_device *dev)
  
  	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
  		drm_irq_uninstall(dev);
@@ -107,10 +130,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	}
  
  	if (dev->pdev->msi_enabled)
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h.da linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h	2009-08-25 09:57:03.000000000 +1000
-@@ -761,6 +761,7 @@ static inline void opregion_enable_asle(
+diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
+index 77ed060..a0632f8 100644
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -766,6 +766,7 @@ static inline void opregion_enable_asle(struct drm_device *dev) { return; }
  /* modesetting */
  extern void intel_modeset_init(struct drm_device *dev);
  extern void intel_modeset_cleanup(struct drm_device *dev);
@@ -118,9 +142,10 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  
  /**
   * Lock test for when it's just for synchronization of ring access.
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h.da linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h	2009-08-25 09:57:03.000000000 +1000
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+index e38cd21..3f79635 100644
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
 @@ -30,6 +30,7 @@
   * fb aperture size and the amount of pre-reserved memory.
   */
@@ -129,10 +154,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  #define INTEL_GMCH_ENABLED	0x4
  #define INTEL_GMCH_MEM_MASK	0x1
  #define INTEL_GMCH_MEM_64M	0x1
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.da linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c	2009-08-25 09:57:03.000000000 +1000
-@@ -3871,3 +3871,26 @@ struct drm_encoder *intel_best_encoder(s
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 155719f..0227b16 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -3917,3 +3917,20 @@ struct drm_encoder *intel_best_encoder(struct drm_connector *connector)
  
  	return &intel_output->enc;
  }
@@ -142,36 +168,32 @@ diff -up linux-2.6.30.noarch/drivers/gpu
 + */
 +int intel_modeset_vga_set_state(struct drm_device *dev, bool state)
 +{
-+	struct pci_dev *bridge_dev;
++	struct drm_i915_private *dev_priv = dev->dev_private;
 +	u16 gmch_ctrl;
 +
-+	bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0));
-+	if (!bridge_dev) {
-+		DRM_ERROR("Can't disable VGA, no bridge\n");
-+		return -1;
-+	}
-+
-+	pci_read_config_word(bridge_dev, INTEL_GMCH_CTRL, &gmch_ctrl);
++	pci_read_config_word(dev_priv->bridge_dev, INTEL_GMCH_CTRL, &gmch_ctrl);
 +	if (state)
 +		gmch_ctrl &= ~INTEL_GMCH_VGA_DISABLE;
 +	else
 +		gmch_ctrl |= INTEL_GMCH_VGA_DISABLE;
-+	pci_write_config_word(bridge_dev, INTEL_GMCH_CTRL, gmch_ctrl);
++	pci_write_config_word(dev_priv->bridge_dev, INTEL_GMCH_CTRL, gmch_ctrl);
 +	return 0;
 +}
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h.da linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h
---- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h	2009-08-25 09:57:03.000000000 +1000
-@@ -161,4 +161,5 @@ extern int intel_framebuffer_create(stru
+diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
+index b9e47f1..3a0004f 100644
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -178,4 +178,5 @@ extern int intel_framebuffer_create(struct drm_device *dev,
  				    struct drm_mode_fb_cmd *mode_cmd,
  				    struct drm_framebuffer **fb,
  				    struct drm_gem_object *obj);
 +
  #endif /* __INTEL_DRV_H__ */
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/r100.c.da linux-2.6.30.noarch/drivers/gpu/drm/radeon/r100.c
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/r100.c.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/r100.c	2009-08-25 09:57:03.000000000 +1000
-@@ -1574,6 +1574,20 @@ void r100_vram_init_sizes(struct radeon_
+diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
+index 5708c07..386ddbc 100644
+--- a/drivers/gpu/drm/radeon/r100.c
++++ b/drivers/gpu/drm/radeon/r100.c
+@@ -1916,6 +1916,20 @@ void r100_vram_init_sizes(struct radeon_device *rdev)
  		rdev->mc.real_vram_size = rdev->mc.aper_size;
  }
  
@@ -192,10 +214,68 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  void r100_vram_info(struct radeon_device *rdev)
  {
  	r100_vram_get_type(rdev);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_asic.h.da linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_asic.h
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_asic.h.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_asic.h	2009-08-25 09:57:03.000000000 +1000
-@@ -46,6 +46,7 @@ uint32_t r100_mm_rreg(struct radeon_devi
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index d8fcef4..3417dff 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -1444,6 +1444,20 @@ bool r600_card_posted(struct radeon_device *rdev)
+ 	return false;
+ }
+ 
++void r600_vga_set_state(struct radeon_device *rdev, bool state)
++{
++	uint32_t temp;
++
++	temp = RREG32(CONFIG_CNTL);
++	if (state == false) {
++		temp &= ~(1<<0);
++		temp |= (1<<1);
++	} else {
++		temp &= ~(1<<1);
++	}
++	WREG32(CONFIG_CNTL, temp);
++}
++
+ int r600_resume(struct radeon_device *rdev)
+ {
+ 	int r;
+diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
+index 723295f..4a9028a 100644
+--- a/drivers/gpu/drm/radeon/r600d.h
++++ b/drivers/gpu/drm/radeon/r600d.h
+@@ -78,6 +78,7 @@
+ #define CB_COLOR0_MASK                                  0x28100
+ 
+ #define	CONFIG_MEMSIZE					0x5428
++#define CONFIG_CNTL					0x5424
+ #define	CP_STAT						0x8680
+ #define	CP_COHER_BASE					0x85F8
+ #define	CP_DEBUG					0xC1FC
+diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
+index 3299733..98a0c7f 100644
+--- a/drivers/gpu/drm/radeon/radeon.h
++++ b/drivers/gpu/drm/radeon/radeon.h
+@@ -592,6 +592,7 @@ struct radeon_asic {
+ 	int (*suspend)(struct radeon_device *rdev);
+ 	void (*errata)(struct radeon_device *rdev);
+ 	void (*vram_info)(struct radeon_device *rdev);
++	void (*vga_set_state)(struct radeon_device *rdev, bool state);
+ 	int (*gpu_reset)(struct radeon_device *rdev);
+ 	int (*mc_init)(struct radeon_device *rdev);
+ 	void (*mc_fini)(struct radeon_device *rdev);
+@@ -901,6 +902,7 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
+ #define radeon_cs_parse(p) rdev->asic->cs_parse((p))
+ #define radeon_errata(rdev) (rdev)->asic->errata((rdev))
+ #define radeon_vram_info(rdev) (rdev)->asic->vram_info((rdev))
++#define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
+ #define radeon_gpu_reset(rdev) (rdev)->asic->gpu_reset((rdev))
+ #define radeon_mc_init(rdev) (rdev)->asic->mc_init((rdev))
+ #define radeon_mc_fini(rdev) (rdev)->asic->mc_fini((rdev))
+diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
+index e87bb91..fd18cd6 100644
+--- a/drivers/gpu/drm/radeon/radeon_asic.h
++++ b/drivers/gpu/drm/radeon/radeon_asic.h
+@@ -47,6 +47,7 @@ uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg);
  void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
  void r100_errata(struct radeon_device *rdev);
  void r100_vram_info(struct radeon_device *rdev);
@@ -203,7 +283,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  int r100_gpu_reset(struct radeon_device *rdev);
  int r100_mc_init(struct radeon_device *rdev);
  void r100_mc_fini(struct radeon_device *rdev);
-@@ -85,6 +86,7 @@ static struct radeon_asic r100_asic = {
+@@ -87,6 +88,7 @@ static struct radeon_asic r100_asic = {
  	.init = &r100_init,
  	.errata = &r100_errata,
  	.vram_info = &r100_vram_info,
@@ -211,7 +291,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	.gpu_reset = &r100_gpu_reset,
  	.mc_init = &r100_mc_init,
  	.mc_fini = &r100_mc_fini,
-@@ -149,6 +151,7 @@ static struct radeon_asic r300_asic = {
+@@ -152,6 +154,7 @@ static struct radeon_asic r300_asic = {
  	.init = &r300_init,
  	.errata = &r300_errata,
  	.vram_info = &r300_vram_info,
@@ -219,7 +299,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	.gpu_reset = &r300_gpu_reset,
  	.mc_init = &r300_mc_init,
  	.mc_fini = &r300_mc_fini,
-@@ -193,6 +196,7 @@ static struct radeon_asic r420_asic = {
+@@ -197,6 +200,7 @@ static struct radeon_asic r420_asic = {
  	.init = &r300_init,
  	.errata = &r420_errata,
  	.vram_info = &r420_vram_info,
@@ -227,7 +307,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	.gpu_reset = &r300_gpu_reset,
  	.mc_init = &r420_mc_init,
  	.mc_fini = &r420_mc_fini,
-@@ -244,6 +248,7 @@ static struct radeon_asic rs400_asic = {
+@@ -249,6 +253,7 @@ static struct radeon_asic rs400_asic = {
  	.init = &r300_init,
  	.errata = &rs400_errata,
  	.vram_info = &rs400_vram_info,
@@ -235,23 +315,23 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	.gpu_reset = &r300_gpu_reset,
  	.mc_init = &rs400_mc_init,
  	.mc_fini = &rs400_mc_fini,
-@@ -299,6 +304,7 @@ static struct radeon_asic rs600_asic = {
- 	.init = &r300_init,
+@@ -306,6 +311,7 @@ static struct radeon_asic rs600_asic = {
+ 	.init = &rs600_init,
  	.errata = &rs600_errata,
  	.vram_info = &rs600_vram_info,
 +	.vga_set_state = &r100_vga_set_state,
  	.gpu_reset = &r300_gpu_reset,
  	.mc_init = &rs600_mc_init,
  	.mc_fini = &rs600_mc_fini,
-@@ -346,6 +352,7 @@ static struct radeon_asic rs690_asic = {
- 	.init = &rs690_init,
+@@ -353,6 +359,7 @@ static struct radeon_asic rs690_asic = {
+ 	.init = &rs600_init,
  	.errata = &rs690_errata,
  	.vram_info = &rs690_vram_info,
 +	.vga_set_state = &r100_vga_set_state,
  	.gpu_reset = &r300_gpu_reset,
  	.mc_init = &rs690_mc_init,
  	.mc_fini = &rs690_mc_fini,
-@@ -399,6 +406,7 @@ static struct radeon_asic rv515_asic = {
+@@ -407,6 +414,7 @@ static struct radeon_asic rv515_asic = {
  	.init = &rv515_init,
  	.errata = &rv515_errata,
  	.vram_info = &rv515_vram_info,
@@ -259,7 +339,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	.gpu_reset = &rv515_gpu_reset,
  	.mc_init = &rv515_mc_init,
  	.mc_fini = &rv515_mc_fini,
-@@ -445,6 +453,7 @@ static struct radeon_asic r520_asic = {
+@@ -454,6 +462,7 @@ static struct radeon_asic r520_asic = {
  	.init = &rv515_init,
  	.errata = &r520_errata,
  	.vram_info = &r520_vram_info,
@@ -267,9 +347,34 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  	.gpu_reset = &rv515_gpu_reset,
  	.mc_init = &r520_mc_init,
  	.mc_fini = &r520_mc_fini,
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_device.c.da linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_device.c
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_device.c.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon_device.c	2009-08-25 09:57:03.000000000 +1000
+@@ -495,6 +504,7 @@ int r600_init(struct radeon_device *rdev);
+ void r600_fini(struct radeon_device *rdev);
+ int r600_suspend(struct radeon_device *rdev);
+ int r600_resume(struct radeon_device *rdev);
++void r600_vga_set_state(struct radeon_device *rdev, bool state);
+ int r600_wb_init(struct radeon_device *rdev);
+ void r600_wb_fini(struct radeon_device *rdev);
+ void r600_cp_commit(struct radeon_device *rdev);
+@@ -531,6 +541,7 @@ static struct radeon_asic r600_asic = {
+ 	.resume = &r600_resume,
+ 	.cp_commit = &r600_cp_commit,
+ 	.vram_info = NULL,
++	.vga_set_state = &r600_vga_set_state,
+ 	.gpu_reset = &r600_gpu_reset,
+ 	.mc_init = NULL,
+ 	.mc_fini = NULL,
+@@ -581,6 +592,7 @@ static struct radeon_asic rv770_asic = {
+ 	.cp_commit = &r600_cp_commit,
+ 	.vram_info = NULL,
+ 	.gpu_reset = &rv770_gpu_reset,
++	.vga_set_state = &r600_vga_set_state,
+ 	.mc_init = NULL,
+ 	.mc_fini = NULL,
+ 	.wb_init = &r600_wb_init,
+diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
+index f2469c5..764d2f8 100644
+--- a/drivers/gpu/drm/radeon/radeon_device.c
++++ b/drivers/gpu/drm/radeon/radeon_device.c
 @@ -29,6 +29,7 @@
  #include <drm/drmP.h>
  #include <drm/drm_crtc_helper.h>
@@ -278,7 +383,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  #include "radeon_reg.h"
  #include "radeon.h"
  #include "radeon_asic.h"
-@@ -468,7 +469,18 @@ void radeon_combios_fini(struct radeon_d
+@@ -468,7 +469,18 @@ void radeon_combios_fini(struct radeon_device *rdev)
  int radeon_modeset_init(struct radeon_device *rdev);
  void radeon_modeset_fini(struct radeon_device *rdev);
  
@@ -297,7 +402,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  /*
   * Radeon device.
   */
-@@ -559,6 +571,12 @@ int radeon_device_init(struct radeon_dev
+@@ -559,6 +571,12 @@ int radeon_device_init(struct radeon_device *rdev,
  		/* Initialize surface registers */
  		radeon_surface_init(rdev);
  
@@ -310,7 +415,7 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  		/* TODO: disable VGA need to use VGA request */
  		/* BIOS*/
  		if (!radeon_get_bios(rdev)) {
-@@ -693,6 +711,7 @@ void radeon_device_fini(struct radeon_de
+@@ -693,6 +711,7 @@ void radeon_device_fini(struct radeon_device *rdev)
  		radeon_agp_fini(rdev);
  #endif
  		radeon_irq_kms_fini(rdev);
@@ -318,29 +423,11 @@ diff -up linux-2.6.30.noarch/drivers/gpu
  		radeon_fence_driver_fini(rdev);
  		radeon_clocks_fini(rdev);
  		radeon_object_fini(rdev);
-diff -up linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon.h.da linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon.h
---- linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon.h.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/drivers/gpu/drm/radeon/radeon.h	2009-08-25 09:57:03.000000000 +1000
-@@ -580,6 +580,7 @@ struct radeon_asic {
- 	int (*suspend)(struct radeon_device *rdev);
- 	void (*errata)(struct radeon_device *rdev);
- 	void (*vram_info)(struct radeon_device *rdev);
-+	void (*vga_set_state)(struct radeon_device *rdev, bool state);
- 	int (*gpu_reset)(struct radeon_device *rdev);
- 	int (*mc_init)(struct radeon_device *rdev);
- 	void (*mc_fini)(struct radeon_device *rdev);
-@@ -917,6 +918,7 @@ static inline void radeon_ring_write(str
- #define radeon_cs_parse(p) rdev->asic->cs_parse((p))
- #define radeon_errata(rdev) (rdev)->asic->errata((rdev))
- #define radeon_vram_info(rdev) (rdev)->asic->vram_info((rdev))
-+#define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
- #define radeon_gpu_reset(rdev) (rdev)->asic->gpu_reset((rdev))
- #define radeon_mc_init(rdev) (rdev)->asic->mc_init((rdev))
- #define radeon_mc_fini(rdev) (rdev)->asic->mc_fini((rdev))
-diff -up linux-2.6.30.noarch/include/drm/drmP.h.da linux-2.6.30.noarch/include/drm/drmP.h
---- linux-2.6.30.noarch/include/drm/drmP.h.da	2009-08-25 09:56:33.000000000 +1000
-+++ linux-2.6.30.noarch/include/drm/drmP.h	2009-08-25 09:57:03.000000000 +1000
-@@ -821,6 +821,9 @@ struct drm_driver {
+diff --git a/include/drm/drmP.h b/include/drm/drmP.h
+index eeefb63..c8e64bb 100644
+--- a/include/drm/drmP.h
++++ b/include/drm/drmP.h
+@@ -810,6 +810,9 @@ struct drm_driver {
  	int (*gem_init_object) (struct drm_gem_object *obj);
  	void (*gem_free_object) (struct drm_gem_object *obj);
  
@@ -350,3 +437,6 @@ diff -up linux-2.6.30.noarch/include/drm
  	/* Driver private ops for this object */
  	struct vm_operations_struct *gem_vm_ops;
  
+-- 
+1.6.0.6
+


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1294.2.64
retrieving revision 1.1294.2.65
diff -u -p -r1.1294.2.64 -r1.1294.2.65
--- kernel.spec	5 Sep 2009 19:02:24 -0000	1.1294.2.64
+++ kernel.spec	10 Sep 2009 14:00:29 -0000	1.1294.2.65
@@ -6,7 +6,7 @@ Summary: The Linux kernel
 # For a stable, released kernel, released_kernel should be 1. For rawhide
 # and/or a kernel built from an rc or git snapshot, released_kernel should
 # be 0.
-%global released_kernel 0
+%global released_kernel 1
 
 # Versions of various parts
 
@@ -35,7 +35,7 @@ Summary: The Linux kernel
 # base_sublevel is the kernel version we're starting with and patching
 # on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
 # which yields a base_sublevel of 21.
-%define base_sublevel 30
+%define base_sublevel 31
 
 ## If this is a released kernel ##
 %if 0%{?released_kernel}
@@ -60,7 +60,7 @@ Summary: The Linux kernel
 # The next upstream release sublevel (base_sublevel+1)
 %define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
 # The rc snapshot level
-%define rcrev 8
+%define rcrev 9
 # The git snapshot level
 %define gitrev 2
 # Set rpm version accordingly
@@ -101,7 +101,7 @@ Summary: The Linux kernel
 %define with_bootwrapper %{?_without_bootwrapper: 0} %{?!_without_bootwrapper: 1}
 # Want to build a the vsdo directories installed
 %define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1}
-# dracut initrd-generic
+# Use dracut instead of mkinitrd for initrd image generation
 %define with_dracut       %{?_without_dracut:       0} %{?!_without_dracut:       1}
 %define with_dracut 0
 
@@ -433,7 +433,12 @@ Summary: The Linux kernel
 # Packages that need to be installed before the kernel is, because the %post
 # scripts use them.
 #
-%define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, mkinitrd >= 6.0.61-1, kernel-firmware >= %{rpmversion}-%{pkg_release}
+%define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, kernel-firmware >= %{rpmversion}-%{pkg_release}
+%if %{with_dracut}
+%define initrd_prereq  dracut-kernel >= 001-7
+%else
+%define initrd_prereq  mkinitrd >= 6.0.61-1
+%endif
 
 #
 # This macro does requires, provides, conflicts, obsoletes for a kernel package.
@@ -449,6 +454,7 @@ Provides: kernel-drm-nouveau = 15\
 Provides: kernel-modeset = 1\
 Provides: kernel-uname-r = %{KVERREL}%{?1:.%{1}}\
 Requires(pre): %{kernel_prereq}\
+Requires(pre): %{initrd_prereq}\
 Requires(post): /sbin/new-kernel-pkg\
 Requires(preun): /sbin/new-kernel-pkg\
 Conflicts: %{kernel_dot_org_conflicts}\
@@ -499,14 +505,6 @@ BuildRequires: sparse >= 0.4.1
 %if %{with_perftool}
 BuildRequires: elfutils-libelf-devel zlib-devel binutils-devel
 %endif
-%if %{with_dracut}
-BuildRequires: dracut-kernel >= 0.7
-BuildRequires: dracut-generic >= 0.7
-%endif
-# For dracut image generation, cannot go in dracut package as its arch specific
-%ifnarch s390 s390x
-BuildRequires: kbd
-%endif
 BuildConflicts: rhbuildsys(DiskFree) < 500Mb
 
 %define fancy_debuginfo 0
@@ -688,6 +686,7 @@ Patch1575: linux-2.6-kvm-vmx-check-cpl-b
 Patch1576: linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
 Patch1577: linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
 Patch1578: linux-2.6-xen-stack-protector-fix.patch
+Patch1579: linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
 
 # nouveau + drm fixes
 Patch1812: drm-next.patch
@@ -699,10 +698,6 @@ Patch1821: drm-page-flip.patch
 # intel drm is all merged upstream
 Patch1824: drm-intel-next.patch
 Patch1825: drm-intel-pm.patch
-Patch1826: drm-r600-kms.patch
-Patch1827: drm-rv710-ucode-fix.patch
-Patch1828: drm-god-shut-up-about-edid-already.patch
-Patch1829: drm-ddc-caching-bug.patch
 
 # vga arb
 Patch1900: linux-2.6-vga-arb.patch
@@ -1172,7 +1167,7 @@ ApplyPatch linux-2.6-dell-laptop-rfkill-
 #
 # Quiesce USB host controllers before setting up the IOMMU
 ApplyPatch linux-2.6-die-closed-source-bios-muppets-die.patch
-# Some performance fixes, unify hardware/software passthrough support, and 
+# Some performance fixes, unify hardware/software passthrough support, and
 # most importantly: notice when the BIOS points us to a region that returns
 # all 0xFF, and claims that there's an IOMMU there.
 ApplyPatch linux-2.6-intel-iommu-updates.patch
@@ -1325,6 +1320,7 @@ ApplyPatch linux-2.6-kvm-vmx-check-cpl-b
 ApplyPatch linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
 ApplyPatch linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
 #ApplyPatch linux-2.6-xen-stack-protector-fix.patch
+ApplyPatch linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
 
 # Fix block I/O errors in KVM
 ApplyPatch linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch
@@ -1333,10 +1329,6 @@ ApplyPatch linux-2.6-e1000-ich9.patch
 
 # Nouveau DRM + drm fixes
 ApplyPatch drm-next.patch
-ApplyPatch drm-r600-kms.patch
-ApplyPatch drm-rv710-ucode-fix.patch
-ApplyPatch drm-god-shut-up-about-edid-already.patch
-ApplyPatch drm-ddc-caching-bug.patch
 
 ApplyPatch drm-nouveau.patch
 # pm broken on my thinkpad t60p - airlied
@@ -1345,7 +1337,8 @@ ApplyPatch drm-i915-resume-force-mode.pa
 ApplyPatch drm-intel-big-hammer.patch
 ApplyPatch drm-page-flip.patch
 ApplyOptionalPatch drm-intel-next.patch
-ApplyPatch drm-intel-pm.patch
+#this appears to be upstream - mjg59?
+#ApplyPatch drm-intel-pm.patch
 
 # VGA arb + drm
 ApplyPatch linux-2.6-vga-arb.patch
@@ -1460,6 +1453,11 @@ BuildKernel() {
     # make sure EXTRAVERSION says what we want it to say
     perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = %{?stablerev}-%{release}.%{_target_cpu}${Flavour:+.${Flavour}}/" Makefile
 
+    cat >> Makefile <<\EOF
+# XXX temp workaround for https://bugzilla.redhat.com/show_bug.cgi?id=521991
+KBUILD_CFLAGS += -fno-var-tracking-assignments
+EOF
+
     # if pre-rc1 devel kernel, must fix up SUBLEVEL for our versioning scheme
     %if !0%{?rcrev}
     %if 0%{?gitrev}
@@ -1497,7 +1495,11 @@ BuildKernel() {
     mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
     install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
     install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
+%if %{with_dracut}
+    touch $RPM_BUILD_ROOT/boot/dracut-$KernelVer.img
+%else
     touch $RPM_BUILD_ROOT/boot/initrd-$KernelVer.img
+%endif
     if [ -f arch/$Arch/boot/zImage.stub ]; then
       cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
     fi
@@ -1794,26 +1796,6 @@ rm -f $RPM_BUILD_ROOT/usr/include/asm*/i
 make DESTDIR=$RPM_BUILD_ROOT bootwrapper_install WRAPPER_OBJDIR=%{_libdir}/kernel-wrapper WRAPPER_DTSDIR=%{_libdir}/kernel-wrapper/dts
 %endif
 
-%if %{with_dracut}
-%if !%{with_firmware}
-# dracut needs the firmware files
-    %{build_firmware}
-%endif
-    for i in $RPM_BUILD_ROOT/lib/modules/*; do
-	[ -d $i ] || continue
-	KernelVer=${i##$RPM_BUILD_ROOT/lib/modules/}
-        depmod -b $RPM_BUILD_ROOT $KernelVer
-    	dracut  --strip \
-	    --fwdir $RPM_BUILD_ROOT/lib/firmware:/lib/firmware \
-            -k $i $RPM_BUILD_ROOT/boot/initrd-generic-${KernelVer}.img $KernelVer
-	rm -fr $i/modules.dep
-    done
-%if !%{with_firmware}
-# remove the firmware files, if ! with_firmware
-    rm -fr $RPM_BUILD_ROOT/lib/firmware 
-%endif
-%endif
-
 
 ###
 ### clean
@@ -1870,7 +1852,7 @@ if [ `uname -i` == "x86_64" -o `uname -i
 fi}\
 %{expand:\
 %if %{with_dracut}\
-/sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --depmod --add-dracut-args --initrdfile=/boot/initrd-generic-%{KVERREL}%{?-v:.%{-v*}}.img --install %{KVERREL}%{?-v:.%{-v*}} || exit $?\
+/sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --mkinitrd --dracut --depmod --install %{KVERREL}%{?-v:.%{-v*}} || exit $?\
 %else\
 /sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --mkinitrd --depmod --install %{KVERREL}%{?-v:.%{-v*}} || exit $?\
 %endif}\
@@ -1993,9 +1975,10 @@ fi
 /etc/ld.so.conf.d/kernel-%{KVERREL}%{?2:.%{2}}.conf\
 %endif\
 /lib/modules/%{KVERREL}%{?2:.%{2}}/modules.*\
-%ghost /boot/initrd-%{KVERREL}%{?2:.%{2}}.img\
 %if %{with_dracut}\
-/boot/initrd-generic-%{KVERREL}%{?2:.%{2}}.img\
+%ghost /boot/dracut-%{KVERREL}%{?2:.%{2}}.img\
+%else\
+%ghost /boot/initrd-%{KVERREL}%{?2:.%{2}}.img\
 %endif\
 %{expand:%%files %{?2:%{2}-}devel}\
 %defattr(-,root,root)\
@@ -2036,6 +2019,82 @@ fi
 # and build.
 
 %changelog
+* Thu Sep 10 2009 Michael Young <m.a.young at durham.ac.uk>
+- update pvops and get to 2.6.31
+
+* Thu Sep 10 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: add some scaler-only modes for LVDS, GEM/TTM fixes
+
+* Wed Sep 09 2009 Dennis Gilmore <dennis at ausil.us> 2.6.31-2
+- touch the dracut initrd file when using %%{with_dracut}
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-1
+- Linux 2.6.31
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert at redhat.com>
+- Enable VXpocket and PDaudioCF PCMCIA sound drivers.
+
+* Wed Sep 09 2009 Hans de Goede <hdegoede at redhat.com>
+- Move to %%post generation of dracut initrd, because of GPL issues surrounding
+  shipping a prebuild initrd
+- Require grubby >= 7.0.4-1, for %%post generation
+
+* Wed Sep  9 2009 Steve Dickson <steved at redhat.com>
+- Updated the NFS4 pseudo root code to the latest release.
+
+* Wed Sep 09 2009 Justin M. Forbes <jforbes at redhat.com>
+- Revert virtio_blk to rotational mode. (#509383)
+
+* Wed Sep 09 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.219.rc9.git
+- uggh lost nouveau bits in page flip
+
+* Wed Sep 09 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.218.rc9.git2
+- fix r600 oops with page flip patch (#520766)
+
+* Wed Sep 09 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: fix display resume on pre-G8x chips
+
+* Wed Sep 09 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: add getparam to know using tile_flags is ok for scanout
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.31-rc9-git2
+
+* Wed Sep  9 2009 Roland McGrath <roland at redhat.com> 2.6.31-0.214.rc9.git1
+- compile with -fno-var-tracking-assignments, work around gcc bug #521991
+
+* Wed Sep 09 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.213.rc9.git1
+- fix two bugs in r600 kms, fencing + mobile lvds
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31-0.212.rc9.git1
+- drm-nouveau.patch: fix ppc build
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31-0.211.rc9.git1
+- drm-nouveau.patch: more misc fixes
+
+* Tue Sep 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.210.rc9.git1
+- drm-page-flip.patch: rebase again
+
+* Tue Sep 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.209.rc9.git1
+- drm-next.patch: fix r600 signal interruption return value
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31-0.208.rc9.git1
+- drm-nouveau.patch: latest upstream + rebase onto drm-next
+
+* Tue Sep 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.207.rc9.git1
+- drm-vga-arb.patch: update to avoid lockdep + add r600 support
+
+* Tue Sep 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31-0.206.rc9.git1
+- drm: rebase to drm-next - r600 accel + kms should start working now
+
+* Mon Sep 07 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-0.205.rc9.git1
+- 2.6.31-rc9-git1
+- Temporarily hack the drm-next patch so it still applies; the result
+  should still be safe to build.
+
+* Sat Sep 05 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-0.204.rc9
+- 2.6.31-rc9
+
 * Sat Sep 04 2009 Michael Young <m.a.young at durham.ac.uk>
 - update pvops which includes swiotlb updates and a network fix
 - try a drm build fix
@@ -3293,4 +3352,3 @@ fi
 # rpm-change-log-uses-utc: t
 # End:
 ###
-

linux-2.6-nfsd4-proots.patch:
 fs/nfsd/export.c            |   12 +++++-
 fs/nfsd/nfs4xdr.c           |   83 ++++++++++++++++++++++++++++++++++++--------
 fs/nfsd/nfsfh.c             |   32 ++++++++++++++++
 fs/nfsd/vfs.c               |   75 ++++++++++++++++++++++++++++++++++++++-
 include/linux/nfsd/export.h |    3 +
 include/linux/nfsd/nfsd.h   |    2 +
 6 files changed, 188 insertions(+), 19 deletions(-)

Index: linux-2.6-nfsd4-proots.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-nfsd4-proots.patch,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.2 -r1.1.2.3
--- linux-2.6-nfsd4-proots.patch	9 Jul 2009 22:53:01 -0000	1.1.2.2
+++ linux-2.6-nfsd4-proots.patch	10 Sep 2009 14:00:29 -0000	1.1.2.3
@@ -1,6 +1,6 @@
 diff -up linux-2.6.30.noarch/fs/nfsd/export.c.save linux-2.6.30.noarch/fs/nfsd/export.c
---- linux-2.6.30.noarch/fs/nfsd/export.c.save	2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/export.c	2009-07-02 11:35:44.000000000 -0400
+--- linux-2.6.30.noarch/fs/nfsd/export.c.save	2009-09-09 15:11:54.702436000 -0400
++++ linux-2.6.30.noarch/fs/nfsd/export.c	2009-09-09 15:12:44.520167000 -0400
 @@ -104,6 +104,7 @@ static int expkey_parse(struct cache_det
  	if (mesg[mlen-1] != '\n')
  		return -EINVAL;
@@ -64,9 +64,9 @@ diff -up linux-2.6.30.noarch/fs/nfsd/exp
  		return 0;
  	}
 diff -up linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c.save linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c
---- linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c.save	2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c	2009-07-02 11:35:31.000000000 -0400
-@@ -2176,28 +2176,62 @@ static inline int attributes_need_mount(
+--- linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c.save	2009-09-09 15:11:54.707433000 -0400
++++ linux-2.6.30.noarch/fs/nfsd/nfs4xdr.c	2009-09-09 15:12:36.408695000 -0400
+@@ -2176,28 +2176,61 @@ static inline int attributes_need_mount(
  	return 0;
  }
  
@@ -136,49 +136,11 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
 +	struct svc_export *exp = cd->rd_fhp->fh_export;
 +	__be32 nfserr;
 +	int ignore_crossmnt = 0;
-+	int err, v4root = (exp->ex_flags & NFSEXP_V4ROOT);
 +
  	exp_get(exp);
  	/*
  	 * In the case of a mountpoint, the client may be asking for
-@@ -2208,18 +2242,29 @@ nfsd4_encode_dirent_fattr(struct nfsd4_r
- 	 */
- 	if (d_mountpoint(dentry) && !attributes_need_mount(cd->rd_bmval))
- 		ignore_crossmnt = 1;
--	else if (d_mountpoint(dentry)) {
--		int err;
--
-+	else if (d_mountpoint(dentry) || v4root) {
-+		/*
-+		 * Make sure the dentry is viewable on the psuedo export
-+		 */
-+		v4root = (dentry->d_inode && v4root);
-+		if (v4root) {
-+			err = nfsd_export_lookup(cd->rd_rqstp, dentry, exp);
-+			if (err) {
-+				nfserr = nfserrno(err);
-+				goto out_put;
-+			}
-+		}
- 		/*
- 		 * Why the heck aren't we just using nfsd_lookup??
- 		 * Different "."/".." handling?  Something else?
- 		 * At least, add a comment here to explain....
- 		 */
--		err = nfsd_cross_mnt(cd->rd_rqstp, &dentry, &exp);
--		if (err) {
--			nfserr = nfserrno(err);
--			goto out_put;
-+		if (d_mountpoint(dentry) || v4root) {
-+			err = nfsd_cross_mnt(cd->rd_rqstp, &dentry, &exp);
-+			if (err) {
-+				nfserr = nfserrno(err);
-+				goto out_put;
-+			}
- 		}
- 		nfserr = check_nfsd_access(exp, cd->rd_rqstp);
- 		if (nfserr)
-@@ -2258,6 +2303,7 @@ nfsd4_encode_dirent(void *ccdv, const ch
+@@ -2258,6 +2291,7 @@ nfsd4_encode_dirent(void *ccdv, const ch
  	struct readdir_cd *ccd = ccdv;
  	struct nfsd4_readdir *cd = container_of(ccd, struct nfsd4_readdir, common);
  	int buflen;
@@ -186,7 +148,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
  	__be32 *p = cd->buffer;
  	__be32 *cookiep;
  	__be32 nfserr = nfserr_toosmall;
-@@ -2268,19 +2314,40 @@ nfsd4_encode_dirent(void *ccdv, const ch
+@@ -2268,19 +2302,40 @@ nfsd4_encode_dirent(void *ccdv, const ch
  		return 0;
  	}
  
@@ -230,17 +192,15 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
  	case nfs_ok:
  		p += buflen;
 diff -up linux-2.6.30.noarch/fs/nfsd/nfsfh.c.save linux-2.6.30.noarch/fs/nfsd/nfsfh.c
---- linux-2.6.30.noarch/fs/nfsd/nfsfh.c.save	2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/nfsfh.c	2009-07-02 11:35:48.000000000 -0400
-@@ -109,6 +109,34 @@ static __be32 nfsd_setuser_and_check_por
+--- linux-2.6.30.noarch/fs/nfsd/nfsfh.c.save	2009-09-09 15:11:54.711427000 -0400
++++ linux-2.6.30.noarch/fs/nfsd/nfsfh.c	2009-09-09 15:12:48.357903000 -0400
+@@ -109,6 +109,30 @@ static __be32 nfsd_setuser_and_check_por
  	return nfserrno(nfsd_setuser(rqstp, exp));
  }
  
 +static inline __be32 check_pseudo_root(struct svc_rqst *rqstp,
 +	struct dentry *dentry, struct svc_export *exp)
 +{
-+	int error;
-+
 +	/*
 +	 * Only interested in pseudo roots
 +	 */
@@ -252,14 +212,12 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
 +	 */
 +	if (unlikely(!S_ISDIR(dentry->d_inode->i_mode)))
 +		return nfserr_stale;
++
 +	/*
-+	 * Check non-root directories to make sure
-+	 * they are truly exported
++	 * Make sure the export is the parent of the dentry
 +	 */
-+	if (unlikely(dentry->d_name.len > 1)) {
-+		error = nfsd_export_lookup(rqstp, dentry, exp);
-+		return nfserrno(error);
-+	}
++	if (unlikely(dentry->d_parent != exp->ex_path.dentry))
++		return nfserr_stale;
 +
 +	return nfs_ok;
 +}
@@ -267,7 +225,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
  /*
   * Use the given filehandle to look up the corresponding export and
   * dentry.  On success, the results are used to set fh_export and
-@@ -315,6 +343,14 @@ fh_verify(struct svc_rqst *rqstp, struct
+@@ -315,6 +339,14 @@ fh_verify(struct svc_rqst *rqstp, struct
  		error = nfsd_setuser_and_check_port(rqstp, exp);
  		if (error)
  			goto out;
@@ -283,8 +241,8 @@ diff -up linux-2.6.30.noarch/fs/nfsd/nfs
  
  	error = nfsd_mode_check(rqstp, dentry->d_inode->i_mode, type);
 diff -up linux-2.6.30.noarch/fs/nfsd/vfs.c.save linux-2.6.30.noarch/fs/nfsd/vfs.c
---- linux-2.6.30.noarch/fs/nfsd/vfs.c.save	2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/fs/nfsd/vfs.c	2009-07-02 11:35:39.000000000 -0400
+--- linux-2.6.30.noarch/fs/nfsd/vfs.c.save	2009-09-09 15:11:54.715423000 -0400
++++ linux-2.6.30.noarch/fs/nfsd/vfs.c	2009-09-09 15:12:39.978431000 -0400
 @@ -89,6 +89,12 @@ struct raparm_hbucket {
  #define RAPARM_HASH_MASK	(RAPARM_HASH_SIZE-1)
  static struct raparm_hbucket	raparm_hash[RAPARM_HASH_SIZE];
@@ -314,7 +272,7 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
  
 +/*
 + * Lookup the export the dentry is on. To be
-+ * viewable on an pseudo export, the dentry
++ * viewable on a pseudo export, the dentry
 + * has to be an exported directory. 
 + */
 +int
@@ -331,8 +289,8 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
 +	/*
 +	 * Make sure the export is the parent of the dentry
 +	 */
-+	if (dentry->d_parent != exp->ex_path.dentry)
-+		return 0;
++	if (unlikely(dentry->d_parent != exp->ex_path.dentry))
++		return -ENOENT;
 +
 +	/*
 +	 * Only directories are seen on psuedo exports
@@ -405,8 +363,8 @@ diff -up linux-2.6.30.noarch/fs/nfsd/vfs
  				dput(dentry);
  				goto out_nfserr;
 diff -up linux-2.6.30.noarch/include/linux/nfsd/export.h.save linux-2.6.30.noarch/include/linux/nfsd/export.h
---- linux-2.6.30.noarch/include/linux/nfsd/export.h.save	2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/include/linux/nfsd/export.h	2009-07-02 11:35:22.000000000 -0400
+--- linux-2.6.30.noarch/include/linux/nfsd/export.h.save	2009-09-09 15:11:54.719419000 -0400
++++ linux-2.6.30.noarch/include/linux/nfsd/export.h	2009-09-09 15:12:29.064157000 -0400
 @@ -39,7 +39,8 @@
  #define NFSEXP_FSID		0x2000
  #define	NFSEXP_CROSSMOUNT	0x4000
@@ -418,8 +376,8 @@ diff -up linux-2.6.30.noarch/include/lin
  /* The flags that may vary depending on security flavor: */
  #define NFSEXP_SECINFO_FLAGS	(NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
 diff -up linux-2.6.30.noarch/include/linux/nfsd/nfsd.h.save linux-2.6.30.noarch/include/linux/nfsd/nfsd.h
---- linux-2.6.30.noarch/include/linux/nfsd/nfsd.h.save	2009-07-02 11:34:38.000000000 -0400
-+++ linux-2.6.30.noarch/include/linux/nfsd/nfsd.h	2009-07-02 11:35:27.000000000 -0400
+--- linux-2.6.30.noarch/include/linux/nfsd/nfsd.h.save	2009-09-09 15:11:54.723415000 -0400
++++ linux-2.6.30.noarch/include/linux/nfsd/nfsd.h	2009-09-09 15:12:33.025896000 -0400
 @@ -76,6 +76,8 @@ int		nfsd_racache_init(int);
  void		nfsd_racache_shutdown(void);
  int		nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.976.2.30
retrieving revision 1.976.2.31
diff -u -p -r1.976.2.30 -r1.976.2.31
--- sources	3 Sep 2009 20:02:38 -0000	1.976.2.30
+++ sources	10 Sep 2009 14:00:31 -0000	1.976.2.31
@@ -1,3 +1 @@
-7a80058a6382e5108cdb5554d1609615  linux-2.6.30.tar.bz2
-d7dce63ebb912ddcd7ac7ed580db03e4  patch-2.6.31-rc8.bz2
-81cac9f7aa9cfa526ce4cfedb4e0f739  patch-2.6.31-rc8-git2.bz2
+84c077a37684e4cbfa67b18154390d8a  linux-2.6.31.tar.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.888.2.29
retrieving revision 1.888.2.30
diff -u -p -r1.888.2.29 -r1.888.2.30
--- upstream	3 Sep 2009 20:02:38 -0000	1.888.2.29
+++ upstream	10 Sep 2009 14:00:31 -0000	1.888.2.30
@@ -1,3 +1 @@
-linux-2.6.30.tar.bz2
-patch-2.6.31-rc8.bz2
-patch-2.6.31-rc8-git2.bz2
+linux-2.6.31.tar.bz2

xen.pvops.patch:
 arch/x86/Kconfig                           |    4 
 arch/x86/Makefile                          |    2 
 arch/x86/include/asm/agp.h                 |   15 
 arch/x86/include/asm/e820.h                |    2 
 arch/x86/include/asm/i387.h                |    1 
 arch/x86/include/asm/io.h                  |   15 
 arch/x86/include/asm/io_apic.h             |    7 
 arch/x86/include/asm/microcode.h           |    9 
 arch/x86/include/asm/paravirt.h            |  718 ------------
 arch/x86/include/asm/paravirt_types.h      |  722 +++++++++++++
 arch/x86/include/asm/pci.h                 |    8 
 arch/x86/include/asm/pci_x86.h             |    2 
 arch/x86/include/asm/pgtable.h             |    3 
 arch/x86/include/asm/processor.h           |    4 
 arch/x86/include/asm/tlbflush.h            |    6 
 arch/x86/include/asm/xen/hypercall.h       |   44 
 arch/x86/include/asm/xen/interface.h       |    8 
 arch/x86/include/asm/xen/interface_32.h    |    5 
 arch/x86/include/asm/xen/interface_64.h    |   13 
 arch/x86/include/asm/xen/iommu.h           |   12 
 arch/x86/include/asm/xen/page.h            |   16 
 arch/x86/include/asm/xen/pci.h             |   37 
 arch/x86/include/asm/xen/swiotlb.h         |   12 
 arch/x86/kernel/Makefile                   |    1 
 arch/x86/kernel/acpi/boot.c                |   18 
 arch/x86/kernel/acpi/processor.c           |    4 
 arch/x86/kernel/acpi/sleep.c               |    2 
 arch/x86/kernel/apic/io_apic.c             |   49 
 arch/x86/kernel/cpu/mtrr/Makefile          |    1 
 arch/x86/kernel/cpu/mtrr/amd.c             |    6 
 arch/x86/kernel/cpu/mtrr/centaur.c         |    6 
 arch/x86/kernel/cpu/mtrr/cyrix.c           |    6 
 arch/x86/kernel/cpu/mtrr/generic.c         |   10 
 arch/x86/kernel/cpu/mtrr/main.c            |   19 
 arch/x86/kernel/cpu/mtrr/mtrr.h            |   11 
 arch/x86/kernel/cpu/mtrr/xen.c             |  104 +
 arch/x86/kernel/e820.c                     |   30 
 arch/x86/kernel/ioport.c                   |   29 
 arch/x86/kernel/microcode_core.c           |    5 
 arch/x86/kernel/microcode_xen.c            |  200 +++
 arch/x86/kernel/paravirt.c                 |    1 
 arch/x86/kernel/pci-dma.c                  |    8 
 arch/x86/kernel/pci-swiotlb.c              |   25 
 arch/x86/kernel/process.c                  |   27 
 arch/x86/kernel/process_32.c               |   27 
 arch/x86/kernel/process_64.c               |   33 
 arch/x86/kernel/setup.c                    |    4 
 arch/x86/kernel/traps.c                    |   33 
 arch/x86/mm/Makefile                       |    4 
 arch/x86/mm/init_32.c                      |   42 
 arch/x86/mm/pat.c                          |    2 
 arch/x86/mm/pgtable.c                      |   10 
 arch/x86/mm/tlb.c                          |   35 
 arch/x86/pci/Makefile                      |    1 
 arch/x86/pci/common.c                      |   18 
 arch/x86/pci/i386.c                        |    3 
 arch/x86/pci/init.c                        |    6 
 arch/x86/pci/xen.c                         |   51 
 arch/x86/xen/Kconfig                       |   33 
 arch/x86/xen/Makefile                      |    5 
 arch/x86/xen/apic.c                        |   57 +
 arch/x86/xen/enlighten.c                   |  202 +++
 arch/x86/xen/mmu.c                         |  455 ++++++++
 arch/x86/xen/pci-swiotlb.c                 |  988 +++++++++++++++++
 arch/x86/xen/pci.c                         |  111 ++
 arch/x86/xen/setup.c                       |   50 
 arch/x86/xen/smp.c                         |    3 
 arch/x86/xen/spinlock.c                    |   28 
 arch/x86/xen/time.c                        |    2 
 arch/x86/xen/vga.c                         |   67 +
 arch/x86/xen/xen-ops.h                     |   19 
 block/blk-core.c                           |    2 
 drivers/acpi/acpica/hwsleep.c              |   17 
 drivers/acpi/processor_core.c              |   29 
 drivers/acpi/processor_idle.c              |   23 
 drivers/acpi/processor_perflib.c           |   10 
 drivers/acpi/sleep.c                       |   19 
 drivers/block/Kconfig                      |    1 
 drivers/char/agp/intel-agp.c               |   17 
 drivers/char/hvc_xen.c                     |   99 +
 drivers/net/Kconfig                        |    1 
 drivers/pci/Makefile                       |    2 
 drivers/pci/xen-iommu.c                    |  271 ++++
 drivers/xen/Kconfig                        |   41 
 drivers/xen/Makefile                       |   23 
 drivers/xen/acpi.c                         |   23 
 drivers/xen/acpi_processor.c               |  451 ++++++++
 drivers/xen/balloon.c                      |  161 ++
 drivers/xen/biomerge.c                     |   14 
 drivers/xen/blkback/Makefile               |    3 
 drivers/xen/blkback/blkback.c              |  657 +++++++++++
 drivers/xen/blkback/common.h               |  137 ++
 drivers/xen/blkback/interface.c            |  182 +++
 drivers/xen/blkback/vbd.c                  |  118 ++
 drivers/xen/blkback/xenbus.c               |  542 +++++++++
 drivers/xen/events.c                       |  422 +++++++
 drivers/xen/evtchn.c                       |    1 
 drivers/xen/features.c                     |    2 
 drivers/xen/grant-table.c                  |  103 +
 drivers/xen/mce.c                          |  213 +++
 drivers/xen/netback/Makefile               |    3 
 drivers/xen/netback/common.h               |  221 ++++
 drivers/xen/netback/interface.c            |  401 +++++++
 drivers/xen/netback/netback.c              | 1602 +++++++++++++++++++++++++++++
 drivers/xen/netback/xenbus.c               |  454 ++++++++
 drivers/xen/pci.c                          |  124 ++
 drivers/xen/xenbus/Makefile                |    5 
 drivers/xen/xenbus/xenbus_comms.c          |    1 
 drivers/xen/xenbus/xenbus_probe.c          |  380 +-----
 drivers/xen/xenbus/xenbus_probe.h          |   29 
 drivers/xen/xenbus/xenbus_probe_backend.c  |  298 +++++
 drivers/xen/xenbus/xenbus_probe_frontend.c |  292 +++++
 drivers/xen/xenfs/Makefile                 |    3 
 drivers/xen/xenfs/privcmd.c                |  403 +++++++
 drivers/xen/xenfs/super.c                  |   98 +
 drivers/xen/xenfs/xenfs.h                  |    3 
 drivers/xen/xenfs/xenstored.c              |   67 +
 include/acpi/processor.h                   |    2 
 include/asm-generic/pci.h                  |    2 
 include/linux/interrupt.h                  |    1 
 include/linux/page-flags.h                 |   18 
 include/xen/Kbuild                         |    1 
 include/xen/acpi.h                         |   84 +
 include/xen/balloon.h                      |    8 
 include/xen/blkif.h                        |  122 ++
 include/xen/events.h                       |   27 
 include/xen/grant_table.h                  |   43 
 include/xen/interface/grant_table.h        |   22 
 include/xen/interface/memory.h             |   92 +
 include/xen/interface/physdev.h            |   51 
 include/xen/interface/platform.h           |  336 ++++++
 include/xen/interface/xen-mca.h            |  429 +++++++
 include/xen/interface/xen.h                |   44 
 include/xen/privcmd.h                      |   80 +
 include/xen/swiotlb.h                      |  102 +
 include/xen/xen-ops.h                      |   11 
 include/xen/xenbus.h                       |    2 
 kernel/irq/manage.c                        |    3 
 lib/swiotlb.c                              |    5 
 mm/page_alloc.c                            |   14 
 140 files changed, 12634 insertions(+), 1349 deletions(-)

Index: xen.pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.patch,v
retrieving revision 1.1.2.40
retrieving revision 1.1.2.41
diff -u -p -r1.1.2.40 -r1.1.2.41
--- xen.pvops.patch	5 Sep 2009 19:00:23 -0000	1.1.2.40
+++ xen.pvops.patch	10 Sep 2009 14:00:31 -0000	1.1.2.41
@@ -5886,6 +5886,83 @@ index 429834e..58078da 100644
  	per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
  
  	/* make sure interrupts start blocked */
+diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
+index 5601506..36a5141 100644
+--- a/arch/x86/xen/spinlock.c
++++ b/arch/x86/xen/spinlock.c
+@@ -187,7 +187,6 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
+ 	struct xen_spinlock *prev;
+ 	int irq = __get_cpu_var(lock_kicker_irq);
+ 	int ret;
+-	unsigned long flags;
+ 	u64 start;
+ 
+ 	/* If kicker interrupts not initialized yet, just spin */
+@@ -199,16 +198,12 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
+ 	/* announce we're spinning */
+ 	prev = spinning_lock(xl);
+ 
+-	flags = __raw_local_save_flags();
+-	if (irq_enable) {
+-		ADD_STATS(taken_slow_irqenable, 1);
+-		raw_local_irq_enable();
+-	}
+-
+ 	ADD_STATS(taken_slow, 1);
+ 	ADD_STATS(taken_slow_nested, prev != NULL);
+ 
+ 	do {
++		unsigned long flags;
++
+ 		/* clear pending */
+ 		xen_clear_irq_pending(irq);
+ 
+@@ -228,6 +223,12 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
+ 			goto out;
+ 		}
+ 
++		flags = __raw_local_save_flags();
++		if (irq_enable) {
++			ADD_STATS(taken_slow_irqenable, 1);
++			raw_local_irq_enable();
++		}
++
+ 		/*
+ 		 * Block until irq becomes pending.  If we're
+ 		 * interrupted at this point (after the trylock but
+@@ -238,13 +239,15 @@ static noinline int xen_spin_lock_slow(struct raw_spinlock *lock, bool irq_enabl
+ 		 * pending.
+ 		 */
+ 		xen_poll_irq(irq);
++
++		raw_local_irq_restore(flags);
++
+ 		ADD_STATS(taken_slow_spurious, !xen_test_irq_pending(irq));
+ 	} while (!xen_test_irq_pending(irq)); /* check for spurious wakeups */
+ 
+ 	kstat_incr_irqs_this_cpu(irq, irq_to_desc(irq));
+ 
+ out:
+-	raw_local_irq_restore(flags);
+ 	unspinning_lock(xl, prev);
+ 	spin_time_accum_blocked(start);
+ 
+@@ -323,8 +326,13 @@ static void xen_spin_unlock(struct raw_spinlock *lock)
+ 	smp_wmb();		/* make sure no writes get moved after unlock */
+ 	xl->lock = 0;		/* release lock */
+ 
+-	/* make sure unlock happens before kick */
+-	barrier();
++	/*
++	 * Make sure unlock happens before checking for waiting
++	 * spinners.  We need a strong barrier to enforce the
++	 * write-read ordering to different memory locations, as the
++	 * CPU makes no implied guarantees about their ordering.
++	 */
++	mb();
+ 
+ 	if (unlikely(xl->spinners))
+ 		xen_spin_unlock_slow(xl);
 diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
 index 0a5aa44..d4e9a97 100644
 --- a/arch/x86/xen/time.c
@@ -6326,10 +6403,10 @@ index 1d886e0..f4a2b10 100644
  	  This driver implements the front-end of the Xen virtual
  	  block device driver.  It communicates with a back-end driver
 diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
-index 8c9d50d..5a8d914 100644
+index c585577..b45e7cd 100644
 --- a/drivers/char/agp/intel-agp.c
 +++ b/drivers/char/agp/intel-agp.c
-@@ -259,15 +259,19 @@ static void intel_i810_agp_enable(struct agp_bridge_data *bridge, u32 mode)
+@@ -261,15 +261,19 @@ static void intel_i810_agp_enable(struct agp_bridge_data *bridge, u32 mode)
  /* Exists to support ARGB cursors */
  static struct page *i8xx_alloc_pages(void)
  {
@@ -6352,7 +6429,7 @@ index 8c9d50d..5a8d914 100644
  		return NULL;
  	}
  	get_page(page);
-@@ -277,12 +281,17 @@ static struct page *i8xx_alloc_pages(void)
+@@ -279,12 +283,17 @@ static struct page *i8xx_alloc_pages(void)
  
  static void i8xx_destroy_pages(struct page *page)
  {
@@ -7765,10 +7842,10 @@ index 0000000..8bab63d
 +blkbk-y	:= blkback.o xenbus.o interface.o vbd.o
 diff --git a/drivers/xen/blkback/blkback.c b/drivers/xen/blkback/blkback.c
 new file mode 100644
-index 0000000..ac5af91
+index 0000000..31458bd
 --- /dev/null
 +++ b/drivers/xen/blkback/blkback.c
-@@ -0,0 +1,658 @@
+@@ -0,0 +1,657 @@
 +/******************************************************************************
 + * arch/xen/drivers/blkif/backend/main.c
 + *
@@ -8386,7 +8463,6 @@ index 0000000..ac5af91
 +{
 +	int i, mmap_pages;
 +
-+	printk(KERN_CRIT "***blkif_init\n");
 +	if (!xen_pv_domain())
 +		return -ENODEV;
 +
@@ -10988,10 +11064,10 @@ index 0000000..21c1f95
 +}
 diff --git a/drivers/xen/netback/netback.c b/drivers/xen/netback/netback.c
 new file mode 100644
-index 0000000..7c0f05b
+index 0000000..d7d738e
 --- /dev/null
 +++ b/drivers/xen/netback/netback.c
-@@ -0,0 +1,1604 @@
+@@ -0,0 +1,1602 @@
 +/******************************************************************************
 + * drivers/xen/netback/netback.c
 + *
@@ -12531,8 +12607,6 @@ index 0000000..7c0f05b
 +	int i;
 +	struct page *page;
 +
-+	printk(KERN_CRIT "*** netif_init\n");
-+
 +	if (!xen_domain())
 +		return -ENODEV;
 +
@@ -16860,7 +16934,7 @@ index bffe6d7..cec5f62 100644
  		panic("Cannot allocate SWIOTLB overflow buffer!\n");
  
 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 5cc986e..c7b76b2 100644
+index a0de15f..5e84a5c 100644
 --- a/mm/page_alloc.c
 +++ b/mm/page_alloc.c
 @@ -566,6 +566,13 @@ static void __free_pages_ok(struct page *page, unsigned int order)
@@ -16877,7 +16951,7 @@ index 5cc986e..c7b76b2 100644
  	if (!PageHighMem(page)) {
  		debug_check_no_locks_freed(page_address(page),PAGE_SIZE<<order);
  		debug_check_no_obj_freed(page_address(page),
-@@ -1028,6 +1035,13 @@ static void free_hot_cold_page(struct page *page, int cold)
+@@ -1030,6 +1037,13 @@ static void free_hot_cold_page(struct page *page, int cold)
  
  	kmemcheck_free_shadow(page, 0);
  


--- drm-ddc-caching-bug.patch DELETED ---


--- drm-god-shut-up-about-edid-already.patch DELETED ---


--- drm-r600-kms.patch DELETED ---


--- drm-rv710-ucode-fix.patch DELETED ---


--- linux-2.6.30.tar.bz2.sign DELETED ---


--- patch-2.6.31-rc8-git2.bz2.sign DELETED ---


--- patch-2.6.31-rc8.bz2.sign DELETED ---




More information about the fedora-extras-commits mailing list