rpms/kernel/devel cpufreq-add-atom-to-p4-clockmod.patch, NONE, 1.1.2.2 drm-intel-big-hammer.patch, NONE, 1.1.2.2 linux-2.6-acpi-video-didl-intel-outputs.patch, NONE, 1.1.2.2 linux-2.6-ext4-extent-header-check-fix.patch, NONE, 1.1.2.2 linux-2.6-ext4-flush-on-close.patch, NONE, 1.1.2.2 linux-2.6-hdpvr-fix.patch, NONE, 1.1.2.2 linux-2.6-input-fix-toshiba-hotkeys.patch, NONE, 1.1.2.2 linux-2.6-input-hid-extra-gamepad.patch, NONE, 1.1.2.2 linux-2.6.29-sparc-IOC_TYPECHECK.patch, NONE, 1.1.2.2 patch-2.6.29-rc7-git5.bz2.sign, NONE, 1.1.2.2 squashfs-fix-page-aligned-data.patch, NONE, 1.2.2.2 unifdef-rename-getline-symbol.patch, NONE, 1.1.2.2 .cvsignore, 1.1014.2.5, 1.1014.2.6 TODO, 1.54.6.1, 1.54.6.2 config-generic, 1.238.6.8, 1.238.6.9 config-ia64-generic, 1.21.6.1, 1.21.6.2 config-powerpc32-generic, 1.30, 1.30.6.1 config-powerpc64, 1.27, 1.27.6.1 config-s390x, 1.11, 1.11.6.1 config-sparc64-generic, 1.21, 1.21.6.1 drm-modesetting-radeon.patch, 1.54.6.4, 1.54.6.5 drm-next.patch, 1.6.6.2, 1.6.6.3 drm-nouveau.patch, 1.8.6.2, 1.8.6.3 kernel.spec, 1.1294.2.10, 1.1294.2.11 linux-2.6-acpi-video-dos.patch, 1.2, 1.2.16.1 linux-2.6-execshield.patch, 1.102, 1.102.6.1 linux-2.6-v4l-dvb-fixes.patch, 1.2.8.2, 1.2.8.3 linux-2.6-v4l-dvb-update.patch, 1.1.2.4, 1.1.2.5 linux-2.6.29-lirc.patch, 1.3.6.1, 1.3.6.2 sources, 1.976.2.6, 1.976.2.7 upstream, 1.888.2.5, 1.888.2.6 xen.pvops.patch, 1.1.2.9, 1.1.2.10 drm-fix-setmaster-deadlock.patch, 1.1.2.2, NONE drm-intel-next.patch, 1.4.6.2, NONE drm-maybe-fix-nouveau.patch, 1.1.10.2, NONE linux-2.6-crash-driver.patch, 1.12.6.1, NONE linux-2.6-ext4-inode-alloc-race.patch, 1.1.2.2, NONE linux-2.6.28-lockd-svc-register.patch, 1.1, NONE linux-2.6.28-sunrpc-ipv6-rpcbind.patch, 1.2, NONE

Michael Young myoung at fedoraproject.org
Thu Mar 12 20:39:14 UTC 2009


Author: myoung

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

Modified Files:
      Tag: private-myoung-dom0-branch
	.cvsignore TODO config-generic config-ia64-generic 
	config-powerpc32-generic config-powerpc64 config-s390x 
	config-sparc64-generic drm-modesetting-radeon.patch 
	drm-next.patch drm-nouveau.patch kernel.spec 
	linux-2.6-acpi-video-dos.patch linux-2.6-execshield.patch 
	linux-2.6-v4l-dvb-fixes.patch linux-2.6-v4l-dvb-update.patch 
	linux-2.6.29-lirc.patch sources upstream xen.pvops.patch 
Added Files:
      Tag: private-myoung-dom0-branch
	cpufreq-add-atom-to-p4-clockmod.patch 
	drm-intel-big-hammer.patch 
	linux-2.6-acpi-video-didl-intel-outputs.patch 
	linux-2.6-ext4-extent-header-check-fix.patch 
	linux-2.6-ext4-flush-on-close.patch linux-2.6-hdpvr-fix.patch 
	linux-2.6-input-fix-toshiba-hotkeys.patch 
	linux-2.6-input-hid-extra-gamepad.patch 
	linux-2.6.29-sparc-IOC_TYPECHECK.patch 
	patch-2.6.29-rc7-git5.bz2.sign 
	squashfs-fix-page-aligned-data.patch 
	unifdef-rename-getline-symbol.patch 
Removed Files:
      Tag: private-myoung-dom0-branch
	drm-fix-setmaster-deadlock.patch drm-intel-next.patch 
	drm-maybe-fix-nouveau.patch linux-2.6-crash-driver.patch 
	linux-2.6-ext4-inode-alloc-race.patch 
	linux-2.6.28-lockd-svc-register.patch 
	linux-2.6.28-sunrpc-ipv6-rpcbind.patch 
Log Message:
pvops update which includes /sys/hypervisor support


cpufreq-add-atom-to-p4-clockmod.patch:

--- NEW FILE cpufreq-add-atom-to-p4-clockmod.patch ---
cpufreq: add atom family to p4-clockmod

Some atom procs don't do freq scaling (such as the atom 330 on my own
littlefalls2 board). By adding the atom family here, we at least get
the benefit of passive cooling in a thermal emergency. Not sure how
to see that its actually helping any, but the driver does bind and
claim its functioning on my atom 330.

Signed-off-by: Jarod Wilson <jarod at redhat.com>

---
 arch/x86/kernel/cpu/cpufreq/p4-clockmod.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
index b585e04..b0c02a1 100644
--- a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
+++ b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
@@ -161,6 +161,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
 		case 0x0E: /* Core */
 		case 0x0F: /* Core Duo */
 		case 0x16: /* Celeron Core */
+		case 0x1C: /* Atom */
 			p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;
 			return speedstep_get_processor_frequency(SPEEDSTEP_PROCESSOR_PCORE);
 		case 0x0D: /* Pentium M (Dothan) */

drm-intel-big-hammer.patch:

--- NEW FILE drm-intel-big-hammer.patch ---
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 37427e4..08af9db 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2553,6 +2553,11 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
 
 	mutex_lock(&dev->struct_mutex);
 
+	/* We don't get the flushing right for these chipsets, use the
+	 * big hamer for now to avoid random crashiness. */
+	if (IS_I855(dev) || IS_I865G(dev))
+		wbinvd();
+
 	i915_verify_inactive(dev, __FILE__, __LINE__);
 
 	if (dev_priv->mm.wedged) {

linux-2.6-acpi-video-didl-intel-outputs.patch:

--- NEW FILE linux-2.6-acpi-video-didl-intel-outputs.patch ---
commit a0fdbca7264432e073f5cdde8bebbcba96165337
Author: Matthew Garrett <mjg at redhat.com>
Date:   Wed Mar 11 16:39:36 2009 +0000

    [ACPI] Populate DIDL before registering ACPI video device on Intel
    
    Intel graphics hardware that implements the ACPI IGD OpRegion spec requires
    that the list of display devices be populated before any ACPI video methods
    are called. Detect when this is the case and defer registration until the
    opregion code calls it. Fixes crashes on HP laptops as seen in kernel
    bugzilla #11259.
    
    Signed-off-by: Matthew Garrett <mjg at redhat.com>

diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index bb5ed05..64e987c 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -37,6 +37,8 @@
 #include <linux/thermal.h>
 #include <linux/video_output.h>
 #include <linux/sort.h>
+#include <linux/pci.h>
+#include <linux/pci_ids.h>
 #include <asm/uaccess.h>
 
 #include <acpi/acpi_bus.h>
@@ -2124,7 +2126,27 @@ static int acpi_video_bus_remove(struct acpi_device *device, int type)
 	return 0;
 }
 
-static int __init acpi_video_init(void)
+static int __init intel_opregion_present(void)
+{
+#if defined(CONFIG_DRM_I915) || defined(CONFIG_DRM_I915_MODULE)
+	struct pci_dev *dev = NULL;
+	u32 address;
+
+	for_each_pci_dev(dev) {
+		if ((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
+			continue;
+		if (dev->vendor != PCI_VENDOR_ID_INTEL)
+			continue;
+		pci_read_config_dword(dev, 0xfc, &address);
+		if (!address)
+			continue;
+		return 1;
+	}
+#endif
+	return 0;
+}
+
+int acpi_video_register(void)
 {
 	int result = 0;
 
@@ -2141,6 +2163,22 @@ static int __init acpi_video_init(void)
 
 	return 0;
 }
+EXPORT_SYMBOL(acpi_video_register);
+
+/*
+ * This is kind of nasty. Hardware using Intel chipsets may require
+ * the video opregion code to be run first in order to initialise
+ * state before any ACPI video calls are made. To handle this we defer
+ * registration of the video class until the opregion code has run.
+ */
+
+static int __init acpi_video_init(void)
+{
+	if (intel_opregion_present())
+		return 0;
+
+	return acpi_video_register();
+}
 
 static void __exit acpi_video_exit(void)
 {
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 6dab63b..70a9904 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1144,8 +1144,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
 	if (!IS_I945G(dev) && !IS_I945GM(dev))
 		pci_enable_msi(dev->pdev);
 
-	intel_opregion_init(dev);
-
 	spin_lock_init(&dev_priv->user_irq_lock);
 	dev_priv->user_irq_refcount = 0;
 
@@ -1164,6 +1162,9 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
 		}
 	}
 
+	/* Must be done after probing outputs */
+	intel_opregion_init(dev);
+
 	return 0;
 
 out_iomapfree:
diff --git a/drivers/gpu/drm/i915/i915_opregion.c b/drivers/gpu/drm/i915/i915_opregion.c
index ff01283..60b746f 100644
--- a/drivers/gpu/drm/i915/i915_opregion.c
+++ b/drivers/gpu/drm/i915/i915_opregion.c
@@ -26,6 +26,7 @@
  */
 
 #include <linux/acpi.h>
+#include <acpi/video.h>
 
 #include "drmP.h"
 #include "i915_drm.h"
@@ -136,6 +137,12 @@ struct opregion_asle {
 
 #define ASLE_CBLV_VALID         (1<<31)
 
+#define ACPI_OTHER_OUTPUT (0<<8)
+#define ACPI_VGA_OUTPUT (1<<8)
+#define ACPI_TV_OUTPUT (2<<8)
+#define ACPI_DIGITAL_OUTPUT (3<<8)
+#define ACPI_LVDS_OUTPUT (4<<8)
+
 static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
@@ -282,6 +289,57 @@ static struct notifier_block intel_opregion_notifier = {
 	.notifier_call = intel_opregion_video_event,
 };
 
+/*
+ * Initialise the DIDL field in opregion. This passes a list of devices to
+ * the firmware. Values are defined by section B.4.2 of the ACPI specification
+ * (version 3)
+ */
+
+static void intel_didl_outputs(struct drm_device *dev)
+{
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct intel_opregion *opregion = &dev_priv->opregion;
+	struct drm_connector *connector;
+	int i = 0;
+
+	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+		int output_type = ACPI_OTHER_OUTPUT;
+		if (i >= 8) {
+			dev_printk (KERN_ERR, &dev->pdev->dev,
+				    "More than 8 outputs detected\n");
+			return;
+		}
+		switch (connector->connector_type) {
+		case DRM_MODE_CONNECTOR_VGA:
+		case DRM_MODE_CONNECTOR_DVIA:
+			output_type = ACPI_VGA_OUTPUT;
+			break;
+		case DRM_MODE_CONNECTOR_Composite:
+		case DRM_MODE_CONNECTOR_SVIDEO:
+		case DRM_MODE_CONNECTOR_Component:
+		case DRM_MODE_CONNECTOR_9PinDIN:
+			output_type = ACPI_TV_OUTPUT;
+			break;
+		case DRM_MODE_CONNECTOR_DVII:
+		case DRM_MODE_CONNECTOR_DVID:
+		case DRM_MODE_CONNECTOR_DisplayPort:
+		case DRM_MODE_CONNECTOR_HDMIA:
+		case DRM_MODE_CONNECTOR_HDMIB:
+			output_type = ACPI_DIGITAL_OUTPUT;
+			break;
+		case DRM_MODE_CONNECTOR_LVDS:
+			output_type = ACPI_LVDS_OUTPUT;
+			break;
+		}
+		opregion->acpi->didl[i] |= (1<<31) | output_type | i;
+		i++;
+	}
+
+	/* If fewer than 8 outputs, the list must be null terminated */
+	if (i < 8)
+		opregion->acpi->didl[i] = 0;
+}
+
 int intel_opregion_init(struct drm_device *dev)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
@@ -312,6 +370,10 @@ int intel_opregion_init(struct drm_device *dev)
 	if (mboxes & MBOX_ACPI) {
 		DRM_DEBUG("Public ACPI methods supported\n");
 		opregion->acpi = base + OPREGION_ACPI_OFFSET;
+		if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+			intel_didl_outputs(dev);
+			acpi_video_register();
+		}
 	} else {
 		DRM_DEBUG("Public ACPI methods not supported\n");
 		err = -ENOTSUPP;
diff --git a/include/acpi/video.h b/include/acpi/video.h
new file mode 100644
index 0000000..f0275bb
--- /dev/null
+++ b/include/acpi/video.h
@@ -0,0 +1,11 @@
+#ifndef __ACPI_VIDEO_H
+#define __ACPI_VIDEO_H
+
+#if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE)
+extern int acpi_video_register(void);
+#else
+static inline int acpi_video_register(void) { return 0; }
+#endif
+
+#endif
+

linux-2.6-ext4-extent-header-check-fix.patch:

--- NEW FILE linux-2.6-ext4-extent-header-check-fix.patch ---
This should resolve kernel.org bugzilla 12821

I've not actually crafted a workload to exercise this code; 
this is from inspection...

The ext4_ext_search_right() function is confusing; it uses a
"depth" variable which is 0 at the root and maximum at the leaves, 
but the on-disk metadata uses a "depth" (actually eh_depth) which
is opposite: maximum at the root, and 0 at the leaves.

The ext4_ext_check_header() function is given a depth and checks
the header agaisnt that depth; it expects the on-disk semantics,
but we are giving it the opposite in the while loop in this 
function.  We should be giving it the on-disk notion of "depth"
which we can get from (p_depth - depth) - and if you look, the last
(more commonly hit) call to ext4_ext_check_header() does just this.

Sending in the wrong depth results in (incorrect) messages
about corruption:

EXT4-fs error (device sdb1): ext4_ext_search_right: bad header
in inode #2621457: unexpected eh_depth - magic f30a, entries 340,
max 340(0), depth 1(2)

Reported-by: David Dindorp <ddi at dubex.dk>
Signed-off-by: Eric Sandeen <sandeen at redhat.com>
--

Index: linux-2.6/fs/ext4/extents.c
===================================================================
--- linux-2.6.orig/fs/ext4/extents.c
+++ linux-2.6/fs/ext4/extents.c
@@ -1122,7 +1122,8 @@ ext4_ext_search_right(struct inode *inod
 	struct ext4_extent_idx *ix;
 	struct ext4_extent *ex;
 	ext4_fsblk_t block;
-	int depth, ee_len;
+	int depth;	/* Note, NOT eh_depth; depth from top of tree */
+	int ee_len;
 
 	BUG_ON(path == NULL);
 	depth = path->p_depth;
@@ -1179,7 +1180,8 @@ got_index:
 		if (bh == NULL)
 			return -EIO;
 		eh = ext_block_hdr(bh);
-		if (ext4_ext_check_header(inode, eh, depth)) {
+		/* subtract from p_depth to get proper eh_depth */
+		if (ext4_ext_check_header(inode, eh, path->p_depth - depth)) {
 			put_bh(bh);
 			return -EIO;
 		}

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


linux-2.6-ext4-flush-on-close.patch:

--- NEW FILE linux-2.6-ext4-flush-on-close.patch ---
From: Theodore Ts'o <tytso at mit.edu>
Date: Thu, 26 Feb 2009 06:04:07 +0000 (-0500)
Subject: ext4: add EXT4_IOC_ALLOC_DA_BLKS ioctl
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftytso%2Fext4.git;a=commitdiff_plain;h=3bf3342f394d72ed2ec7e77b5b39e1b50fad8284

ext4: add EXT4_IOC_ALLOC_DA_BLKS ioctl

Add an ioctl which forces all of the delay allocated blocks to be
allocated.  This also provides a function ext4_alloc_da_blocks() which
will be used by the following commits to force files to be fully
allocated to preserve application-expected ext3 behaviour.

XXX ERS: actual ioctl removed, not needed for our purposes at this time

Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
---


From: Theodore Ts'o <tytso at mit.edu>
Date: Tue, 24 Feb 2009 13:21:14 +0000 (-0500)
Subject: ext4: Automatically allocate delay allocated blocks on close
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftytso%2Fext4.git;a=commitdiff_plain;h=6645f8c3bc3cdaa7de4aaa3d34d40c2e8e5f09ae

ext4: Automatically allocate delay allocated blocks on close

When closing a file that had been previously truncated, force any
delay allocated blocks that to be allocated so that if the filesystem
is mounted with data=ordered, the data blocks will be pushed out to
disk along with the journal commit.  Many application programs expect
this, so we do this to avoid zero length files if the system crashes
unexpectedly.

Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
---

From: Theodore Ts'o <tytso at mit.edu>
Date: Tue, 24 Feb 2009 04:05:27 +0000 (-0500)
Subject: ext4: Automatically allocate delay allocated blocks on rename
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftytso%2Fext4.git;a=commitdiff_plain;h=dbc85aa9f11d8c13c15527d43a3def8d7beffdc8

ext4: Automatically allocate delay allocated blocks on rename

When renaming a file such that a link to another inode is overwritten,
force any delay allocated blocks that to be allocated so that if the
filesystem is mounted with data=ordered, the data blocks will be
pushed out to disk along with the journal commit.  Many application
programs expect this, so we do this to avoid zero length files if the
system crashes unexpectedly.

Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
---


Index: linux-2.6.28.noarch/fs/ext4/ext4.h
===================================================================
--- linux-2.6.28.noarch.orig/fs/ext4/ext4.h
+++ linux-2.6.28.noarch/fs/ext4/ext4.h
@@ -255,6 +255,7 @@ struct flex_groups {
 #define EXT4_STATE_NEW			0x00000002 /* inode is newly created */
 #define EXT4_STATE_XATTR		0x00000004 /* has in-inode xattrs */
 #define EXT4_STATE_NO_EXPAND		0x00000008 /* No space for expansion */
+#define EXT4_STATE_DA_ALLOC_CLOSE	0x00000010 /* Alloc DA blks on close */
 
 /* Used to pass group descriptor data when online resize is done */
 struct ext4_new_group_input {
@@ -1091,6 +1092,7 @@ extern int ext4_can_truncate(struct inod
 extern void ext4_truncate(struct inode *);
 extern void ext4_set_inode_flags(struct inode *);
 extern void ext4_get_inode_flags(struct ext4_inode_info *);
+extern int ext4_alloc_da_blocks(struct inode *inode);
 extern void ext4_set_aops(struct inode *inode);
 extern int ext4_writepage_trans_blocks(struct inode *);
 extern int ext4_meta_trans_blocks(struct inode *, int nrblocks, int idxblocks);
Index: linux-2.6.28.noarch/fs/ext4/inode.c
===================================================================
--- linux-2.6.28.noarch.orig/fs/ext4/inode.c
+++ linux-2.6.28.noarch/fs/ext4/inode.c
@@ -2816,6 +2816,48 @@ out:
 	return;
 }
 
+/*
+ * Force all delayed allocation blocks to be allocated for a given inode.
+ */
+int ext4_alloc_da_blocks(struct inode *inode)
+{
+	if (!EXT4_I(inode)->i_reserved_data_blocks &&
+	    !EXT4_I(inode)->i_reserved_meta_blocks)
+		return 0;
+
+	/*
+	 * We do something simple for now.  The filemap_flush() will
+	 * also start triggering a write of the data blocks, which is
+	 * not strictly speaking necessary (and for users of
+	 * laptop_mode, not even desirable).  However, to do otherwise
+	 * would require replicating code paths in:
+	 * 
+	 * ext4_da_writepages() ->
+	 *    write_cache_pages() ---> (via passed in callback function)
+	 *        __mpage_da_writepage() -->
+	 *           mpage_add_bh_to_extent()
+	 *           mpage_da_map_blocks()
+	 *
+	 * The problem is that write_cache_pages(), located in
+	 * mm/page-writeback.c, marks pages clean in preparation for
+	 * doing I/O, which is not desirable if we're not planning on
+	 * doing I/O at all.
+	 *
+	 * We could call write_cache_pages(), and then redirty all of
+	 * the pages by calling redirty_page_for_writeback() but that
+	 * would be ugly in the extreme.  So instead we would need to
+	 * replicate parts of the code in the above functions,
+	 * simplifying them becuase we wouldn't actually intend to
+	 * write out the pages, but rather only collect contiguous
+	 * logical block extents, call the multi-block allocator, and
+	 * then update the buffer heads with the block allocations.
+	 * 
+	 * For now, though, we'll cheat by calling filemap_flush(),
+	 * which will map the blocks, and start the I/O, but not
+	 * actually wait for the I/O to complete.
+	 */
+	return filemap_flush(inode->i_mapping);
+}
 
 /*
  * bmap() is special.  It gets used by applications such as lilo and by
@@ -3838,6 +3880,9 @@ void ext4_truncate(struct inode *inode)
 	if (!ext4_can_truncate(inode))
 		return;
 
+	if (inode->i_size == 0)
+		ei->i_state |= EXT4_STATE_DA_ALLOC_CLOSE;
+
 	if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) {
 		ext4_ext_truncate(inode);
 		return;
Index: linux-2.6.28.noarch/fs/ext4/file.c
===================================================================
--- linux-2.6.28.noarch.orig/fs/ext4/file.c
+++ linux-2.6.28.noarch/fs/ext4/file.c
@@ -33,6 +33,10 @@
  */
 static int ext4_release_file(struct inode *inode, struct file *filp)
 {
+	if (EXT4_I(inode)->i_state & EXT4_STATE_DA_ALLOC_CLOSE) {
+		ext4_alloc_da_blocks(inode);
+		EXT4_I(inode)->i_state &= ~EXT4_STATE_DA_ALLOC_CLOSE;
+	}
 	/* if we are the last writer on the inode, drop the block reservation */
 	if ((filp->f_mode & FMODE_WRITE) &&
 			(atomic_read(&inode->i_writecount) == 1))
Index: linux-2.6.28.noarch/fs/ext4/namei.c
===================================================================
--- linux-2.6.28.noarch.orig/fs/ext4/namei.c
+++ linux-2.6.28.noarch/fs/ext4/namei.c
@@ -2311,7 +2311,7 @@ static int ext4_rename(struct inode *old
 	struct inode *old_inode, *new_inode;
 	struct buffer_head *old_bh, *new_bh, *dir_bh;
 	struct ext4_dir_entry_2 *old_de, *new_de;
-	int retval;
+	int retval, force_da_alloc = 0;
 
 	old_bh = new_bh = dir_bh = NULL;
 
@@ -2449,6 +2449,7 @@ static int ext4_rename(struct inode *old
 		ext4_mark_inode_dirty(handle, new_inode);
 		if (!new_inode->i_nlink)
 			ext4_orphan_add(handle, new_inode);
+		force_da_alloc = 1;
 	}
 	retval = 0;
 
@@ -2457,6 +2458,8 @@ end_rename:
 	brelse(old_bh);
 	brelse(new_bh);
 	ext4_journal_stop(handle);
+	if (retval == 0 && force_da_alloc)
+		ext4_alloc_da_blocks(old_inode);
 	return retval;
 }
 

linux-2.6-hdpvr-fix.patch:

--- NEW FILE linux-2.6-hdpvr-fix.patch ---
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c
index b8f2be8..0e8bd98 100644
--- a/drivers/media/video/v4l2-common.c
+++ b/drivers/media/video/v4l2-common.c
@@ -547,7 +547,6 @@ int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 ste
 	case V4L2_CID_CONTRAST:
 	case V4L2_CID_SATURATION:
 	case V4L2_CID_HUE:
-	case V4L2_CID_SHARPNESS:
 		qctrl->flags |= V4L2_CTRL_FLAG_SLIDER;
 		break;
 	}
@@ -585,8 +586,6 @@ int v4l2_ctrl_query_fill_std(struct v4l2_queryctrl *qctrl)
 		return v4l2_ctrl_query_fill(qctrl, 0, 127, 1, 64);
 	case V4L2_CID_HUE:
 		return v4l2_ctrl_query_fill(qctrl, -128, 127, 1, 0);
-	case V4L2_CID_SHARPNESS:
-		return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 0);
 
 	/* MPEG controls */
 	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:

linux-2.6-input-fix-toshiba-hotkeys.patch:

--- NEW FILE linux-2.6-input-fix-toshiba-hotkeys.patch ---
commit 61a2aa30877a6e2be1d3fb3a71385e1f741819d7
Author: Matthew Garrett <mjg at redhat.com>
Date:   Fri Mar 6 00:25:45 2009 +0000

    toshiba-acpi: Add support for hotkey notifications
    
    Calling the ENAB method on Toshiba laptops results in notifications being
    sent when laptop hotkeys are pressed. This patch simply calls that method
    and sets up an input device if it's successful.
    
    Signed-off-by: Matthew Garrett <mjg at redhat.com>

diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
index 40e60fc..604f9fa 100644
--- a/drivers/platform/x86/toshiba_acpi.c
+++ b/drivers/platform/x86/toshiba_acpi.c
@@ -46,6 +46,7 @@
 #include <linux/platform_device.h>
 #include <linux/rfkill.h>
 #include <linux/input-polldev.h>
+#include <linux/input.h>
 
 #include <asm/uaccess.h>
 
@@ -62,9 +63,10 @@ MODULE_LICENSE("GPL");
 
 /* Toshiba ACPI method paths */
 #define METHOD_LCD_BRIGHTNESS	"\\_SB_.PCI0.VGA_.LCD_._BCM"
-#define METHOD_HCI_1		"\\_SB_.VALD.GHCI"
-#define METHOD_HCI_2		"\\_SB_.VALZ.GHCI"
+#define TOSH_INTERFACE_1	"\\_SB_.VALD"
+#define TOSH_INTERFACE_2	"\\_SB_.VALZ"
 #define METHOD_VIDEO_OUT	"\\_SB_.VALX.DSSX"
+#define GHCI_METHOD		".GHCI"
 
 /* Toshiba HCI interface definitions
  *
@@ -116,6 +118,36 @@ static const struct acpi_device_id toshiba_device_ids[] = {
 };
 MODULE_DEVICE_TABLE(acpi, toshiba_device_ids);
 
+struct key_entry {
+	char type;
+	u16 code;
+	u16 keycode;
+};
+
+enum {KE_KEY, KE_END};
+
+static struct key_entry toshiba_acpi_keymap[]  = {
+	{KE_KEY, 0x101, KEY_MUTE},
+	{KE_KEY, 0x13b, KEY_COFFEE},
+	{KE_KEY, 0x13c, KEY_BATTERY},
+	{KE_KEY, 0x13d, KEY_SLEEP},
+	{KE_KEY, 0x13e, KEY_SUSPEND},
+	{KE_KEY, 0x13f, KEY_SWITCHVIDEOMODE},
+	{KE_KEY, 0x140, KEY_BRIGHTNESSDOWN},
+	{KE_KEY, 0x141, KEY_BRIGHTNESSUP},
+	{KE_KEY, 0x142, KEY_WLAN},
+	{KE_KEY, 0x143, KEY_PROG1},
+	{KE_KEY, 0xb05, KEY_PROG2},
+	{KE_KEY, 0xb06, KEY_WWW},
+	{KE_KEY, 0xb07, KEY_MAIL},
+	{KE_KEY, 0xb30, KEY_STOP},
+	{KE_KEY, 0xb31, KEY_PREVIOUSSONG},
+	{KE_KEY, 0xb32, KEY_NEXTSONG},
+	{KE_KEY, 0xb33, KEY_PLAYPAUSE},
+	{KE_KEY, 0xb5a, KEY_MEDIA},
+	{KE_END, 0, 0},
+};
+
 /* utility
  */
 
@@ -252,6 +284,8 @@ struct toshiba_acpi_dev {
 	struct platform_device *p_dev;
 	struct rfkill *rfk_dev;
 	struct input_polled_dev *poll_dev;
+	struct input_dev *hotkey_dev;
+	acpi_handle handle;
 
 	const char *bt_name;
 	const char *rfk_name;
@@ -702,6 +736,154 @@ static struct backlight_ops toshiba_backlight_data = {
         .update_status  = set_lcd_status,
 };
 
+static struct key_entry *toshiba_acpi_get_entry_by_scancode(int code)
+{
+	struct key_entry *key;
+
+	for (key = toshiba_acpi_keymap; key->type != KE_END; key++)
+		if (code == key->code)
+			return key;
+
+	return NULL;
+}
+
+static struct key_entry *toshiba_acpi_get_entry_by_keycode(int code)
+{
+	struct key_entry *key;
+
+	for (key = toshiba_acpi_keymap; key->type != KE_END; key++)
+		if (code == key->keycode && key->type == KE_KEY)
+			return key;
+
+	return NULL;
+}
+
+static int toshiba_acpi_getkeycode(struct input_dev *dev, int scancode,
+				   int *keycode)
+{
+	struct key_entry *key = toshiba_acpi_get_entry_by_scancode(scancode);
+
+	if (key && key->type == KE_KEY) {
+		*keycode = key->keycode;
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+static int toshiba_acpi_setkeycode(struct input_dev *dev, int scancode,
+				   int keycode)
+{
+	struct key_entry *key;
+	int old_keycode;
+
+	if (keycode < 0 || keycode > KEY_MAX)
+		return -EINVAL;
+
+	key = toshiba_acpi_get_entry_by_scancode(scancode);
+	if (key && key->type == KE_KEY) {
+		old_keycode = key->keycode;
+		key->keycode = keycode;
+		set_bit(keycode, dev->keybit);
+		if (!toshiba_acpi_get_entry_by_keycode(old_keycode))
+			clear_bit(old_keycode, dev->keybit);
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+static void toshiba_acpi_notify(acpi_handle handle, u32 event, void *data)
+{
+	u32 hci_result, value;
+	struct key_entry *key;
+
+	if (event != 0x80)
+		return;
+	do {
+		hci_read1(HCI_SYSTEM_EVENT, &value, &hci_result);
+		if (hci_result == HCI_SUCCESS) {
+			if (value == 0x100)
+				continue;
+			else if (value & 0x80) {
+				key = toshiba_acpi_get_entry_by_scancode
+					(value & ~0x80);
+				if (!key) {
+					printk(MY_INFO "Unknown key %x\n",
+					       value & ~0x80);
+					continue;
+				}
+				input_report_key(toshiba_acpi.hotkey_dev,
+						 key->keycode, 1);
+				input_sync(toshiba_acpi.hotkey_dev);
+				input_report_key(toshiba_acpi.hotkey_dev,
+						 key->keycode, 0);
+				input_sync(toshiba_acpi.hotkey_dev);
+			}
+		} else if (hci_result == HCI_NOT_SUPPORTED) {
+			/* This is a workaround for an unresolved issue on
+			 * some machines where system events sporadically
+			 * become disabled. */
+			hci_write1(HCI_SYSTEM_EVENT, 1, &hci_result);
+			printk(MY_NOTICE "Re-enabled hotkeys\n");
+		}
+	} while (hci_result != HCI_EMPTY);
+}
+
+static int toshiba_acpi_setup_keyboard(char *device)
+{
+	acpi_status status;
+	acpi_handle handle;
+	int result;
+	const struct key_entry *key;
+
+	status = acpi_get_handle(NULL, device, &handle);
+	if (ACPI_FAILURE(status)) {
+		printk(MY_INFO "Unable to get notification device\n");
+		return -ENODEV;
+	}
+
+	toshiba_acpi.handle = handle;
+
+	status = acpi_evaluate_object(handle, "ENAB", NULL, NULL);
+	if (ACPI_FAILURE(status)) {
+		printk(MY_INFO "Unable to enable hotkeys\n");
+		return -ENODEV;
+	}
+
+	status = acpi_install_notify_handler (handle, ACPI_DEVICE_NOTIFY,
+					      toshiba_acpi_notify, NULL);
+	if (ACPI_FAILURE(status)) {
+		printk(MY_INFO "Unable to install hotkey notification\n");
+		return -ENODEV;
+	}
+
+	toshiba_acpi.hotkey_dev = input_allocate_device();
+	if (!toshiba_acpi.hotkey_dev) {
+		printk(MY_INFO "Unable to register input device\n");
+		return -ENOMEM;
+	}
+
+	toshiba_acpi.hotkey_dev->name = "Toshiba input device";
+	toshiba_acpi.hotkey_dev->phys = device;
+	toshiba_acpi.hotkey_dev->id.bustype = BUS_HOST;
+	toshiba_acpi.hotkey_dev->getkeycode = toshiba_acpi_getkeycode;
+	toshiba_acpi.hotkey_dev->setkeycode = toshiba_acpi_setkeycode;
+
+	for (key = toshiba_acpi_keymap; key->type != KE_END; key++) {
+		set_bit(EV_KEY, toshiba_acpi.hotkey_dev->evbit);
+		set_bit(key->keycode, toshiba_acpi.hotkey_dev->keybit);
+	}
+
+	result = input_register_device(toshiba_acpi.hotkey_dev);
+	if (result) {
+		printk(MY_INFO "Unable to register input device\n");
+		return result;
+	}
+
+	return 0;
+}
+
 static void toshiba_acpi_exit(void)
 {
 	if (toshiba_acpi.poll_dev) {
@@ -709,12 +891,18 @@ static void toshiba_acpi_exit(void)
 		input_free_polled_device(toshiba_acpi.poll_dev);
 	}
 
+	if (toshiba_acpi.hotkey_dev)
+		input_unregister_device(toshiba_acpi.hotkey_dev);
+
 	if (toshiba_acpi.rfk_dev)
 		rfkill_unregister(toshiba_acpi.rfk_dev);
 
 	if (toshiba_backlight_device)
 		backlight_device_unregister(toshiba_backlight_device);
 
+	acpi_remove_notify_handler(toshiba_acpi.handle, ACPI_DEVICE_NOTIFY,
+				   toshiba_acpi_notify);
+
 	remove_device();
 
 	if (toshiba_proc_dir)
@@ -738,11 +926,15 @@ static int __init toshiba_acpi_init(void)
 		return -ENODEV;
 
 	/* simple device detection: look for HCI method */
-	if (is_valid_acpi_path(METHOD_HCI_1))
-		method_hci = METHOD_HCI_1;
-	else if (is_valid_acpi_path(METHOD_HCI_2))
-		method_hci = METHOD_HCI_2;
-	else
+	if (is_valid_acpi_path(TOSH_INTERFACE_1 GHCI_METHOD)) {
+		method_hci = TOSH_INTERFACE_1 GHCI_METHOD;
+		if (toshiba_acpi_setup_keyboard(TOSH_INTERFACE_1))
+			printk(MY_INFO "Unable to activate hotkeys\n");
+	} else if (is_valid_acpi_path(TOSH_INTERFACE_2 GHCI_METHOD)) {
+		method_hci = TOSH_INTERFACE_2 GHCI_METHOD;
+		if (toshiba_acpi_setup_keyboard(TOSH_INTERFACE_2))
+			printk(MY_INFO "Unable to activate hotkeys\n");
+	} else
 		return -ENODEV;
 
 	printk(MY_INFO "Toshiba Laptop ACPI Extras version %s\n",

linux-2.6-input-hid-extra-gamepad.patch:

--- NEW FILE linux-2.6-input-hid-extra-gamepad.patch ---
>From 28b692b039a477e92fd9bff8ece163a647b9c490 Mon Sep 17 00:00:00 2001
From: Anssi Hannula <anssi.hannula at gmail.com>
Date: Fri, 27 Feb 2009 23:47:00 +0200
Subject: [PATCH] HID: add support for another version of 0e8f:0003 device in hid-pl

Add support for another version of 0e8f:0003 device into hid-pl driver.
This device has the values in separate fields and resembles devices
handled by hid-zpff.

Signed-off-by: Anssi Hannula <anssi.hannula at gmail.com>
Tested-by: Pantelis Koukousoulas <pktoss at gmail.com>
Signed-off-by: Jiri Kosina <jkosina at suse.cz>
---
 drivers/hid/hid-pl.c |   50 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 38 insertions(+), 12 deletions(-)

diff --git a/drivers/hid/hid-pl.c b/drivers/hid/hid-pl.c
index 46941f9..9ad76bf 100644
--- a/drivers/hid/hid-pl.c
+++ b/drivers/hid/hid-pl.c
@@ -9,9 +9,12 @@
  *   - contains two reports, one for each port (HID_QUIRK_MULTI_INPUT)
  *
  *  0e8f:0003 "GreenAsia Inc.    USB Joystick     "
- *   - tested with K??ng Gaming gamepad
+ *   - tested with König Gaming gamepad
  *
- *  Copyright (c) 2007 Anssi Hannula <anssi.hannula at gmail.com>
+ *  0e8f:0003 "GASIA USB Gamepad"
+ *   - another version of the König gamepad
+ *
+ *  Copyright (c) 2007, 2009 Anssi Hannula <anssi.hannula at gmail.com>
  */
 
 /*
@@ -46,6 +49,8 @@
 
 struct plff_device {
 	struct hid_report *report;
+	s32 *strong;
+	s32 *weak;
 };
 
 static int hid_plff_play(struct input_dev *dev, void *data,
@@ -62,8 +67,8 @@ static int hid_plff_play(struct input_dev *dev, void *data,
 	left = left * 0x7f / 0xffff;
 	right = right * 0x7f / 0xffff;
 
-	plff->report->field[0]->value[2] = left;
-	plff->report->field[0]->value[3] = right;
+	*plff->strong = left;
+	*plff->weak = right;
 	debug("running with 0x%02x 0x%02x", left, right);
 	usbhid_submit_report(hid, plff->report, USB_DIR_OUT);
 
@@ -80,6 +85,8 @@ static int plff_init(struct hid_device *hid)
 	struct list_head *report_ptr = report_list;
 	struct input_dev *dev;
 	int error;
+	s32 *strong;
+	s32 *weak;
 
 	/* The device contains one output report per physical device, all
 	   containing 1 field, which contains 4 ff00.0002 usages and 4 16bit
@@ -87,7 +94,12 @@ static int plff_init(struct hid_device *hid)
 
 	   The input reports also contain a field which contains
 	   8 ff00.0001 usages and 8 boolean values. Their meaning is
-	   currently unknown. */
+	   currently unknown.
+	   
+	   A version of the 0e8f:0003 exists that has all the values in
+	   separate fields and misses the extra input field, thus resembling
+	   Zeroplus (hid-zpff) devices.
+	*/
 
 	if (list_empty(report_list)) {
 		dev_err(&hid->dev, "no output reports found\n");
@@ -110,8 +122,21 @@ static int plff_init(struct hid_device *hid)
 			return -ENODEV;
 		}
 
-		if (report->field[0]->report_count < 4) {
-			dev_err(&hid->dev, "not enough values in the field\n");
+		if (report->field[0]->report_count >= 4) {
+			report->field[0]->value[0] = 0x00;
+			report->field[0]->value[1] = 0x00;
+			strong = &report->field[0]->value[2];
+			weak = &report->field[0]->value[3];
+			debug("detected single-field device");
+		} else if (report->maxfield >= 4 && report->field[0]->maxusage == 1 &&
+				report->field[0]->usage[0].hid == (HID_UP_LED | 0x43)) {
+			report->field[0]->value[0] = 0x00;
+			report->field[1]->value[0] = 0x00;
+			strong = &report->field[2]->value[0];
+			weak = &report->field[3]->value[0];
+			debug("detected 4-field device");
+		} else {
+			dev_err(&hid->dev, "not enough fields or values\n");
 			return -ENODEV;
 		}
 
@@ -130,10 +155,11 @@ static int plff_init(struct hid_device *hid)
 		}
 
 		plff->report = report;
-		plff->report->field[0]->value[0] = 0x00;
-		plff->report->field[0]->value[1] = 0x00;
-		plff->report->field[0]->value[2] = 0x00;
-		plff->report->field[0]->value[3] = 0x00;
+		plff->strong = strong;
+		plff->weak = weak;
+
+		*strong = 0x00;
+		*weak = 0x00;
 		usbhid_submit_report(hid, plff->report, USB_DIR_OUT);
 	}
 
@@ -180,7 +206,7 @@ static const struct hid_device_id pl_devices[] = {
 		.driver_data = 1 }, /* Twin USB Joystick */
 	{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR),
 		.driver_data = 1 }, /* Twin USB Joystick */
-	{ HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0003), }, /* GreenAsia Inc. USB Joystick */
+	{ HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0003), },
 	{ }
 };
 MODULE_DEVICE_TABLE(hid, pl_devices);
-- 
1.5.6.3


linux-2.6.29-sparc-IOC_TYPECHECK.patch:

--- NEW FILE linux-2.6.29-sparc-IOC_TYPECHECK.patch ---
diff -up vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h.BAD vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h
--- vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h.BAD	2009-03-09 17:01:32.000000000 -0400
+++ vanilla-2.6.29-rc7-git2/arch/sparc/include/asm/ioctl.h	2009-03-09 16:52:27.000000000 -0400
@@ -41,6 +41,17 @@
          ((nr)   << _IOC_NRSHIFT) | \
          ((size) << _IOC_SIZESHIFT))
 
+#ifdef __KERNEL__
+/* provoke compile error for invalid uses of size argument */
+extern unsigned int __invalid_size_argument_for_IOC;
+#define _IOC_TYPECHECK(t) \
+        ((sizeof(t) == sizeof(t[1]) && \
+          sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
+          sizeof(t) : __invalid_size_argument_for_IOC)
+#else
+#define _IOC_TYPECHECK(t) (sizeof(t))
+#endif
+
 #define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0)
 #define _IOR(type,nr,size)  _IOC(_IOC_READ,(type),(nr),sizeof(size))
 #define _IOW(type,nr,size)  _IOC(_IOC_WRITE,(type),(nr),sizeof(size))


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

iD8DBQBJuFD8yGugalF9Dw4RAiT7AJ0cBidN1s/wfDbYCtZDSzqi6tK64QCfd9Hj
1QIztH2mBgwHZ6n2CU3xMPY=
=7fS8
-----END PGP SIGNATURE-----

squashfs-fix-page-aligned-data.patch:

--- NEW FILE squashfs-fix-page-aligned-data.patch ---
commit 7dacdd0d86a70564cd56e49cd9432d68e0a58916
Author: Phillip Lougher <phillip at lougher.demon.co.uk>
Date:   Wed Mar 11 17:55:28 2009 +0000

Squashfs: Valid filesystems are flagged as bad by the corrupted fs patch

The problem arises due to an unexpected corner-case with zlib which the
corrupted filesystems patch didn't address.  Very occasionally zlib
exits needing a couple of extra bytes of input (up to 6 seen bytes in the
test filesystems), but with avail_out == 0 and no more output buffer
space available.  This situation was incorrectly flagged as an output buffer
overrun by the corrupted filesystems patch.

Signed-off-by: Phillip Lougher <phillip at lougher.demon.co.uk>
Reported-by: Stefan Lippers-Hollmann <s.L-H at gmx.de>
Tested-by: Geert Uytterhoeven <Geert.Uytterhoeven at sonycom.com>
---
 fs/squashfs/block.c |   29 ++++++++++++++++-------------
 1 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c
index 321728f..b85173f 100644
--- a/fs/squashfs/block.c
+++ b/fs/squashfs/block.c
@@ -166,6 +166,22 @@ int squashfs_read_data(struct super_block *sb, void **buffer, u64 index,
 
 		bytes = length;
 		do {
+			if (msblk->stream.avail_out == 0) {
+				if (page < pages) {
+					msblk->stream.next_out = buffer[page++];
+					msblk->stream.avail_out =
+								PAGE_CACHE_SIZE;
+				} else if (msblk->stream.avail_in > 0
+								|| bytes == 0) {
+					ERROR("zlib_inflate tried to "
+						"decompress too much data, "
+						"expected %d bytes.  Zlib "
+						"data probably corrupt\n",
+						srclength);
+					goto release_mutex;
+				}
+			}
+
 			if (msblk->stream.avail_in == 0 && k < b) {
 				avail = min(bytes, msblk->devblksize - offset);
 				bytes -= avail;
@@ -184,19 +200,6 @@ int squashfs_read_data(struct super_block *sb, void **buffer, u64 index,
 				offset = 0;
 			}
 
-			if (msblk->stream.avail_out == 0) {
-				if (page == pages) {
-					ERROR("zlib_inflate tried to "
-						"decompress too much data, "
-						"expected %d bytes.  Zlib "
-						"data probably corrupt\n",
-						srclength);
-					goto release_mutex;
-				}
-				msblk->stream.next_out = buffer[page++];
-				msblk->stream.avail_out = PAGE_CACHE_SIZE;
-			}
-
 			if (!zlib_init) {
 				zlib_err = zlib_inflateInit(&msblk->stream);
 				if (zlib_err != Z_OK) {
-- 
1.5.6.3


unifdef-rename-getline-symbol.patch:

--- NEW FILE unifdef-rename-getline-symbol.patch ---
diff --git a/scripts/unifdef.c b/scripts/unifdef.c
index 552025e..977e682 100644
--- a/scripts/unifdef.c
+++ b/scripts/unifdef.c
@@ -206,7 +206,7 @@ static void             done(void);
 static void             error(const char *);
 static int              findsym(const char *);
 static void             flushline(bool);
-static Linetype         getline(void);
+static Linetype         parseline(void);
 static Linetype         ifeval(const char **);
 static void             ignoreoff(void);
 static void             ignoreon(void);
@@ -512,7 +512,7 @@ process(void)
 
 	for (;;) {
 		linenum++;
-		lineval = getline();
+		lineval = parseline();
 		trans_table[ifstate[depth]][lineval]();
 		debug("process %s -> %s depth %d",
 		    linetype_name[lineval],
@@ -526,7 +526,7 @@ process(void)
  * help from skipcomment().
  */
 static Linetype
-getline(void)
+parseline(void)
 {
 	const char *cp;
 	int cursym;


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.1014.2.5
retrieving revision 1.1014.2.6
diff -u -r1.1014.2.5 -r1.1014.2.6
--- .cvsignore	5 Mar 2009 01:30:21 -0000	1.1014.2.5
+++ .cvsignore	12 Mar 2009 20:38:55 -0000	1.1014.2.6
@@ -6,3 +6,4 @@
 kernel-2.6.28
 linux-2.6.28.tar.bz2
 patch-2.6.29-rc7.bz2
+patch-2.6.29-rc7-git5.bz2


Index: TODO
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/TODO,v
retrieving revision 1.54.6.1
retrieving revision 1.54.6.2
diff -u -r1.54.6.1 -r1.54.6.2
--- TODO	21 Feb 2009 16:05:52 -0000	1.54.6.1
+++ TODO	12 Mar 2009 20:38:55 -0000	1.54.6.2
@@ -10,10 +10,6 @@
 	Nouveau DRM driver.
 	Won't go upstream until ABI confirmed.
 
-* linux-2.6-at76.patch
-	Linville.  Wireless bits.
-	Most should be upstream for 2.6.28
-
 * linux-2.6-ata-quirk.patch
 	IA64 oddness. Query sent to f-k-l
 
@@ -34,11 +30,6 @@
 * linux-2.6-hotfixes.patch
 	Empty
 
-* linux-2.6-crash-driver.patch
-	Not upstreamable.
-	This is basically a read-only /dev/mem
-	Crazy idea: Add a bootparam that overrides the restricted devmem ?
-
 * linux-2.6-debug-always-inline-kzalloc.patch
 	Sent upstream Sep 25 2008
 
@@ -59,7 +50,6 @@
 
 * linux-2.6-e1000-ich9.patch
 * linux-2.6-firewire-git-update.patch
-* linux-2.6-netdev-atl2.patch
 	Should go upstream for .29 ?
 
 * linux-2.6-g5-therm-shutdown.patch
@@ -71,13 +61,12 @@
 * linux-2.6-execshield.patch
 	Not interesting to upstream.
 
-* linux-2.6.27-lirc.patch
+* linux-2.6.29-lirc.patch
 * linux-2.6-sysrq-c.patch
 	jarod working on upstreaming
 * linux-2.6-hdpvr.patch
 	jarod added, should be in upstream v4l-dvb by .28, linus' tree by .29
 
-* linux-2.6-net-silence-noisy-printks.patch
 * linux-2.6-silence-acpi-blacklist.patch
 * linux-2.6-silence-fbcon-logo.patch
 * linux-2.6-silence-noise.patch
@@ -97,6 +86,3 @@
 	DEBUG_SHIRQ causes an oops.
 	Needs testing, if it works, it'll go upstream soon.
 
-* linux-2.6-x86-mtrr-kill-bogus-warning.patch
-	Silence bogus warning under vmware ; sent upstream.
-


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.238.6.8
retrieving revision 1.238.6.9
diff -u -r1.238.6.8 -r1.238.6.9
--- config-generic	5 Mar 2009 22:45:07 -0000	1.238.6.8
+++ config-generic	12 Mar 2009 20:38:55 -0000	1.238.6.9
@@ -2194,7 +2194,7 @@
 #
 CONFIG_VIDEO_DEV=m
 # CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
 CONFIG_VIDEO_ALLOW_V4L1=y
 CONFIG_VIDEO_V4L1_COMPAT=y
 CONFIG_VIDEO_V4L2=y
@@ -2209,14 +2209,9 @@
 #
 CONFIG_V4L_USB_DRIVERS=y
 CONFIG_VIDEO_CAPTURE_DRIVERS=y
-CONFIG_VIDEO_ADV7170=m
-CONFIG_VIDEO_ADV7175=m
 CONFIG_VIDEO_AU0828=m
-CONFIG_VIDEO_BT819=m
 CONFIG_VIDEO_BT848=m
 CONFIG_VIDEO_BT848_DVB=y
-CONFIG_VIDEO_BT856=m
-CONFIG_VIDEO_BT866=m
 CONFIG_VIDEO_BWQCAM=m
 # CONFIG_VIDEO_CAFE_CCIC is not set
 CONFIG_VIDEO_CPIA=m
@@ -2224,10 +2219,6 @@
 CONFIG_VIDEO_CPIA_USB=m
 CONFIG_VIDEO_CPIA2=m
 CONFIG_VIDEO_CQCAM=m
-CONFIG_VIDEO_CS5345=m
-CONFIG_VIDEO_CS53L32A=m
-CONFIG_VIDEO_CX25840=m
-CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_CX23885=m
 CONFIG_VIDEO_CX18=m
 CONFIG_VIDEO_CX88=m
@@ -2242,12 +2233,9 @@
 CONFIG_VIDEO_HEXIUM_ORION=m
 CONFIG_VIDEO_HEXIUM_GEMINI=m
 CONFIG_VIDEO_IVTV=m
-CONFIG_VIDEO_KS0127=m
 CONFIG_VIDEO_MEYE=m
-CONFIG_VIDEO_MSP3400=m
 CONFIG_VIDEO_MXB=m
 CONFIG_VIDEO_OVCAMCHIP=m
-CONFIG_VIDEO_OV7670=m
 CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR=y
 CONFIG_VIDEO_PVRUSB2_ONAIR_USB2=y
@@ -2255,33 +2243,12 @@
 CONFIG_VIDEO_SAA5246A=m
 CONFIG_VIDEO_SAA5249=m
 CONFIG_VIDEO_SAA6588=m
-CONFIG_VIDEO_SAA7110=m
-CONFIG_VIDEO_SAA7111=m
-CONFIG_VIDEO_SAA7114=m
-CONFIG_VIDEO_SAA711X=m
-CONFIG_VIDEO_SAA7127=m
 CONFIG_VIDEO_SAA7134=m
 CONFIG_VIDEO_SAA7134_ALSA=m
 CONFIG_VIDEO_SAA7134_DVB=m
-CONFIG_VIDEO_SAA7185=m
-CONFIG_VIDEO_SAA7191=m
 CONFIG_VIDEO_STRADIS=m
-CONFIG_VIDEO_TCM825X=m
-CONFIG_VIDEO_TDA7432=m
-CONFIG_VIDEO_TDA9840=m
-CONFIG_VIDEO_TDA9875=m
-CONFIG_VIDEO_TEA6415C=m
-CONFIG_VIDEO_TEA6420=m
-CONFIG_VIDEO_TLV320AIC23B=m
-CONFIG_VIDEO_TVAUDIO=m
-CONFIG_VIDEO_TVP5150=m
-CONFIG_VIDEO_UPD64031A=m
-CONFIG_VIDEO_UPD64083=m
 CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_VPX3220=m
 CONFIG_VIDEO_W9966=m
-CONFIG_VIDEO_WM8775=m
-CONFIG_VIDEO_WM8739=m
 CONFIG_VIDEO_ZORAN=m
 CONFIG_VIDEO_ZORAN_AVS6EYES=m
 CONFIG_VIDEO_ZORAN_BUZ=m
@@ -2291,8 +2258,6 @@
 CONFIG_VIDEO_ZORAN_LML33R10=m
 CONFIG_VIDEO_ZORAN_ZR36060=m
 CONFIG_VIDEO_FB_IVTV=m
-CONFIG_VIDEO_M52790=m
-CONFIG_VIDEO_VP27SMPX=m
 CONFIG_TUNER_3036=m
 # CONFIG_TUNER_TEA5761 is not set
 
@@ -2321,42 +2286,18 @@
 #
 # Supported Frontend Modules
 #
-CONFIG_DVB_AU8522=m
-CONFIG_DVB_STV0299=m
-# CONFIG_DVB_SP887X is not set
 CONFIG_DVB_BT8XX=m
 CONFIG_DVB_BUDGET_CORE=m
-CONFIG_DVB_CX24110=m
-CONFIG_DVB_DRX397XD=m
-CONFIG_DVB_ISL6405=m
-CONFIG_DVB_L64781=m
-CONFIG_DVB_LGDT330X=m
-CONFIG_DVB_MT312=m
-CONFIG_DVB_NXT6000=m
 CONFIG_DVB_PLUTO2=m
-CONFIG_DVB_S5H1409=m
-CONFIG_DVB_S5H1420=m
 CONFIG_DVB_SIANO_SMS1XXX=m
 CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
-CONFIG_DVB_SP8870=m
-CONFIG_DVB_TDA10021=m
-CONFIG_DVB_TDA10023=m
-CONFIG_DVB_TDA1004X=m
-CONFIG_DVB_TUA6100=m
 CONFIG_DVB_TTUSB_DEC=m
 CONFIG_DVB_USB_CINERGY_T2=m
 CONFIG_DVB_USB_DTV5100=m
 CONFIG_DVB_USB_AF9015=m
 CONFIG_DVB_USB_ANYSEE=m
 CONFIG_DVB_USB_DW2102=m
-CONFIG_DVB_VES1820=m
-CONFIG_DVB_VES1X93=m
 CONFIG_DVB_DM1105=m
-CONFIG_DVB_LGS8GL5=m
-# CONFIG_DVB_DUMMY_FE is not set
-CONFIG_DVB_AF9013=m
-CONFIG_DVB_STV6110=m
-CONFIG_DVB_STV0900=m
 
 #
 # Supported SAA7146 based PCI Adapters
@@ -2382,17 +2323,12 @@
 CONFIG_DVB_B2C2_FLEXCOP_PCI=m
 CONFIG_DVB_B2C2_FLEXCOP_USB=m
 # CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
-CONFIG_DVB_CX22700=m
-CONFIG_DVB_CX22702=m
-CONFIG_DVB_DIB3000MB=m
-CONFIG_DVB_DIB3000MC=m
 CONFIG_DVB_CINERGYT2_TUNING=y
 CONFIG_DVB_CINERGYT2_STREAM_URB_COUNT=32
 CONFIG_DVB_CINERGYT2_STREAM_BUF_SIZE=512
 CONFIG_DVB_CINERGYT2_QUERY_INTERVAL=250
 CONFIG_DVB_CINERGYT2_ENABLE_RC_INPUT_DEVICE=y
 CONFIG_DVB_CINERGYT2_RC_QUERY_INTERVAL=100
-CONFIG_DVB_OR51132=m
 CONFIG_DVB_USB=m
 # CONFIG_DVB_USB_DEBUG is not set
 CONFIG_DVB_USB_A800=m
@@ -2429,7 +2365,6 @@
 CONFIG_VIDEO_PVRUSB2_29XXX=y
 CONFIG_VIDEO_PVRUSB2_SYSFS=y
 # CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
-CONFIG_VIDEO_IR_I2C=m
 
 #
 # Graphics support
@@ -3163,7 +3098,7 @@
 CONFIG_SUNRPC_BIND34=y
 CONFIG_SUNRPC_GSS=m
 CONFIG_SUNRPC_XPRT_RDMA=m
-CONFIG_SUNRPC_REGISTER_V4=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
 CONFIG_RPCSEC_GSS_KRB5=m
 CONFIG_RPCSEC_GSS_SPKM3=m
 # CONFIG_SMB_FS is not set
@@ -3498,8 +3433,6 @@
 # CONFIG_PM_VERBOSE is not set
 CONFIG_PM_TEST_SUSPEND=y
 
-CONFIG_CRASH=m
-
 ## BEGIN ISA Junk.
 
 CONFIG_I82365=m
@@ -3925,11 +3858,8 @@
 CONFIG_LIBFC=m
 CONFIG_FCOE=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
-CONFIG_VIDEO_TVP514X=m
 
 CONFIG_DVB_DYNAMIC_MINORS=y
-CONFIG_DVB_LGDT3304=m
-CONFIG_DVB_S921=m
 
 #
 # added for xen pvops patch
@@ -3955,3 +3885,4 @@
 # CONFIG_RD_LZMA is not set
 # CONFIG_XEN_GNTDEV is not set
 # CONFIG_EVENT_TRACER is not set
+CONFIG_XEN_SYS_HYPERVISOR=y


Index: config-ia64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-ia64-generic,v
retrieving revision 1.21.6.1
retrieving revision 1.21.6.2
diff -u -r1.21.6.1 -r1.21.6.2
--- config-ia64-generic	5 Mar 2009 01:30:21 -0000	1.21.6.1
+++ config-ia64-generic	12 Mar 2009 20:38:55 -0000	1.21.6.2
@@ -171,8 +171,6 @@
 
 CONFIG_IA64_ACPI_CPUFREQ=m
 
-# CONFIG_CRASH is not set
-
 # CONFIG_PERMIT_BSP_REMOVE is not set
 # CONFIG_FORCE_CPEI_RETARGET is not set
 


Index: config-powerpc32-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-powerpc32-generic,v
retrieving revision 1.30
retrieving revision 1.30.6.1
diff -u -r1.30 -r1.30.6.1
--- config-powerpc32-generic	13 Jan 2009 17:45:52 -0000	1.30
+++ config-powerpc32-generic	12 Mar 2009 20:38:55 -0000	1.30.6.1
@@ -68,8 +68,6 @@
 CONFIG_FB_MATROX=y
 # CONFIG_KEXEC is not set
 
-# CONFIG_CRASH is not set
-
 # CONFIG_HVC_RTAS is not set
 # CONFIG_MAMBO is not set
 


Index: config-powerpc64
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-powerpc64,v
retrieving revision 1.27
retrieving revision 1.27.6.1
diff -u -r1.27 -r1.27.6.1
--- config-powerpc64	29 Dec 2008 17:30:27 -0000	1.27
+++ config-powerpc64	12 Mar 2009 20:38:56 -0000	1.27.6.1
@@ -123,7 +123,6 @@
 # CONFIG_MV643XX_ETH is not set
 CONFIG_IRQSTACKS=y
 CONFIG_DEBUG_STACKOVERFLOW=y
-# CONFIG_CRASH is not set
 # CONFIG_INPUT_PCSPKR is not set
 
 CONFIG_EHEA=m


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-s390x,v
retrieving revision 1.11
retrieving revision 1.11.6.1
diff -u -r1.11 -r1.11.6.1
--- config-s390x	29 Dec 2008 02:48:00 -0000	1.11
+++ config-s390x	12 Mar 2009 20:38:56 -0000	1.11.6.1
@@ -216,6 +216,4 @@
 # drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now"
 # CONFIG_MISDN_HFCMULTI is not set
 
-# CONFIG_CRASH is not set
-
 CONFIG_HVC_IUCV=y


Index: config-sparc64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-sparc64-generic,v
retrieving revision 1.21
retrieving revision 1.21.6.1
diff -u -r1.21 -r1.21.6.1
--- config-sparc64-generic	17 Nov 2008 17:14:34 -0000	1.21
+++ config-sparc64-generic	12 Mar 2009 20:38:56 -0000	1.21.6.1
@@ -26,7 +26,6 @@
 CONFIG_SUN_LDOMS=y
 CONFIG_SCHED_SMT=y
 CONFIG_SCHED_MC=y
-# CONFIG_CRASH is not set
 CONFIG_64BIT=y
 # CONFIG_BBC_I2C is not set
 CONFIG_HUGETLB_PAGE_SIZE_4MB=y
@@ -85,13 +84,12 @@
 # CONFIG_FB_LEO is not set
 CONFIG_FB_XVR500=y
 CONFIG_FB_XVR2500=y
-# CONFIG_DRM is not set
 # CONFIG_VGASTATE is not set
 # CONFIG_FB_DDC is not set
 # CONFIG_FB_CIRRUS is not set
 # CONFIG_FB_ATY128 is not set
 # CONFIG_FB_KYRO is not set
-
+# CONFIG_AGP is not set
 # CONFIG_DRM_NOUVEAU is not set
 # CONFIG_MDA_CONSOLE is not set
 # CONFIG_PROM_CONSOLE is not set
@@ -153,7 +151,6 @@
 CONFIG_ATM_FORE200E_DEBUG=0
 CONFIG_ATM_FORE200E_TX_RETRY=16
 # CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_R128 is not set
 # CONFIG_KEYBOARD_ATKBD is not set
 CONFIG_KEYBOARD_SUNKBD=y
 # CONFIG_INPUT_PCSPKR is not set

drm-modesetting-radeon.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.54.6.4 -r 1.54.6.5 drm-modesetting-radeon.patch
Index: drm-modesetting-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-modesetting-radeon.patch,v
retrieving revision 1.54.6.4
retrieving revision 1.54.6.5
diff -u -r1.54.6.4 -r1.54.6.5
--- drm-modesetting-radeon.patch	5 Mar 2009 22:45:08 -0000	1.54.6.4
+++ drm-modesetting-radeon.patch	12 Mar 2009 20:38:56 -0000	1.54.6.5
@@ -1,4 +1,106 @@
-commit fef48d5013f761faec24ee1044282b6098318237
+commit 35b84c0dc0b9c007e542a448417f0341ddf78cd1
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Thu Mar 12 11:39:05 2009 +1000
+
+    drm/radeon: Don't try to use agp symbols if we don't have AGP
+    
+    The radeon_buffer.c addition that gets pulled into the DRM driver as
+    part of Kernel Mode Setting (even if you disable KMS for the Radeon
+    driver) was assuming that it was safe to use symbols from the AGP code,
+    but that isn't safe on platforms where __OS_HAS_AGP is 0. Such as
+    sparc64. :)
+    
+    This patch gets the code building again. It probably should go into the
+    actual kms patch, but if you would prefer this go as a separate patch, I
+    can apply it. With this, we can get rawhide building for sparc64, so I'm
+    eager to see it applied in one way or another.
+    
+    Signed-off-by: Tom "spot" Callaway <tcallawa at redhat.com>
+
+commit 547fe8513d4058efb8fe0eed856c7531305b320f
+Author: Dave Airlie <airlied at dhcp-1-203.bne.redhat.com>
+Date:   Thu Mar 12 10:58:05 2009 +1000
+
+    radeon: fixup the IB getting routine
+    
+    This makes the IB get routine a lot smarter and hopefully
+    fixes some cases where it exits
+
+commit 7d0361c240495ee5ed5c5a4490084dc258e1eda2
+Author: Dave Airlie <airlied at dhcp-1-203.bne.redhat.com>
+Date:   Thu Mar 12 10:57:17 2009 +1000
+
+    radeon: loop inside irq handler.
+    
+    This makes us not leave the irq handler until we are finished.
+    
+    it appears there is a race with getting interrupts and clearing them somewhere
+    
+    only happens on r300 hw for me
+
+commit 7dab6d7b968d623b3c2f99173590f17c7cc248b6
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Wed Mar 11 18:50:06 2009 +1000
+
+    radeon: add suspend test hook
+    
+    this debugfs entry just does a driver suspend then resume cycle
+
+commit 2c1f8464844f8760563e70499de38a8070031d9e
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Wed Mar 11 11:40:13 2009 +1000
+
+    drm: add page alloc debugging for the page allocator
+    
+    this just prints the page counts in debugfs
+
+commit 85510fb358cb3c0e3d526a93389a8d847b7398c0
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Tue Mar 10 19:01:37 2009 +1000
+
+    radeon: enable kms on r100/r200
+
+commit cd45bd5f01fb0294befd98ced95e46e3a6983d2c
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Sat Mar 7 19:11:20 2009 +1100
+
+    drm: switch uncached allocator to be generic cached/uncached
+    
+    This gets rid of neraly all the overhead of dma allocs for glxgears.
+    
+    using cached pages on PCIE ftw
+
+commit b34c746ed223c60c3c8aa2b9f707eaaf9e0427dc
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Sat Mar 7 17:55:11 2009 +1100
+
+    radeon: when we are using PCIE/IGP don't play with caching
+    
+    We really want to use cached BOs as much as possible on PCIE/IGP
+    for now. We should investigate uncached BOs for certain operations
+    perhaps.
+    
+    Signed-off-by: Dave Airlie <airlied at redhat.com>
+
+commit 121cc720f350cc7a34af1d8a3c002266ba990d9b
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Mar 6 16:42:06 2009 +1100
+
+    radeon: add depth offset reloc properly
+
+commit e2eeb3497972e391e519c2139a5ac9fd32dadccc
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Mar 6 16:25:38 2009 +1100
+
+    radeon: r100/r200 add depth offset check
+
+commit 9abfacf388ee1f62cd2f19b32639372b781cd9b7
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Mar 6 06:07:38 2009 +1000
+
+    radeon: add some more texture relocations for r100/r200/r300
+
+commit e039bd0f71b17bad18724b5fbb0c1f72be737de2
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Thu Mar 5 15:57:18 2009 +1000
 
@@ -6,19 +108,19 @@
     
     This is half ways between a hack and really neat.
 
-commit 530ebda60cb7270795b7edd72930ab2d0e4db102
+commit bd274a6fb4d9bd78e2467620e6c5898c209dfb12
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Tue Mar 3 18:23:22 2009 +1000
 
     radeon: port proc debug files to new debugfs interface
 
-commit 94137dff359fc70b51bdf035f97cfbab7424a5ce
+commit f5b2321e7d646e6e7438911e811a973e34270abb
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Tue Mar 3 15:33:52 2009 +1000
 
     radeon: pin framebuffer and cursors dynamically
 
-commit 90a014f6d04548790dbcef1932ad3d89ff12aa32
+commit dfe5afc942903cdf9240db9da3670bae07742f85
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Fri Feb 27 20:25:36 2009 -0500
 
@@ -26,7 +128,7 @@
     
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
 
-commit 9e3775d3fe8677b2f995230521fd93cd9ef69327
+commit 1c653f0dd7ca80b57be396b5af67f18a73ce6bbc
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Fri Feb 27 20:18:20 2009 -0500
 
@@ -34,7 +136,7 @@
     
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
 
-commit b3c52a1d083b846541e2b6d78c917ae00e9f04c1
+commit 709a927cf8b67b87086e7cf97cc8916f9b9106f9
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Fri Feb 27 20:15:04 2009 -0500
 
@@ -42,7 +144,7 @@
     
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
 
-commit b077cde9a296856bcadb3003e746950034e929bb
+commit 1be02ac8d9307f2aeb1190dd1e08f8588020b273
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Fri Feb 27 20:07:13 2009 -0500
 
@@ -50,55 +152,55 @@
     
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
 
-commit 85a3e7390f17ba442c020dda1a47e6b6b1ce0588
+commit 4e200d8a0063650385096ab6485dea9d428acecb
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Mon Mar 2 23:51:30 2009 +1100
 
     radeon: fixup suspend/resume hooks
 
-commit 1467208a03bb127c3882c59cbcc2818fb1076b8d
+commit b6cd6f6b0c543380381fd730031831e62da3fbda
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Sun Mar 1 18:25:07 2009 +1100
 
     radeon: fix rs480 gart size
 
-commit f3812bb92e9900be559d5d4b2098b8dcef01cce9
+commit 59109f23bf6e835e80d43d138f22520882618a7c
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Fri Feb 27 15:37:14 2009 +1000
 
     radeon: disable kms by default for r600
 
-commit 924db462f118847e313a1a185e93e58016866da4
+commit 0b64e6b2ba58ca37f8c40d3954b523e44d691430
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Fri Feb 27 11:51:22 2009 +1000
 
     radeon: fixup proc hacks
 
-commit 59883501a17405b6db133066d41309db083eb722
+commit c83e971d04031798907c5d1b3a6dfeda9eb7bbd3
[...2581 lines suppressed...]
+-
+ 	if (irqs)
+ 		RADEON_WRITE(RADEON_GEN_INT_STATUS, irqs);
+ 
++	irqs &=	irq_mask;
+ 	return irqs;
+ }
+ 
+@@ -195,41 +194,49 @@ irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS)
  	if (!stat)
  		return IRQ_NONE;
  
-+	atomic_inc(&dev_priv->irq_received);
- 	stat &= dev_priv->irq_enable_reg;
+-	stat &= dev_priv->irq_enable_reg;
++	while (stat) {
++		atomic_inc(&dev_priv->irq_received);
++		stat &= dev_priv->irq_enable_reg;
  
- 	/* SW interrupt */
+-	/* SW interrupt */
 -	if (stat & RADEON_SW_INT_TEST)
-+	if (stat & RADEON_SW_INT_TEST) {
- 		DRM_WAKEUP(&dev_priv->swi_queue);
-+		radeon_fence_handler(dev);
-+	}
+-		DRM_WAKEUP(&dev_priv->swi_queue);
++		/* SW interrupt */
++		if (stat & RADEON_SW_INT_TEST) {
++			DRM_WAKEUP(&dev_priv->swi_queue);
++			radeon_fence_handler(dev);
++		}
  
- 	/* VBLANK interrupt */
- 	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690) {
-@@ -216,20 +219,23 @@ irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS)
+-	/* VBLANK interrupt */
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600) {
+-		if (r500_disp_int & R500_D1_VBLANK_INTERRUPT)
+-			drm_handle_vblank(dev, 0);
+-		if (r500_disp_int & R500_D2_VBLANK_INTERRUPT)
+-			drm_handle_vblank(dev, 1);
+-	} else {
+-		if (stat & RADEON_CRTC_VBLANK_STAT)
+-			drm_handle_vblank(dev, 0);
+-		if (stat & RADEON_CRTC2_VBLANK_STAT)
+-			drm_handle_vblank(dev, 1);
++		/* VBLANK interrupt */
++		if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600) {
++			if (r500_disp_int & R500_D1_VBLANK_INTERRUPT)
++				drm_handle_vblank(dev, 0);
++			if (r500_disp_int & R500_D2_VBLANK_INTERRUPT)
++				drm_handle_vblank(dev, 1);
++		} else {
++			if (stat & RADEON_CRTC_VBLANK_STAT)
++				drm_handle_vblank(dev, 0);
++			if (stat & RADEON_CRTC2_VBLANK_STAT)
++				drm_handle_vblank(dev, 1);
++		}
++		stat = radeon_acknowledge_irqs(dev_priv, &r500_disp_int);
+ 	}
  	return IRQ_HANDLED;
  }
  
@@ -26686,7 +26974,6 @@
  {
  	drm_radeon_private_t *dev_priv = dev->dev_private;
  	unsigned int ret;
-+	int i;
  	RING_LOCALS;
  
 -	atomic_inc(&dev_priv->swi_emitted);
@@ -26709,7 +26996,7 @@
  
  	return ret;
  }
-@@ -240,13 +246,13 @@ static int radeon_wait_irq(struct drm_device * dev, int swi_nr)
+@@ -240,13 +247,13 @@ static int radeon_wait_irq(struct drm_device * dev, int swi_nr)
  	    (drm_radeon_private_t *) dev->dev_private;
  	int ret = 0;
  
@@ -26725,7 +27012,7 @@
  
  	return ret;
  }
-@@ -340,7 +346,6 @@ int radeon_driver_irq_postinstall(struct drm_device *dev)
+@@ -340,7 +347,6 @@ int radeon_driver_irq_postinstall(struct drm_device *dev)
  	drm_radeon_private_t *dev_priv =
  	    (drm_radeon_private_t *) dev->dev_private;
  
@@ -35195,7 +35482,7 @@
 +
 +#endif
 diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c
-index ca00cef..e6d0503 100644
+index fa728ec..6d96e7e 100644
 --- a/drivers/gpu/drm/radeon/radeon_state.c
 +++ b/drivers/gpu/drm/radeon/radeon_state.c
 @@ -305,8 +305,9 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
@@ -35433,7 +35720,7 @@
  
  /**
 diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index ccbcd13..99e348d 100644
+index ccbcd13..b61b0c6 100644
 --- a/include/drm/drmP.h
 +++ b/include/drm/drmP.h
 @@ -147,9 +147,23 @@ struct drm_device;
@@ -35571,7 +35858,15 @@
  extern void drm_agp_chipset_flush(struct drm_device *dev);
  
  				/* Stub support (drm_stub.h) */
-@@ -1368,6 +1424,8 @@ extern int drm_ati_pcigart_init(struct drm_device *dev,
+@@ -1349,6 +1405,7 @@ extern int drm_bufs_info(struct seq_file *m, void *data);
+ extern int drm_vblank_info(struct seq_file *m, void *data);
+ extern int drm_clients_info(struct seq_file *m, void* data);
+ extern int drm_gem_name_info(struct seq_file *m, void *data);
++extern int drm_page_alloc_info(struct seq_file *m, void *data);
+ extern int drm_gem_object_info(struct seq_file *m, void* data);
+ 
+ #if DRM_DEBUG_CODE
+@@ -1368,6 +1425,8 @@ extern int drm_ati_pcigart_init(struct drm_device *dev,
  				struct drm_ati_pcigart_info * gart_info);
  extern int drm_ati_pcigart_cleanup(struct drm_device *dev,
  				   struct drm_ati_pcigart_info * gart_info);
@@ -35580,7 +35875,7 @@
  
  extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size,
  				       size_t align, dma_addr_t maxaddr);
-@@ -1525,6 +1583,39 @@ extern void drm_free(void *pt, size_t size, int area);
+@@ -1525,6 +1584,39 @@ extern void drm_free(void *pt, size_t size, int area);
  extern void *drm_calloc(size_t nmemb, size_t size, int area);
  #endif
  
@@ -35633,7 +35928,7 @@
  #endif
 diff --git a/include/drm/drm_objects.h b/include/drm/drm_objects.h
 new file mode 100644
-index 0000000..604c8f8
+index 0000000..60016d6
 --- /dev/null
 +++ b/include/drm/drm_objects.h
 @@ -0,0 +1,913 @@
@@ -36535,12 +36830,12 @@
 +				void *virtual);
 +
 +/*
-+ * drm_uncached.c
++ * drm_page_alloc.
 + */
-+extern int drm_uncached_init(void);
-+extern void drm_uncached_fini(void);
-+extern struct page *drm_get_uncached_page(void);
-+extern void drm_put_uncached_page(struct page *page);
++extern int drm_page_alloc_init(void);
++extern void drm_page_alloc_fini(void);
++extern struct page *drm_get_page(int cached);
++extern void drm_put_page(struct page *page, int cached);
 +
 +#ifdef CONFIG_DEBUG_MUTEXES
 +#define DRM_ASSERT_LOCKED(_mutex)					\
@@ -36550,38 +36845,6 @@
 +#define DRM_ASSERT_LOCKED(_mutex)
 +#endif
 +#endif
-diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h
-index 912cd52..9aeb426 100644
---- a/include/drm/i915_drm.h
-+++ b/include/drm/i915_drm.h
-@@ -187,7 +187,7 @@ typedef struct _drm_i915_sarea {
- 
- #define DRM_IOCTL_I915_INIT		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
- #define DRM_IOCTL_I915_FLUSH		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
--#define DRM_IOCTL_I915_FLIP		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLIP)
-+#define DRM_IOCTL_I915_FLIP		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FLIP, drm_i915_flip_t)
- #define DRM_IOCTL_I915_BATCHBUFFER	DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
- #define DRM_IOCTL_I915_IRQ_EMIT         DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
- #define DRM_IOCTL_I915_IRQ_WAIT         DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
-@@ -220,6 +220,18 @@ typedef struct _drm_i915_sarea {
- #define DRM_IOCTL_I915_GEM_GET_TILING	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling)
- #define DRM_IOCTL_I915_GEM_GET_APERTURE	DRM_IOR  (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture)
- 
-+/* Asynchronous page flipping:
-+ */
-+typedef struct drm_i915_flip {
-+	/*
-+	 * This is really talking about planes, and we could rename it
-+	 * except for the fact that some of the duplicated i915_drm.h files
-+	 * out there check for HAVE_I915_FLIP and so might pick up this
-+	 * version.
-+	 */
-+	int pipes;
-+} drm_i915_flip_t;
-+
- /* Allow drivers to submit batchbuffers directly to hardware, relying
-  * on the security mechanisms provided by hardware.
-  */
 diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h
 index 937a275..f716e0a 100644
 --- a/include/drm/radeon_drm.h

drm-next.patch:

Index: drm-next.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-next.patch,v
retrieving revision 1.6.6.2
retrieving revision 1.6.6.3
diff -u -r1.6.6.2 -r1.6.6.3
--- drm-next.patch	5 Mar 2009 01:30:22 -0000	1.6.6.2
+++ drm-next.patch	12 Mar 2009 20:38:56 -0000	1.6.6.3
@@ -1,4 +1,88 @@
-commit afdecdb151030e719a95896b610fdbde0ad4ca9f
+commit 24011adb61c1510fdd9c7ec9a27fc1ac4b23f1bf
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Mon Mar 9 15:31:20 2009 +1000
+
+    drm/radeon: fix r600 writeback setup.
+    
+    This fixes 2 bugs:
+    1. the AGP calculation wasn't consistent with the PCI(E) calc for the
+    RPTR_ADDR registers. This consolidates the writes and fixes it up.
+    
+    2. The scratch address was being incorrectly calculated, this breaks
+    it out into a lot more linear steps.
+    
+    Signed-off-by: Dave Airlie <airlied at redhat.com>
+
+commit d2d31c9fe72bf4904798fd0d01522644e49dd518
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Mon Mar 9 12:47:18 2009 +1000
+
+    drm: fix warnings about new mappings in info code.
+    
+    This fixes up the warnings in the debugfs code that conflicted
+    with the mapping fixups.
+    
+    Signed-off-by: Dave Airlie <airlied at redhat.com>
+
+commit 4ac16538732ad683c1e7c13cc569335a2db8b6c5
+Author: Hannes Eder <hannes at hanneseder.net>
+Date:   Thu Mar 5 20:14:18 2009 +0100
+
+    drm/radeon: NULL noise: drivers/gpu/drm/radeon/radeon_*.c
+    
+    Fix this sparse warning:
+      drivers/gpu/drm/radeon/r600_cp.c:1811:52: warning: Using plain integer as NULL pointer
+      drivers/gpu/drm/radeon/radeon_cp.c:1363:52: warning: Using plain integer as NULL pointer
+      drivers/gpu/drm/radeon/radeon_state.c:1983:61: warning: Using plain integer as NULL pointer
+    
+    Signed-off-by: Hannes Eder <hannes at hanneseder.net>
+    Signed-off-by: Dave Airlie <airlied at redhat.com>
+
+commit ae0add29f05b2f5d22863eaefad106f2bb3919be
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Mon Mar 9 12:17:08 2009 +1000
+
+    drm/radeon: fix r600 pci mapping calls.
+    
+    This realigns the r600 pci mapping calls with the ati pcigart ones,
+    fixing the direction and using the correct interface.
+    
+    Suggested by Jerome Glisse.
+    
+    Signed-off-by: Dave Airlie <airlied at redhat.com>
+
+commit 9cc01249240abd94eeba0792ad6fc509e7bf072e
+Author: Alex Deucher <alexdeucher at gmail.com>
+Date:   Sat Mar 7 18:21:21 2009 -0500
+
+    drm/radeon: r6xx/r7xx: fix possible oops in r600_page_table_cleanup()
+    
+    Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
+    Signed-off-by: Dave Airlie <airlied at redhat.com>
+
+commit 8ebf7ff817d032d1f6a06da8b65149b3de049e14
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Mon Mar 9 12:12:28 2009 +1000
+
+    radeon: call the correct idle function, logic got inverted.
+    
+    This calls the correct idle function for the R600 and previous chips.
+    
+    Signed-off-by: Dave Airlie <airlied at redhat.com>
+
+commit 144a1136478cca4f3efe67787eec33ca07aec929
+Author: Alex Deucher <alexdeucher at gmail.com>
+Date:   Fri Mar 6 11:47:54 2009 -0500
+
+    drm/radeon: RS600: fix interrupt handling
+    
+    the checks weren't updated when RS600 support
+    was added.
+    
+    Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
+    Signed-off-by: Dave Airlie <airlied at linux.ie>
+
+commit 664debb50231badbe84778f8945619e36555cd1d
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Thu Feb 26 10:15:24 2009 +1000
 
@@ -6,7 +90,7 @@
     
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit cc35bf2855020c4067e298cbd50fa5494b82ab7f
+commit 34aa4615a2cce35e46ef23b298c90afe4903f85d
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Thu Feb 26 10:14:40 2009 +1000
 
@@ -16,7 +100,7 @@
     
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 0101c60cfa2d6bd9e86524f267f8ba092bc7b0ae
+commit 840cd338857ead31f2c208f70cff2126b6838fd0
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Thu Feb 26 10:13:47 2009 +1000
 
@@ -26,7 +110,7 @@
     
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit c455abd7d1f5ed1815d692f37b317f8eab358ced
+commit ae18cf3a76471e058613a5a1256969b8cfd27128
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Thu Feb 26 10:12:10 2009 +1000
 
@@ -38,7 +122,7 @@
     
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 89de134be815fe9e30ca42aeac8a4ef5c8db8d30
+commit c79813faebe755991896c699773f50851c670d4c
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Wed Feb 25 17:02:19 2009 -0500
 
@@ -47,7 +131,7 @@
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 8dba4f2bd6d91a38a732dc3417187b75a6607e62
+commit a7f4943d120ba4c45cff2bd22883f598024a08dc
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Wed Feb 25 16:57:49 2009 -0500
 
@@ -60,7 +144,7 @@
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit e482e2e2c5dab12db6f1aa032c30993ca36d77b9
+commit b7fd19e6342c5f2522ec35dec0a92c8069813255
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Wed Feb 25 15:55:01 2009 -0500
 
@@ -71,7 +155,7 @@
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit dbcce50efba41272d795b64edd06b1261dbdc5b8
+commit 393f865abfb61363ba117cb0c3ea5032bc0a3a3c
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Tue Feb 24 17:13:42 2009 -0500
 
@@ -80,7 +164,7 @@
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 69184db08c49fd54d4e3a197dae64581c35a144f
+commit 6b3287c090c2c3eee993a96886f2f597c9e6ccfa
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Tue Feb 24 16:22:29 2009 -0500
 
@@ -92,7 +176,7 @@
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit b95ec10efe0bb8a106c6ab4edc019033c5081d3d
+commit e5a4f4a67d0e886b68ebb122b9282289bf9d6d7f
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Tue Feb 24 14:28:34 2009 -0500
 
@@ -107,7 +191,7 @@
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 1e7e66e6dce44a77d4042b80de23c8ba4346c459
+commit 0c9f2a4eb40612b22c4bb32b9fe9bcbb82c99e10
 Author: Alex Deucher <alexdeucher at gmail.com>
 Date:   Tue Feb 24 14:02:13 2009 -0500
 
@@ -120,7 +204,7 @@
     Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 9cb39ece1f32fe75e7c34b193022650108d4bf0f
+commit 3d802792f818036520ab805ded2904a749af4a48
 Author: Owain G. Ainsworth <oga at openbsd.org>
 Date:   Fri Feb 20 08:30:19 2009 +0000
 
@@ -138,7 +222,7 @@
     Signed-off-by: Eric Anholt <eric at anholt.net>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 5e60aaba5c9d226ec49f4c1030fc871bcea86048
+commit 088b364ce837e5b1fc8dd022bb5f98c8f3d96e3c
 Author: Chris Wilson <chris at chris-wilson.co.uk>
 Date:   Wed Feb 11 14:26:38 2009 +0000
 
@@ -148,7 +232,7 @@
     Signed-off-by: Eric Anholt <eric at anholt.net>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 475f933c677b8c59f34744aed2fc3bdcbec24c6e
+commit b884af03178e5cd139c8f566090ce763fb9e3a2b
 Author: Eric Anholt <eric at anholt.net>
 Date:   Tue Feb 17 23:53:41 2009 -0800
 
@@ -161,7 +245,7 @@
     Signed-off-by: Eric Anholt <eric at anholt.net>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit b4212836fef1ef28c6070f43d70fc73f9f5687f6
+commit ceeb73a867fe64a1de124cd3e9d776e89944f940
 Author: Ben Gamari <bgamari at gmail.com>
 Date:   Tue Feb 17 20:08:51 2009 -0500
 
@@ -174,7 +258,7 @@
     Signed-off-by: Eric Anholt <eric at anholt.net>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit a584bb1ed4de35a9206a8ed42fc7de18b3d46b5a
+commit b1645221d43bbfab70c5c5cfdc9e9733e380fca0
 Author: Ben Gamari <bgamari at gmail.com>
 Date:   Tue Feb 17 20:08:49 2009 -0500
 
@@ -194,7 +278,7 @@
     Signed-off-by: Eric Anholt <eric at anholt.net>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit edd3993997087102558fd2dbad9d69f8936faf46
+commit d4b25b68f700e27a09c0c5a372c6ee5c1ec45b8e
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Fri Feb 20 13:28:59 2009 +1000
 
@@ -204,7 +288,7 @@
     
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit d372535cb04702f5a631c9fc4d0a05c82a17f9b9
+commit 0c37ea7ccc5dabc1cd53780ae4600c6d0644b9f3
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Fri Feb 20 13:28:34 2009 +1000
 
@@ -217,7 +301,7 @@
     
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit ee97e09a8955f2c7c97142f53f259521a6366f95
+commit f7d0d89cc8da1e1ca489d5df3df68b00c0dd59d4
 Author: Benjamin Herrenschmidt <benh at kernel.crashing.org>
 Date:   Fri Feb 6 16:46:27 2009 +1100
 
@@ -229,7 +313,7 @@
     Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit caa35ced56886af48fbefd52e524267565c474db
+commit e22139bc821f295d25c0eddbeb65facf1f395458
 Author: David Miller <davem at davemloft.net>
 Date:   Wed Feb 18 01:35:21 2009 -0800
 
@@ -244,7 +328,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 57c23ac2439fb3d63063803c1525e1797b7952cb
+commit 85cee125f1756aeaa35e02db01987a0a4a5db909
 Author: David Miller <davem at davemloft.net>
 Date:   Wed Feb 18 01:35:23 2009 -0800
 
@@ -260,7 +344,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit 61d7dc858751fa8134b10c21b2d79956a752f96d
+commit 37d1de5730f78a682a19a47f83893e6116a65325
 Author: David Miller <davem at davemloft.net>
 Date:   Wed Feb 18 15:41:02 2009 -0800
 
@@ -298,7 +382,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at redhat.com>
 
-commit ed19a4b6caeabf3e03a4d553da0396eaebf76531
+commit ddaf8998790ba8d389859fa6420c7da38db91191
 Author: David Miller <davem at davemloft.net>
 Date:   Sun Feb 15 01:08:07 2009 -0800
 
@@ -316,7 +400,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit 303ba2de4375c08154f7636087161f8d68977833
+commit 1a531c0b82db724bf802f5e100c2c2fc08d54459
 Author: David Miller <davem at davemloft.net>
 Date:   Sat Feb 14 01:51:07 2009 -0800
 
@@ -338,7 +422,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit 75af28fa5949ac848ca383238212bcb9466a50db
+commit 7c5627f23a200c4ab9563b0f1fcfc6984be6ce0b
 Author: David Miller <davem at davemloft.net>
 Date:   Thu Feb 12 02:15:44 2009 -0800
 
@@ -350,7 +434,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit 15c128115096c24076739d0601532b6890482596
+commit 0a5bd3c5c690560a24886d25c5031291c0efbc35
 Author: David Miller <davem at davemloft.net>
 Date:   Thu Feb 12 02:15:39 2009 -0800
 
@@ -362,7 +446,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit dad8df8c4dfbbf5dfaaed08f61b589ada484a755
+commit 557d71764de798c60cc504f678aaf66a01374860
 Author: David Miller <davem at davemloft.net>
 Date:   Thu Feb 12 02:15:37 2009 -0800
 
@@ -385,7 +469,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit 1b80a560c76a15813969bc79f8bef4f2324407f1
+commit 2a2aba5d992576a6d73666be1e5ef0248b7a5c1b
 Author: David Miller <davem at davemloft.net>
 Date:   Thu Feb 12 02:15:34 2009 -0800
 
@@ -402,7 +486,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit a1971853c7d82fc14eff895757b5e093c1d6c0b5
+commit f087a3713864f4d3bba746cb70aaebbf9ee1e13f
 Author: David Miller <davem at davemloft.net>
 Date:   Thu Feb 12 02:15:27 2009 -0800
 
@@ -423,7 +507,7 @@
     Signed-off-by: David S. Miller <davem at davemloft.net>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit cfc0cec3a58d760f0adaef295e9bef5b2b994a69
+commit 928278d2dfc9e3d1af52dd037c13693add544501
 Author: Kristian Høgsberg <krh at redhat.com>
 Date:   Mon Jan 5 16:10:05 2009 -0500
 
@@ -442,7 +526,7 @@
     Signed-off-by: Kristian Høgsberg <krh at redhat.com>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit f258389e5a3dde1962f246ea8d893d41059a61d7
+commit 2c3a4c2e0f4127adbf9cecb473f2ac4576d289aa
 Author: Kristian Høgsberg <krh at bitplanet.net>
 Date:   Sun Jan 4 16:55:33 2009 -0500
 
@@ -456,7 +540,7 @@
     Signed-off-by: Kristian Høgsberg <krh at redhat.com>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit 0de5ea62f39de56d2d5513b35d6b9d8df9a66e45
+commit 731b22a5b708f10e45847007a8d786568cb8becc
 Author: Benjamin Herrenschmidt <benh at kernel.crashing.org>
 Date:   Mon Feb 2 16:55:47 2009 +1100
 
@@ -483,7 +567,7 @@
     Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit b5fb48f9b87f1955f00a3651c5104d62381ab50d
+commit 3365ed3f4b72d9eaecc7a67ff0f3078c9053806d
 Author: Benjamin Herrenschmidt <benh at kernel.crashing.org>
 Date:   Mon Feb 2 16:55:46 2009 +1100
 
@@ -514,7 +598,7 @@
     Acked-by: Eric Anholt <eric at anholt.net>
     Signed-off-by: Dave Airlie <airlied at linux.ie>
 
-commit 1262fdc859fc25e03ce7631daa0d2b50399b3a64
+commit 2d072cd331fb6434406977ac3bbe7a58589f5cca
 Author: Benjamin Herrenschmidt <benh at kernel.crashing.org>
 Date:   Mon Feb 2 16:55:45 2009 +1100
 
@@ -645,7 +729,7 @@
  		}
  	}
 diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
-index 72c667f..445c762 100644
+index 12715d3..6d80d17 100644
 --- a/drivers/gpu/drm/drm_bufs.c
 +++ b/drivers/gpu/drm/drm_bufs.c
 @@ -34,15 +34,17 @@
@@ -1330,7 +1414,7 @@
  	unsigned long prot;
 diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
 new file mode 100644
-index 0000000..fc98952
+index 0000000..60a1b6c
 --- /dev/null
 +++ b/drivers/gpu/drm/drm_info.c
 @@ -0,0 +1,328 @@
@@ -1408,7 +1492,7 @@
 +{
 +	struct drm_info_node *node = (struct drm_info_node *) m->private;
 +	struct drm_device *dev = node->minor->dev;
-+	struct drm_map *map;
++	struct drm_local_map *map;
 +	struct drm_map_list *r_list;
 +
 +	/* Hardcoded from _DRM_FRAME_BUFFER,
@@ -1430,9 +1514,9 @@
 +		else
 +			type = types[map->type];
 +
-+		seq_printf(m, "%4d 0x%08lx 0x%08lx %4.4s  0x%02x 0x%08lx ",
++		seq_printf(m, "%4d 0x%016llx 0x%08lx %4.4s  0x%02x 0x%08lx ",
 +			   i,
-+			   map->offset,
++			   (unsigned long long)map->offset,
 +			   map->size, type, map->flags,
 +			   (unsigned long) r_list->user_token);
 +		if (map->mtrr < 0)
@@ -2535,7 +2619,7 @@
 -}
 -#endif
 diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
-index 46bb923..7c41600 100644
+index 7c8b15b..d009661 100644
 --- a/drivers/gpu/drm/drm_stub.c
 +++ b/drivers/gpu/drm/drm_stub.c
 @@ -50,6 +50,7 @@ struct idr drm_minors_idr;
@@ -2546,7 +2630,7 @@
  
  static int drm_minor_get_id(struct drm_device *dev, int type)
  {
-@@ -321,7 +322,15 @@ static int drm_get_minor(struct drm_device *dev, struct drm_minor **minor, int t
+@@ -313,7 +314,15 @@ static int drm_get_minor(struct drm_device *dev, struct drm_minor **minor, int t
  			goto err_mem;
  		}
  	} else
@@ -2563,7 +2647,7 @@
  
  	ret = drm_sysfs_device_add(new_minor);
  	if (ret) {
-@@ -380,6 +389,7 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
+@@ -372,6 +381,7 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
  	}
  
  	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
@@ -2571,7 +2655,7 @@
  		ret = drm_get_minor(dev, &dev->control, DRM_MINOR_CONTROL);
  		if (ret)
  			goto err_g2;
-@@ -403,9 +413,9 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
+@@ -395,9 +405,9 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
  
  	list_add_tail(&dev->driver_item, &driver->device_list);
  
@@ -2583,7 +2667,7 @@
  
  	return 0;
  
-@@ -417,29 +427,7 @@ err_g1:
+@@ -409,29 +419,7 @@ err_g1:
  	drm_free(dev, sizeof(*dev), DRM_MEM_STUB);
  	return ret;
  }
@@ -2614,7 +2698,7 @@
  
  /**
   * Put a secondary minor number.
-@@ -459,6 +447,10 @@ int drm_put_minor(struct drm_minor **minor_p)
+@@ -451,6 +439,10 @@ int drm_put_minor(struct drm_minor **minor_p)
  
  	if (minor->type == DRM_MINOR_LEGACY)
  		drm_proc_cleanup(minor, drm_proc_root);
@@ -2625,7 +2709,7 @@
  	drm_sysfs_device_remove(minor);
  
  	idr_remove(&drm_minors_idr, minor->index);
-@@ -467,3 +459,67 @@ int drm_put_minor(struct drm_minor **minor_p)
+@@ -459,3 +451,67 @@ int drm_put_minor(struct drm_minor **minor_p)
  	*minor_p = NULL;
  	return 0;
  }
@@ -2927,7 +3011,7 @@
  	  intel_display.o \
  	  intel_crt.o \
 diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
-index cc46495..27ef79a 100644
+index 6dab63b..7fecc6d 100644
 --- a/drivers/gpu/drm/i915/i915_dma.c
 +++ b/drivers/gpu/drm/i915/i915_dma.c
 @@ -1057,7 +1057,7 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
@@ -3837,10 +3921,10 @@
  	cmdbuf->bufsz -= sizeof(u64);
 diff --git a/drivers/gpu/drm/radeon/r600_cp.c b/drivers/gpu/drm/radeon/r600_cp.c
 new file mode 100644
-index 0000000..37249b2
+index 0000000..04fde35
 --- /dev/null
 +++ b/drivers/gpu/drm/radeon/r600_cp.c
-@@ -0,0 +1,2244 @@
+@@ -0,0 +1,2256 @@
 +/*
 + * Copyright 2008-2009 Advanced Micro Devices, Inc.
 + * Copyright 2008 Red Hat Inc.
@@ -3964,6 +4048,9 @@
 +	int pages;
 +	int i;
 +
++	if (!entry)
++		return;
++
 +	if (gart_info->bus_addr) {
 +		max_pages = (gart_info->table_size / sizeof(u32));
 +		pages = (entry->pages <= max_pages)
@@ -3972,8 +4059,8 @@
 +		for (i = 0; i < pages; i++) {
 +			if (!entry->busaddr[i])
 +				break;
-+			pci_unmap_single(dev->pdev, entry->busaddr[i],
-+					 PAGE_SIZE, PCI_DMA_TODEVICE);
++			pci_unmap_page(dev->pdev, entry->busaddr[i],
++				       PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
 +		}
 +		if (gart_info->gart_table_location == DRM_ATI_GART_MAIN)
 +			gart_info->bus_addr = 0;
@@ -4005,10 +4092,10 @@
 +
 +	gart_idx = 0;
 +	for (i = 0; i < pages; i++) {
-+		entry->busaddr[i] = pci_map_single(dev->pdev,
-+						   page_address(entry->
-+								pagelist[i]),
-+						   PAGE_SIZE, PCI_DMA_TODEVICE);
++		entry->busaddr[i] = pci_map_page(dev->pdev,
++						 entry->pagelist[i], 0,
++						 PAGE_SIZE,
++						 PCI_DMA_BIDIRECTIONAL);
 +		if (entry->busaddr[i] == 0) {
 +			DRM_ERROR("unable to map PCIGART pages!\n");
 +			r600_page_table_cleanup(dev, gart_info);
@@ -5470,6 +5557,7 @@
 +{
 +	struct drm_radeon_master_private *master_priv;
 +	u32 ring_start;
++	u64 rptr_addr;
 +
 +	if (((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RV770))
 +		r700_gfx_init(dev, dev_priv);
@@ -5524,21 +5612,20 @@
 +
 +#if __OS_HAS_AGP
 +	if (dev_priv->flags & RADEON_IS_AGP) {
-+		/* XXX */
-+		RADEON_WRITE(R600_CP_RB_RPTR_ADDR,
-+			     (dev_priv->ring_rptr->offset
-+			     - dev->agp->base + dev_priv->gart_vm_start) >> 8);
-+		RADEON_WRITE(R600_CP_RB_RPTR_ADDR_HI, 0);
++		rptr_addr = dev_priv->ring_rptr->offset
++			- dev->agp->base +
++			dev_priv->gart_vm_start;
 +	} else
 +#endif
 +	{
-+		RADEON_WRITE(R600_CP_RB_RPTR_ADDR,
-+			     dev_priv->ring_rptr->offset
-+			     - ((unsigned long) dev->sg->virtual)
-+			     + dev_priv->gart_vm_start);
-+
-+		RADEON_WRITE(R600_CP_RB_RPTR_ADDR_HI, 0);
-+	}
++		rptr_addr = dev_priv->ring_rptr->offset
++			- ((unsigned long) dev->sg->virtual)
++			+ dev_priv->gart_vm_start;
++	}
++	RADEON_WRITE(R600_CP_RB_RPTR_ADDR,
++		     rptr_addr & 0xffffffff);
++	RADEON_WRITE(R600_CP_RB_RPTR_ADDR_HI,
++		     upper_32_bits(rptr_addr));
 +
 +#ifdef __BIG_ENDIAN
 +	RADEON_WRITE(R600_CP_RB_CNTL,
@@ -5587,8 +5674,17 @@
 +	 * We simply put this behind the ring read pointer, this works
 +	 * with PCI GART as well as (whatever kind of) AGP GART
 +	 */
-+	RADEON_WRITE(R600_SCRATCH_ADDR, ((RADEON_READ(R600_CP_RB_RPTR_ADDR) << 8)
-+					 + R600_SCRATCH_REG_OFFSET) >> 8);
++	{
++		u64 scratch_addr;
++
++		scratch_addr = RADEON_READ(R600_CP_RB_RPTR_ADDR);
++		scratch_addr |= ((u64)RADEON_READ(R600_CP_RB_RPTR_ADDR_HI)) << 32;
++		scratch_addr += R600_SCRATCH_REG_OFFSET;
++		scratch_addr >>= 8;
++		scratch_addr &= 0xffffffff;
++
++		RADEON_WRITE(R600_SCRATCH_ADDR, (uint32_t)scratch_addr);
++	}
 +
 +	RADEON_WRITE(R600_SCRATCH_UMSK, 0x7);
 +
@@ -5651,7 +5747,7 @@
 +
 +		if (dev_priv->gart_info.gart_table_location == DRM_ATI_GART_FB) {
 +			drm_core_ioremapfree(&dev_priv->gart_info.mapping, dev);
-+			dev_priv->gart_info.addr = 0;
++			dev_priv->gart_info.addr = NULL;
 +		}
 +	}
 +	/* only clear to the start of flags */
@@ -29389,7 +29485,7 @@
 +
 +#endif
 diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
-index 92965db..15cfe56 100644
+index 92965db..6f579a8 100644
 --- a/drivers/gpu/drm/radeon/radeon_cp.c
 +++ b/drivers/gpu/drm/radeon/radeon_cp.c
 @@ -43,6 +43,78 @@
@@ -29922,7 +30018,7 @@
  		/* Turn on PCI GART */
  		radeon_set_pcigart(dev_priv, 1);
  	}
-@@ -1268,8 +1530,12 @@ static int radeon_do_cleanup_cp(struct drm_device * dev)
+@@ -1268,14 +1530,18 @@ static int radeon_do_cleanup_cp(struct drm_device * dev)
  		if (dev_priv->gart_info.bus_addr) {
  			/* Turn off PCI GART */
  			radeon_set_pcigart(dev_priv, 0);
@@ -29937,6 +30033,13 @@
  		}
  
  		if (dev_priv->gart_info.gart_table_location == DRM_ATI_GART_FB)
+ 		{
+ 			drm_core_ioremapfree(&dev_priv->gart_info.mapping, dev);
+-			dev_priv->gart_info.addr = 0;
++			dev_priv->gart_info.addr = NULL;
+ 		}
+ 	}
+ 	/* only clear to the start of flags */
 @@ -1326,6 +1592,7 @@ static int radeon_do_resume_cp(struct drm_device *dev, struct drm_file *file_pri
  
  int radeon_cp_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
@@ -30009,7 +30112,7 @@
  			/* Stop the cp */
 -			while ((ret = radeon_do_cp_idle(dev_priv)) != 0) {
 -				DRM_DEBUG("radeon_do_cp_idle %d\n", ret);
-+			if ((dev_priv->flags & RADEON_FAMILY_MASK) < CHIP_R600) {
++			if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600) {
 +				while ((ret = r600_do_cp_idle(dev_priv)) != 0) {
 +					DRM_DEBUG("radeon_do_cp_idle %d\n", ret);
 +#ifdef __linux__
@@ -30195,10 +30298,10 @@
 +	}
 +}
 diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
-index fef2078..1e3b255 100644
+index fef2078..2cb4f32 100644
 --- a/drivers/gpu/drm/radeon/radeon_drv.c
 +++ b/drivers/gpu/drm/radeon/radeon_drv.c
-@@ -41,17 +41,6 @@ int radeon_no_wb;
+@@ -41,23 +41,12 @@ int radeon_no_wb;
  MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
  module_param_named(no_wb, radeon_no_wb, int, 0444);
  
@@ -30216,6 +30319,22 @@
  static int radeon_suspend(struct drm_device *dev, pm_message_t state)
  {
  	drm_radeon_private_t *dev_priv = dev->dev_private;
+ 
+ 	/* Disable *all* interrupts */
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690)
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600)
+ 		RADEON_WRITE(R500_DxMODE_INT_MASK, 0);
+ 	RADEON_WRITE(RADEON_GEN_INT_CNTL, 0);
+ 	return 0;
+@@ -68,7 +57,7 @@ static int radeon_resume(struct drm_device *dev)
+ 	drm_radeon_private_t *dev_priv = dev->dev_private;
+ 
+ 	/* Restore interrupt registers */
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690)
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600)
+ 		RADEON_WRITE(R500_DxMODE_INT_MASK, dev_priv->r500_disp_irq_reg);
+ 	RADEON_WRITE(RADEON_GEN_INT_CNTL, dev_priv->irq_enable_reg);
+ 	return 0;
 @@ -95,7 +84,6 @@ static struct drm_driver driver = {
  	.get_vblank_counter = radeon_get_vblank_counter,
  	.enable_vblank = radeon_enable_vblank,
@@ -31044,8 +31163,75 @@
  
  #define OUT_RING( x ) do {						\
  	if ( RADEON_VERBOSE ) {						\
+diff --git a/drivers/gpu/drm/radeon/radeon_irq.c b/drivers/gpu/drm/radeon/radeon_irq.c
+index 8289e16..9836c70 100644
+--- a/drivers/gpu/drm/radeon/radeon_irq.c
++++ b/drivers/gpu/drm/radeon/radeon_irq.c
+@@ -65,7 +65,7 @@ int radeon_enable_vblank(struct drm_device *dev, int crtc)
+ {
+ 	drm_radeon_private_t *dev_priv = dev->dev_private;
+ 
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690) {
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600) {
+ 		switch (crtc) {
+ 		case 0:
+ 			r500_vbl_irq_set_state(dev, R500_D1MODE_INT_MASK, 1);
+@@ -100,7 +100,7 @@ void radeon_disable_vblank(struct drm_device *dev, int crtc)
+ {
+ 	drm_radeon_private_t *dev_priv = dev->dev_private;
+ 
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690) {
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600) {
+ 		switch (crtc) {
+ 		case 0:
+ 			r500_vbl_irq_set_state(dev, R500_D1MODE_INT_MASK, 0);
+@@ -135,7 +135,7 @@ static inline u32 radeon_acknowledge_irqs(drm_radeon_private_t *dev_priv, u32 *r
+ 	u32 irq_mask = RADEON_SW_INT_TEST;
+ 
+ 	*r500_disp_int = 0;
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690) {
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600) {
+ 		/* vbl interrupts in a different place */
+ 
+ 		if (irqs & R500_DISPLAY_INT_STATUS) {
+@@ -202,7 +202,7 @@ irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS)
+ 		DRM_WAKEUP(&dev_priv->swi_queue);
+ 
+ 	/* VBLANK interrupt */
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690) {
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600) {
+ 		if (r500_disp_int & R500_D1_VBLANK_INTERRUPT)
+ 			drm_handle_vblank(dev, 0);
+ 		if (r500_disp_int & R500_D2_VBLANK_INTERRUPT)
+@@ -265,7 +265,7 @@ u32 radeon_get_vblank_counter(struct drm_device *dev, int crtc)
+ 		return -EINVAL;
+ 	}
+ 
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690) {
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600) {
+ 		if (crtc == 0)
+ 			return RADEON_READ(R500_D1CRTC_FRAME_COUNT);
+ 		else
+@@ -327,7 +327,7 @@ void radeon_driver_irq_preinstall(struct drm_device * dev)
+ 	u32 dummy;
+ 
+ 	/* Disable *all* interrupts */
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690)
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600)
+ 		RADEON_WRITE(R500_DxMODE_INT_MASK, 0);
+ 	RADEON_WRITE(RADEON_GEN_INT_CNTL, 0);
+ 
+@@ -357,7 +357,7 @@ void radeon_driver_irq_uninstall(struct drm_device * dev)
+ 	if (!dev_priv)
+ 		return;
+ 
+-	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690)
++	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600)
+ 		RADEON_WRITE(R500_DxMODE_INT_MASK, 0);
+ 	/* Disable *all* interrupts */
+ 	RADEON_WRITE(RADEON_GEN_INT_CNTL, 0);
 diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c
-index ef940a0..ca00cef 100644
+index ef940a0..fa728ec 100644
 --- a/drivers/gpu/drm/radeon/radeon_state.c
 +++ b/drivers/gpu/drm/radeon/radeon_state.c
 @@ -1556,9 +1556,15 @@ static void radeon_cp_discard_buffer(struct drm_device *dev, struct drm_master *
@@ -31067,6 +31253,15 @@
  
  	buf->pending = 1;
  	buf->used = 0;
+@@ -1980,7 +1986,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
+ 
+ 	/* find a virtual surface */
+ 	for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++)
+-		if (dev_priv->virt_surfaces[i].file_priv == 0)
++		if (dev_priv->virt_surfaces[i].file_priv == NULL)
+ 			break;
+ 	if (i == 2 * RADEON_MAX_SURFACES) {
+ 		return -1;
 @@ -2473,24 +2479,25 @@ static int radeon_cp_indirect(struct drm_device *dev, void *data, struct drm_fil
  
  	buf->used = indirect->end;

drm-nouveau.patch:

Index: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-nouveau.patch,v
retrieving revision 1.8.6.2
retrieving revision 1.8.6.3
diff -u -r1.8.6.2 -r1.8.6.3
--- drm-nouveau.patch	5 Mar 2009 22:45:08 -0000	1.8.6.2
+++ drm-nouveau.patch	12 Mar 2009 20:38:56 -0000	1.8.6.3
@@ -22,7 +22,7 @@
 +	userspaces with this enabled will cause pain.
 +
 diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
-index 03ceb3e..3df55d7 100644
+index d6788df..97aa0c8 100644
 --- a/drivers/gpu/drm/Makefile
 +++ b/drivers/gpu/drm/Makefile
 @@ -27,4 +27,5 @@ obj-$(CONFIG_DRM_I915)  += i915/
@@ -32,7 +32,7 @@
 +obj-$(CONFIG_DRM_NOUVEAU) +=nouveau/
  
 diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
-index 325b4aa..05e928f 100644
+index 4d2161f..ac503e2 100644
 --- a/drivers/gpu/drm/drm_bufs.c
 +++ b/drivers/gpu/drm/drm_bufs.c
 @@ -51,38 +51,24 @@ resource_size_t drm_get_resource_len(struct drm_device *dev, unsigned int resour
@@ -103,10 +103,10 @@
  	if (mask & ~fence->type) {
  		DRM_ERROR("Wait trying to extend fence type"
 diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
-index 7e277c7..e5efd4a 100644
+index 5d45cbf..e3b0a76 100644
 --- a/drivers/gpu/drm/drm_stub.c
 +++ b/drivers/gpu/drm/drm_stub.c
-@@ -414,14 +414,14 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
+@@ -406,14 +406,14 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
  	if (dev->driver->load) {
  		ret = dev->driver->load(dev, ent->driver_data);
  		if (ret)
@@ -123,7 +123,7 @@
  	}
  
  	list_add_tail(&dev->driver_item, &driver->device_list);
-@@ -432,8 +432,11 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
+@@ -424,8 +424,11 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
  
  	return 0;
  
@@ -136,7 +136,7 @@
  err_g2:
  	pci_disable_device(pdev);
  err_g1:
-@@ -515,11 +518,11 @@ void drm_put_dev(struct drm_device *dev)
+@@ -507,11 +510,11 @@ void drm_put_dev(struct drm_device *dev)
  		dev->agp = NULL;
  	}
  
@@ -1840,10 +1840,10 @@
 +#endif /* __NOUVEAU_CONNECTOR_H__ */
 diff --git a/drivers/gpu/drm/nouveau/nouveau_crtc.h b/drivers/gpu/drm/nouveau/nouveau_crtc.h
 new file mode 100644
-index 0000000..0ba9475
+index 0000000..53b9584
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_crtc.h
-@@ -0,0 +1,59 @@
+@@ -0,0 +1,64 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -1883,7 +1883,12 @@
 +	struct drm_display_mode *mode;
 +	bool use_dithering;
 +
++	struct {
++		uint32_t offset;
++	} fb;
++
 +	struct nv50_cursor *cursor;
++
 +	struct {
 +		struct mem_block *mem;
 +		uint16_t r[256];
@@ -1892,7 +1897,7 @@
 +		int depth;
 +	} lut;
 +
-+	int (*set_dither) (struct nouveau_crtc *crtc);
++	int (*set_dither) (struct nouveau_crtc *crtc, bool update);
 +	int (*set_scale) (struct nouveau_crtc *crtc, int mode, bool update);
 +	int (*set_clock) (struct nouveau_crtc *crtc, struct drm_display_mode *);
 +	int (*set_clock_mode) (struct nouveau_crtc *crtc);
@@ -2524,10 +2529,10 @@
 +MODULE_LICENSE("GPL and additional rights");
 diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
 new file mode 100644
-index 0000000..adb7fdb
+index 0000000..06e3f9e
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
-@@ -0,0 +1,737 @@
+@@ -0,0 +1,741 @@
 +/*
 + * Copyright 2005 Stephane Marchesin.
 + * All Rights Reserved.
@@ -2773,6 +2778,8 @@
 +	int  (*init)(struct drm_device *);
 +	void (*takedown)(struct drm_device *);
 +
++	void (*fifo_access)(struct drm_device *, bool);
++
 +	int  (*create_context)(struct nouveau_channel *);
 +	void (*destroy_context)(struct nouveau_channel *);
 +	int  (*load_context)(struct nouveau_channel *);
@@ -3120,6 +3127,7 @@
 +extern void nouveau_nv04_context_switch(struct drm_device *);
 +extern int  nv04_graph_init(struct drm_device *);
 +extern void nv04_graph_takedown(struct drm_device *);
++extern void nv04_graph_fifo_access(struct drm_device *, bool);
 +extern int  nv04_graph_create_context(struct nouveau_channel *);
 +extern void nv04_graph_destroy_context(struct nouveau_channel *);
 +extern int  nv04_graph_load_context(struct nouveau_channel *);
@@ -3154,6 +3162,7 @@
 +/* nv50_graph.c */
 +extern int  nv50_graph_init(struct drm_device *);
 +extern void nv50_graph_takedown(struct drm_device *);
++extern void nv50_graph_fifo_access(struct drm_device *, bool);
 +extern int  nv50_graph_create_context(struct nouveau_channel *);
 +extern void nv50_graph_destroy_context(struct nouveau_channel *);
 +extern int  nv50_graph_load_context(struct nouveau_channel *);
@@ -4505,10 +4514,10 @@
 +};
 diff --git a/drivers/gpu/drm/nouveau/nouveau_fifo.c b/drivers/gpu/drm/nouveau/nouveau_fifo.c
 new file mode 100644
-index 0000000..b31a000
+index 0000000..469fdf3
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_fifo.c
-@@ -0,0 +1,673 @@
+@@ -0,0 +1,676 @@
 +/*
 + * Copyright 2005-2006 Stephane Marchesin
 + * All Rights Reserved.
@@ -4855,6 +4864,7 @@
 +		return ret;
 +	}
 +
++	engine->graph.fifo_access(dev, false);
 +	nouveau_wait_for_idle(dev);
 +
 +	/* disable the fifo caches */
@@ -4910,6 +4920,8 @@
 +	/* reenable the fifo caches */
 +	nv_wr32(NV03_PFIFO_CACHES, 1);
 +
++	engine->graph.fifo_access(dev, true);
++
 +	if (dev_priv->mm_enabled) {
 +		ret = nouveau_dma_channel_setup(chan);
 +		if (ret) {
@@ -5184,10 +5196,10 @@
 +int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls);
 diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
 new file mode 100644
-index 0000000..7abee4c
+index 0000000..94a2dab
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
-@@ -0,0 +1,714 @@
+@@ -0,0 +1,716 @@
 +/*
 + * Copyright (C) 2008 Ben Skeggs.
 + * All Rights Reserved.
@@ -5265,6 +5277,8 @@
 +	flags  = DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE;
 +	flags |= DRM_BO_FLAG_MAPPABLE;
 +	flags |= DRM_BO_FLAG_MEM_LOCAL;
++	if (dev_priv->gart_info.type != NOUVEAU_GART_AGP)
++		flags |= DRM_BO_FLAG_CACHED;
 +
 +	size = (size + (PAGE_SIZE-1)) & ~(PAGE_SIZE-1);
 +	if (dev_priv->card_type == NV_50) {
@@ -6596,10 +6610,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c
 new file mode 100644
-index 0000000..a15a106
+index 0000000..8a32e82
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_mem.c
-@@ -0,0 +1,1073 @@
+@@ -0,0 +1,1071 @@
 +/*
 + * Copyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
 + * Copyright 2005 Stephane Marchesin
@@ -6886,18 +6900,18 @@
 +{
 +	struct drm_nouveau_private *dev_priv = dev->dev_private;
 +	struct nouveau_gpuobj **pgt;
-+	unsigned psz, pfl;
++	unsigned psz, pfl, pages;
 +
 +	if (virt >= dev_priv->vm_gart_base &&
 +	    (virt + size) < (dev_priv->vm_gart_base + dev_priv->vm_gart_size)) {
-+		psz = 4096;
++		psz = 12;
 +		pgt = &dev_priv->gart_info.sg_ctxdma;
 +		pfl = 0x21;
 +		virt -= dev_priv->vm_gart_base;
 +	} else
 +	if (virt >= dev_priv->vm_vram_base &&
 +	    (virt + size) < (dev_priv->vm_vram_base + dev_priv->vm_vram_size)) {
-+		psz = 65536;
++		psz = 16;
 +		pgt = dev_priv->vm_vram_pt;
 +		pfl = 0x01;
 +		virt -= dev_priv->vm_vram_base;
@@ -6907,31 +6921,29 @@
 +		return -EINVAL;
 +	}
 +
-+	size &= ~(psz - 1);
++	pages = size >> psz;
 +
 +	dev_priv->engine.instmem.prepare_access(dev, true);
 +	if (flags & 0x80000000) {
-+		while (size) {
-+			struct nouveau_gpuobj *pt = pgt[virt / (512*1024*1024)];
-+			int pte = ((u32)(virt % (512*1024*1024)) / psz) * 2;
++		while (pages--) {
++			struct nouveau_gpuobj *pt = pgt[virt >> 29];
++			unsigned pte = ((virt & 0x1fffffffULL) >> psz) << 1;
 +
 +			INSTANCE_WR(pt, pte++, 0x00000000);
 +			INSTANCE_WR(pt, pte++, 0x00000000);
 +
-+			size -= psz;
-+			virt += psz;
++			virt += (1 << psz);
 +		}
 +	} else {
-+		while (size) {
-+			struct nouveau_gpuobj *pt = pgt[virt / (512*1024*1024)];
-+			int pte = ((u32)(virt % (512*1024*1024)) / psz) * 2;
++		while (pages--) {
++			struct nouveau_gpuobj *pt = pgt[virt >> 29];
++			unsigned pte = ((virt & 0x1fffffffULL) >> psz) << 1;
 +
 +			INSTANCE_WR(pt, pte++, phys | pfl);
 +			INSTANCE_WR(pt, pte++, flags);
 +
-+			size -= psz;
-+			phys += psz;
-+			virt += psz;
++			phys += (1 << psz);
++			virt += (1 << psz);
 +		}
 +	}
 +	dev_priv->engine.instmem.finish_access(dev);
@@ -7857,10 +7869,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nouveau_object.c b/drivers/gpu/drm/nouveau/nouveau_object.c
 new file mode 100644
-index 0000000..48ff77e
+index 0000000..068797b
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_object.c
-@@ -0,0 +1,1229 @@
+@@ -0,0 +1,1237 @@
 +/*
 + * Copyright (C) 2006 Ben Skeggs.
 + *
@@ -8212,6 +8224,7 @@
 +	struct drm_nouveau_private *dev_priv = dev->dev_private;
 +	struct nouveau_engine *engine = &dev_priv->engine;
 +	struct nouveau_gpuobj *gpuobj;
++	int i;
 +
 +	DRM_DEBUG("gpuobj %p\n", pgpuobj ? *pgpuobj : NULL);
 +
@@ -8224,6 +8237,13 @@
 +		return -EINVAL;
 +	}
 +
++	if (gpuobj->flags & NVOBJ_FLAG_ZERO_FREE) {
++		engine->instmem.prepare_access(dev, true);
++		for (i = 0; i < gpuobj->im_pramin->size; i += 4)
++			INSTANCE_WR(gpuobj, i/4, 0);
++		engine->instmem.finish_access(dev);
++	}
++
 +	if (gpuobj->dtor)
 +		gpuobj->dtor(dev, gpuobj);
 +
@@ -9092,7 +9112,7 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nouveau_reg.h b/drivers/gpu/drm/nouveau/nouveau_reg.h
 new file mode 100644
-index 0000000..510b528
+index 0000000..44337e6
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_reg.h
 @@ -0,0 +1,835 @@
@@ -9902,7 +9922,7 @@
 +#            define NV50_PDISPLAY_DAC_REGS_CLK_CTRL1_CONNECTED__SHIFT 9
 +
 +#    define NV50_PDISPLAY_SOR_REGS                          0x0061c000
-+#    define NV50_PDISPLAY_SOR_REGS__LEN                            0x2
++#    define NV50_PDISPLAY_SOR_REGS__LEN                            0x3
 +#    define NV50_PDISPLAY_SOR_REGS__ESIZE                        0x800
 +#        define NV50_PDISPLAY_SOR_REGS_DPMS_CTRL(i) (0x0061c004+(i)*0x800)
 +#            define NV50_PDISPLAY_SOR_REGS_DPMS_CTRL_ON         (1<<0)
@@ -10301,10 +10321,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
 new file mode 100644
-index 0000000..6b7fed1
+index 0000000..756141a
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_state.c
-@@ -0,0 +1,942 @@
+@@ -0,0 +1,943 @@
 +/*
 + * Copyright 2005 Stephane Marchesin
 + * Copyright 2008 Stuart Bennett
@@ -10367,6 +10387,7 @@
 +		engine->fb.takedown	= nv04_fb_takedown;
 +		engine->graph.init	= nv04_graph_init;
 +		engine->graph.takedown	= nv04_graph_takedown;
++		engine->graph.fifo_access	= nv04_graph_fifo_access;
 +		engine->graph.create_context	= nv04_graph_create_context;
 +		engine->graph.destroy_context	= nv04_graph_destroy_context;
 +		engine->graph.load_context	= nv04_graph_load_context;
@@ -10400,6 +10421,7 @@
 +		engine->graph.takedown	= nv10_graph_takedown;
 +		engine->graph.create_context	= nv10_graph_create_context;
 +		engine->graph.destroy_context	= nv10_graph_destroy_context;
++		engine->graph.fifo_access	= nv04_graph_fifo_access;
 +		engine->graph.load_context	= nv10_graph_load_context;
 +		engine->graph.save_context	= nv10_graph_save_context;
 +		engine->fifo.channels	= 32;
@@ -10431,6 +10453,7 @@
 +		engine->graph.takedown	= nv20_graph_takedown;
 +		engine->graph.create_context	= nv20_graph_create_context;
 +		engine->graph.destroy_context	= nv20_graph_destroy_context;
++		engine->graph.fifo_access	= nv04_graph_fifo_access;
 +		engine->graph.load_context	= nv20_graph_load_context;
 +		engine->graph.save_context	= nv20_graph_save_context;
 +		engine->fifo.channels	= 32;
@@ -10460,6 +10483,7 @@
 +		engine->fb.takedown	= nv10_fb_takedown;
 +		engine->graph.init	= nv30_graph_init;
 +		engine->graph.takedown	= nv20_graph_takedown;
++		engine->graph.fifo_access	= nv04_graph_fifo_access;
 +		engine->graph.create_context	= nv20_graph_create_context;
 +		engine->graph.destroy_context	= nv20_graph_destroy_context;
 +		engine->graph.load_context	= nv20_graph_load_context;
@@ -10492,6 +10516,7 @@
 +		engine->fb.takedown	= nv40_fb_takedown;
 +		engine->graph.init	= nv40_graph_init;
 +		engine->graph.takedown	= nv40_graph_takedown;
++		engine->graph.fifo_access	= nv04_graph_fifo_access;
 +		engine->graph.create_context	= nv40_graph_create_context;
 +		engine->graph.destroy_context	= nv40_graph_destroy_context;
 +		engine->graph.load_context	= nv40_graph_load_context;
@@ -10526,6 +10551,7 @@
 +		engine->fb.takedown	= nouveau_stub_takedown;
 +		engine->graph.init	= nv50_graph_init;
 +		engine->graph.takedown	= nv50_graph_takedown;
++		engine->graph.fifo_access	= nv50_graph_fifo_access;
 +		engine->graph.create_context	= nv50_graph_create_context;
 +		engine->graph.destroy_context	= nv50_graph_destroy_context;
 +		engine->graph.load_context	= nv50_graph_load_context;
@@ -10862,18 +10888,13 @@
 +	dn = pci_device_to_OF_node(dev->pdev);
 +	if (dn)
 +	{
-+		int size;
++		int size, i;
 +		const uint32_t *bios = of_get_property(dn, "NVDA,BMP", &size);
-+		if (bios)
-+		{
-+			int i;
-+			dev_priv->engine.instmem.prepare_access(dev, true);
++		if (bios) {
 +			for(i=0;i<size;i+=4)
-+				nv_wi32(i, bios[i/4]);
-+			dev_priv->engine.instmem.finish_access(dev);
++				nv_out32(dev_priv->ramin, i, bios[i/4]);
 +			DRM_INFO("OF bios successfully copied (%d bytes)\n",size);
-+		}
-+		else
++		} else
 +			DRM_INFO("Unable to get the OF bios\n");
 +	}
 +	else
@@ -11667,10 +11688,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv04_graph.c b/drivers/gpu/drm/nouveau/nv04_graph.c
 new file mode 100644
-index 0000000..62ef1cf
+index 0000000..5f923ef
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv04_graph.c
-@@ -0,0 +1,516 @@
+@@ -0,0 +1,527 @@
 +/*
 + * Copyright 2007 Stephane Marchesin
 + * All Rights Reserved.
@@ -12175,7 +12196,6 @@
 +
 +	nv_wr32(NV04_PGRAPH_STATE        , 0xFFFFFFFF);
 +	nv_wr32(NV04_PGRAPH_CTX_CONTROL  , 0x10010100);
-+	nv_wr32(NV04_PGRAPH_FIFO         , 0x00000001);
 +
 +	/* These don't belong here, they're part of a per-channel context */
 +	nv_wr32(NV04_PGRAPH_PATTERN_SHAPE, 0x00000000);
@@ -12187,6 +12207,18 @@
 +void nv04_graph_takedown(struct drm_device *dev)
 +{
 +}
++
++void
++nv04_graph_fifo_access(struct drm_device *dev, bool enabled)
++{
++	struct drm_nouveau_private *dev_priv = dev->dev_private;
++
++	if (enabled)
++		nv_wr32(NV04_PGRAPH_FIFO, nv_rd32(NV04_PGRAPH_FIFO) | 1);
++	else
++		nv_wr32(NV04_PGRAPH_FIFO, nv_rd32(NV04_PGRAPH_FIFO) & ~1);
++}
++
 diff --git a/drivers/gpu/drm/nouveau/nv04_instmem.c b/drivers/gpu/drm/nouveau/nv04_instmem.c
 new file mode 100644
 index 0000000..a83d271
@@ -12686,10 +12718,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv10_graph.c b/drivers/gpu/drm/nouveau/nv10_graph.c
 new file mode 100644
-index 0000000..791e08b
+index 0000000..6a8c270
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv10_graph.c
-@@ -0,0 +1,914 @@
+@@ -0,0 +1,913 @@
 +/*
 + * Copyright 2007 Matthieu CASTET <castet.matthieu at free.fr>
 + * All Rights Reserved.
@@ -13596,7 +13628,6 @@
 +	nv_wr32(NV10_PGRAPH_CTX_SWITCH4, 0x00000000);
 +	nv_wr32(NV10_PGRAPH_CTX_CONTROL, 0x10010100);
 +	nv_wr32(NV10_PGRAPH_STATE      , 0xFFFFFFFF);
-+	nv_wr32(NV04_PGRAPH_FIFO       , 0x00000001);
 +
 +	return 0;
 +}
@@ -13606,10 +13637,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv20_graph.c b/drivers/gpu/drm/nouveau/nv20_graph.c
 new file mode 100644
-index 0000000..b8e138e
+index 0000000..adbd389
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv20_graph.c
-@@ -0,0 +1,917 @@
+@@ -0,0 +1,915 @@
 +#include "drmP.h"
 +#include "drm.h"
 +#include "nouveau_drv.h"
@@ -14380,7 +14411,6 @@
 +
 +	nv_wr32(NV10_PGRAPH_CTX_CONTROL, 0x10000100);
 +	nv_wr32(NV10_PGRAPH_STATE      , 0xFFFFFFFF);
-+	nv_wr32(NV04_PGRAPH_FIFO       , 0x00000001);
 +
 +	tmp = nv_rd32(NV10_PGRAPH_SURFACE) & 0x0007ff00;
 +	nv_wr32(NV10_PGRAPH_SURFACE, tmp);
@@ -14491,7 +14521,6 @@
 +	nv_wr32(NV10_PGRAPH_CTX_CONTROL, 0x10000100);
 +	nv_wr32(NV10_PGRAPH_STATE      , 0xFFFFFFFF);
 +	nv_wr32(0x0040075c             , 0x00000001);
-+	nv_wr32(NV04_PGRAPH_FIFO       , 0x00000001);
 +
 +	/* begin RAM config */
 +//	vramsz = drm_get_resource_len(dev, 0) - 1;
@@ -14821,10 +14850,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv40_graph.c b/drivers/gpu/drm/nouveau/nv40_graph.c
 new file mode 100644
-index 0000000..31147ef
+index 0000000..710a9a9
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv40_graph.c
-@@ -0,0 +1,2192 @@
+@@ -0,0 +1,2191 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
 + * All Rights Reserved.
@@ -16839,7 +16868,6 @@
 +
 +	nv_wr32(NV10_PGRAPH_CTX_CONTROL, 0x10010100);
 +	nv_wr32(NV10_PGRAPH_STATE      , 0xFFFFFFFF);
-+	nv_wr32(NV04_PGRAPH_FIFO       , 0x00000001);
 +
 +	j = nv_rd32(0x1540) & 0xff;
 +	if (j) {
@@ -17063,10 +17091,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_connector.c b/drivers/gpu/drm/nouveau/nv50_connector.c
 new file mode 100644
-index 0000000..a16445a
+index 0000000..b7ce637
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_connector.c
-@@ -0,0 +1,592 @@
+@@ -0,0 +1,588 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -17431,13 +17459,10 @@
 +
 +		/* update hw state */
 +		crtc->use_dithering = connector->use_dithering;
-+		rval = crtc->set_dither(crtc);
++		rval = crtc->set_dither(crtc, true);
 +		if (rval)
 +			return rval;
 +
-+		/* process command buffer */
-+		OUT_MODE(NV50_UPDATE_DISPLAY, 0);
-+
 +		return 0;
 +	}
 +
@@ -17454,7 +17479,6 @@
 +		return NULL;
 +
 +	list_for_each_entry(mode, &connector->base.probed_modes, head) {
-+		DRM_INFO("%d %d 0x%08x\n", mode->hdisplay, mode->vdisplay, mode->type);
 +		if (mode->type & DRM_MODE_TYPE_PREFERRED)
 +			return drm_mode_duplicate(dev, mode);
 +	}
@@ -17661,10 +17685,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_crtc.c b/drivers/gpu/drm/nouveau/nv50_crtc.c
 new file mode 100644
-index 0000000..5e6be22
+index 0000000..707461d
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_crtc.c
-@@ -0,0 +1,776 @@
+@@ -0,0 +1,765 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -17739,7 +17763,6 @@
 +		}
 +		break;
 +	default:
-+		DRM_INFO("load 24bpp\n");
 +		/* R8G8B8 */
 +		for (i = 0; i < 256; i++) {
 +			writew(crtc->lut.r[i] >> 2, lut + 8*i + 0);
@@ -17763,42 +17786,42 @@
 +	DRM_DEBUG("%s\n", blanked ? "blanked" : "unblanked");
 +
 +	if (blanked) {
-+		crtc->cursor->hide(crtc);
++		crtc->cursor->hide(crtc, false);
 +
 +		OUT_MODE(NV50_CRTC0_CLUT_MODE + offset,
 +			 NV50_CRTC0_CLUT_MODE_BLANK);
++		OUT_MODE(NV50_CRTC0_CLUT_OFFSET + offset, 0);
 +		if (dev_priv->chipset != 0x50)
-+			OUT_MODE(NV84_CRTC0_BLANK_UNK1 + offset,
-+				 NV84_CRTC0_BLANK_UNK1_BLANK);
++			OUT_MODE(NV84_CRTC0_CLUT_DMA + offset,
++				 NV84_CRTC0_CLUT_DMA_DISABLE);
++
 +		OUT_MODE(NV50_CRTC0_BLANK_CTRL + offset,
 +			 NV50_CRTC0_BLANK_CTRL_BLANK);
-+		if (dev_priv->chipset != 0x50)
-+			OUT_MODE(NV84_CRTC0_BLANK_UNK2 + offset,
-+				 NV84_CRTC0_BLANK_UNK2_BLANK);
 +	} else {
 +		crtc->cursor->set_offset(crtc);
-+
-+		if (dev_priv->chipset != 0x50)
-+			OUT_MODE(NV84_CRTC0_BLANK_UNK2 + offset,
-+				 NV84_CRTC0_BLANK_UNK2_UNBLANK);
-+
 +		if (crtc->cursor->visible)
-+			crtc->cursor->show(crtc);
++			crtc->cursor->show(crtc, false);
 +		else
-+			crtc->cursor->hide(crtc);
++			crtc->cursor->hide(crtc, false);
 +
++		OUT_MODE(NV50_CRTC0_CLUT_MODE + offset, crtc->lut.depth == 8 ?
++			 NV50_CRTC0_CLUT_MODE_OFF : NV50_CRTC0_CLUT_MODE_ON);
++		OUT_MODE(NV50_CRTC0_CLUT_OFFSET + offset,
++			 crtc->lut.mem->start >> 8);
 +		if (dev_priv->chipset != 0x50)
-+			OUT_MODE(NV84_CRTC0_BLANK_UNK1 + offset,
-+				 NV84_CRTC0_BLANK_UNK1_UNBLANK);
++			OUT_MODE(NV84_CRTC0_CLUT_DMA + offset,
++				 NV84_CRTC0_CLUT_DMA_LOCAL);
++
++		OUT_MODE(NV50_CRTC0_FB_OFFSET + offset, crtc->fb.offset >> 8);
++		OUT_MODE(0x864 + offset, 0);
 +		OUT_MODE(NV50_CRTC0_BLANK_CTRL + offset,
 +			 NV50_CRTC0_BLANK_CTRL_UNBLANK);
 +	}
 +
-+	OUT_MODE(NV50_UPDATE_DISPLAY, 0);
 +	return 0;
 +}
 +
-+static int nv50_crtc_set_dither(struct nouveau_crtc *crtc)
++static int nv50_crtc_set_dither(struct nouveau_crtc *crtc, bool update)
 +{
 +	struct drm_device *dev = crtc->base.dev;
 +	uint32_t offset = crtc->index * 0x400;
@@ -17808,6 +17831,8 @@
 +	OUT_MODE(NV50_CRTC0_DITHERING_CTRL + offset, crtc->use_dithering ?
 +		 NV50_CRTC0_DITHERING_CTRL_ON : NV50_CRTC0_DITHERING_CTRL_OFF);
 +
++	if (update)
++		OUT_MODE(NV50_UPDATE_DISPLAY, 0);
 +	return 0;
 +}
 +
@@ -18112,13 +18137,12 @@
 +
 +		crtc->cursor->set_bo(crtc, gem);
 +		crtc->cursor->set_offset(crtc);
-+		ret = crtc->cursor->show(crtc);
++		ret = crtc->cursor->show(crtc, true);
 +	} else {
 +		crtc->cursor->set_bo(crtc, NULL);
-+		crtc->cursor->hide(crtc);
++		crtc->cursor->hide(crtc, true);
 +	}
 +
-+	OUT_MODE(NV50_UPDATE_DISPLAY, 0);
 +	return ret;
 +}
 +
@@ -18170,18 +18194,6 @@
 +
 +static void nv50_crtc_dpms(struct drm_crtc *drm_crtc, int mode)
 +{
-+	struct nouveau_crtc *crtc = to_nouveau_crtc(drm_crtc);
-+
-+	switch (mode) {
-+	case DRM_MODE_DPMS_ON:
-+	case DRM_MODE_DPMS_STANDBY:
-+	case DRM_MODE_DPMS_SUSPEND:
-+		nv50_crtc_blank(crtc, false);
-+		break;
-+	case DRM_MODE_DPMS_OFF:
-+		nv50_crtc_blank(crtc, true);
-+		break;
-+	}
 +}
 +
 +static void nv50_crtc_prepare(struct drm_crtc *drm_crtc)
@@ -18193,6 +18205,12 @@
 +
 +static void nv50_crtc_commit(struct drm_crtc *drm_crtc)
 +{
++	struct drm_device *dev = drm_crtc->dev;
++	struct nouveau_crtc *crtc = to_nouveau_crtc(drm_crtc);
++
++	nv50_crtc_blank(crtc, false);
++
++	OUT_MODE(NV50_UPDATE_DISPLAY, 0);
 +}
 +
 +static bool nv50_crtc_mode_fixup(struct drm_crtc *drm_crtc,
@@ -18203,72 +18221,58 @@
 +}
 +
 +static int
-+nv50_crtc_execute_mode(struct nouveau_crtc *crtc, struct drm_display_mode *mode)
++nv50_crtc_do_mode_set_base(struct drm_crtc *drm_crtc, int x, int y,
++			   struct drm_framebuffer *old_fb, bool update)
 +{
++	struct nouveau_crtc *crtc = to_nouveau_crtc(drm_crtc);
 +	struct drm_device *dev = crtc->base.dev;
-+	uint32_t hsync_dur,  vsync_dur, hsync_start_to_end, vsync_start_to_end;
-+	uint32_t hunk1, vunk1, vunk2a, vunk2b;
++	struct drm_nouveau_private *dev_priv = dev->dev_private;
++	struct drm_framebuffer *drm_fb = crtc->base.fb;
++	struct nouveau_framebuffer *fb = to_nouveau_framebuffer(drm_fb);
++	struct nouveau_gem_object *ngem = nouveau_gem_object(fb->gem);
 +	uint32_t offset = crtc->index * 0x400;
 +
-+	DRM_DEBUG("index %d\n", crtc->index);
++	crtc->fb.offset = ngem->bo->offset - dev_priv->vm_vram_base;
 +
-+	hsync_dur = mode->hsync_end - mode->hsync_start;
-+	vsync_dur = mode->vsync_end - mode->vsync_start;
-+	hsync_start_to_end = mode->htotal - mode->hsync_start;
-+	vsync_start_to_end = mode->vtotal - mode->vsync_start;
-+	/* I can't give this a proper name, anyone else can? */
-+	hunk1 = mode->htotal - mode->hsync_start + mode->hdisplay;
-+	vunk1 = mode->vtotal - mode->vsync_start + mode->vdisplay;
-+	/* Another strange value, this time only for interlaced modes. */
-+	vunk2a = 2*mode->vtotal - mode->vsync_start + mode->vdisplay;
-+	vunk2b = mode->vtotal - mode->vsync_start + mode->vtotal;
++	OUT_MODE(NV50_CRTC0_FB_OFFSET + offset, crtc->fb.offset >> 8);
++	OUT_MODE(0x864 + offset, 0);
 +
-+	if (mode->flags & DRM_MODE_FLAG_INTERLACE) {
-+		vsync_dur /= 2;
-+		vsync_start_to_end  /= 2;
-+		vunk1 /= 2;
-+		vunk2a /= 2;
-+		vunk2b /= 2;
-+		/* magic */
-+		if (mode->flags & DRM_MODE_FLAG_DBLSCAN) {
-+			vsync_start_to_end -= 1;
-+			vunk1 -= 1;
-+			vunk2a -= 1;
-+			vunk2b -= 1;
-+		}
-+	}
++	OUT_MODE(NV50_CRTC0_FB_SIZE + offset,
++		 drm_fb->height << 16 | drm_fb->width);
 +
-+	OUT_MODE(NV50_CRTC0_CLOCK + offset, mode->clock | 0x800000);
-+	OUT_MODE(NV50_CRTC0_INTERLACE + offset,
-+		 (mode->flags & DRM_MODE_FLAG_INTERLACE) ? 2 : 0);
-+	OUT_MODE(NV50_CRTC0_DISPLAY_START + offset, 0);
-+	OUT_MODE(NV50_CRTC0_UNK82C + offset, 0);
-+	OUT_MODE(NV50_CRTC0_DISPLAY_TOTAL + offset,
-+		 mode->vtotal << 16 | mode->htotal);
-+	OUT_MODE(NV50_CRTC0_SYNC_DURATION + offset,
-+		 (vsync_dur - 1) << 16 | (hsync_dur - 1));
-+	OUT_MODE(NV50_CRTC0_SYNC_START_TO_BLANK_END + offset,
-+		 (vsync_start_to_end - 1) << 16 | (hsync_start_to_end - 1));
-+	OUT_MODE(NV50_CRTC0_MODE_UNK1 + offset,
-+		 (vunk1 - 1) << 16 | (hunk1 - 1));
-+	if (mode->flags & DRM_MODE_FLAG_INTERLACE) {
-+		OUT_MODE(NV50_CRTC0_MODE_UNK2 + offset,
-+			 (vunk2b - 1) << 16 | (vunk2a - 1));
++	/* I suspect this flag indicates a linear fb. */
++	OUT_MODE(NV50_CRTC0_FB_PITCH + offset, drm_fb->pitch | 0x100000);
++
++	switch (drm_fb->depth) {
++	case 8:
++		OUT_MODE(NV50_CRTC0_DEPTH + offset, NV50_CRTC0_DEPTH_8BPP); 
++		break;
++	case 15:
++		OUT_MODE(NV50_CRTC0_DEPTH + offset, NV50_CRTC0_DEPTH_15BPP);
++		break;
++	case 16:
++		OUT_MODE(NV50_CRTC0_DEPTH + offset, NV50_CRTC0_DEPTH_16BPP);
++		break;
++	case 24:
++		OUT_MODE(NV50_CRTC0_DEPTH + offset, NV50_CRTC0_DEPTH_24BPP); 
++		break;
 +	}
 +
-+	crtc->set_dither(crtc);
++	OUT_MODE(NV50_CRTC0_COLOR_CTRL + offset,
++		 NV50_CRTC_COLOR_CTRL_MODE_COLOR);
++	OUT_MODE(NV50_CRTC0_FB_POS + offset, (y << 16) | x);
 +
-+	/* This is the actual resolution of the mode. */
-+	OUT_MODE(NV50_CRTC0_REAL_RES + offset,
-+		 (crtc->base.mode.vdisplay << 16) | crtc->base.mode.hdisplay);
-+	OUT_MODE(NV50_CRTC0_SCALE_CENTER_OFFSET + offset,
-+		 NV50_CRTC_SCALE_CENTER_OFFSET_VAL(0,0));
++	if (crtc->lut.depth != fb->base.depth) {
++		crtc->lut.depth = fb->base.depth;
++		nv50_crtc_lut_load(crtc);
++	}
++
++	if (update)
++		OUT_MODE(NV50_UPDATE_DISPLAY, 0);
 +
-+	nv50_crtc_blank(crtc, false);
 +	return 0;
 +}
 +
-+
 +static int
 +nv50_crtc_mode_set(struct drm_crtc *drm_crtc, struct drm_display_mode *mode,
 +		   struct drm_display_mode *adjusted_mode, int x, int y,
@@ -18278,8 +18282,10 @@
 +	struct nouveau_crtc *crtc = to_nouveau_crtc(drm_crtc);
 +	struct drm_encoder *drm_encoder;
 +	struct nouveau_encoder *encoder;
-+	struct drm_crtc_helper_funcs *crtc_helper = drm_crtc->helper_private;
 +	struct nouveau_connector *connector = NULL;
++	uint32_t hsync_dur,  vsync_dur, hsync_start_to_end, vsync_start_to_end;
++	uint32_t hunk1, vunk1, vunk2a, vunk2b;
++	uint32_t offset = crtc->index * 0x400;
 +
 +	/* Find the connector attached to this CRTC */
 +	list_for_each_entry(drm_encoder, &dev->mode_config.encoder_list, head) {
@@ -18303,67 +18309,74 @@
 +	*crtc->mode = *adjusted_mode;
 +	crtc->use_dithering = connector->use_dithering;
 +
-+	nv50_crtc_execute_mode(crtc, adjusted_mode);
-+	crtc->set_scale(crtc, connector->scaling_mode, false);
-+	crtc_helper->mode_set_base(drm_crtc, x, y, old_fb);
-+
-+	return 0;
-+}
-+
-+static int
-+nv50_crtc_mode_set_base(struct drm_crtc *drm_crtc, int x, int y,
-+			struct drm_framebuffer *old_fb)
-+{
-+	struct nouveau_crtc *crtc = to_nouveau_crtc(drm_crtc);
-+	struct drm_device *dev = crtc->base.dev;
-+	struct drm_nouveau_private *dev_priv = dev->dev_private;
-+	struct drm_framebuffer *drm_fb = crtc->base.fb;
-+	struct nouveau_framebuffer *fb = to_nouveau_framebuffer(drm_fb);
-+	struct nouveau_gem_object *ngem = nouveau_gem_object(fb->gem);
-+	uint32_t v_vram = ngem->bo->offset - dev_priv->vm_vram_base;
-+	uint32_t offset = crtc->index * 0x400;
-+
-+	OUT_MODE(NV50_CRTC0_FB_OFFSET + offset, v_vram >> 8);
-+	OUT_MODE(0x864 + offset, 0);
-+
-+	OUT_MODE(NV50_CRTC0_FB_SIZE + offset,
-+		 drm_fb->height << 16 | drm_fb->width);
++	DRM_DEBUG("index %d\n", crtc->index);
 +
-+	/* I suspect this flag indicates a linear fb. */
-+	OUT_MODE(NV50_CRTC0_FB_PITCH + offset, drm_fb->pitch | 0x100000);
++	hsync_dur = adjusted_mode->hsync_end - adjusted_mode->hsync_start;
++	vsync_dur = adjusted_mode->vsync_end - adjusted_mode->vsync_start;
++	hsync_start_to_end = adjusted_mode->htotal - adjusted_mode->hsync_start;
++	vsync_start_to_end = adjusted_mode->vtotal - adjusted_mode->vsync_start;
++	/* I can't give this a proper name, anyone else can? */
++	hunk1 = adjusted_mode->htotal -
++		adjusted_mode->hsync_start + adjusted_mode->hdisplay;
++	vunk1 = adjusted_mode->vtotal -
++		adjusted_mode->vsync_start + adjusted_mode->vdisplay;
++	/* Another strange value, this time only for interlaced adjusted_modes. */
++	vunk2a = 2 * adjusted_mode->vtotal -
++		 adjusted_mode->vsync_start + adjusted_mode->vdisplay;
++	vunk2b = adjusted_mode->vtotal -
++		 adjusted_mode->vsync_start + adjusted_mode->vtotal;
 +
-+	switch (drm_fb->depth) {
-+	case 8:
-+		OUT_MODE(NV50_CRTC0_DEPTH + offset, NV50_CRTC0_DEPTH_8BPP); 
-+		break;
-+	case 15:
-+		OUT_MODE(NV50_CRTC0_DEPTH + offset, NV50_CRTC0_DEPTH_15BPP);
-+		break;
-+	case 16:
-+		OUT_MODE(NV50_CRTC0_DEPTH + offset, NV50_CRTC0_DEPTH_16BPP);
-+		break;
-+	case 24:
-+		OUT_MODE(NV50_CRTC0_DEPTH + offset, NV50_CRTC0_DEPTH_24BPP); 
-+		break;
++	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
++		vsync_dur /= 2;
++		vsync_start_to_end  /= 2;
++		vunk1 /= 2;
++		vunk2a /= 2;
++		vunk2b /= 2;
++		/* magic */
++		if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) {
++			vsync_start_to_end -= 1;
++			vunk1 -= 1;
++			vunk2a -= 1;
++			vunk2b -= 1;
++		}
 +	}
 +
-+	OUT_MODE(NV50_CRTC0_COLOR_CTRL + offset,
-+		 NV50_CRTC_COLOR_CTRL_MODE_COLOR);
-+	OUT_MODE(NV50_CRTC0_FB_POS + offset, (y << 16) | x);
-+
-+	if (crtc->lut.depth != fb->base.depth) {
-+		crtc->lut.depth = fb->base.depth;
-+		nv50_crtc_lut_load(crtc);
++	OUT_MODE(NV50_CRTC0_CLOCK + offset, adjusted_mode->clock | 0x800000);
++	OUT_MODE(NV50_CRTC0_INTERLACE + offset,
++		 (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) ? 2 : 0);
++	OUT_MODE(NV50_CRTC0_DISPLAY_START + offset, 0);
++	OUT_MODE(NV50_CRTC0_UNK82C + offset, 0);
++	OUT_MODE(NV50_CRTC0_DISPLAY_TOTAL + offset,
++		 adjusted_mode->vtotal << 16 | adjusted_mode->htotal);
++	OUT_MODE(NV50_CRTC0_SYNC_DURATION + offset,
++		 (vsync_dur - 1) << 16 | (hsync_dur - 1));
++	OUT_MODE(NV50_CRTC0_SYNC_START_TO_BLANK_END + offset,
++		 (vsync_start_to_end - 1) << 16 | (hsync_start_to_end - 1));
++	OUT_MODE(NV50_CRTC0_MODE_UNK1 + offset,
++		 (vunk1 - 1) << 16 | (hunk1 - 1));
++	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
++		OUT_MODE(NV50_CRTC0_MODE_UNK2 + offset,
++			 (vunk2b - 1) << 16 | (vunk2a - 1));
 +	}
 +
-+	OUT_MODE(NV50_CRTC0_CLUT_MODE + offset, fb->base.depth == 8 ?
-+		 NV50_CRTC0_CLUT_MODE_OFF : NV50_CRTC0_CLUT_MODE_ON);
-+	OUT_MODE(NV50_CRTC0_CLUT_OFFSET + offset, crtc->lut.mem->start >> 8);
++	crtc->set_dither(crtc, false);
 +
-+	OUT_MODE(NV50_UPDATE_DISPLAY, 0);
-+	return 0;
++	/* This is the actual resolution of the mode. */
++	OUT_MODE(NV50_CRTC0_REAL_RES + offset,
++		 (crtc->base.mode.vdisplay << 16) | crtc->base.mode.hdisplay);
++	OUT_MODE(NV50_CRTC0_SCALE_CENTER_OFFSET + offset,
++		 NV50_CRTC_SCALE_CENTER_OFFSET_VAL(0,0));
++
++	crtc->set_scale(crtc, connector->scaling_mode, false);
++	return nv50_crtc_do_mode_set_base(drm_crtc, x, y, old_fb, false);
 +}
 +
++static int
++nv50_crtc_mode_set_base(struct drm_crtc *drm_crtc, int x, int y,
++			struct drm_framebuffer *old_fb)
++{
++	return nv50_crtc_do_mode_set_base(drm_crtc, x, y, old_fb, true);
++}
 +
 +static const struct drm_crtc_helper_funcs nv50_crtc_helper_funcs = {
 +	.dpms = nv50_crtc_dpms,
@@ -18443,10 +18456,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_cursor.c b/drivers/gpu/drm/nouveau/nv50_cursor.c
 new file mode 100644
-index 0000000..fca5b4a
+index 0000000..10736de
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_cursor.c
-@@ -0,0 +1,201 @@
+@@ -0,0 +1,217 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -18533,8 +18546,9 @@
 +}
 +
 +/* Calling update or changing the stored cursor state is left to the higher level ioctl's. */
-+static int nv50_cursor_show(struct nouveau_crtc *crtc)
++static int nv50_cursor_show(struct nouveau_crtc *crtc, bool update)
 +{
++	struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private;
 +	struct drm_device *dev = crtc->base.dev;
 +	uint32_t offset = crtc->index * 0x400;
 +
@@ -18547,22 +18561,37 @@
 +		return -EINVAL;
 +	}
 +
++	if (dev_priv->chipset != 0x50)
++		OUT_MODE(NV84_CRTC0_CURSOR_DMA + offset,
++			 NV84_CRTC0_CURSOR_DMA_LOCAL);
 +	OUT_MODE(NV50_CRTC0_CURSOR_CTRL + offset, NV50_CRTC0_CURSOR_CTRL_SHOW);
++			 
++	if (update) {
++		OUT_MODE(NV50_UPDATE_DISPLAY, 0);
++		crtc->cursor->visible = true;
++	}
 +
-+	crtc->cursor->visible = true;
 +	return 0;
 +}
 +
-+static int nv50_cursor_hide(struct nouveau_crtc *crtc)
++static int nv50_cursor_hide(struct nouveau_crtc *crtc, bool update)
 +{
++	struct drm_nouveau_private *dev_priv = crtc->base.dev->dev_private;
 +	struct drm_device *dev = crtc->base.dev;
 +	uint32_t offset = crtc->index * 0x400;
 +
 +	DRM_DEBUG("\n");
 +
 +	OUT_MODE(NV50_CRTC0_CURSOR_CTRL + offset, NV50_CRTC0_CURSOR_CTRL_HIDE);
++	if (dev_priv->chipset != 0x50)
++		OUT_MODE(NV84_CRTC0_CURSOR_DMA + offset,
++			 NV84_CRTC0_CURSOR_DMA_DISABLE);
++
++	if (update) {
++		OUT_MODE(NV50_UPDATE_DISPLAY, 0);
++		crtc->cursor->visible = false;
++	}
 +
-+	crtc->cursor->visible = false;
 +	return 0;
 +}
 +
@@ -18650,7 +18679,7 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_cursor.h b/drivers/gpu/drm/nouveau/nv50_cursor.h
 new file mode 100644
-index 0000000..9be1591
+index 0000000..089a69c
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_cursor.h
 @@ -0,0 +1,45 @@
@@ -18688,8 +18717,8 @@
 +	int x, y;
 +	bool visible;
 +
-+	int (*show) (struct nouveau_crtc *crtc);
-+	int (*hide) (struct nouveau_crtc *crtc);
++	int (*show) (struct nouveau_crtc *crtc, bool update);
++	int (*hide) (struct nouveau_crtc *crtc, bool update);
 +	int (*set_pos) (struct nouveau_crtc *crtc, int x, int y);
 +	int (*set_offset) (struct nouveau_crtc *crtc);
 +	int (*set_bo) (struct nouveau_crtc *crtc, struct drm_gem_object *gem);
@@ -18987,7 +19016,7 @@
 +
 diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
 new file mode 100644
-index 0000000..5bd41ef
+index 0000000..ac69865
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_display.c
 @@ -0,0 +1,441 @@
@@ -19052,13 +19081,15 @@
 +	/* SOR */
 +	nv_wr32(0x006101e0 + 0 * 0x4, nv_rd32(0x0061c000 + 0 * 0x800));
 +	nv_wr32(0x006101e0 + 1 * 0x4, nv_rd32(0x0061c000 + 1 * 0x800));
++	nv_wr32(0x006101e0 + 2 * 0x4, nv_rd32(0x0061c000 + 2 * 0x800));
 +	/* Something not yet in use, tv-out maybe. */
 +	nv_wr32(0x006101f0 + 0 * 0x4, nv_rd32(0x0061e000 + 0 * 0x800));
 +	nv_wr32(0x006101f0 + 1 * 0x4, nv_rd32(0x0061e000 + 1 * 0x800));
 +	nv_wr32(0x006101f0 + 2 * 0x4, nv_rd32(0x0061e000 + 2 * 0x800));
 +
 +	for (i = 0; i < 3; i++) {
-+		nv_wr32(NV50_PDISPLAY_DAC_REGS_DPMS_CTRL(i), 0x00550000 | NV50_PDISPLAY_DAC_REGS_DPMS_CTRL_PENDING);
++		nv_wr32(NV50_PDISPLAY_DAC_REGS_DPMS_CTRL(i), 0x00550000 |
++			NV50_PDISPLAY_DAC_REGS_DPMS_CTRL_PENDING);
 +		nv_wr32(NV50_PDISPLAY_DAC_REGS_CLK_CTRL1(i), 0x00000001);
 +	}
 +
@@ -19135,8 +19166,6 @@
 +	OUT_MODE(NV50_CRTC0_DISPLAY_START, 0);
 +	OUT_MODE(NV50_CRTC0_UNK82C, 0);
 +
-+	OUT_MODE(NV50_UPDATE_DISPLAY, 0);
-+
 +	/* enable clock change interrupts. */
 +//	nv_wr32(NV50_PDISPLAY_SUPERVISOR_INTR, nv_rd32(NV50_PDISPLAY_SUPERVISOR_INTR) | 0x70);
 +
@@ -19196,7 +19225,7 @@
 +	}
 +#endif
 +
-+	for (i = 0; i < 2; i++) {
++	for (i = 0; i < NV50_PDISPLAY_SOR_REGS__LEN; i++) {
 +		if (!nv_wait(NV50_PDISPLAY_SOR_REGS_DPMS_STATE(i),
 +			     NV50_PDISPLAY_SOR_REGS_DPMS_STATE_WAIT, 0)) {
 +			DRM_ERROR("timeout: SOR_DPMS_STATE_WAIT(%d) == 0\n", i);
@@ -19241,6 +19270,10 @@
 +
 +	dev->mode_config.fb_base = dev_priv->fb_phys;
 +
++	ret = nv50_display_pre_init(dev);
++	if (ret)
++		return ret;
++
 +	/* Create CRTC objects */
 +	for (i = 0; i < 2; i++) {
 +		nv50_crtc_create(dev, i);
@@ -19309,10 +19342,6 @@
 +		bus_mask |= (1 << entry->bus);
 +	}
 +
-+	ret = nv50_display_pre_init(dev);
-+	if (ret)
-+		return ret;
-+
 +	ret = nv50_display_init(dev);
 +	if (ret)
 +		return ret;
@@ -19482,10 +19511,10 @@
 +#endif /* __NV50_DISPLAY_H__ */
 diff --git a/drivers/gpu/drm/nouveau/nv50_display_commands.h b/drivers/gpu/drm/nouveau/nv50_display_commands.h
 new file mode 100644
-index 0000000..97b3d3c
+index 0000000..4fd10c9
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_display_commands.h
-@@ -0,0 +1,196 @@
+@@ -0,0 +1,195 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -19563,10 +19592,9 @@
 +	#define NV50_CRTC0_CLUT_MODE_ON		0xC0000000
 +#define NV50_CRTC0_CLUT_OFFSET		0x844
 +
-+/* Anyone know what part of the chip is triggered here precisely? */
-+#define NV84_CRTC0_BLANK_UNK1		0x85C
-+	#define NV84_CRTC0_BLANK_UNK1_BLANK	0x0
-+	#define NV84_CRTC0_BLANK_UNK1_UNBLANK	0x1
++#define NV84_CRTC0_CLUT_DMA		0x85C
++	#define NV84_CRTC0_CLUT_DMA_DISABLE	0x0
++	#define NV84_CRTC0_CLUT_DMA_LOCAL	0x1
 +
 +#define NV50_CRTC0_FB_OFFSET		0x860
 +
@@ -19593,9 +19621,9 @@
 +#define NV50_CRTC0_CURSOR_OFFSET	0x884
 +
 +/* Anyone know what part of the chip is triggered here precisely? */
-+#define NV84_CRTC0_BLANK_UNK2		0x89C
-+	#define NV84_CRTC0_BLANK_UNK2_BLANK	0x0
-+	#define NV84_CRTC0_BLANK_UNK2_UNBLANK	0x1
++#define NV84_CRTC0_CURSOR_DMA		0x89C
++	#define NV84_CRTC0_CURSOR_DMA_DISABLE	0x0
++	#define NV84_CRTC0_CURSOR_DMA_LOCAL	0x1
 +
 +#define NV50_CRTC0_DITHERING_CTRL	0x8A0
 +	#define NV50_CRTC0_DITHERING_CTRL_ON	0x11
@@ -20267,10 +20295,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c
 new file mode 100644
-index 0000000..b892830
+index 0000000..30246c2
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_graph.c
-@@ -0,0 +1,333 @@
+@@ -0,0 +1,345 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
 + * All Rights Reserved.
@@ -20344,7 +20372,7 @@
 +	nv_wr32(0x400108, 0xffffffff);
 +
 +	nv_wr32(0x400824, 0x00004000);
-+	nv_wr32(0x400500, 0x00010001);
++	nv_wr32(0x400500, 0x00000000);
 +}
 +
 +static void
@@ -20417,9 +20445,9 @@
 +	DRM_DEBUG("\n");
 +
 +	nv50_graph_init_reset(dev);
-+	nv50_graph_init_intr(dev);
 +	nv50_graph_init_regs__nv(dev);
 +	nv50_graph_init_regs(dev);
++	nv50_graph_init_intr(dev);
 +
 +	ret = nv50_graph_init_ctxctl(dev);
 +	if (ret)
@@ -20434,6 +20462,18 @@
 +	DRM_DEBUG("\n");
 +}
 +
++void
++nv50_graph_fifo_access(struct drm_device *dev, bool enabled)
++{
++	struct drm_nouveau_private *dev_priv = dev->dev_private;
++	const uint32_t mask = 0x00010001;
++
++	if (enabled)
++		nv_wr32(0x400500, nv_rd32(0x400500) | mask);
++	else
++		nv_wr32(0x400500, nv_rd32(0x400500) & ~mask);
++}
++
 +int
 +nv50_graph_create_context(struct nouveau_channel *chan)
 +{
@@ -41547,7 +41587,7 @@
 +#endif
 diff --git a/drivers/gpu/drm/nouveau/nv50_i2c.c b/drivers/gpu/drm/nouveau/nv50_i2c.c
 new file mode 100644
-index 0000000..e3a6430
+index 0000000..aa37e24
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_i2c.c
 @@ -0,0 +1,400 @@
@@ -41663,7 +41703,7 @@
 +		udelay(2);
 +	}
 +
-+	printk("a timeout occured in nv50_i2c_raise_clock\n");
++	DRM_DEBUG("a timeout occured in nv50_i2c_raise_clock\n");
 +
 +	return false;
 +}
@@ -41750,7 +41790,7 @@
 +		}
 +
 +		if (i <= 0) {
-+			printk("a timeout occured in nv50_i2c_write_byte\n");
++			DRM_DEBUG("a timeout occured in nv50_i2c_write_byte\n");
 +			rval = false;
 +		}
 +	}
@@ -41833,7 +41873,7 @@
 +	}
 +
 +	if (!rval)
-+		printk("nv50_i2c_read failed\n");
++		DRM_DEBUG("nv50_i2c_read failed\n");
 +
 +	return rval;
 +}
@@ -41864,7 +41904,7 @@
 +	}
 +
 +	if (!rval)
-+		printk("nv50_i2c_write failed\n");
++		DRM_DEBUG("nv50_i2c_write failed\n");
 +
 +	return rval;
 +}
@@ -42437,10 +42477,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c
 new file mode 100644
-index 0000000..fd29ffc
+index 0000000..a147fb6
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_sor.c
-@@ -0,0 +1,275 @@
+@@ -0,0 +1,274 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -42487,7 +42527,6 @@
 +	DRM_DEBUG("Disconnecting SOR %d\n", encoder->or);
 +
 +	OUT_MODE(NV50_SOR0_MODE_CTRL + offset, NV50_SOR_MODE_CTRL_OFF);
-+	OUT_MODE(NV50_UPDATE_DISPLAY, 0);
 +}
 +
 +static int


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1294.2.10
retrieving revision 1.1294.2.11
diff -u -r1.1294.2.10 -r1.1294.2.11
--- kernel.spec	5 Mar 2009 22:45:09 -0000	1.1294.2.10
+++ kernel.spec	12 Mar 2009 20:38:57 -0000	1.1294.2.11
@@ -58,7 +58,7 @@
 # The rc snapshot level
 %define rcrev 7
 # The git snapshot level
-%define gitrev 0
+%define gitrev 5
 # Set rpm version accordingly
 %define rpmversion 2.6.%{upstream_sublevel}
 %endif
@@ -582,6 +582,9 @@
 # ppc64 goes kerspalt with .eh_frame
 Patch06: build-with-fno-dwarf2-cfi-asm.patch
 
+# glibc-headers 2.9.90-10 changes default _POSIX_C_SOURCE
+Patch07: unifdef-rename-getline-symbol.patch
+
 %if !%{nopatches}
 
 # revert upstream patches we get via other methods
@@ -604,6 +607,8 @@
 Patch144: linux-2.6-vio-modalias.patch
 Patch147: linux-2.6-imac-transparent-bridge.patch
 
+Patch150: linux-2.6.29-sparc-IOC_TYPECHECK.patch
+
 Patch160: linux-2.6-execshield.patch
 Patch250: linux-2.6-debug-sizeof-structs.patch
 Patch260: linux-2.6-debug-nmi-timeout.patch
@@ -611,7 +616,6 @@
 Patch280: linux-2.6-debug-spinlock-taint.patch
 Patch340: linux-2.6-debug-vm-would-have-oomkilled.patch
 Patch360: linux-2.6-debug-always-inline-kzalloc.patch
-Patch370: linux-2.6-crash-driver.patch
 Patch380: linux-2.6-defaults-pci_no_msi.patch
 Patch381: linux-2.6-pciehp-update.patch
 Patch382: linux-2.6-defaults-pciehp.patch
@@ -619,8 +623,12 @@
 Patch391: linux-2.6-acpi-video-dos.patch
 Patch392: linux-2.6-acpi-strict-resources.patch
 Patch393: linux-2.6-hwmon-atk0110.patch
+Patch394: linux-2.6-acpi-video-didl-intel-outputs.patch
 Patch400: linux-2.6-scsi-cpqarray-set-master.patch
 Patch450: linux-2.6-input-kill-stupid-messages.patch
+Patch451: linux-2.6-input-fix-toshiba-hotkeys.patch
+Patch452: linux-2.6-input-hid-extra-gamepad.patch
+
 Patch460: linux-2.6-serial-460800.patch
 Patch510: linux-2.6-silence-noise.patch
 Patch530: linux-2.6-silence-fbcon-logo.patch
@@ -637,7 +645,6 @@
 Patch682: linux-2.6-ipw2x00-age-scan-results-on-resume.patch
 
 Patch1515: linux-2.6.29-lirc.patch
-Patch1520: linux-2.6-hdpvr.patch
 
 # Fix the return code CD accesses when the CDROM drive door is closed
 # but the drive isn't yet ready.
@@ -651,7 +658,7 @@
 Patch1814: drm-nouveau.patch
 Patch1816: drm-no-gem-on-i8xx.patch
 Patch1818: drm-i915-resume-force-mode.patch
-Patch1819: drm-fix-setmaster-deadlock.patch
+Patch1819: drm-intel-big-hammer.patch
 
 # kludge to make ich9 e1000 work
 Patch2000: linux-2.6-e1000-ich9.patch
@@ -663,22 +670,29 @@
 Patch2200: linux-2.6-firewire-git-update.patch
 Patch2201: linux-2.6-firewire-git-pending.patch
 
-Patch2300: linux-2.6.28-sunrpc-ipv6-rpcbind.patch
-Patch2301: linux-2.6.28-lockd-svc-register.patch
-
 # Quiet boot fixes
 # silence the ACPI blacklist code
 Patch2802: linux-2.6-silence-acpi-blacklist.patch
 
+Patch2897: linux-2.6-hdpvr.patch
+
 # Updates/Fixes on V4L/DVB to the latest development tree
+# hdpvr is patching a function that were removed on linux-next
+Patch2898: linux-2.6-hdpvr-fix.patch
+
 Patch2899: linux-2.6-v4l-dvb-fixes.patch
 Patch2900: linux-2.6-v4l-dvb-update.patch
 
 # ext4 fixes
-Patch2910: linux-2.6-ext4-inode-alloc-race.patch
+Patch2910: linux-2.6-ext4-extent-header-check-fix.patch
+Patch2911: linux-2.6-ext4-flush-on-close.patch
 
 Patch9001: revert-fix-modules_install-via-nfs.patch
 
+Patch9002: cpufreq-add-atom-to-p4-clockmod.patch
+
+Patch9003: squashfs-fix-page-aligned-data.patch
+
 Patch9997: xen.pvops.pre.patch
 Patch9998: xen.pvops.patch
 Patch9999: xen.pvops.post.patch
@@ -1030,6 +1044,8 @@
 
 ApplyPatch build-with-fno-dwarf2-cfi-asm.patch
 
+ApplyPatch unifdef-rename-getline-symbol.patch
+
 #
 # misc small stuff to make things compile
 #
@@ -1082,6 +1098,8 @@
 # SPARC64
 #
 
+ApplyPatch linux-2.6.29-sparc-IOC_TYPECHECK.patch
+
 #
 # Exec shield
 #
@@ -1092,7 +1110,8 @@
 #
 
 # ext4
-ApplyPatch linux-2.6-ext4-inode-alloc-race.patch
+ApplyPatch linux-2.6-ext4-extent-header-check-fix.patch
+ApplyPatch linux-2.6-ext4-flush-on-close.patch
 
 # xfs
 
@@ -1105,6 +1124,7 @@
 ApplyPatch linux-2.6-acpi-video-dos.patch
 ApplyPatch linux-2.6-acpi-strict-resources.patch
 ApplyPatch linux-2.6-hwmon-atk0110.patch
+ApplyPatch linux-2.6-acpi-video-didl-intel-outputs.patch
 
 # Various low-impact patches to aid debugging.
 ApplyPatch linux-2.6-debug-sizeof-structs.patch
@@ -1114,9 +1134,6 @@
 ApplyPatch linux-2.6-debug-vm-would-have-oomkilled.patch
 ApplyPatch linux-2.6-debug-always-inline-kzalloc.patch
 
-# /dev/crash driver for the crashdump analysis tool
-ApplyPatch linux-2.6-crash-driver.patch
-
 #
 # PCI
 #
@@ -1141,6 +1158,12 @@
 # The input layer spews crap no-one cares about.
 ApplyPatch linux-2.6-input-kill-stupid-messages.patch
 
+# Get away from having to poll Toshibas
+ApplyPatch linux-2.6-input-fix-toshiba-hotkeys.patch
+
+# HID: add support for another version of 0e8f:0003 device in hid-pl
+ApplyPatch linux-2.6-input-hid-extra-gamepad.patch
+
 # Allow to use 480600 baud on 16C950 UARTs
 ApplyPatch linux-2.6-serial-460800.patch
 # Silence some useless messages that still get printed with 'quiet'
@@ -1174,6 +1197,8 @@
 ApplyPatch linux-2.6.29-lirc.patch
 # http://hg.jannau.net/hdpvr/
 ApplyPatch linux-2.6-hdpvr.patch
+# Revert a change on v4l2-common on a function that will be removed by V4L/DVB patches
+ApplyPatch linux-2.6-hdpvr-fix.patch
 
 # Fix the return code CD accesses when the CDROM drive door is closed
 # but the drive isn't yet ready.
@@ -1192,7 +1217,7 @@
 #ApplyPatch drm-radeon-pm.patch
 ApplyPatch drm-no-gem-on-i8xx.patch
 ApplyPatch drm-i915-resume-force-mode.patch
-#ApplyPatch drm-fix-setmaster-deadlock.patch
+ApplyPatch drm-intel-big-hammer.patch
 
 # linux1394 git patches
 ApplyPatch linux-2.6-firewire-git-update.patch
@@ -1201,9 +1226,6 @@
 #ApplyPatch linux-2.6-firewire-git-pending.patch
 #fi
 
-# Fix NFS
-ApplyPatch linux-2.6.28-sunrpc-ipv6-rpcbind.patch
-
 # silence the ACPI blacklist code
 ApplyPatch linux-2.6-silence-acpi-blacklist.patch
 
@@ -1214,7 +1236,9 @@
 # revert 8b249b6856f16f09b0e5b79ce5f4d435e439b9d6
 ApplyPatch revert-fix-modules_install-via-nfs.patch
 
-ApplyPatch linux-2.6.28-lockd-svc-register.patch
+ApplyPatch cpufreq-add-atom-to-p4-clockmod.patch
+
+ApplyPatch squashfs-fix-page-aligned-data.patch
 
 ApplyPatch xen.pvops.pre.patch
 ApplyPatch xen.pvops.patch
@@ -1411,7 +1435,7 @@
     fi
     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
     cd include
-    cp -a acpi config keys linux math-emu media mtd net pcmcia rdma rxrpc scsi sound video drm asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
+    cp -a acpi config crypto keys linux math-emu media mtd net pcmcia rdma rxrpc scsi sound trace video drm asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
     asmdir=$(readlink asm)
     cp -a $asmdir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/
     pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
@@ -1802,6 +1826,144 @@
 # and build.
 
 %changelog
+* Thu Mar 12 2009 Michael Young <m.a.young at durham.ac.uk>
+- update pvops patch which includes /sys/hypervisor support
+
+* Thu Mar 12 2009 Eric Sandeen <sandeen at redhat.com>
+- Add patches for ext4 flush behavior in some situations
+  (Safer for apps which aren't fsyncing properly)
+
+* Thu Mar 12 2009 Jarod Wilson <jarod at redhat.com>
+- Updated lirc patch to kill a slew of compile warnings and
+  make lirc_serial behave properly w/kfifos
+
+* Thu Mar 12 2009 Dave Jones <davej at redhat.com>
+- Drop no longer needed 'crash' driver.
+
+* Thu Mar 12 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: kms display lockup fixes for a heap of chipsets
+
+* Thu Mar 12 2009 Dave Airlie <airlied at redhat.com>
+- radeon kms - bug fix irq and ib handling on r300 + suspend test hook
+- fix sparc build with kms from spot
+
+* Wed Mar 11 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.29-rc7-git5
+- Dropped ingo-fix-atom-failures.patch, merged upstream.
+
+* Wed Mar 11 2009 Matthew Garrett <mjg at redhat.com>
+- linux-2.6-acpi-video-didl-intel-outputs.patch
+   Initialise the DIDL field in Intel opregion before bringing up ACPI video
+- linux-2.6-acpi-video-dos.patch
+   Reenable display switch support now that above patch is included
+
+* Wed Mar 11 2009 Kristian Høgsberg <krh at redhat.com>
+- Add patch to issue a wbinvd in the GEM execbuffer patch to work
+  around insufficient flushing on i855 and i865 chipsets.
+
+* Wed Mar 11 2009 Steve Dickson <steved at redhat.com> 2.6.29-0.236.rc7.git4
+- Removed both the lockd-svc-register.patch and 
+  sunrpc-ipv6-rpcbind.patch patches in favor of simply turning
+  off CONFIG_SUNRPC_REGISTER_V4 config variable. 
+
+* Wed Mar 11 2009 Eric Sandeen <sandeen at redhat.com> 2.6.29-0.235.rc7.git4
+- Fix incorrect header check values in ext4_ext_search_right()
+  Should address kernel.org bugzilla #12821
+
+* Wed Mar 11 2009 Kyle McMartin <kyle at redhat.com> 2.6.29-0.234.rc7.git4
+- ingo-fix-atom-failures.patch:
+   Work around Atom errata when splitting large pages.
+
+* Wed Mar 11 2009 Kyle McMartin <kyle at redhat.com> 2.6.29-0.233.rc7.git4
+- linux-2.6-execshield.patch:
+   Fix typo. Oops.
+
+* Wed Mar 11 2009 Kyle McMartin <kyle at redhat.com> 2.6.29-0.232.rc7.git4
+- linux-2.6-execshield.patch:
+   Fix from H.J. Lu, we were doing 32-bit randomization on 64-bit vaddr
+- unifdef-rename-getline-symbol.patch:
+   glibc 2.9.90-10 changes what symbols are exposed in stdio.h, causing
+   getline collision. rename the unifdef symbol to parseline.
+
+* Wed Mar 11 2009 Dave Jones <davej at redhat.com>
+- 2.6.29-rc7-git4
+
+* Tue Mar 10 2009 Kyle McMartin <kyle at redhat.com> 2.6.29-0.230.rc7.git3
+- Add -git3 to sources...
+
+* Tue Mar 10 2009 Kyle McMartin <kyle at redhat.com> 2.6.29-0.229.rc7.git3
+- squashfs-fix-page-aligned-data.patch:
+   Theoretically valid images are hitting the if (page == pages) check,
+   which is suspect happens when the data is page aligned... We should
+   probably be checking for page+1.
+
+* Tue Mar 10 2009 Tom "spot" Callaway <tcallawa at redhat.com>
+- disable CONFIG_AGP on sparc64
+
+* Tue Mar 10 2009 Dave Jones <davej at redhat.com> 2.6.29-0.227.rc7.git3
+- 2.6.29-rc7-git3
+
+* Tue Mar 10 2009 Dave Jones <davej at redhat.com>
+- HID: add support for another version of 0e8f:0003 device in hid-pl
+
+* Tue Mar 10 2009 Mauro Carvalho Cheahb <mchehab at redhat.com>
+- updates V4L/DVB from linux-next and adds git log summary on patches
+
+* Tue Mar 10 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: more kms fixes/cleanups
+- now works decently on all the G8x chips I have
+
+* Tue Mar 10 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: another 8800GTX kms fix
+
+* Tue Mar 10 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: fix kms issues seen while testing original 8800gtx
+
+* Tue Mar 10 2009 Dave Airlie <airlied at redhat.com>
+- radeon: enable kms on r100/r200
+
+* Tue Mar 10 2009 Tom "spot" Callaway <tcallawa at redhat.com>
+- linux-2.6.29-sparc-IOC_TYPECHECK.patch: missing function in sparc specific ioctl.h
+
+* Tue Mar 10 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: fix ppc
+
+* Mon Mar 09 2009 Kyle McMartin <kyle at redhat.com>
+- Linux 2.6.29-rc7-git2
+
+* Mon Mar 09 2009 Dave Airlie <airlied at redhat.com>
+- drm-next.patch: fix r600 writeback test
+
+* Mon Mar 09 2009 Ben Skeggs <bskeggs at gmail.com>
+- drm-nouveau.patch: nv50 and kms fixes
+
+* Mon Mar 09 2009 Dave Airlie <airlied at redhat.com>
+- drm-next.patch: fixes from upstream queue for r600 support
+- drm-modesetting-radeon.patch: make 2D/3D on PCIE faster
+
+* Fri Mar 06 2009 Jarod Wilson <jarod at redhat.com>
+- add atom to p4-clockmod for thermal mgmt benefits for the atom
+  procs that don't do freq scaling (lookin' at you, atom 330)
+
+* Fri Mar 06 2009 Jarod Wilson <jarod at redhat.com>
+- kernel-devel also needs include/crypto headers
+
+* Fri Mar 06 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
+- drivers/media: remove frontends from config-generic
+
+* Fri Mar 06 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
+- drivers/media: Kconfig cleanups and fixes
+
+* Fri Mar 06 2009 Dave Jones <davej at redhat.com>
+- kernel-devel needs include/trace headers. (Josh Stone <jistone at redhat.com>)
+
+* Fri Mar 06 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
+- drivers/media: Some fixes and a cleanup on F11 v4l/dvb config.generic
+
+* Fri Mar 06 2009 Matthew Garrett <mjg at redhat.com>
+- linux-2.6-input-fix-toshiba-hotkeys.patch: Avoid polling for hotkey events
+  on Toshibas
+
 * Wed Mar 05 2009 Michael Young <m.a.young at durham.ac.uk>
 - update pvops patch
 - disable drm-fix-setmaster-deadlock.patch as included in pvops patch

linux-2.6-acpi-video-dos.patch:

Index: linux-2.6-acpi-video-dos.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-acpi-video-dos.patch,v
retrieving revision 1.2
retrieving revision 1.2.16.1
diff -u -r1.2 -r1.2.16.1
--- linux-2.6-acpi-video-dos.patch	25 Sep 2008 18:30:12 -0000	1.2
+++ linux-2.6-acpi-video-dos.patch	12 Mar 2009 20:38:57 -0000	1.2.16.1
@@ -1,4 +1,4 @@
-Disable ACPI video display switching by default
+Disable firmware video brightness change on AC/Battery switch by default
 
 -- mjg59
 
@@ -11,7 +11,7 @@
  static int acpi_video_bus_start_devices(struct acpi_video_bus *video)
  {
 -	return acpi_video_bus_DOS(video, 0, 0);
-+	return acpi_video_bus_DOS(video, 3, 1);
++	return acpi_video_bus_DOS(video, 0, 1);
  }
  
  static int acpi_video_bus_stop_devices(struct acpi_video_bus *video)

linux-2.6-execshield.patch:

Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-execshield.patch,v
retrieving revision 1.102
retrieving revision 1.102.6.1
diff -u -r1.102 -r1.102.6.1
--- linux-2.6-execshield.patch	19 Jan 2009 06:23:28 -0000	1.102
+++ linux-2.6-execshield.patch	12 Mar 2009 20:38:57 -0000	1.102.6.1
@@ -73,7 +73,7 @@
  
  #ifdef CONFIG_SMP
 diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
-index ba3e2ff..42a65f4 100644
+index e299287..aaa8a35 100644
 --- a/arch/x86/include/asm/paravirt.h
 +++ b/arch/x86/include/asm/paravirt.h
 @@ -113,6 +113,9 @@ struct pv_cpu_ops {
@@ -100,7 +100,7 @@
  {
  	PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr);
 diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
-index 091cd88..b1a6f6d 100644
+index 3bfd523..99c8119 100644
 --- a/arch/x86/include/asm/processor.h
 +++ b/arch/x86/include/asm/processor.h
 @@ -158,6 +158,9 @@ static inline int hlt_works(int cpu)
@@ -140,10 +140,10 @@
  	if (!c->x86_model_id[0]) {
  		char *p;
 diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
-index e4c8fb6..30f7508 100644
+index c6520a4..2066aa1 100644
 --- a/arch/x86/kernel/paravirt.c
 +++ b/arch/x86/kernel/paravirt.c
-@@ -326,6 +326,9 @@ struct pv_cpu_ops pv_cpu_ops = {
+@@ -352,6 +352,9 @@ struct pv_cpu_ops pv_cpu_ops = {
  	.read_tscp = native_read_tscp,
  	.load_tr_desc = native_load_tr_desc,
  	.set_ldt = native_set_ldt,
@@ -154,10 +154,10 @@
  	.load_idt = native_load_idt,
  	.store_gdt = native_store_gdt,
 diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
-index a546f55..f180caf 100644
+index bd4da2a..60823d4 100644
 --- a/arch/x86/kernel/process_32.c
 +++ b/arch/x86/kernel/process_32.c
-@@ -346,6 +346,8 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
+@@ -343,6 +343,8 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
  void
  start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
  {
@@ -166,7 +166,7 @@
  	__asm__("movl %0, %%gs" : : "r"(0));
  	regs->fs		= 0;
  	set_fs(USER_DS);
-@@ -355,6 +357,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
+@@ -352,6 +354,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
  	regs->cs		= __USER_CS;
  	regs->ip		= new_ip;
  	regs->sp		= new_sp;
@@ -178,7 +178,7 @@
  	/*
  	 * Free the old FP and other extended state
  	 */
-@@ -522,7 +529,8 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -519,7 +526,8 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
  	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
  
  	__unlazy_fpu(prev_p);
@@ -188,7 +188,7 @@
  
  	/* we're going to use this soon, after a few expensive things */
  	if (next_p->fpu_counter > 5)
-@@ -695,3 +703,41 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
+@@ -692,3 +700,41 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
  	unsigned long range_end = mm->brk + 0x02000000;
  	return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
  }
@@ -252,10 +252,10 @@
  	if (!cpu_isset(cpu, flush_cpumask))
  		goto out;
 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
-index 98c2d05..db483ea 100644
+index a9e7548..af0f8f0 100644
 --- a/arch/x86/kernel/traps.c
 +++ b/arch/x86/kernel/traps.c
-@@ -154,6 +154,76 @@ static int lazy_iobitmap_copy(void)
+@@ -160,6 +160,76 @@ static int lazy_iobitmap_copy(void)
  
  	return 0;
  }
@@ -332,7 +332,7 @@
  #endif
  
  static void __kprobes
-@@ -317,6 +387,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
+@@ -323,6 +393,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
  	if (!user_mode(regs))
  		goto gp_in_kernel;
  
@@ -362,7 +362,7 @@
  	tsk->thread.error_code = error_code;
  	tsk->thread.trap_no = 13;
  
-@@ -923,19 +1016,37 @@ do_device_not_available(struct pt_regs *regs, long error)
+@@ -934,19 +1027,37 @@ dotraplinkage void __kprobes do_device_not_available(struct pt_regs regs)
  }
  
  #ifdef CONFIG_X86_32
@@ -410,10 +410,10 @@
  #endif
  
 diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
-index 88f1b10..1e31b5e 100644
+index 2cef050..a18ae07 100644
 --- a/arch/x86/mm/init_32.c
 +++ b/arch/x86/mm/init_32.c
-@@ -575,7 +575,7 @@ static int disable_nx __initdata;
+@@ -617,7 +617,7 @@ static int disable_nx __initdata;
   * Control non executable mappings.
   *
   * on      Enable
@@ -422,7 +422,7 @@
   */
  static int __init noexec_setup(char *str)
  {
-@@ -584,14 +584,12 @@ static int __init noexec_setup(char *str)
+@@ -626,14 +626,12 @@ static int __init noexec_setup(char *str)
  			__supported_pte_mask |= _PAGE_NX;
  			disable_nx = 0;
  		}
@@ -443,7 +443,7 @@
  
  	return 0;
  }
-@@ -850,7 +848,11 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
+@@ -892,7 +890,11 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
  	set_nx();
  	if (nx_enabled)
  		printk(KERN_INFO "NX (Execute Disable) protection: active\n");
@@ -456,10 +456,10 @@
  	/* Enable PSE if available */
  	if (cpu_has_pse)
 diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
-index 56fe712..ec932ae 100644
+index 56fe712..30d2be7 100644
 --- a/arch/x86/mm/mmap.c
 +++ b/arch/x86/mm/mmap.c
-@@ -111,13 +111,15 @@ static unsigned long mmap_legacy_base(void)
+@@ -111,13 +111,16 @@ static unsigned long mmap_legacy_base(void)
   */
  void arch_pick_mmap_layout(struct mm_struct *mm)
  {
@@ -471,7 +471,8 @@
  	} else {
  		mm->mmap_base = mmap_base();
  		mm->get_unmapped_area = arch_get_unmapped_area_topdown;
-+		if (!(current->personality & READ_IMPLIES_EXEC))
++		if (!(current->personality & READ_IMPLIES_EXEC)
++		    && mmap_is_ia32())
 +			mm->get_unmapped_exec_area = arch_get_unmapped_exec_area;
  		mm->unmap_area = arch_unmap_area_topdown;
  	}
@@ -490,7 +491,7 @@
  			ret = addr;
  			goto up_fail;
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index bea2152..d750141 100644
+index b58e963..cdc83ce 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
 @@ -316,6 +316,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
@@ -529,7 +530,7 @@
  	.load_idt = xen_load_idt,
  	.load_tls = xen_load_tls,
 diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
-index e3ff2b9..d46dcf2 100644
+index 33b7235..ce1f044 100644
 --- a/fs/binfmt_elf.c
 +++ b/fs/binfmt_elf.c
 @@ -80,7 +80,7 @@ static struct linux_binfmt elf_format = {
@@ -612,10 +613,10 @@
  		min_flt = task->min_flt;
  		maj_flt = task->maj_flt;
 diff --git a/include/linux/mm.h b/include/linux/mm.h
-index e8ddc98..bf87f4a 100644
+index 065cdf8..aa94aa9 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -1122,7 +1122,13 @@ extern int install_special_mapping(struct mm_struct *mm,
+@@ -1135,7 +1135,13 @@ extern int install_special_mapping(struct mm_struct *mm,
  				   unsigned long addr, unsigned long len,
  				   unsigned long flags, struct page **pages);
  
@@ -662,7 +663,7 @@
  /*
   * GPG2 wants 64kB of mlocked memory, to make sure pass phrases
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 4cae9b8..71fe593 100644
+index 8c216e0..79eca33 100644
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
 @@ -98,6 +98,9 @@ struct robust_list_head;
@@ -675,7 +676,7 @@
  /*
   * List of flags we want to share for kernel threads,
   * if only because they are not used by them anyway.
-@@ -343,6 +346,10 @@ extern int sysctl_max_map_count;
+@@ -346,6 +349,10 @@ extern int sysctl_max_map_count;
  extern unsigned long
  arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
  		       unsigned long, unsigned long);
@@ -687,7 +688,7 @@
  arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
  			  unsigned long len, unsigned long pgoff,
 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index 368d163..2e4ab66 100644
+index c5ef44f..f7abce4 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
 @@ -85,6 +85,26 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max;
@@ -717,7 +718,7 @@
  #ifdef CONFIG_RCU_TORTURE_TEST
  extern int rcutorture_runnable;
  #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
-@@ -378,6 +398,14 @@ static struct ctl_table kern_table[] = {
+@@ -379,6 +399,14 @@ static struct ctl_table kern_table[] = {
  		.proc_handler	= &proc_dointvec,
  	},
  	{
@@ -733,7 +734,7 @@
  		.procname	= "core_uses_pid",
  		.data		= &core_uses_pid,
 diff --git a/mm/mmap.c b/mm/mmap.c
-index 8d95902..c84ff1f 100644
+index 00ced3e..931bc3b 100644
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
 @@ -27,6 +27,7 @@
@@ -781,7 +782,7 @@
  }
  
  /*
-@@ -799,6 +816,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -802,6 +819,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
  		} else					/* cases 2, 5, 7 */
  			vma_adjust(prev, prev->vm_start,
  				end, prev->vm_pgoff, NULL);
@@ -790,7 +791,7 @@
  		return prev;
  	}
  
-@@ -954,7 +973,8 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+@@ -956,7 +975,8 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
  	/* Obtain the address to map to. we verify (or select) it and ensure
  	 * that it represents a valid section of the address space.
  	 */
@@ -800,7 +801,7 @@
  	if (addr & ~PAGE_MASK)
  		return addr;
  
-@@ -1439,13 +1459,17 @@ void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr)
+@@ -1436,13 +1456,17 @@ void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr)
  }
  
  unsigned long
@@ -821,7 +822,7 @@
  	if (file && file->f_op && file->f_op->get_unmapped_area)
  		get_area = file->f_op->get_unmapped_area;
  	addr = get_area(file, addr, len, pgoff, flags);
-@@ -1459,8 +1483,76 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
+@@ -1456,8 +1480,76 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
  
  	return arch_rebalance_pgtables(addr, len);
  }
@@ -899,7 +900,7 @@
  
  /* Look up the first VMA which satisfies  addr < vm_end,  NULL if none. */
  struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
-@@ -1535,6 +1627,14 @@ out:
+@@ -1532,6 +1624,14 @@ out:
  	return prev ? prev->vm_next : vma;
  }
  
@@ -914,7 +915,7 @@
  /*
   * Verify that the stack growth is acceptable and
   * update accounting. This is shared with both the
-@@ -1551,7 +1651,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -1548,7 +1648,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
  		return -ENOMEM;
  
  	/* Stack limit test */
@@ -923,7 +924,7 @@
  		return -ENOMEM;
  
  	/* mlock limit tests */
-@@ -1861,10 +1961,14 @@ int split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
+@@ -1858,10 +1958,14 @@ int split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
  	if (new->vm_ops && new->vm_ops->open)
  		new->vm_ops->open(new);
  
@@ -940,7 +941,7 @@
  		vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
  
  	return 0;
-@@ -2111,6 +2215,7 @@ void exit_mmap(struct mm_struct *mm)
+@@ -2110,6 +2214,7 @@ void exit_mmap(struct mm_struct *mm)
  	vm_unacct_memory(nr_accounted);
  	free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0);
  	tlb_finish_mmu(tlb, 0, end);
@@ -949,7 +950,7 @@
  	/*
  	 * Walk the list again, actually closing and freeing it,
 diff --git a/mm/mprotect.c b/mm/mprotect.c
-index abe2694..eb16148 100644
+index 258197b..9af91a3 100644
 --- a/mm/mprotect.c
 +++ b/mm/mprotect.c
 @@ -25,9 +25,14 @@
@@ -976,7 +977,7 @@
  	pgoff_t pgoff;
  	int error;
  	int dirty_accountable = 0;
-@@ -202,6 +207,9 @@ success:
+@@ -203,6 +208,9 @@ success:
  		dirty_accountable = 1;
  	}
  

linux-2.6-v4l-dvb-fixes.patch:

Index: linux-2.6-v4l-dvb-fixes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-v4l-dvb-fixes.patch,v
retrieving revision 1.2.8.2
retrieving revision 1.2.8.3
diff -u -r1.2.8.2 -r1.2.8.3
--- linux-2.6-v4l-dvb-fixes.patch	5 Mar 2009 01:30:24 -0000	1.2.8.2
+++ linux-2.6-v4l-dvb-fixes.patch	12 Mar 2009 20:38:58 -0000	1.2.8.3
@@ -1,20 +1,51 @@
-diff -upr drivers/media/video/v4l2-common.c /home/v4l/tokernel/wrk/linux-2.6/drivers/media/video/v4l2-common.c
---- a/drivers/media/video/v4l2-common.c	2009-02-27 22:44:26.000000000 -0300
-+++ b/drivers/media/video/v4l2-common.c	2009-01-06 22:29:51.000000000 -0200
-@@ -547,7 +547,6 @@ int v4l2_ctrl_query_fill(struct v4l2_que
- 	case V4L2_CID_CONTRAST:
- 	case V4L2_CID_SATURATION:
- 	case V4L2_CID_HUE:
--	case V4L2_CID_SHARPNESS:
- 		qctrl->flags |= V4L2_CTRL_FLAG_SLIDER;
- 		break;
+Gregory Lardiere (1):
+      V4L/DVB (10789): m5602-s5k4aa: Split up the initial sensor probe in chunks.
+
+Mauro Carvalho Chehab (1):
+      V4L/DVB (10834): zoran: auto-select bt866 for AverMedia 6 Eyes
+
+Vitaly Wool (1):
+      V4L/DVB (10832): tvaudio: Avoid breakage with tda9874a
+
+diff --git a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
+index e564a61..48892b5 100644
+--- a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
++++ b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
+@@ -102,7 +102,11 @@ int s5k4aa_probe(struct sd *sd)
  	}
-@@ -586,8 +585,6 @@ int v4l2_ctrl_query_fill_std(struct v4l2
- 		return v4l2_ctrl_query_fill(qctrl, 0, 127, 1, 64);
- 	case V4L2_CID_HUE:
- 		return v4l2_ctrl_query_fill(qctrl, -128, 127, 1, 0);
--	case V4L2_CID_SHARPNESS:
--		return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 0);
  
- 	/* MPEG controls */
- 	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
+ 	/* Test some registers, but we don't know their exact meaning yet */
+-	if (m5602_read_sensor(sd, 0x00, prod_id, sizeof(prod_id)))
++	if (m5602_read_sensor(sd, 0x00, prod_id, 2))
++		return -ENODEV;
++	if (m5602_read_sensor(sd, 0x02, prod_id+2, 2))
++		return -ENODEV;
++	if (m5602_read_sensor(sd, 0x04, prod_id+4, 2))
+ 		return -ENODEV;
+ 
+ 	if (memcmp(prod_id, expected_prod_id, sizeof(prod_id)))
+diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
+index 5aeccb3..076ed5b 100644
+--- a/drivers/media/video/tvaudio.c
++++ b/drivers/media/video/tvaudio.c
+@@ -54,7 +54,7 @@ MODULE_LICENSE("GPL");
+ /* ---------------------------------------------------------------------- */
+ /* our structs                                                            */
+ 
+-#define MAXREGS 64
++#define MAXREGS 256
+ 
+ struct CHIPSTATE;
+ typedef int  (*getvalue)(int);
+diff --git a/drivers/media/video/zoran/Kconfig b/drivers/media/video/zoran/Kconfig
+index 4ea5fa7..8666e19 100644
+--- a/drivers/media/video/zoran/Kconfig
++++ b/drivers/media/video/zoran/Kconfig
+@@ -68,6 +68,7 @@ config VIDEO_ZORAN_AVS6EYES
+ 	tristate "AverMedia 6 Eyes support (EXPERIMENTAL)"
+ 	depends on VIDEO_ZORAN_ZR36060 && EXPERIMENTAL && VIDEO_V4L1
+ 	select VIDEO_BT856 if VIDEO_HELPER_CHIPS_AUTO
++	select VIDEO_BT866 if VIDEO_HELPER_CHIPS_AUTO
+ 	select VIDEO_KS0127 if VIDEO_HELPER_CHIPS_AUTO
+ 	help
+ 	  Support for the AverMedia 6 Eyes video surveillance card.

linux-2.6-v4l-dvb-update.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.1.2.4 -r 1.1.2.5 linux-2.6-v4l-dvb-update.patch
Index: linux-2.6-v4l-dvb-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-v4l-dvb-update.patch,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -u -r1.1.2.4 -r1.1.2.5
--- linux-2.6-v4l-dvb-update.patch	5 Mar 2009 22:45:10 -0000	1.1.2.4
+++ linux-2.6-v4l-dvb-update.patch	12 Mar 2009 20:38:58 -0000	1.1.2.5
@@ -1,9 +1,566 @@
+Abylay Ospan (3):
+      V4L/DVB (10796): Add init code for NetUP Dual DVB-S2 CI card
+      V4L/DVB (10797): Add EEPROM code for NetUP Dual DVB-S2 CI card.
+      V4L/DVB (10798): Add CIMax(R) SP2 Common Interface code for NetUP Dual DVB-S2 CI card
+
+Adam Baker (2):
+      V4L/DVB (10639): gspca - sq905: New subdriver.
+      V4L/DVB (10829): Support alternate resolutions for sq905
+
+Alexey Klimov (16):
+      V4L/DVB (10316): v4l/dvb: use usb_make_path in usb-radio drivers
+      V4L/DVB (10324): em28xx: Correct mailing list
+      V4L/DVB (10335): gspca - all subdrivers: Fix CodingStyle in sd_mod_init function.
+      V4L/DVB (10336): gspca - all subdrivers: Return ret instead of -1 in sd_mod_init.
+      V4L/DVB (10455): radio-mr800: codingstyle cleanups
+      V4L/DVB (10456): radio-mr800: place dev_err instead of dev_warn
+      V4L/DVB (10457): radio-mr800: add more dev_err messages in probe
+      V4L/DVB (10458): radio-mr800: move radio start and stop in one function
+      V4L/DVB (10459): radio-mr800: fix amradio_set_freq
+      V4L/DVB (10460): radio-mr800: add stereo support
+      V4L/DVB (10461): radio-mr800: add few lost mutex locks
+      V4L/DVB (10462): radio-mr800: increase version and add comments
+      V4L/DVB (10463): radio-mr800: fix checking of retval after usb_bulk_msg
+      V4L/DVB (10464): radio-si470x: use usb_make_path in usb-radio drivers
+      V4L/DVB (10465): dsbr100: Add few lost mutex locks.
+      V4L/DVB (10522): em28xx-audio: replace printk with em28xx_errdev
+
+Andy Walls (40):
+      V4L/DVB (10274): cx18: Fix a PLL divisor update for the I2S master clock
+      V4L/DVB (10275): cx18: Additional debug to display outgoing mailbox parameters
+      V4L/DVB (10276): cx18, cx2341x, ivtv: Add AC-3 audio encoding control to cx18
+      V4L/DVB (10277): cx18, cx2341x: Fix bugs in cx18 AC3 control and comply with V4L2 spec
+      V4L/DVB (10278): cx18: Fix bad audio in first analog capture.
+      V4L/DVB (10279): cx18: Print driver version number when logging status
+      V4L/DVB (10280): cx18: Rename structure members: dev to pci_dev and v4l2dev to video_dev
+      V4L/DVB (10281): cx18: Conversion to new V4L2 framework: use v4l2_device object
+      V4L/DVB (10283): cx18: Call request_module() with proper argument types.
+      V4L/DVB (10284): cx18: Add initial entry for a Leadtek DVR3100 H hybrid card
+      V4L/DVB (10433): cx18: Defer A/V core initialization until a valid cx18_av_cmd arrives
+      V4L/DVB (10434): cx18: Smarter verification of CX18_AUDIO_ENABLE register writes
+      V4L/DVB (10435): cx18: Normalize APU after second APU firmware load
+      V4L/DVB (10436): cx18: Fix coding style of a switch statement per checkpatch.pl
+      V4L/DVB (10437): cx18: Remove an unused spinlock
+      V4L/DVB (10439): cx18: Clean-up and enable sliced VBI handling
+      V4L/DVB (10440): cx18: Fix presentation timestamp (PTS) for VBI buffers
+      V4L/DVB (10441): cx18: Fix VBI ioctl() handling and Raw/Sliced VBI state management
+      V4L/DVB (10442): cx18: Fixes for enforcing when Encoder Raw VBI params can be set
+      V4L/DVB (10443): cx18: Use correct line counts per field in firmware API call
+      V4L/DVB (10444): cx18: Fix sliced VBI PTS and fix artifacts in last raw line of field
+      V4L/DVB (10445): cx18: Process Raw VBI on a whole frame basis; fix VBI buffer size
+      V4L/DVB (10446): cx18: Finally get sliced VBI working - for 525 line 60 Hz systems at least
+      V4L/DVB (10755): cx18: Convert the integrated A/V decoder core interface to a v4l2_subdev
+      V4L/DVB (10756): cx18: Slim down instance handling, build names from v4l2_device.name
+      V4L/DVB (10757): cx18, v4l2-chip-ident: Finish conversion of AV decoder core to v4l2_subdev
+      V4L/DVB (10758): cx18: Convert I2C devices to v4l2_subdevices
+      V4L/DVB (10759): cx18: Convert GPIO connected functions to act as v4l2_subdevices
+      V4L/DVB (10760): cx18: Fix a memory leak of buffers used for sliced VBI insertion
+      V4L/DVB (10761): cx18: Change log lines for internal subdevs and fix tveeprom reads
+      V4L/DVB (10762): cx18: Get rid of unused variables related to video output
+      V4L/DVB (10763): cx18: Increment version number due to significant changes for v4l2_subdevs
+      V4L/DVB (10764): cx18: Disable AC3 controls as the firmware doesn't support AC3
+      V4L/DVB (10850): cx18: Use strlcpy() instead of strncpy() for temp eeprom i2c_client setup
+      V4L/DVB (10851): cx18: Fix a video scaling check problem introduced by sliced VBI changes
+      V4L/DVB (10852): cx18: Include cx18-audio.h in cx18-audio.c to eliminate s-parse warning
+      V4L/DVB (10853): cx18: Fix s-parse warnings and a logic error about extracting the VBI PTS
+      V4L/DVB (10854): cx18: Correct comments about vertical and horizontal blanking timings
+      V4L/DVB (10855): cx18: Fix VPS service register codes
+      V4L/DVB (10856): cx18: Add interlock so sliced VBI insertion only happens for an MPEG PS
+
+Antoine Jacquet (1):
+      V4L/DVB (10263): zr364xx: add support for Aiptek DV T300
+
+Antonio Ospite (2):
+      V4L/DVB (10344): gspca - ov534: Disable the Hercules webcams.
+      V4L/DVB (10676): mt9m111: Call icl->reset() on mt9m111_reset().
+
+Antti Palosaari (2):
+      V4L/DVB (10286): af9015: add new USB ID for KWorld DVB-T 395U
+      V4L/DVB (10329): af9015: remove dual_mode module param
+
+Arne Luehrs (1):
+      V4L/DVB (10319): dib0700: enable IR receiver in Nova TD usb stick (52009)
+
+Bruno Christo (1):
+      V4L/DVB (10827): Add support for GeoVision GV-800(S)
+
+Devin Heitmueller (2):
+      V4L/DVB (10320): dib0700: fix i2c error message to make data type clear
+      V4L/DVB (10321): dib0700: Report dib0700_i2c_enumeration failures
+
+Douglas Kosovic (1):
+      V4L/DVB (10299): bttv: Add support for IVCE-8784 support for V4L2 bttv driver
+
+Douglas Schilling Landgraf (12):
+      V4L/DVB (10323): em28xx: Add entry for GADMEI TVR200
+      V4L/DVB (10326): em28xx: Cleanup: fix bad whitespacing
+      V4L/DVB (10327): em28xx: Add check before call em28xx_isoc_audio_deinit()
+      V4L/DVB (10517): em28xx: remove bad check (changeset a31c595188af)
+      V4L/DVB (10520): em28xx-audio: Add spinlock for trigger
+      V4L/DVB (10521): em28xx-audio: Add lock for users
+      V4L/DVB (10523): em28xx-audio: Add macros EM28XX_START_AUDIO / EM28XX_STOP_AUDIO
+      V4L/DVB (10524): em28xx: Add DVC 101 model to Pinnacle Dazzle description
+      V4L/DVB (10556): em28xx-cards: Add Pinnacle Dazzle Video Creator Plus DVC107 description
+      V4L/DVB (10739): em28xx-cards: remove incorrect entry
+      V4L/DVB (10740): em28xx-cards: Add SIIG AVTuner-PVR board
+      V4L/DVB (10741): em28xx: Add Kaiser Baas Video to DVD maker support
+
+Erik Andren (3):
+      V4L/DVB (10334): gspca - stv06xx: Rework control description.
+      V4L/DVB (10341): gspca - stv06xx: Plug a memory leak in the pb0100 sensor driver.
+      V4L/DVB (10342): gspca - stv06xx: Add ctrl caching to the vv6410.
+
+Erik S. Beiser (1):
+      V4L/DVB (10826): cx88: Add IR support to pcHDTV HD3000 & HD5500
+
+Guennadi Liakhovetski (5):
+      V4L/DVB (10665): soc-camera: add data signal polarity flags to drivers
+      V4L/DVB (10672): sh_mobile_ceu_camera: include NV* formats into the format list only once.
+      V4L/DVB (10673): mt9t031: fix gain and hflip controls, register update, and scaling
+      V4L/DVB (10674): soc-camera: camera host driver for i.MX3x SoCs
+      V4L/DVB (10675): soc-camera: extend soc_camera_bus_param_compatible with more tests
+
+Hans Verkuil (107):
+      V4L/DVB (10231): v4l2-subdev: add v4l2_ext_controls support
+      V4L/DVB (10244): v4l2: replace a few snprintfs with strlcpy
+      V4L/DVB (10246): saa6752hs: convert to v4l2_subdev.
+      V4L/DVB (10247): saa7134: convert to the new v4l2 framework.
+      V4L/DVB (10249): v4l2-common: added v4l2_i2c_tuner_addrs()
+      V4L/DVB (10251): cx25840: add comments explaining what the init() does.
+      V4L/DVB (10252): v4l2 doc: explain why v4l2_device_unregister_subdev() has to be called.
+      V4L/DVB (10271): saa7146: convert to video_ioctl2.
+      V4L/DVB (10272): av7110: test type field in VIDIOC_G_SLICED_VBI_CAP
+      V4L/DVB (10291): em28xx: fix VIDIOC_G_CTRL when there is no msp34xx device.
+      V4L/DVB (10313): saa7146: fix VIDIOC_ENUMSTD.
+      V4L/DVB (10406): gspca: fix compiler warning
+      V4L/DVB (10408): v4l2: fix incorrect hue range check
+      V4L/DVB (10409): v4l: remove unused I2C_DRIVERIDs.
+      V4L/DVB (10486): ivtv/cx18: fix g_fmt and try_fmt for raw video
+      V4L/DVB (10487): doc: update hm12 documentation.
+      V4L/DVB (10488): ivtv: cleanup naming conventions
+      V4L/DVB (10489): doc: use consistent naming conventions for vdev and v4l2_dev.
+      V4L/DVB (10490): v4l2: prefill ident and revision from v4l2_dbg_chip_ident.
+      V4L/DVB (10496): saa7146: implement v4l2_device support.
+      V4L/DVB (10497): saa7146: i2c adapdata now points to v4l2_device.
+      V4L/DVB (10498): saa7146: the adapter class will be NULL when v4l2_subdev is used.
+      V4L/DVB (10499): saa7146: convert saa7146 and mxb in particular to v4l2_subdev.
+      V4L/DVB (10500): saa7146: setting control while capturing should return EBUSY, not EINVAL.
+      V4L/DVB (10501): saa7146: prevent unnecessary loading of v4l2-common.
+      V4L/DVB (10502): saa7146: move v4l2 device registration to saa7146_vv.
+      V4L/DVB (10536): saa6588: convert to v4l2-i2c-drv-legacy.h
+      V4L/DVB (10537): saa6588: convert to v4l2_subdev.
+      V4L/DVB (10538): saa6588: add g_chip_ident support.
+      V4L/DVB (10539): saa6588: remove legacy_class, not needed for saa6588
+      V4L/DVB (10540): cx2341x: fixed bug causing several audio controls to be no longer listed
+      V4L/DVB (10542): v4l2-subdev: add querystd and g_input_status
+      V4L/DVB (10544): v4l2-common: add comments warning that about the sort order
+      V4L/DVB (10641): v4l2-dev: remove limit of 32 devices per driver in get_index()
+      V4L/DVB (10642): vivi: update comment to reflect that vivi can now create more than 32 devs.
+      V4L/DVB (10643): v4l2-device: allow a NULL parent device when registering.
+      V4L/DVB (10644): v4l2-subdev: rename dev field to v4l2_dev
+      V4L/DVB (10645): vivi: introduce v4l2_device and do several cleanups
+      V4L/DVB (10646): vivi: controls are per-device, not global.
+      V4L/DVB (10647): vivi: add slider flag to controls.
+      V4L/DVB (10685): v4l2: add colorfx support to v4l2-common.c, and add to 'Changes' in spec.
+      V4L/DVB (10686): v4l2: add V4L2_CTRL_FLAG_WRITE_ONLY flag.
+      V4L/DVB (10687): v4l2-common/v4l2-spec: support/document write-only and button controls
+      V4L/DVB (10691): v4l2-common: add v4l2_i2c_subdev_addr()
+      V4L/DVB (10692): usbvision: convert to v4l2_device/v4l2_subdev.
+      V4L/DVB (10698): v4l2-common: remove v4l2_ctrl_query_fill_std
+      V4L/DVB (10700): saa7115: don't access reg 0x87 if it is not present.
+      V4L/DVB (10701): saa7185: add colorbar support.
+      V4L/DVB (10702): saa7115: add querystd and g_input_status support for zoran.
+      V4L/DVB (10703): zoran: convert to video_ioctl2 and remove 'ready_to_be_freed' hack.
+      V4L/DVB (10704): zoran: remove broken BIGPHYS_AREA and BUZ_HIMEM code, and allow for kmallocs > 128 kB
+      V4L/DVB (10705): zoran: use slider flag with volume etc. controls.
+      V4L/DVB (10706): zoran: fix field typo.
+      V4L/DVB (10707): zoran: set bytesperline to 0 when using MJPEG.
+      V4L/DVB (10708): zoran: remove old V4L1 ioctls, use v4l1-compat instead.
+      V4L/DVB (10709): zoran: set correct parent of the video device.
+      V4L/DVB (10710): zoran: cleanups in an attempt to make the source a bit more readable.
+      V4L/DVB (10711): zoran: fix TRY_FMT support
+      V4L/DVB (10712): zoran: fix G_FMT
+      V4L/DVB (10713): zoran: if reqbufs is called with count == 0, do a streamoff.
+      V4L/DVB (10714): zoran et al: convert zoran i2c modules to V4L2.
+      V4L/DVB (10715): zoran: clean up some old V4L1 left-overs and remove the MAP_NR macro.
+      V4L/DVB (10716): zoran: change buffer defaults to something that works with tvtime
+      V4L/DVB (10717): zoran: TRY_FMT and S_FMT now do the same parameter checks.
+      V4L/DVB (10718): bt866: convert to v4l2_subdev.
+      V4L/DVB (10719): bt819: convert to v4l2_subdev.
+      V4L/DVB (10720): bt819: that delay include is needed after all.
+      V4L/DVB (10721): bt856: convert to v4l2_subdev.
[...36008 lines suppressed...]
+@@ -4340,10 +3291,7 @@ zoran_vm_close (struct vm_area_struct *vma)
  					    ZORAN_FREE;
  					spin_unlock_irqrestore(&zr->spinlock, flags);
  				}
@@ -66295,7 +80655,7 @@
  				mutex_unlock(&zr->resource_lock);
  			}
  
-@@ -4582,11 +3531,56 @@ zoran_mmap (struct file           *file,
+@@ -4582,11 +3530,56 @@ zoran_mmap (struct file           *file,
  	return 0;
  }
  
@@ -66353,7 +80713,7 @@
  	.read = zoran_read,
  	.write = zoran_write,
  	.mmap = zoran_mmap,
-@@ -4596,7 +3590,9 @@ static const struct v4l2_file_operations zoran_fops = {
+@@ -4596,7 +3589,9 @@ static const struct v4l2_file_operations zoran_fops = {
  struct video_device zoran_template __devinitdata = {
  	.name = ZORAN_NAME,
  	.fops = &zoran_fops,
@@ -66443,17 +80803,72 @@
  };
  
 diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index b97cdc5..e6bfd4d 100644
+index 106c3ba..5bd3efd 100644
 --- a/include/linux/Kbuild
 +++ b/include/linux/Kbuild
-@@ -157,7 +157,6 @@ header-y += un.h
+@@ -157,8 +157,6 @@ header-y += ultrasound.h
+ header-y += un.h
  header-y += utime.h
  header-y += veth.h
- header-y += video_decoder.h
+-header-y += video_decoder.h
 -header-y += video_encoder.h
  header-y += videotext.h
  header-y += x25.h
  
+diff --git a/include/linux/video_decoder.h b/include/linux/video_decoder.h
+deleted file mode 100644
+index e26c0c8..0000000
+--- a/include/linux/video_decoder.h
++++ /dev/null
+@@ -1,48 +0,0 @@
+-#ifndef _LINUX_VIDEO_DECODER_H
+-#define _LINUX_VIDEO_DECODER_H
+-
+-#include <linux/types.h>
+-
+-#define HAVE_VIDEO_DECODER 1
+-
+-struct video_decoder_capability { /* this name is too long */
+-	__u32	flags;
+-#define	VIDEO_DECODER_PAL	1	/* can decode PAL signal */
+-#define	VIDEO_DECODER_NTSC	2	/* can decode NTSC */
+-#define	VIDEO_DECODER_SECAM	4	/* can decode SECAM */
+-#define	VIDEO_DECODER_AUTO	8	/* can autosense norm */
+-#define	VIDEO_DECODER_CCIR	16	/* CCIR-601 pixel rate (720 pixels per line) instead of square pixel rate */
+-	int	inputs;			/* number of inputs */
+-	int	outputs;		/* number of outputs */
+-};
+-
+-/*
+-DECODER_GET_STATUS returns the following flags.  The only one you need is
+-DECODER_STATUS_GOOD, the others are just nice things to know.
+-*/
+-#define	DECODER_STATUS_GOOD	1	/* receiving acceptable input */
+-#define	DECODER_STATUS_COLOR	2	/* receiving color information */
+-#define	DECODER_STATUS_PAL	4	/* auto detected */
+-#define	DECODER_STATUS_NTSC	8	/* auto detected */
+-#define	DECODER_STATUS_SECAM	16	/* auto detected */
+-
+-struct video_decoder_init {
+-	unsigned char len;
+-	const unsigned char *data;
+-};
+-
+-#define	DECODER_GET_CAPABILITIES _IOR('d', 1, struct video_decoder_capability)
+-#define	DECODER_GET_STATUS    	_IOR('d', 2, int)
+-#define	DECODER_SET_NORM	_IOW('d', 3, int)
+-#define	DECODER_SET_INPUT	_IOW('d', 4, int)	/* 0 <= input < #inputs */
+-#define	DECODER_SET_OUTPUT	_IOW('d', 5, int)	/* 0 <= output < #outputs */
+-#define	DECODER_ENABLE_OUTPUT	_IOW('d', 6, int)	/* boolean output enable control */
+-#define	DECODER_SET_PICTURE   	_IOW('d', 7, struct video_picture)
+-#define	DECODER_SET_GPIO	_IOW('d', 8, int)	/* switch general purpose pin */
+-#define	DECODER_INIT		_IOW('d', 9, struct video_decoder_init)	/* init internal registers at once */
+-#define	DECODER_SET_VBI_BYPASS	_IOW('d', 10, int)	/* switch vbi bypass */
+-
+-#define	DECODER_DUMP		_IO('d', 192)		/* debug hook */
+-
+-
+-#endif
 diff --git a/include/linux/video_encoder.h b/include/linux/video_encoder.h
 deleted file mode 100644
 index b7b6423..0000000
@@ -66483,6 +80898,42 @@
 -
 -
 -#endif
+diff --git a/include/linux/videodev.h b/include/linux/videodev.h
+index 837f392..b19eab1 100644
+--- a/include/linux/videodev.h
++++ b/include/linux/videodev.h
+@@ -16,6 +16,23 @@
+ #include <linux/ioctl.h>
+ #include <linux/videodev2.h>
+ 
++#if defined(__MIN_V4L1) && defined (__KERNEL__)
++
++/*
++ * Used by those V4L2 core functions that need a minimum V4L1 support,
++ * in order to allow V4L1 Compatibilty code compilation.
++ */
++
++struct video_mbuf
++{
++	int	size;		/* Total memory to map */
++	int	frames;		/* Frames */
++	int	offsets[VIDEO_MAX_FRAME];
++};
++
++#define VIDIOCGMBUF		_IOR('v',20, struct video_mbuf)		/* Memory map buffer info */
++
++#else
+ #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
+ 
+ #define VID_TYPE_CAPTURE	1	/* Can capture */
+@@ -312,6 +329,7 @@ struct video_code
+ #define VID_PLAY_END_MARK		14
+ 
+ #endif /* CONFIG_VIDEO_V4L1_COMPAT */
++#endif /* __MIN_V4L1 */
+ 
+ #endif /* __LINUX_VIDEODEV_H */
+ 
 diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
 index 5571dbe..11b8b3e 100644
 --- a/include/linux/videodev2.h
@@ -66735,7 +81186,7 @@
  
  extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl,
 diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h
-index 9aaf652..70117e7 100644
+index 9aaf652..43684f1 100644
 --- a/include/media/v4l2-chip-ident.h
 +++ b/include/media/v4l2-chip-ident.h
 @@ -37,10 +37,8 @@ enum {
@@ -66750,7 +81201,7 @@
  	V4L2_IDENT_SAA7113 = 103,
  	V4L2_IDENT_SAA7114 = 104,
  	V4L2_IDENT_SAA7115 = 105,
-@@ -63,30 +61,82 @@ enum {
+@@ -63,30 +61,88 @@ enum {
  	V4L2_IDENT_OV7720 = 251,
  	V4L2_IDENT_OV7725 = 252,
  
@@ -66764,6 +81215,9 @@
  	V4L2_IDENT_CX23416 = 416,
  	V4L2_IDENT_CX23418 = 418,
  
++	/* module indycam: just ident 2000 */
++	V4L2_IDENT_INDYCAM = 2000,
++
 +	/* module bt819: reserved range 810-819 */
 +	V4L2_IDENT_BT815A = 815,
 +	V4L2_IDENT_BT817A = 817,
@@ -66822,6 +81276,9 @@
 +	/* module saa7185: just ident 7185 */
 +	V4L2_IDENT_SAA7185 = 7185,
 +
++	/* module saa7191: just ident 7191 */
++	V4L2_IDENT_SAA7191 = 7191,
++
  	/* module wm8739: just ident 8739 */
  	V4L2_IDENT_WM8739 = 8739,
  
@@ -66978,10 +81435,18 @@
  
  #endif
 diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h
-index b01c044..a8b4c0b 100644
+index b01c044..7a4529d 100644
 --- a/include/media/v4l2-ioctl.h
 +++ b/include/media/v4l2-ioctl.h
-@@ -267,6 +267,7 @@ struct v4l2_ioctl_ops {
+@@ -15,6 +15,7 @@
+ #include <linux/mutex.h>
+ #include <linux/compiler.h> /* need __user */
+ #ifdef CONFIG_VIDEO_V4L1_COMPAT
++#define __MIN_V4L1
+ #include <linux/videodev.h>
+ #else
+ #include <linux/videodev2.h>
+@@ -267,6 +268,7 @@ struct v4l2_ioctl_ops {
  
  /*  Video standard functions  */
  extern const char *v4l2_norm_to_name(v4l2_std_id id);

linux-2.6.29-lirc.patch:

Index: linux-2.6.29-lirc.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6.29-lirc.patch,v
retrieving revision 1.3.6.1
retrieving revision 1.3.6.2
diff -u -r1.3.6.1 -r1.3.6.2
--- linux-2.6.29-lirc.patch	5 Mar 2009 01:30:25 -0000	1.3.6.1
+++ linux-2.6.29-lirc.patch	12 Mar 2009 20:38:59 -0000	1.3.6.2
@@ -12,7 +12,7 @@
  drivers/input/lirc/Makefile           |   21 +
  drivers/input/lirc/lirc.h             |  100 +++
  drivers/input/lirc/lirc_bt829.c       |  383 +++++++++
- drivers/input/lirc/lirc_dev.c         |  853 +++++++++++++++++++
+ drivers/input/lirc/lirc_dev.c         |  848 +++++++++++++++++++
  drivers/input/lirc/lirc_dev.h         |  180 ++++
  drivers/input/lirc/lirc_i2c.c         |  649 ++++++++++++++
  drivers/input/lirc/lirc_igorplugusb.c |  556 ++++++++++++
@@ -20,17 +20,17 @@
  drivers/input/lirc/lirc_it87.c        |  984 ++++++++++++++++++++++
  drivers/input/lirc/lirc_it87.h        |  116 +++
  drivers/input/lirc/lirc_ite8709.c     |  539 ++++++++++++
- drivers/input/lirc/lirc_mceusb.c      |  747 +++++++++++++++++
- drivers/input/lirc/lirc_mceusb2.c     | 1099 ++++++++++++++++++++++++
+ drivers/input/lirc/lirc_mceusb.c      |  749 +++++++++++++++++
+ drivers/input/lirc/lirc_mceusb2.c     | 1098 ++++++++++++++++++++++++
  drivers/input/lirc/lirc_parallel.c    |  709 ++++++++++++++++
  drivers/input/lirc/lirc_parallel.h    |   26 +
  drivers/input/lirc/lirc_sasem.c       |  931 +++++++++++++++++++++
  drivers/input/lirc/lirc_serial.c      | 1321 +++++++++++++++++++++++++++++
  drivers/input/lirc/lirc_sir.c         | 1294 ++++++++++++++++++++++++++++
- drivers/input/lirc/lirc_streamzap.c   |  775 +++++++++++++++++
+ drivers/input/lirc/lirc_streamzap.c   |  777 +++++++++++++++++
  drivers/input/lirc/lirc_ttusbir.c     |  398 +++++++++
  drivers/input/lirc/lirc_zilog.c       | 1382 ++++++++++++++++++++++++++++++
- 25 files changed, 14681 insertions(+), 0 deletions(-)
+ 25 files changed, 14679 insertions(+), 0 deletions(-)
 
 diff --git a/MAINTAINERS b/MAINTAINERS
 index 59fd2d1..ad1b16c 100644
@@ -334,7 +334,7 @@
 +#endif
 diff --git a/drivers/input/lirc/lirc_bt829.c b/drivers/input/lirc/lirc_bt829.c
 new file mode 100644
-index 0000000..c3852f2
+index 0000000..0485884
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_bt829.c
 @@ -0,0 +1,383 @@
@@ -412,20 +412,20 @@
 +	my_dev = pci_get_device(PCI_VENDOR_ID_ATI,
 +				PCI_DEVICE_ID_ATI_264VT, NULL);
 +	if (my_dev) {
-+		printk(KERN_ERR DRIVER_NAME "Using device: %s\n",
++		printk(KERN_ERR DRIVER_NAME ": Using device: %s\n",
 +		       pci_name(my_dev));
 +		pci_addr_phys = 0;
 +		if (my_dev->resource[0].flags & IORESOURCE_MEM) {
 +			pci_addr_phys = my_dev->resource[0].start;
-+			printk(KERN_INFO DRIVER_NAME "memory at 0x%08X \n",
++			printk(KERN_INFO DRIVER_NAME ": memory at 0x%08X \n",
 +			       (unsigned int)pci_addr_phys);
 +		}
 +		if (pci_addr_phys == 0) {
-+			printk(KERN_ERR DRIVER_NAME "no memory resource ?\n");
++			printk(KERN_ERR DRIVER_NAME ": no memory resource ?\n");
 +			return NULL;
 +		}
 +	} else {
-+		printk(KERN_ERR DRIVER_NAME "pci_probe failed\n");
++		printk(KERN_ERR DRIVER_NAME ": pci_probe failed\n");
 +		return NULL;
 +	}
 +	return my_dev;
@@ -480,7 +480,7 @@
 +
 +	atir_minor = lirc_register_driver(&atir_driver);
 +	if (atir_minor < 0) {
-+		printk(KERN_ERR DRIVER_NAME "failed to register driver!\n");
++		printk(KERN_ERR DRIVER_NAME ": failed to register driver!\n");
 +		return atir_minor;
 +	}
 +	dprintk("driver is registered on minor %d\n", atir_minor);
@@ -499,7 +499,7 @@
 +{
 +	pci_addr_lin = ioremap(pci_addr_phys + DATA_PCI_OFF, 0x400);
 +	if (pci_addr_lin == 0) {
-+		printk(KERN_INFO DRIVER_NAME "pci mem must be mapped\n");
++		printk(KERN_INFO DRIVER_NAME ": pci mem must be mapped\n");
 +		return 0;
 +	}
 +	return 1;
@@ -723,10 +723,10 @@
 +MODULE_PARM_DESC(debug, "Debug enabled or not");
 diff --git a/drivers/input/lirc/lirc_dev.c b/drivers/input/lirc/lirc_dev.c
 new file mode 100644
-index 0000000..dddd999
+index 0000000..6829268
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_dev.c
-@@ -0,0 +1,853 @@
+@@ -0,0 +1,848 @@
 +/*
 + * LIRC base driver
 + *
@@ -890,6 +890,7 @@
 +
 +
 +static struct file_operations fops = {
++	.owner		= THIS_MODULE,
 +	.read		= lirc_dev_fop_read,
 +	.write		= lirc_dev_fop_write,
 +	.poll		= lirc_dev_fop_poll,
@@ -899,7 +900,6 @@
 +#endif
 +	.open		= lirc_dev_fop_open,
 +	.release	= lirc_dev_fop_close,
-+	.owner		= THIS_MODULE,
 +};
 +
 +static int lirc_cdev_add(struct irctl *ir)
@@ -1182,11 +1182,6 @@
 +		goto error;
 +	}
 +
-+	/* there is no need for locking here because ir->open is 0
-+	 * and lirc_thread isn't using buffer
-+	 * drivers which use irq's should allocate them on set_use_inc,
-+	 * so there should be no problem with those either.
-+	 */
 +	lirc_buffer_clear(ir->buf);
 +
 +	if (ir->d.owner != NULL && try_module_get(ir->d.owner)) {
@@ -1582,7 +1577,7 @@
 +MODULE_PARM_DESC(debug, "Enable debugging messages");
 diff --git a/drivers/input/lirc/lirc_dev.h b/drivers/input/lirc/lirc_dev.h
 new file mode 100644
-index 0000000..b12d519
+index 0000000..41d0d04
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_dev.h
 @@ -0,0 +1,180 @@
@@ -1624,7 +1619,7 @@
 +	else
 +		WARN(1, "calling lirc_buffer_clear on an uninitialized lirc_buffer\n");
 +}
-+static int lirc_buffer_init(struct lirc_buffer *buf,
++static inline int lirc_buffer_init(struct lirc_buffer *buf,
 +				    unsigned int chunk_size,
 +				    unsigned int size)
 +{
@@ -1637,33 +1632,33 @@
 +		return -ENOMEM;
 +	return 0;
 +}
-+static void lirc_buffer_free(struct lirc_buffer *buf)
++static inline void lirc_buffer_free(struct lirc_buffer *buf)
 +{
 +	if (buf->fifo)
 +		kfifo_free(buf->fifo);
 +	else
 +		WARN(1, "calling lirc_buffer_free on an uninitialized lirc_buffer\n");
 +}
-+static int lirc_buffer_full(struct lirc_buffer *buf)
++static inline int lirc_buffer_full(struct lirc_buffer *buf)
 +{
-+	return kfifo_len(buf->fifo) == buf->fifo->size;
++	return kfifo_len(buf->fifo) == buf->size * buf->chunk_size;
 +}
-+static int lirc_buffer_empty(struct lirc_buffer *buf)
++static inline int lirc_buffer_empty(struct lirc_buffer *buf)
 +{
 +	return !kfifo_len(buf->fifo);
 +}
-+static int lirc_buffer_available(struct lirc_buffer *buf)
++static inline int lirc_buffer_available(struct lirc_buffer *buf)
 +{
-+	return (buf->size - kfifo_len(buf->fifo)) / buf->chunk_size;
++	return buf->size - (kfifo_len(buf->fifo) / buf->chunk_size);
 +}
 +
-+static void lirc_buffer_read(struct lirc_buffer *buf,
++static inline void lirc_buffer_read(struct lirc_buffer *buf,
 +			       unsigned char *dest)
 +{
-+	if (kfifo_len(buf->fifo) > buf->chunk_size)
++	if (kfifo_len(buf->fifo) >= buf->chunk_size)
 +		kfifo_get(buf->fifo, dest, buf->chunk_size);
 +}
-+static void lirc_buffer_write(struct lirc_buffer *buf,
++static inline void lirc_buffer_write(struct lirc_buffer *buf,
 +				unsigned char *orig)
 +{
 +	kfifo_put(buf->fifo, orig, buf->chunk_size);
@@ -6135,10 +6130,10 @@
 +MODULE_PARM_DESC(debug, "Enable debugging messages");
 diff --git a/drivers/input/lirc/lirc_mceusb.c b/drivers/input/lirc/lirc_mceusb.c
 new file mode 100644
-index 0000000..2e94699
+index 0000000..12d9723
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_mceusb.c
-@@ -0,0 +1,747 @@
+@@ -0,0 +1,749 @@
 +/*
 + * USB Microsoft IR Transceiver driver - 0.2
 + *
@@ -6752,6 +6747,8 @@
 +				      (udev, endpoint->bEndpointAddress),
 +				      dev->bulk_out_buffer, buffer_size,
 +				      mceusb_write_bulk_callback, dev);
++			dev->write_urb->transfer_dma = dev->dma_out;
++			dev->write_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 +		}
 +	}
 +
@@ -6888,10 +6885,10 @@
 +MODULE_PARM_DESC(debug, "Debug enabled or not");
 diff --git a/drivers/input/lirc/lirc_mceusb2.c b/drivers/input/lirc/lirc_mceusb2.c
 new file mode 100644
-index 0000000..0551adf
+index 0000000..4c24b79
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_mceusb2.c
-@@ -0,0 +1,1099 @@
+@@ -0,0 +1,1098 @@
 +/*
 + * LIRC driver for Philips eHome USB Infrared Transceiver
 + * and the Microsoft MCE 2005 Remote Control
@@ -7196,8 +7193,7 @@
 +					usb_fill_int_urb(async_urb, ir->usbdev,
 +						usb_sndintpipe(ir->usbdev,
 +							ep->bEndpointAddress),
-+					async_buf,
-+					size,
++					async_buf, size,
 +					(usb_complete_t) usb_async_callback,
 +					ir, ep->bInterval);
 +
@@ -9677,7 +9673,7 @@
 +module_exit(sasem_exit);
 diff --git a/drivers/input/lirc/lirc_serial.c b/drivers/input/lirc/lirc_serial.c
 new file mode 100644
-index 0000000..3e9292e
+index 0000000..01cc8b7
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_serial.c
 @@ -0,0 +1,1321 @@
@@ -10562,7 +10558,7 @@
 +	/* If pin is high, then this must be an active low receiver. */
 +	if (sense == -1) {
 +		/* wait 1/2 sec for the power supply */
-+		msleep(jiffies_to_msecs(HZ/2));
++		msleep(500);
 +
 +		/*
 +		 * probe 9 times every 0.04s, collect "votes" for
@@ -10575,7 +10571,7 @@
 +				nlow++;
 +			else
 +				nhigh++;
-+			msleep(jiffies_to_msecs(HZ/25));
++			msleep(40);
 +		}
 +		sense = (nlow >= nhigh ? 1 : 0);
 +		printk(KERN_INFO LIRC_DRIVER_NAME  ": auto-detected active "
@@ -10592,11 +10588,6 @@
 +	int result;
 +	unsigned long flags;
 +
-+	/* Init read buffer. */
-+	result = lirc_buffer_init(&rbuf, sizeof(int), RBUF_LEN);
-+	if (result < 0)
-+		return -ENOMEM;
-+
 +	/* initialize timestamp */
 +	do_gettimeofday(&lasttv);
 +
@@ -10846,6 +10837,11 @@
 +{
 +	int result;
 +
++	/* Init read buffer. */
++	result = lirc_buffer_init(&rbuf, sizeof(int), RBUF_LEN);
++	if (result < 0)
++		return -ENOMEM;
++
 +	result = platform_driver_register(&lirc_serial_driver);
 +	if (result) {
 +		printk("lirc register returned %d\n", result);
@@ -11004,7 +11000,7 @@
 +MODULE_PARM_DESC(debug, "Enable debugging messages");
 diff --git a/drivers/input/lirc/lirc_sir.c b/drivers/input/lirc/lirc_sir.c
 new file mode 100644
-index 0000000..306c77a
+index 0000000..6c64072
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_sir.c
 @@ -0,0 +1,1294 @@
@@ -11221,12 +11217,12 @@
 +	PPSR &= ~PPC_TXD2;
 +}
 +#else
-+static unsigned int sinp(int offset)
++static inline unsigned int sinp(int offset)
 +{
 +	return inb(io + offset);
 +}
 +
-+static void soutp(int offset, int value)
++static inline void soutp(int offset, int value)
 +{
 +	outb(value, io + offset);
 +}
@@ -12304,10 +12300,10 @@
 +MODULE_PARM_DESC(debug, "Enable debugging messages");
 diff --git a/drivers/input/lirc/lirc_streamzap.c b/drivers/input/lirc/lirc_streamzap.c
 new file mode 100644
-index 0000000..6db4310
+index 0000000..d1ce354
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_streamzap.c
-@@ -0,0 +1,775 @@
+@@ -0,0 +1,777 @@
 +/*
 + * Streamzap Remote Control driver
 + *
@@ -12852,6 +12848,8 @@
 +		usb_rcvintpipe(udev, sz->endpoint->bEndpointAddress),
 +		sz->buf_in, sz->buf_in_len, usb_streamzap_irq, sz,
 +		sz->endpoint->bInterval);
++	sz->urb_in->transfer_dma = sz->dma_in;
++	sz->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 +
 +	if (udev->descriptor.iManufacturer
 +	    && usb_string(udev, udev->descriptor.iManufacturer,


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.976.2.6
retrieving revision 1.976.2.7
diff -u -r1.976.2.6 -r1.976.2.7
--- sources	5 Mar 2009 01:30:25 -0000	1.976.2.6
+++ sources	12 Mar 2009 20:38:59 -0000	1.976.2.7
@@ -1,2 +1,3 @@
 d351e44709c9810b85e29b877f50968a  linux-2.6.28.tar.bz2
 9404c2ead603a80a3aad6361b5fc5413  patch-2.6.29-rc7.bz2
+d6c3cc41935f007098e57c9222daabfc  patch-2.6.29-rc7-git5.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.888.2.5
retrieving revision 1.888.2.6
diff -u -r1.888.2.5 -r1.888.2.6
--- upstream	5 Mar 2009 01:30:25 -0000	1.888.2.5
+++ upstream	12 Mar 2009 20:39:00 -0000	1.888.2.6
@@ -1,2 +1,3 @@
 linux-2.6.28.tar.bz2
 patch-2.6.29-rc7.bz2
+patch-2.6.29-rc7-git5.bz2

xen.pvops.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.1.2.9 -r 1.1.2.10 xen.pvops.patch
Index: xen.pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.patch,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -r1.1.2.9 -r1.1.2.10
--- xen.pvops.patch	5 Mar 2009 22:45:11 -0000	1.1.2.9
+++ xen.pvops.patch	12 Mar 2009 20:39:00 -0000	1.1.2.10
@@ -95,7 +95,7 @@
  To be consistent on all architectures, include/linux/topology.h
  provides default definitions for any of the above macros that are
 diff --git a/Documentation/ftrace.txt b/Documentation/ftrace.txt
-index 803b131..2041ee9 100644
+index 803b131..fd9a3e6 100644
 --- a/Documentation/ftrace.txt
 +++ b/Documentation/ftrace.txt
 @@ -15,31 +15,31 @@ Introduction
@@ -280,7 +280,7 @@
 +	that is displayed in one of the above output
 +	files.
 +
-+  trace_max_latency:
++  tracing_max_latency:
 +
 +	Some of the tracers record the max latency.
 +	For example, the time interrupts are disabled.
@@ -1314,11 +1314,11 @@
 +
 +
 +You can put some comments on specific functions by using
-+ftrace_printk() For example, if you want to put a comment inside
++trace_printk() For example, if you want to put a comment inside
 +the __might_sleep() function, you just have to include
-+<linux/ftrace.h> and call ftrace_printk() inside __might_sleep()
++<linux/ftrace.h> and call trace_printk() inside __might_sleep()
 +
-+ftrace_printk("I'm a comment!\n")
++trace_printk("I'm a comment!\n")
 +
 +will produce:
 +
@@ -1601,7 +1601,7 @@
 +More details can be found in the source code, in the
 +kernel/tracing/*.c files.
 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 54f21a5..dd35cb7 100644
+index 54f21a5..8869faa 100644
 --- a/Documentation/kernel-parameters.txt
 +++ b/Documentation/kernel-parameters.txt
 @@ -49,6 +49,7 @@ parameter is applicable:
@@ -1667,6 +1667,15 @@
  
  	meye.*=		[HW] Set MotionEye Camera parameters
  			See Documentation/video4linux/meye.txt.
+@@ -2329,6 +2349,8 @@ and is between 256 and 4096 characters. It is defined in the file
+ 
+ 	tp720=		[HW,PS2]
+ 
++	trace_buf_size=nn[KMG] [ftrace] will set tracing buffer size.
++
+ 	trix=		[HW,OSS] MediaTrix AudioTrix Pro
+ 			Format:
+ 			<io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
 diff --git a/Documentation/kmemcheck.txt b/Documentation/kmemcheck.txt
 new file mode 100644
 index 0000000..a848d49
@@ -2185,6 +2194,34 @@
  '0'-'9' - Sets the console log level, controlling which kernel messages
            will be printed to your console. ('0', for example would make
            it so that only emergency messages like PANICs or OOPSes would
+diff --git a/Documentation/tracepoints.txt b/Documentation/tracepoints.txt
+index 6f0a044..4ff43c6 100644
+--- a/Documentation/tracepoints.txt
++++ b/Documentation/tracepoints.txt
+@@ -45,8 +45,8 @@ In include/trace/subsys.h :
+ #include <linux/tracepoint.h>
+ 
+ DECLARE_TRACE(subsys_eventname,
+-	TPPROTO(int firstarg, struct task_struct *p),
+-	TPARGS(firstarg, p));
++	TP_PROTO(int firstarg, struct task_struct *p),
++	TP_ARGS(firstarg, p));
+ 
+ In subsys/file.c (where the tracing statement must be added) :
+ 
+@@ -66,10 +66,10 @@ Where :
+     - subsys is the name of your subsystem.
+     - eventname is the name of the event to trace.
+ 
+-- TPPROTO(int firstarg, struct task_struct *p) is the prototype of the
++- TP_PROTO(int firstarg, struct task_struct *p) is the prototype of the
+   function called by this tracepoint.
+ 
+-- TPARGS(firstarg, p) are the parameters names, same as found in the
++- TP_ARGS(firstarg, p) are the parameters names, same as found in the
+   prototype.
+ 
+ Connecting a function (probe) to a tracepoint is done by providing a
 diff --git a/Documentation/vm/kmemtrace.txt b/Documentation/vm/kmemtrace.txt
 new file mode 100644
 index 0000000..a956d9b
@@ -2382,6 +2419,113 @@
    
  Field name:	payload_length
  Type:		read
+diff --git a/Documentation/x86/earlyprintk.txt b/Documentation/x86/earlyprintk.txt
+new file mode 100644
+index 0000000..607b1a0
+--- /dev/null
++++ b/Documentation/x86/earlyprintk.txt
+@@ -0,0 +1,101 @@
++
++Mini-HOWTO for using the earlyprintk=dbgp boot option with a
++USB2 Debug port key and a debug cable, on x86 systems.
++
++You need two computers, the 'USB debug key' special gadget and
++and two USB cables, connected like this:
++
++  [host/target] <-------> [USB debug key] <-------> [client/console]
++
++1. There are three specific hardware requirements:
++
++ a.) Host/target system needs to have USB debug port capability.
++
++ You can check this capability by looking at a 'Debug port' bit in
++ the lspci -vvv output:
++
++ # lspci -vvv
++ ...
++ 00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 03) (prog-if 20 [EHCI])
++         Subsystem: Lenovo ThinkPad T61
++         Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
++         Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
++         Latency: 0
++         Interrupt: pin D routed to IRQ 19
++         Region 0: Memory at fe227000 (32-bit, non-prefetchable) [size=1K]
++         Capabilities: [50] Power Management version 2
++                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
++                 Status: D0 PME-Enable- DSel=0 DScale=0 PME+
++         Capabilities: [58] Debug port: BAR=1 offset=00a0
++                            ^^^^^^^^^^^ <==================== [ HERE ]
++	 Kernel driver in use: ehci_hcd
++         Kernel modules: ehci-hcd
++ ...
++
++( If your system does not list a debug port capability then you probably
++  wont be able to use the USB debug key. )
++
++ b.) You also need a Netchip USB debug cable/key:
++
++        http://www.plxtech.com/products/NET2000/NET20DC/default.asp
++
++     This is a small blue plastic connector with two USB connections,
++     it draws power from its USB connections.
++
++ c.) Thirdly, you need a second client/console system with a regular USB port.
++
++2. Software requirements:
++
++ a.) On the host/target system:
++
++    You need to enable the following kernel config option:
++
++      CONFIG_EARLY_PRINTK_DBGP=y
++
++    And you need to add the boot command line: "earlyprintk=dbgp".
++    (If you are using Grub, append it to the 'kernel' line in
++     /etc/grub.conf)
++
++    NOTE: normally earlyprintk console gets turned off once the
++    regular console is alive - use "earlyprintk=dbgp,keep" to keep
++    this channel open beyond early bootup. This can be useful for
++    debugging crashes under Xorg, etc.
++
++ b.) On the client/console system:
++
++    You should enable the following kernel config option:
++
++      CONFIG_USB_SERIAL_DEBUG=y
++
++    On the next bootup with the modified kernel you should
++    get a /dev/ttyUSBx device(s).
++
++    Now this channel of kernel messages is ready to be used: start
++    your favorite terminal emulator (minicom, etc.) and set
++    it up to use /dev/ttyUSB0 - or use a raw 'cat /dev/ttyUSBx' to
++    see the raw output.
++
++ c.) On Nvidia Southbridge based systems: the kernel will try to probe
++     and find out which port has debug device connected.
++
++3. Testing that it works fine:
++
++   You can test the output by using earlyprintk=dbgp,keep and provoking
++   kernel messages on the host/target system. You can provoke a harmless
++   kernel message by for example doing:
++
++     echo h > /proc/sysrq-trigger
++
++   On the host/target system you should see this help line in "dmesg" output:
[...19034 lines suppressed...]
++	static struct vm_struct first_vm;
++	static int smap[2], dmap[2];
++	struct pcpu_chunk *schunk, *dchunk = NULL;
 +	unsigned int cpu;
 +	int nr_pages;
 +	int err, i;
 +
 +	/* santiy checks */
++	BUILD_BUG_ON(ARRAY_SIZE(smap) >= PCPU_DFL_MAP_ALLOC ||
++		     ARRAY_SIZE(dmap) >= PCPU_DFL_MAP_ALLOC);
 +	BUG_ON(!static_size);
-+	BUG_ON(!unit_size && free_size);
-+	BUG_ON(unit_size && unit_size < static_size + free_size);
-+	BUG_ON(unit_size & ~PAGE_MASK);
-+	BUG_ON(base_addr && !unit_size);
++	if (unit_size >= 0) {
++		BUG_ON(unit_size < static_size + reserved_size +
++				   (dyn_size >= 0 ? dyn_size : 0));
++		BUG_ON(unit_size & ~PAGE_MASK);
++	} else {
++		BUG_ON(dyn_size >= 0);
++		BUG_ON(base_addr);
++	}
 +	BUG_ON(base_addr && populate_pte_fn);
 +
-+	if (unit_size)
++	if (unit_size >= 0)
 +		pcpu_unit_pages = unit_size >> PAGE_SHIFT;
 +	else
 +		pcpu_unit_pages = max_t(int, PCPU_MIN_UNIT_SIZE >> PAGE_SHIFT,
-+					PFN_UP(static_size));
++					PFN_UP(static_size + reserved_size));
 +
-+	pcpu_static_size = static_size;
 +	pcpu_unit_size = pcpu_unit_pages << PAGE_SHIFT;
 +	pcpu_chunk_size = num_possible_cpus() * pcpu_unit_size;
 +	pcpu_chunk_struct_size = sizeof(struct pcpu_chunk)
 +		+ num_possible_cpus() * pcpu_unit_pages * sizeof(struct page *);
 +
++	if (dyn_size < 0)
++		dyn_size = pcpu_unit_size - static_size - reserved_size;
++
 +	/*
 +	 * Allocate chunk slots.  The additional last slot is for
 +	 * empty chunks.
@@ -127601,33 +134734,66 @@
 +	for (i = 0; i < pcpu_nr_slots; i++)
 +		INIT_LIST_HEAD(&pcpu_slot[i]);
 +
-+	/* init static_chunk */
-+	static_chunk = alloc_bootmem(pcpu_chunk_struct_size);
-+	INIT_LIST_HEAD(&static_chunk->list);
-+	static_chunk->vm = &static_vm;
-+
-+	if (free_size)
-+		static_chunk->free_size = free_size;
-+	else
-+		static_chunk->free_size = pcpu_unit_size - pcpu_static_size;
++	/*
++	 * Initialize static chunk.  If reserved_size is zero, the
++	 * static chunk covers static area + dynamic allocation area
++	 * in the first chunk.  If reserved_size is not zero, it
++	 * covers static area + reserved area (mostly used for module
++	 * static percpu allocation).
++	 */
++	schunk = alloc_bootmem(pcpu_chunk_struct_size);
++	INIT_LIST_HEAD(&schunk->list);
++	schunk->vm = &first_vm;
++	schunk->map = smap;
++	schunk->map_alloc = ARRAY_SIZE(smap);
++	schunk->page = schunk->page_ar;
++
++	if (reserved_size) {
++		schunk->free_size = reserved_size;
++		pcpu_reserved_chunk = schunk;	/* not for dynamic alloc */
++	} else {
++		schunk->free_size = dyn_size;
++		dyn_size = 0;			/* dynamic area covered */
++	}
++	schunk->contig_hint = schunk->free_size;
 +
-+	static_chunk->contig_hint = static_chunk->free_size;
++	schunk->map[schunk->map_used++] = -static_size;
++	if (schunk->free_size)
++		schunk->map[schunk->map_used++] = schunk->free_size;
++
++	pcpu_reserved_chunk_limit = static_size + schunk->free_size;
++
++	/* init dynamic chunk if necessary */
++	if (dyn_size) {
++		dchunk = alloc_bootmem(sizeof(struct pcpu_chunk));
++		INIT_LIST_HEAD(&dchunk->list);
++		dchunk->vm = &first_vm;
++		dchunk->map = dmap;
++		dchunk->map_alloc = ARRAY_SIZE(dmap);
++		dchunk->page = schunk->page_ar;	/* share page map with schunk */
++
++		dchunk->contig_hint = dchunk->free_size = dyn_size;
++		dchunk->map[dchunk->map_used++] = -pcpu_reserved_chunk_limit;
++		dchunk->map[dchunk->map_used++] = dchunk->free_size;
++	}
 +
 +	/* allocate vm address */
-+	static_vm.flags = VM_ALLOC;
-+	static_vm.size = pcpu_chunk_size;
++	first_vm.flags = VM_ALLOC;
++	first_vm.size = pcpu_chunk_size;
 +
 +	if (!base_addr)
-+		vm_area_register_early(&static_vm, PAGE_SIZE);
++		vm_area_register_early(&first_vm, PAGE_SIZE);
 +	else {
 +		/*
 +		 * Pages already mapped.  No need to remap into
-+		 * vmalloc area.  In this case the static chunk can't
-+		 * be mapped or unmapped by percpu and is marked
++		 * vmalloc area.  In this case the first chunks can't
++		 * be mapped or unmapped by percpu and are marked
 +		 * immutable.
 +		 */
-+		static_vm.addr = base_addr;
-+		static_chunk->immutable = true;
++		first_vm.addr = base_addr;
++		schunk->immutable = true;
++		if (dchunk)
++			dchunk->immutable = true;
 +	}
 +
 +	/* assign pages */
@@ -127638,10 +134804,10 @@
 +
 +			if (!page)
 +				break;
-+			*pcpu_chunk_pagep(static_chunk, cpu, i) = page;
++			*pcpu_chunk_pagep(schunk, cpu, i) = page;
 +		}
 +
-+		BUG_ON(i < PFN_UP(pcpu_static_size));
++		BUG_ON(i < PFN_UP(static_size));
 +
 +		if (nr_pages < 0)
 +			nr_pages = i;
@@ -127653,21 +134819,26 @@
 +	if (populate_pte_fn) {
 +		for_each_possible_cpu(cpu)
 +			for (i = 0; i < nr_pages; i++)
-+				populate_pte_fn(pcpu_chunk_addr(static_chunk,
++				populate_pte_fn(pcpu_chunk_addr(schunk,
 +								cpu, i));
 +
-+		err = pcpu_map(static_chunk, 0, nr_pages);
++		err = pcpu_map(schunk, 0, nr_pages);
 +		if (err)
 +			panic("failed to setup static percpu area, err=%d\n",
 +			      err);
 +	}
 +
-+	/* link static_chunk in */
-+	pcpu_chunk_relocate(static_chunk, -1);
-+	pcpu_chunk_addr_insert(static_chunk);
++	/* link the first chunk in */
++	if (!dchunk) {
++		pcpu_chunk_relocate(schunk, -1);
++		pcpu_chunk_addr_insert(schunk);
++	} else {
++		pcpu_chunk_relocate(dchunk, -1);
++		pcpu_chunk_addr_insert(dchunk);
++	}
 +
 +	/* we're done */
-+	pcpu_base_addr = (void *)pcpu_chunk_addr(static_chunk, 0, 0);
++	pcpu_base_addr = (void *)pcpu_chunk_addr(schunk, 0, 0);
 +	return pcpu_unit_size;
 +}
 diff --git a/mm/slab.c b/mm/slab.c
@@ -128861,6 +136032,24 @@
  };
  
 +
+diff --git a/samples/tracepoints/tp-samples-trace.h b/samples/tracepoints/tp-samples-trace.h
+index 01724e0..dffdc49 100644
+--- a/samples/tracepoints/tp-samples-trace.h
++++ b/samples/tracepoints/tp-samples-trace.h
+@@ -5,9 +5,9 @@
+ #include <linux/tracepoint.h>
+ 
+ DECLARE_TRACE(subsys_event,
+-	TPPROTO(struct inode *inode, struct file *file),
+-	TPARGS(inode, file));
++	TP_PROTO(struct inode *inode, struct file *file),
++	TP_ARGS(inode, file));
+ DECLARE_TRACE(subsys_eventb,
+-	TPPROTO(void),
+-	TPARGS());
++	TP_PROTO(void),
++	TP_ARGS());
+ #endif
 diff --git a/scripts/Makefile.build b/scripts/Makefile.build
 index c7de8b3..39a9642 100644
 --- a/scripts/Makefile.build


--- drm-fix-setmaster-deadlock.patch DELETED ---


--- drm-intel-next.patch DELETED ---


--- drm-maybe-fix-nouveau.patch DELETED ---


--- linux-2.6-crash-driver.patch DELETED ---


--- linux-2.6-ext4-inode-alloc-race.patch DELETED ---


--- linux-2.6.28-lockd-svc-register.patch DELETED ---


--- linux-2.6.28-sunrpc-ipv6-rpcbind.patch DELETED ---




More information about the fedora-extras-commits mailing list