rpms/kernel/devel alsa-pcm-always-reset-invalid-position.patch, NONE, 1.1.2.2 alsa-pcm-fix-delta-calc-at-overlap.patch, NONE, 1.1.2.2 alsa-pcm-safer-boundary-checks.patch, NONE, 1.1.2.2 linux-2.6-net-fix-another-gro-bug.patch, NONE, 1.1.2.2 linux-2.6.29-pat-fixes.patch, NONE, 1.1.2.2 squashfs-fixups.patch, NONE, 1.1.2.1 squashfs3.patch, NONE, 1.1.2.1 TODO, 1.54.6.3, 1.54.6.4 config-generic, 1.238.6.13, 1.238.6.14 config-x86-generic, 1.68.6.4, 1.68.6.5 drm-nouveau.patch, 1.8.6.7, 1.8.6.8 kernel.spec, 1.1294.2.16, 1.1294.2.17 linux-2.6-v4l-dvb-experimental.patch, 1.2.2.4, 1.2.2.5 linux-2.6-v4l-dvb-fixes.patch, 1.2.8.6, 1.2.8.7 xen.pvops.patch, 1.1.2.14, 1.1.2.15 xen.pvops.post.patch, 1.1.2.8, 1.1.2.9 xen.pvops.pre.patch, 1.1.2.7, 1.1.2.8

Michael Young myoung at fedoraproject.org
Mon Mar 30 19:46:02 UTC 2009


Author: myoung

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

Modified Files:
      Tag: private-myoung-dom0-branch
	TODO config-generic config-x86-generic drm-nouveau.patch 
	kernel.spec linux-2.6-v4l-dvb-experimental.patch 
	linux-2.6-v4l-dvb-fixes.patch xen.pvops.patch 
	xen.pvops.post.patch xen.pvops.pre.patch 
Added Files:
      Tag: private-myoung-dom0-branch
	alsa-pcm-always-reset-invalid-position.patch 
	alsa-pcm-fix-delta-calc-at-overlap.patch 
	alsa-pcm-safer-boundary-checks.patch 
	linux-2.6-net-fix-another-gro-bug.patch 
	linux-2.6.29-pat-fixes.patch squashfs-fixups.patch 
	squashfs3.patch 
Log Message:
Try alternate push2/xen/dom0/master pvops branch (closer to proposed 2.6.30
merge). Add squashfs 3 from F-10 for better F10 support. Set CONFIG_HIGHPTE=n
to avoid eventual crash bug


alsa-pcm-always-reset-invalid-position.patch:

--- NEW FILE alsa-pcm-always-reset-invalid-position.patch ---
From: Takashi Iwai <tiwai at suse.de>
Date: Thu, 19 Mar 2009 09:01:47 +0000 (+0100)
Subject: ALSA: pcm - Reset invalid position even without debug option
X-Git-Url: http://git.alsa-project.org/?p=alsa-kernel.git;a=commitdiff_plain;h=f28f43ce9ae6573952d2348bb6da859cad762143

ALSA: pcm - Reset invalid position even without debug option

Always reset the invalind hw_ptr position returned by the pointer
callback.  The behavior should be consitent independently from the
debug option.

Also, add the printk_ratelimit() check to avoid flooding debug
prints.

Signed-off-by: Takashi Iwai <tiwai at suse.de>
Signed-off-by: Jaroslav Kysela <perex at perex.cz>
---

diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index 3026547..92ed6d8 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -159,11 +159,15 @@ snd_pcm_update_hw_ptr_pos(struct snd_pcm_substream *substream,
 	pos = substream->ops->pointer(substream);
 	if (pos == SNDRV_PCM_POS_XRUN)
 		return pos; /* XRUN */
-#ifdef CONFIG_SND_DEBUG
 	if (pos >= runtime->buffer_size) {
-		snd_printk(KERN_ERR  "BUG: stream = %i, pos = 0x%lx, buffer size = 0x%lx, period size = 0x%lx\n", substream->stream, pos, runtime->buffer_size, runtime->period_size);
+		if (printk_ratelimit()) {
+			snd_printd(KERN_ERR  "BUG: stream = %i, pos = 0x%lx, "
+				   "buffer size = 0x%lx, period size = 0x%lx\n",
+				   substream->stream, pos, runtime->buffer_size,
+				   runtime->period_size);
+		}
+		pos = 0;
 	}
-#endif
 	pos -= pos % runtime->min_align;
 	return pos;
 }

alsa-pcm-fix-delta-calc-at-overlap.patch:

--- NEW FILE alsa-pcm-fix-delta-calc-at-overlap.patch ---
From: Takashi Iwai <tiwai at suse.de>
Date: Thu, 19 Mar 2009 09:08:49 +0000 (+0100)
Subject: ALSA: pcm - Fix delta calculation at boundary overlap
X-Git-Url: http://git.alsa-project.org/?p=alsa-kernel.git;a=commitdiff_plain;h=09a067199b6caa61818fc04f4759048dff13b21c

ALSA: pcm - Fix delta calculation at boundary overlap

When the hw_ptr_interrupt reaches the boundary, it must check whether
the hw_base was already lapped and corret the delta value appropriately.

Also, rebasing the hw_ptr needs a correction because buffer_size isn't
always aligned to period_size.

Signed-off-by: Takashi Iwai <tiwai at suse.de>
Signed-off-by: Jaroslav Kysela <perex at perex.cz>
---

diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index 92ed6d8..063c675 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -221,8 +221,11 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream)
 	new_hw_ptr = hw_base + pos;
 	hw_ptr_interrupt = runtime->hw_ptr_interrupt + runtime->period_size;
 	delta = new_hw_ptr - hw_ptr_interrupt;
-	if (hw_ptr_interrupt == runtime->boundary)
-		hw_ptr_interrupt = 0;
+	if (hw_ptr_interrupt >= runtime->boundary) {
+		hw_ptr_interrupt %= runtime->boundary;
+		if (!hw_base) /* hw_base was already lapped; recalc delta */
+			delta = new_hw_ptr - hw_ptr_interrupt;
+	}
 	if (delta < 0) {
 		delta += runtime->buffer_size;
 		if (delta < 0) {
@@ -233,6 +236,8 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream)
 				     (long)hw_ptr_interrupt);
 			/* rebase to interrupt position */
 			hw_base = new_hw_ptr = hw_ptr_interrupt;
+			/* align hw_base to buffer_size */
+			hw_base -= hw_base % runtime->buffer_size;
 			delta = 0;
 		} else {
 			hw_base += runtime->buffer_size;

alsa-pcm-safer-boundary-checks.patch:

--- NEW FILE alsa-pcm-safer-boundary-checks.patch ---
From: Takashi Iwai <tiwai at suse.de>
Date: Fri, 20 Mar 2009 15:26:15 +0000 (+0100)
Subject: ALSA: pcm - Safer boundary checks
X-Git-Url: http://git.alsa-project.org/?p=alsa-kernel.git;a=commitdiff_plain;h=d9b59892fb7108f6ee33a4fcdc257587b68f2ed6

ALSA: pcm - Safer boundary checks

Make the boundary checks a bit safer.
These caese are rare or theoretically won't happen, but nothing
bad to keep the checks safer...

Signed-off-by: Takashi Iwai <tiwai at suse.de>
Signed-off-by: Jaroslav Kysela <perex at perex.cz>
---

diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index 063c675..fbb2e39 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -222,8 +222,9 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream)
 	hw_ptr_interrupt = runtime->hw_ptr_interrupt + runtime->period_size;
 	delta = new_hw_ptr - hw_ptr_interrupt;
 	if (hw_ptr_interrupt >= runtime->boundary) {
-		hw_ptr_interrupt %= runtime->boundary;
-		if (!hw_base) /* hw_base was already lapped; recalc delta */
+		hw_ptr_interrupt -= runtime->boundary;
+		if (hw_base < runtime->boundary / 2)
+			/* hw_base was already lapped; recalc delta */
 			delta = new_hw_ptr - hw_ptr_interrupt;
 	}
 	if (delta < 0) {
@@ -241,7 +242,7 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream)
 			delta = 0;
 		} else {
 			hw_base += runtime->buffer_size;
-			if (hw_base == runtime->boundary)
+			if (hw_base >= runtime->boundary)
 				hw_base = 0;
 			new_hw_ptr = hw_base + pos;
 		}
@@ -296,7 +297,7 @@ int snd_pcm_update_hw_ptr(struct snd_pcm_substream *substream)
 			return 0;
 		}
 		hw_base += runtime->buffer_size;
-		if (hw_base == runtime->boundary)
+		if (hw_base >= runtime->boundary)
 			hw_base = 0;
 		new_hw_ptr = hw_base + pos;
 	}

linux-2.6-net-fix-another-gro-bug.patch:

--- NEW FILE linux-2.6-net-fix-another-gro-bug.patch ---
From: Herbert Xu <herbert at gondor.apana.org.au>
Date: Sun, 29 Mar 2009 06:39:18 +0000 (-0700)
Subject: gso: Fix support for linear packets
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdavem%2Fnet-2.6.git;a=commitdiff_plain;h=2f181855a0b3c2b39314944add7b41c15647cf86

gso: Fix support for linear packets

When GRO/frag_list support was added to GSO, I made an error
which broke the support for segmenting linear GSO packets (GSO
packets are normally non-linear in the payload).

These days most of these packets are constructed by the tun
driver, which prefers to allocate linear memory if possible.
This is fixed in the latest kernel, but for 2.6.29 and earlier
it is still the norm.

Therefore this bug causes failures with GSO when used with tun
in 2.6.29.

Reported-by: James Huang <jamesclhuang at gmail.com>
Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>
Signed-off-by: David S. Miller <davem at davemloft.net>
---

diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 6acbf9e..ce6356c 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -2579,7 +2579,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
 					  skb_network_header_len(skb));
 		skb_copy_from_linear_data(skb, nskb->data, doffset);
 
-		if (pos >= offset + len)
+		if (fskb != skb_shinfo(skb)->frag_list)
 			continue;
 
 		if (!sg) {

linux-2.6.29-pat-fixes.patch:

--- NEW FILE linux-2.6.29-pat-fixes.patch ---
>From 7806028c712e4947b764636f6668849edd3cae0b Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax at redhat.com>
Date: Thu, 26 Mar 2009 17:47:49 -0400
Subject: [PATCH] pat hacks

Required for GTT maps on intel to work.  See also:
http://bugs.freedesktop.org/show_bug.cgi?id=20803

Stolen from http://bugs.freedesktop.org/attachment.cgi?id=24172
with minor fixes.

---
 arch/x86/mm/pat.c   |   50 ++++++++++++++++++++++++++++++++++++++------------
 arch/x86/pci/i386.c |    3 +++
 include/linux/mm.h  |   15 +++++++++++++--
 mm/memory.c         |    6 ++++--
 4 files changed, 58 insertions(+), 16 deletions(-)

diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
index e0ab173..026247e 100644
--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
@@ -365,11 +365,14 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type,
 		*new_type = actual_type;
 
 	is_range_ram = pat_pagerange_is_ram(start, end);
-	if (is_range_ram == 1)
+	if (is_range_ram == 1) {
+		printk(KERN_WARNING "reserve_memtype: calling reserve_ram_pages_type for 0x%llx 0x%llx %lu\n", start, end, req_type);
 		return reserve_ram_pages_type(start, end, req_type,
 					      new_type);
-	else if (is_range_ram < 0)
+	} else if (is_range_ram < 0) {
+		printk(KERN_WARNING "reserve_memtype: is_range_ram < 0 for 0x%llx 0x%llx %lu\n", start, end, req_type);
 		return -EINVAL;
+	}
 
 	new  = kmalloc(sizeof(struct memtype), GFP_KERNEL);
 	if (!new)
@@ -641,14 +644,21 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot,
 	is_ram = pat_pagerange_is_ram(paddr, paddr + size);
 
 	/*
-	 * reserve_pfn_range() doesn't support RAM pages.
+	 * reserve_pfn_range() doesn't support RAM pages. Maintain the current
+	 * behavior with RAM pages by returning success.
 	 */
-	if (is_ram != 0)
-		return -EINVAL;
+	if (is_ram != 0) {
+		printk(KERN_WARNING "reserve_pfn_range: is_ram is %d for 0x%llx!\n",
+			is_ram, paddr);
+		return 0;
+	}
 
 	ret = reserve_memtype(paddr, paddr + size, want_flags, &flags);
-	if (ret)
+	if (ret) {
+		printk(KERN_WARNING "reserve_pfn_range: reserve_memtype ret %d for 0x%llx 0x%lx 0x%lx\n",
+			ret, paddr, size, want_flags);
 		return ret;
+	}
 
 	if (flags != want_flags) {
 		if (strict_prot || !is_new_memtype_allowed(want_flags, flags)) {
@@ -739,7 +749,12 @@ int track_pfn_vma_copy(struct vm_area_struct *vma)
 			return -EINVAL;
 		}
 		pgprot = __pgprot(prot);
-		return reserve_pfn_range(paddr, vma_size, &pgprot, 1);
+		retval = reserve_pfn_range(paddr, vma_size, &pgprot, 1);
+		if (retval) {
+			printk(KERN_WARNING "track_pfn_vma_copy linear - 0x%llx 0x%lx 0x%lx failed\n",
+				paddr, vma_size, prot);
+		}
+		return retval;
 	}
 
 	/* reserve entire vma page by page, using pfn and prot from pte */
@@ -749,8 +764,11 @@ int track_pfn_vma_copy(struct vm_area_struct *vma)
 
 		pgprot = __pgprot(prot);
 		retval = reserve_pfn_range(paddr, PAGE_SIZE, &pgprot, 1);
-		if (retval)
+		if (retval) {
+			printk(KERN_WARNING "track_pfn_vma_copy not linear - 0x%llx 0x%lx failed\n",
+				paddr, prot);
 			goto cleanup_ret;
+		}
 	}
 	return 0;
 
@@ -795,8 +813,13 @@ int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t *prot,
 
 	if (is_linear_pfn_mapping(vma)) {
 		/* reserve the whole chunk starting from vm_pgoff */
-		paddr = (resource_size_t)vma->vm_pgoff << PAGE_SHIFT;
-		return reserve_pfn_range(paddr, vma_size, prot, 0);
+		paddr = (resource_size_t)pfn << PAGE_SHIFT;
+		retval = reserve_pfn_range(paddr, vma_size, prot, 0);
+		if (retval) {
+			printk(KERN_WARNING "track_pfn_vma_new linear - 0x%llx 0x%lx 0x%x failed\n",
+				paddr, size, (int) pgprot_val(*prot));
+		}
+		return retval;
 	}
 
 	/* reserve page by page using pfn and size */
@@ -804,8 +827,11 @@ int track_pfn_vma_new(struct vm_area_struct *vma, pgprot_t *prot,
 	for (i = 0; i < size; i += PAGE_SIZE) {
 		paddr = base_paddr + i;
 		retval = reserve_pfn_range(paddr, PAGE_SIZE, prot, 0);
-		if (retval)
+		if (retval) {
+			printk(KERN_WARNING "track_pfn_vma_new not linear - 0x%llx 0x%x failed\n",
+				paddr, (int) pgprot_val(*prot));
 			goto cleanup_ret;
+		}
 	}
 	return 0;
 
@@ -816,7 +842,7 @@ cleanup_ret:
 		free_pfn_range(paddr, PAGE_SIZE);
 	}
 
-	return retval;
+	return 0;
 }
 
 /*
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index 5ead808..f234a37 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -319,6 +319,9 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
 			return -EINVAL;
 		}
 		flags = new_flags;
+		vma->vm_page_prot = __pgprot(
+			(pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK) |
+			flags);
 	}
 
 	if (((vma->vm_pgoff < max_low_pfn_mapped) ||
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 065cdf8..3daa05f 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -98,7 +98,7 @@ extern unsigned int kobjsize(const void *objp);
 #define VM_HUGETLB	0x00400000	/* Huge TLB Page VM */
 #define VM_NONLINEAR	0x00800000	/* Is non-linear (remap_file_pages) */
 #define VM_MAPPED_COPY	0x01000000	/* T if mapped copy of data (nommu mmap) */
-#define VM_INSERTPAGE	0x02000000	/* The vma has had "vm_insert_page()" done on it */
+#define VM_INSERTPAGE	0x02000000	/* The vma has had "vm_insert_page()" done on it. Refer note in VM_PFNMAP_AT_MMAP below */
 #define VM_ALWAYSDUMP	0x04000000	/* Always include in core dumps */
 
 #define VM_CAN_NONLINEAR 0x08000000	/* Has ->fault & does nonlinear pages */
@@ -127,6 +127,17 @@ extern unsigned int kobjsize(const void *objp);
 #define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_RESERVED | VM_PFNMAP)
 
 /*
+ * pfnmap vmas that are fully mapped at mmap time (not mapped on fault).
+ * Used by x86 PAT to identify such PFNMAP mappings and optimize their handling.
+ * Note VM_INSERTPAGE flag is overloaded here. i.e,
+ * VM_INSERTPAGE && !VM_PFNMAP implies
+ *     The vma has had "vm_insert_page()" done on it
+ * VM_INSERTPAGE && VM_PFNMAP implies
+ *     The vma is PFNMAP with full mapping at mmap time
+ */
+#define VM_PFNMAP_AT_MMAP (VM_INSERTPAGE | VM_PFNMAP)
+
+/*
  * mapping from the currently active vm_flags protection bits (the
  * low four bits) to a page protection mask..
  */
@@ -145,7 +156,7 @@ extern pgprot_t protection_map[16];
  */
 static inline int is_linear_pfn_mapping(struct vm_area_struct *vma)
 {
-	return ((vma->vm_flags & VM_PFNMAP) && vma->vm_pgoff);
+	return ((vma->vm_flags & VM_PFNMAP_AT_MMAP) == VM_PFNMAP_AT_MMAP);
 }
 
 static inline int is_pfn_mapping(struct vm_area_struct *vma)
diff --git a/mm/memory.c b/mm/memory.c
index baa999e..d7df5ba 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1665,9 +1665,10 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
 	 * behaviour that some programs depend on. We mark the "original"
 	 * un-COW'ed pages by matching them up with "vma->vm_pgoff".
 	 */
-	if (addr == vma->vm_start && end == vma->vm_end)
+	if (addr == vma->vm_start && end == vma->vm_end) {
 		vma->vm_pgoff = pfn;
-	else if (is_cow_mapping(vma->vm_flags))
+		vma->vm_flags |= VM_PFNMAP_AT_MMAP;
+	} else if (is_cow_mapping(vma->vm_flags))
 		return -EINVAL;
 
 	vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
@@ -1679,6 +1680,7 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
 		 * needed from higher level routine calling unmap_vmas
 		 */
 		vma->vm_flags &= ~(VM_IO | VM_RESERVED | VM_PFNMAP);
+		vma->vm_flags &= ~VM_PFNMAP_AT_MMAP;
 		return -EINVAL;
 	}
 
-- 
1.6.2


squashfs-fixups.patch:

--- NEW FILE squashfs-fixups.patch ---
Index: linux-2.6.29.noarch/init/do_mounts_rd.c
===================================================================
--- linux-2.6.29.noarch.orig/init/do_mounts_rd.c
+++ linux-2.6.29.noarch/init/do_mounts_rd.c
@@ -110,6 +110,7 @@ identify_ramdisk_image(int fd, int start
 	}
 
 	/* squashfs is at block zero too */
+#if defined(CONFIG_SQUASHFS) || defined(CONFIG_SQUASHFS_MODULE)
 	if (le32_to_cpu(squashfsb->s_magic) == SQUASHFS_MAGIC) {
 		printk(KERN_NOTICE
 		       "RAMDISK: squashfs filesystem found at block %d\n",
@@ -118,8 +119,7 @@ identify_ramdisk_image(int fd, int start
 			 >> BLOCK_SIZE_BITS;
 		goto done;
 	}
-
-	/* squashfs is at block zero too */
+#else  /* v3 */
 	if (squashfsb->s_magic == SQUASHFS_MAGIC) {
 		printk(KERN_NOTICE
 		       "RAMDISK: squashfs filesystem found at block %d\n",
@@ -130,6 +130,7 @@ identify_ramdisk_image(int fd, int start
 			nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
 		goto done;
 	}
+#endif
 
 	/*
 	 * Read block 1 to test for minix and ext2 superblock

squashfs3.patch:

--- NEW FILE squashfs3.patch ---
diff --git a/fs/Kconfig b/fs/Kconfig
index 93945dd..e1c0653 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -214,6 +214,7 @@ source "fs/jffs2/Kconfig"
 source "fs/ubifs/Kconfig"
 source "fs/cramfs/Kconfig"
 source "fs/squashfs/Kconfig"
+source "fs/squashfs3/Kconfig"
 source "fs/freevxfs/Kconfig"
 source "fs/minix/Kconfig"
 source "fs/omfs/Kconfig"
diff --git a/fs/Makefile b/fs/Makefile
index dc20db3..0fd95d8 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -77,6 +77,7 @@ obj-$(CONFIG_JBD)		+= jbd/
 obj-$(CONFIG_JBD2)		+= jbd2/
 obj-$(CONFIG_CRAMFS)		+= cramfs/
 obj-$(CONFIG_SQUASHFS)		+= squashfs/
+obj-$(CONFIG_SQUASHFS3)		+= squashfs3/
 obj-y				+= ramfs/
 obj-$(CONFIG_HUGETLBFS)		+= hugetlbfs/
 obj-$(CONFIG_CODA_FS)		+= coda/
diff --git a/fs/squashfs3/Kconfig b/fs/squashfs3/Kconfig
new file mode 100644
index 0000000..fcd44e6
--- /dev/null
+++ b/fs/squashfs3/Kconfig
@@ -0,0 +1,34 @@
+config SQUASHFS3
+	tristate "SquashFS 3.4 - Squashed file system support"
+	depends on !SQUASHFS
+	select ZLIB_INFLATE
+	help
+	  Saying Y here includes support for SquashFS 3.4 (a Compressed
+	  Read-Only File System).
+
+	  You cannot have both SQUASHFS and SQUASHFS3 enabled.
+
+	  If unsure, say N.
+
+config SQUASHFS3_EMBEDDED
+	bool "Additional option for memory-constrained systems" 
+	depends on SQUASHFS3
+	default n
+	help
+	  Saying Y here allows you to specify cache size.
+
+	  If unsure, say N.
+
+config SQUASHFS3_FRAGMENT_CACHE_SIZE
+	int "Number of fragments cached" if SQUASHFS3_EMBEDDED
+	depends on SQUASHFS3
+	default "3"
+	help
+	  By default SquashFS caches the last 3 fragments read from
+	  the filesystem.  Increasing this amount may mean SquashFS
+	  has to re-read fragments less often from disk, at the expense
+	  of extra system memory.  Decreasing this amount will mean
+	  SquashFS uses less memory at the expense of extra reads from disk.
+
+	  Note there must be at least one cached fragment.  Anything
+	  much more than three will probably not make much difference.
diff --git a/fs/squashfs3/Makefile b/fs/squashfs3/Makefile
new file mode 100644
index 0000000..8805195
--- /dev/null
+++ b/fs/squashfs3/Makefile
@@ -0,0 +1,7 @@
+#
+# Makefile for the linux squashfs routines.
+#
+
+obj-$(CONFIG_SQUASHFS3) += squashfs.o
+squashfs-y += inode.o
+squashfs-y += squashfs2_0.o
diff --git a/fs/squashfs3/inode.c b/fs/squashfs3/inode.c
new file mode 100644
index 0000000..c1d91e4
--- /dev/null
+++ b/fs/squashfs3/inode.c
@@ -0,0 +1,2163 @@
+/*
+ * Squashfs - a compressed read only filesystem for Linux
+ *
+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ * Phillip Lougher <phillip at lougher.demon.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * inode.c
+ */
+
+#if defined(CONFIG_SQUASHFS) || defined(CONFIG_SQUASHFS_MODULE)
+#error CONFIG_SQUASHFS and CONFIG_SQUASHFS3 conflict
+#endif
+
+#include <linux/module.h>
+#include <linux/zlib.h>
+#include <linux/fs.h>
+#include <linux/buffer_head.h>
+#include <linux/vfs.h>
+#include <linux/vmalloc.h>
+#include <linux/spinlock.h>
+#include <linux/smp_lock.h>
+#include <linux/exportfs.h>
+
+#include "squashfs3_fs.h"
+#include "squashfs3_fs_sb.h"
+#include "squashfs3_fs_i.h"
+
+#include "squashfs.h"
+
+static struct dentry *squashfs_fh_to_dentry(struct super_block *s,
+		struct fid *fid, int fh_len, int fh_type);
+static struct dentry *squashfs_fh_to_parent(struct super_block *s,
+		struct fid *fid, int fh_len, int fh_type);
+static struct dentry *squashfs_get_parent(struct dentry *child);
+static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode);
+static int squashfs_statfs(struct dentry *, struct kstatfs *);
+static int squashfs_symlink_readpage(struct file *file, struct page *page);
+static long long read_blocklist(struct inode *inode, int index,
+				int readahead_blks, char *block_list,
+				unsigned short **block_p, unsigned int *bsize);
+static int squashfs_readpage(struct file *file, struct page *page);
+static int squashfs_readdir(struct file *, void *, filldir_t);
+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
+				struct nameidata *);
+static int squashfs_remount(struct super_block *s, int *flags, char *data);
+static void squashfs_put_super(struct super_block *);
+static int squashfs_get_sb(struct file_system_type *,int, const char *, void *,
+				struct vfsmount *);
+static struct inode *squashfs_alloc_inode(struct super_block *sb);
+static void squashfs_destroy_inode(struct inode *inode);
+static int init_inodecache(void);
+static void destroy_inodecache(void);
+
+static struct file_system_type squashfs_fs_type = {
+	.owner = THIS_MODULE,
+	.name = "squashfs",
+	.get_sb = squashfs_get_sb,
+	.kill_sb = kill_block_super,
+	.fs_flags = FS_REQUIRES_DEV
+};
+
+static const unsigned char squashfs_filetype_table[] = {
+	DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
+};
+
+static struct super_operations squashfs_super_ops = {
+	.alloc_inode = squashfs_alloc_inode,
+	.destroy_inode = squashfs_destroy_inode,
+	.statfs = squashfs_statfs,
+	.put_super = squashfs_put_super,
+	.remount_fs = squashfs_remount
+};
+
+static struct export_operations squashfs_export_ops = {
+	.fh_to_dentry = squashfs_fh_to_dentry,
+	.fh_to_parent = squashfs_fh_to_parent,
+	.get_parent = squashfs_get_parent
+};
+
+SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = {
+	.readpage = squashfs_symlink_readpage
+};
+
+SQSH_EXTERN const struct address_space_operations squashfs_aops = {
+	.readpage = squashfs_readpage
+};
+
+static const struct file_operations squashfs_dir_ops = {
+	.read = generic_read_dir,
+	.readdir = squashfs_readdir
+};
+
+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
+	.lookup = squashfs_lookup
+};
+
+
+static struct buffer_head *get_block_length(struct super_block *s,
+				int *cur_index, int *offset, int *c_byte)
+{
+	struct squashfs_sb_info *msblk = s->s_fs_info;
+	unsigned short temp;
[...3808 lines suppressed...]
+#else
+	/* convert from big endian to little endian */ 
+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
+		tbits, 64 - tbits - b_pos)
+#endif
+
+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
+	b_pos = pos % 8;\
+	val = 0;\
+	s = (unsigned char *)p + (pos / 8);\
+	d = ((unsigned char *) &val) + 7;\
+	for(bits = 0; bits < (tbits + b_pos); bits += 8) \
+		*d-- = *s++;\
+	value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
+}
+
+#define SQUASHFS_MEMSET(s, d, n)	memset(s, 0, n);
+
+#endif
+#endif
diff --git a/fs/squashfs3/squashfs3_fs_i.h b/fs/squashfs3/squashfs3_fs_i.h
new file mode 100644
index 0000000..3cf4c3a
--- /dev/null
+++ b/fs/squashfs3/squashfs3_fs_i.h
@@ -0,0 +1,45 @@
+#ifndef SQUASHFS3_FS_I
+#define SQUASHFS3_FS_I
+/*
+ * Squashfs
+ *
+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ * Phillip Lougher <phillip at lougher.demon.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * squashfs_fs_i.h
+ */
+
+struct squashfs_inode_info {
+	long long	start_block;
+	unsigned int	offset;
+	union {
+		struct {
+			long long	fragment_start_block;
+			unsigned int	fragment_size;
+			unsigned int	fragment_offset;
+			long long	block_list_start;
+		} s1;
+		struct {
+			long long	directory_index_start;
+			unsigned int	directory_index_offset;
+			unsigned int	directory_index_count;
+			unsigned int	parent_inode;
+		} s2;
+	} u;
+	struct inode	vfs_inode;
+};
+#endif
diff --git a/fs/squashfs3/squashfs3_fs_sb.h b/fs/squashfs3/squashfs3_fs_sb.h
new file mode 100644
index 0000000..a186584
--- /dev/null
+++ b/fs/squashfs3/squashfs3_fs_sb.h
@@ -0,0 +1,79 @@
+#ifndef SQUASHFS_FS_SB
+#define SQUASHFS_FS_SB
+/*
+ * Squashfs
+ *
+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ * Phillip Lougher <phillip at lougher.demon.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * squashfs_fs_sb.h
+ */
+
+#include "squashfs3_fs.h"
+
+struct squashfs_cache_entry {
+	long long	block;
+	int		length;
+	int		locked;
+	long long	next_index;
+	char		pending;
+	char		error;
+	int		waiting;
+	wait_queue_head_t	wait_queue;
+	char		*data;
+};
+
+struct squashfs_cache {
+	char *name;
+	int entries;
+	int block_size;
+	int next_blk;
+	int waiting;
+	int unused_blks;
+	int use_vmalloc;
+	spinlock_t lock;
+	wait_queue_head_t wait_queue;
+	struct squashfs_cache_entry entry[0];
+};
+
+struct squashfs_sb_info {
+	struct squashfs_super_block	sblk;
+	int			devblksize;
+	int			devblksize_log2;
+	int			swap;
+	struct squashfs_cache	*block_cache;
+	struct squashfs_cache	*fragment_cache;
+	int			next_meta_index;
+	unsigned int		*uid;
+	unsigned int		*guid;
+	long long		*fragment_index;
+	unsigned int		*fragment_index_2;
+	char			*read_page;
+	struct mutex		read_data_mutex;
+	struct mutex		read_page_mutex;
+	struct mutex		meta_index_mutex;
+	struct meta_index	*meta_index;
+	z_stream		stream;
+	long long		*inode_lookup_table;
+	int			(*read_inode)(struct inode *i,  squashfs_inode_t \
+				inode);
+	long long		(*read_blocklist)(struct inode *inode, int \
+				index, int readahead_blks, char *block_list, \
+				unsigned short **block_p, unsigned int *bsize);
+	int			(*read_fragment_index_table)(struct super_block *s);
+};
+#endif
diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
index 0f0f0cf..c62037e 100644
--- a/init/do_mounts_rd.c
+++ b/init/do_mounts_rd.c
@@ -9,7 +9,12 @@
 #include <linux/string.h>
 
 #include "do_mounts.h"
+
+#if defined(CONFIG_SQUASHFS3) || defined(CONFIG_SQUASHFS3_MODULE)
+#include "../fs/squashfs3/squashfs3_fs.h"
+#else
 #include "../fs/squashfs/squashfs_fs.h"
+#endif
 
 int __initdata rd_prompt = 1;/* 1 = prompt for RAM disk, 0 = don't prompt */
 
@@ -38,6 +43,7 @@ static int __init crd_load(int in_fd, int out_fd);
  * numbers could not be found.
  *
  * We currently check for the following magic numbers:
+ *      squashfs
  * 	minix
  * 	ext2
  *	romfs
@@ -113,6 +119,18 @@ identify_ramdisk_image(int fd, int start_block)
 		goto done;
 	}
 
+	/* squashfs is at block zero too */
+	if (squashfsb->s_magic == SQUASHFS_MAGIC) {
+		printk(KERN_NOTICE
+		       "RAMDISK: squashfs filesystem found at block %d\n",
+		       start_block);
+		if (squashfsb->s_major < 3)
+			nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
+		else
+			nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
+		goto done;
+	}
+
 	/*
 	 * Read block 1 to test for minix and ext2 superblock
 	 */


Index: TODO
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/TODO,v
retrieving revision 1.54.6.3
retrieving revision 1.54.6.4
diff -u -r1.54.6.3 -r1.54.6.4
--- TODO	24 Mar 2009 22:57:41 -0000	1.54.6.3
+++ TODO	30 Mar 2009 19:45:43 -0000	1.54.6.4
@@ -91,3 +91,12 @@
         In jbarnes linux-next tree for 2.6.30
         Need for KVM PCI device assignment
         https://bugzilla.redhat.com/487103
+
+* linux-2.6-net-fix-another-gro-bug.patch:
+        virtio_net guest->remote GSO busted with 2.6.29 host
+        https://bugzilla.redhat.com/490266
+        Should be in 2.6.29.1
+
+* linux-2.6.29-pat-fixes.patch:
+	http://bugs.freedesktop.org/show_bug.cgi?id=20803
+	ajax to follow up with jbarnes


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.238.6.13
retrieving revision 1.238.6.14
diff -u -r1.238.6.13 -r1.238.6.14
--- config-generic	28 Mar 2009 15:18:48 -0000	1.238.6.13
+++ config-generic	30 Mar 2009 19:45:43 -0000	1.238.6.14
@@ -3883,3 +3883,5 @@
 # CONFIG_X86_CPU_DEBUG is not set
 # CONFIG_KEXEC_JUMP is not set
 # CONFIG_FTRACE_SYSCALLS is not set
+CONFIG_SQUASHFS3=m
+# CONFIG_SQUASHFS3_EMBEDDED is not set


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-x86-generic,v
retrieving revision 1.68.6.4
retrieving revision 1.68.6.5
diff -u -r1.68.6.4 -r1.68.6.5
--- config-x86-generic	24 Mar 2009 22:57:41 -0000	1.68.6.4
+++ config-x86-generic	30 Mar 2009 19:45:43 -0000	1.68.6.5
@@ -71,7 +71,7 @@
 # CONFIG_EDD_OFF is not set
 # CONFIG_NUMA is not set
 CONFIG_HIGHMEM=y
-CONFIG_HIGHPTE=y
+CONFIG_HIGHPTE=n
 # CONFIG_MATH_EMULATION is not set
 CONFIG_MTRR=y
 CONFIG_X86_PAT=y

drm-nouveau.patch:

Index: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-nouveau.patch,v
retrieving revision 1.8.6.7
retrieving revision 1.8.6.8
diff -u -r1.8.6.7 -r1.8.6.8
--- drm-nouveau.patch	28 Mar 2009 15:18:49 -0000	1.8.6.7
+++ drm-nouveau.patch	30 Mar 2009 19:45:44 -0000	1.8.6.8
@@ -2455,10 +2455,10 @@
 +#endif
 diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.c b/drivers/gpu/drm/nouveau/nouveau_drv.c
 new file mode 100644
-index 0000000..7147114
+index 0000000..071bd02
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_drv.c
-@@ -0,0 +1,163 @@
+@@ -0,0 +1,172 @@
 +/*
 + * Copyright 2005 Stephane Marchesin.
 + * All Rights Reserved.
@@ -2489,17 +2489,26 @@
 +
 +#include "drm_pciids.h"
 +
++MODULE_PARM_DESC(noagp, "Disable AGP");
++int nouveau_noagp = 0;
++module_param_named(noagp, nouveau_noagp, int, 0400);
++
++MODULE_PARM_DESC(mm_enabled, "Enable TTM/GEM memory manager");
 +int nouveau_mm_enabled = 0;
 +module_param_named(mm_enabled, nouveau_mm_enabled, int, 0400);
 +
++MODULE_PARM_DESC(modeset, "Enable kernel modesetting (>=GeForce 8)");
 +int nouveau_modeset = -1; /* kms */
 +module_param_named(modeset, nouveau_modeset, int, 0400);
 +
++MODULE_PARM_DESC(duallink, "Allow dual-link TMDS (>=GeForce 8)");
++int nouveau_duallink = 0;
++module_param_named(duallink, nouveau_duallink, int, 0400);
++
 +int nouveau_fbpercrtc = 0;
++#if 0
 +module_param_named(fbpercrtc, nouveau_fbpercrtc, int, 0400);
-+
-+int nouveau_noagp = 0;
-+module_param_named(noagp, nouveau_noagp, int, 0400);
++#endif
 +
 +static struct pci_device_id pciidlist[] = {
 +	{
@@ -3381,10 +3390,10 @@
 +#endif /* __NOUVEAU_DRV_H__ */
 diff --git a/drivers/gpu/drm/nouveau/nouveau_encoder.h b/drivers/gpu/drm/nouveau/nouveau_encoder.h
 new file mode 100644
-index 0000000..36fcf3f
+index 0000000..ea2b9dd
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_encoder.h
-@@ -0,0 +1,44 @@
+@@ -0,0 +1,46 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -3420,6 +3429,8 @@
 +	struct dcb_entry *dcb_entry;
 +	int or;
 +
++	bool dual_link;
++
 +	int (*set_clock_mode) (struct nouveau_encoder *encoder,
 +			       struct drm_display_mode *mode);
 +};
@@ -10099,10 +10110,10 @@
 +#    define NV50_HW_CURSOR_POS(i)         (0x00647084+(i)*0x1000)
 diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
 new file mode 100644
-index 0000000..3be7235
+index 0000000..ed06cda
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
-@@ -0,0 +1,362 @@
+@@ -0,0 +1,336 @@
 +#include "drmP.h"
 +#include "nouveau_drv.h"
 +#include <linux/pagemap.h>
@@ -10115,12 +10126,11 @@
 +	struct drm_ttm_backend backend;
 +	struct drm_device *dev;
 +
-+	int         pages;
-+	int         pages_populated;
-+	dma_addr_t *pagelist;
-+	int         is_bound;
++	struct page **pages;
++	unsigned nr_pages;
 +
-+	unsigned int pte_start;
++	unsigned pte_start;
++	bool bound;
 +};
 +
 +static int
@@ -10134,35 +10144,14 @@
 +		       struct page **pages, struct page *dummy_read_page)
 +{
 +	struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
-+	int p, d, o;
 +
 +	DRM_DEBUG("num_pages = %ld\n", num_pages);
 +
-+	if (nvbe->pagelist)
++	if (nvbe->pages)
 +		return -EINVAL;
-+	nvbe->pages    = (num_pages << PAGE_SHIFT) >> NV_CTXDMA_PAGE_SHIFT;
-+	nvbe->pagelist = drm_alloc(nvbe->pages*sizeof(dma_addr_t),
-+				   DRM_MEM_PAGES);
-+
-+	nvbe->pages_populated = d = 0;
-+	for (p = 0; p < num_pages; p++) {
-+		for (o = 0; o < PAGE_SIZE; o += NV_CTXDMA_PAGE_SIZE) {
-+			struct page *page = pages[p];
-+			if (!page)
-+				page = dummy_read_page;
-+			nvbe->pagelist[d] = pci_map_page(nvbe->dev->pdev,
-+							 page, o,
-+							 NV_CTXDMA_PAGE_SIZE,
-+							 PCI_DMA_BIDIRECTIONAL);
-+			if (pci_dma_mapping_error(nvbe->dev->pdev, nvbe->pagelist[d])) {
-+				be->func->clear(be);
-+				DRM_ERROR("pci_map_page failed\n");
-+				return -EINVAL;
-+			}
-+			nvbe->pages_populated = ++d;
-+		}
-+	}
 +
++	nvbe->pages = pages;
++	nvbe->nr_pages = num_pages;
 +	return 0;
 +}
 +
@@ -10170,71 +10159,66 @@
 +nouveau_sgdma_clear(struct drm_ttm_backend *be)
 +{
 +	struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
-+	int d;
 +
 +	DRM_DEBUG("\n");
 +
-+	if (nvbe && nvbe->pagelist) {
-+		if (nvbe->is_bound)
++	if (nvbe && nvbe->pages) {
++		if (nvbe->bound)
 +			be->func->unbind(be);
-+
-+		for (d = 0; d < nvbe->pages_populated; d++) {
-+			pci_unmap_page(nvbe->dev->pdev, nvbe->pagelist[d],
-+				       NV_CTXDMA_PAGE_SIZE,
-+				       PCI_DMA_BIDIRECTIONAL);
-+		}
-+		drm_free(nvbe->pagelist, nvbe->pages*sizeof(dma_addr_t),
-+			 DRM_MEM_PAGES);
++		nvbe->pages = NULL;
 +	}
 +}
 +
++static inline unsigned
++nouveau_sgdma_pte(struct drm_device *dev, uint64_t offset)
++{
++	struct drm_nouveau_private *dev_priv = dev->dev_private;
++	unsigned pte = (offset >> NV_CTXDMA_PAGE_SHIFT);
++
++	if (dev_priv->card_type < NV_50)
++		return pte + 2;
++
++	return pte << 1;
++}
++
 +static int
 +nouveau_sgdma_bind(struct drm_ttm_backend *be, struct drm_bo_mem_reg *mem)
 +{
 +	struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
 +	struct drm_nouveau_private *dev_priv = nvbe->dev->dev_private;
 +	struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma;
-+	uint64_t offset = (mem->mm_node->start << PAGE_SHIFT);
-+	uint32_t i;
++	unsigned i, j, pte, tile = 0;
 +
-+	DRM_DEBUG("pg=0x%lx (0x%llx), cached=%d\n", mem->mm_node->start,
-+		  offset, (mem->flags & DRM_BO_FLAG_CACHED) == 1);
++	DRM_DEBUG("pg=0x%lx cached=%d\n", mem->mm_node->start,
++		  (mem->flags & DRM_BO_FLAG_CACHED) == 1);
 +
-+	if (offset & NV_CTXDMA_PAGE_MASK)
-+		return -EINVAL;
-+	nvbe->pte_start = (offset >> NV_CTXDMA_PAGE_SHIFT);
-+	if (dev_priv->card_type < NV_50)
-+		nvbe->pte_start += 2; /* skip ctxdma header */
++	if (mem->proposed_flags & DRM_NOUVEAU_BO_FLAG_TILE &&
++	    mem->proposed_flags & DRM_NOUVEAU_BO_FLAG_ZTILE)
++		tile = 0x2800;
++	else
++	if (mem->proposed_flags & DRM_NOUVEAU_BO_FLAG_TILE)
++		tile = 0x7000;
 +
 +	dev_priv->engine.instmem.prepare_access(nvbe->dev, true);
-+	for (i = nvbe->pte_start; i < nvbe->pte_start + nvbe->pages; i++) {
-+		uint64_t pteval = nvbe->pagelist[i - nvbe->pte_start];
-+
-+		if (pteval & NV_CTXDMA_PAGE_MASK) {
-+			DRM_ERROR("Bad pteval 0x%llx\n", pteval);
-+			dev_priv->engine.instmem.finish_access(nvbe->dev);
-+			return -EINVAL;
-+		}
-+
-+		if (dev_priv->card_type < NV_50) {
-+			INSTANCE_WR(gpuobj, i, pteval | 3);
-+		} else {
-+			unsigned tile = 0;
-+
-+			if (mem->proposed_flags & DRM_NOUVEAU_BO_FLAG_TILE &&
-+			    mem->proposed_flags & DRM_NOUVEAU_BO_FLAG_ZTILE)
-+				tile = 0x2800;
-+			else
-+			if (mem->proposed_flags & DRM_NOUVEAU_BO_FLAG_TILE)
-+				tile = 0x7000;
++	pte = nouveau_sgdma_pte(nvbe->dev, mem->mm_node->start << PAGE_SHIFT);
++	nvbe->pte_start = pte;
++	for (i = 0; i < nvbe->nr_pages; i++) {
++		dma_addr_t dma_offset = page_to_phys(nvbe->pages[i]);
++
++		for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++) {
++			if (dev_priv->card_type < NV_50)
++				INSTANCE_WR(gpuobj, pte++, dma_offset | 3);
++			else {
++				INSTANCE_WR(gpuobj, pte++, dma_offset | 0x21);
++				INSTANCE_WR(gpuobj, pte++, tile);
++			}
 +
-+			INSTANCE_WR(gpuobj, (i<<1)+0, pteval | 0x21);
-+			INSTANCE_WR(gpuobj, (i<<1)+1, tile);
++			dma_offset += NV_CTXDMA_PAGE_SIZE;
 +		}
 +	}
 +	dev_priv->engine.instmem.finish_access(nvbe->dev);
 +
-+	nvbe->is_bound  = 1;
++	nvbe->bound = true;
 +	return 0;
 +}
 +
@@ -10243,32 +10227,33 @@
 +{
 +	struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
 +	struct drm_nouveau_private *dev_priv = nvbe->dev->dev_private;
++	struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma;
++	unsigned i, j, pte;
 +
 +	DRM_DEBUG("\n");
 +
-+	if (nvbe->is_bound) {
-+		struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma;
-+		unsigned int pte;
-+
-+		dev_priv->engine.instmem.prepare_access(nvbe->dev, true);
-+		pte = nvbe->pte_start;
-+		while (pte < (nvbe->pte_start + nvbe->pages)) {
-+			uint64_t pteval = dev_priv->gart_info.sg_dummy_bus;
++	if (!nvbe->bound)
++		return 0;
 +
-+			if (dev_priv->card_type < NV_50) {
-+				INSTANCE_WR(gpuobj, pte, pteval | 3);
-+			} else {
-+				INSTANCE_WR(gpuobj, (pte<<1)+0, pteval | 0x21);
-+				INSTANCE_WR(gpuobj, (pte<<1)+1, 0x00000000);
++	dev_priv->engine.instmem.prepare_access(nvbe->dev, true);
++	pte = nvbe->pte_start;
++	for (i = 0; i < nvbe->nr_pages; i++) {
++		dma_addr_t dma_offset = dev_priv->gart_info.sg_dummy_bus;
++
++		for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++) {
++			if (dev_priv->card_type < NV_50)
++				INSTANCE_WR(gpuobj, pte++, dma_offset | 3);
++			else {
++				INSTANCE_WR(gpuobj, pte++, dma_offset | 0x21);
++				INSTANCE_WR(gpuobj, pte++, 0x00000000);
 +			}
 +
-+			pte++;
++			dma_offset += NV_CTXDMA_PAGE_SIZE;
 +		}
-+		dev_priv->engine.instmem.finish_access(nvbe->dev);
-+
-+		nvbe->is_bound = 0;
 +	}
++	dev_priv->engine.instmem.finish_access(nvbe->dev);
 +
++	nvbe->bound = false;
 +	return 0;
 +}
 +
@@ -10279,7 +10264,7 @@
 +	if (be) {
 +		struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
 +		if (nvbe) {
-+			if (nvbe->pagelist)
++			if (nvbe->pages)
 +				be->func->clear(be);
 +			drm_ctl_free(nvbe, sizeof(*nvbe), DRM_MEM_TTM);
 +		}
@@ -17336,10 +17321,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..27fea86
+index 0000000..c554d27
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_connector.c
-@@ -0,0 +1,591 @@
+@@ -0,0 +1,596 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -17793,9 +17778,14 @@
 +		if (mode->hdisplay > connector->native_mode->hdisplay ||
 +		    mode->vdisplay > connector->native_mode->vdisplay)
 +			return MODE_PANEL;
-+		/* fall-through */
++
++		max_clock = 400000;
++		break;
 +	case DRM_MODE_ENCODER_TMDS:
-+		max_clock = 165000;
++		if (!encoder->dual_link)
++			max_clock = 165000;
++		else
++			max_clock = 330000;
 +		break;
 +	default:
 +		max_clock = 400000;
@@ -42648,10 +42638,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..ff3dd42
+index 0000000..48fc393
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_sor.c
-@@ -0,0 +1,273 @@
+@@ -0,0 +1,277 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -42689,6 +42679,8 @@
 +#include "nv50_display.h"
 +#include "nv50_display_commands.h"
 +
++extern int nouveau_duallink;
++
 +static void
 +nv50_sor_disconnect(struct nouveau_encoder *encoder)
 +{
@@ -42903,6 +42895,8 @@
 +	encoder->dcb_entry = entry;
 +	encoder->or = ffs(entry->or) - 1;
 +
++	encoder->dual_link = nouveau_duallink;
++
 +	/* Set function pointers. */
 +	encoder->set_clock_mode = nv50_sor_set_clock_mode;
 +


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1294.2.16
retrieving revision 1.1294.2.17
diff -u -r1.1294.2.16 -r1.1294.2.17
--- kernel.spec	29 Mar 2009 16:55:07 -0000	1.1294.2.16
+++ kernel.spec	30 Mar 2009 19:45:44 -0000	1.1294.2.17
@@ -402,7 +402,7 @@
 # problems with the newer kernel or lack certain things that make
 # integration in the distro harder than needed.
 #
-%define package_conflicts initscripts < 7.23, udev < 063-6, iptables < 1.3.2-1, ipw2200-firmware < 2.4, iwl4965-firmware < 228.57.2, selinux-policy-targeted < 1.25.3-14, squashfs-tools < 4.0, wireless-tools < 29-3
+%define package_conflicts initscripts < 7.23, udev < 063-6, iptables < 1.3.2-1, ipw2200-firmware < 2.4, iwl4965-firmware < 228.57.2, selinux-policy-targeted < 1.25.3-14, squashfs-tools < 3.4, wireless-tools < 29-3
 
 #
 # The ld.so.conf.d file we install uses syntax older ldconfig's don't grok.
@@ -639,6 +639,9 @@
 
 Patch600: linux-2.6-defaults-alsa-hda-beep-off.patch
 Patch601: alsa-rewrite-hw_ptr-updaters.patch
+Patch602: alsa-pcm-always-reset-invalid-position.patch
+Patch603: alsa-pcm-fix-delta-calc-at-overlap.patch
+Patch604: alsa-pcm-safer-boundary-checks.patch
 Patch610: hda_intel-prealloc-4mb-dmabuffer.patch
 
 Patch670: linux-2.6-ata-quirk.patch
@@ -693,10 +696,16 @@
 
 # fix for net lockups, will be in 2.6.29.1
 Patch9100: linux-2.6-net-fix-gro-bug.patch
+Patch9101: linux-2.6-net-fix-another-gro-bug.patch
 
 # fix locking in ipsec (#489764)
-Patch9101: linux-2.6-net-xfrm-fix-spin-unlock.patch
+Patch9200: linux-2.6-net-xfrm-fix-spin-unlock.patch
 
+# http://bugs.freedesktop.org/show_bug.cgi?id=20803
+Patch9210: linux-2.6.29-pat-fixes.patch
+
+Patch9995: squashfs3.patch
+Patch9996: squashfs-fixups.patch
 Patch9997: xen.pvops.pre.patch
 Patch9998: xen.pvops.patch
 Patch9999: xen.pvops.post.patch
@@ -1160,6 +1169,16 @@
 ApplyPatch linux-2.6-scsi-cpqarray-set-master.patch
 
 # ALSA
+# squelch hda_beep by default
+ApplyPatch linux-2.6-defaults-alsa-hda-beep-off.patch
+
+# fix alsa for pulseaudio
+ApplyPatch alsa-rewrite-hw_ptr-updaters.patch
+ApplyPatch alsa-pcm-always-reset-invalid-position.patch
+ApplyPatch alsa-pcm-fix-delta-calc-at-overlap.patch
+ApplyPatch alsa-pcm-safer-boundary-checks.patch
+
+ApplyPatch hda_intel-prealloc-4mb-dmabuffer.patch
 
 # Networking
 
@@ -1191,11 +1210,6 @@
 
 # Changes to upstream defaults.
 
-# squelch hda_beep by default
-ApplyPatch linux-2.6-defaults-alsa-hda-beep-off.patch
-ApplyPatch alsa-rewrite-hw_ptr-updaters.patch
-ApplyPatch hda_intel-prealloc-4mb-dmabuffer.patch
-
 # ia64 ata quirk
 ApplyPatch linux-2.6-ata-quirk.patch
 
@@ -1249,9 +1263,16 @@
 
 #ApplyPatch linux-2.6-dropwatch-protocol.patch
 
-ApplyPatch linux-2.6-net-fix-gro-bug.patch
+#ApplyPatch linux-2.6-net-fix-gro-bug.patch
+ApplyPatch linux-2.6-net-fix-another-gro-bug.patch
+
 ApplyPatch linux-2.6-net-xfrm-fix-spin-unlock.patch
 
+ApplyPatch linux-2.6.29-pat-fixes.patch
+
+ApplyPatch squashfs3.patch
+ApplyPatch squashfs-fixups.patch
+
 ApplyPatch xen.pvops.pre.patch
 ApplyPatch xen.pvops.patch
 ApplyPatch xen.pvops.post.patch
@@ -1838,6 +1859,37 @@
 # and build.
 
 %changelog
+* Mon Mar 30 2009 Michael Young <m.a.young at durham.ac.uk>
+- pvops update and merging of patches
+
+* Mon Mar 30 2009 Adam Jackson <ajax at redhat.com>
+- linux-2.6.29-pat-fixes.patch: Fix PAT/GTT interaction
+
+* Mon Mar 30 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
+- some fixes of troubles caused by v4l2 subdev conversion
+
+* Mon Mar 30 2009 Mark McLoughlin <markmc at redhat.com> 2.6.29-21
+- Fix guest->remote network stall with virtio/GSO (#490266)
+
+* Mon Mar 30 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch
+  - rewrite nouveau PCI(E) GART functions, should fix rh#492492
+  - kms: kernel option to allow dual-link dvi
+  - modinfo descriptions for module parameters
+
+* Sun Mar 29 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
+- more v4l/dvb updates: v4l subdev conversion and some driver improvements
+
+* Sun Mar 29 2009 Chuck Ebbert <cebbert at redhat.com>
+- More fixes for ALSA hardware pointer updating.
+
+* Sun Mar 29 2009 Michael Young <m.a.young at durham.ac.uk>
+- try push2/xen/dom0/master branch rather than xen/dom0/hackery as it should
+    be closer to the proposed 2.6.30 merge
+- add squashfs 3 support from F-10 to make kernel more friendly to fc10
+- Set CONFIG_HIGHPTE=n in config-x86-generic to avoid eventual crash problem
+- comment out linux-2.6-net-fix-gro-bug.patch which is in push2/xen/dom0/master
+
 * Sun Mar 29 2009 Michael Young <m.a.young at durham.ac.uk>
 - drop dropwatch patch due to compile problems
 - revert pvops patches bd4a7874716d1b1f69cacfef4adf9f94050ecd82 and

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

Index: linux-2.6-v4l-dvb-experimental.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-v4l-dvb-experimental.patch,v
retrieving revision 1.2.2.4
retrieving revision 1.2.2.5
diff -u -r1.2.2.4 -r1.2.2.5
--- linux-2.6-v4l-dvb-experimental.patch	28 Mar 2009 15:18:51 -0000	1.2.2.4
+++ linux-2.6-v4l-dvb-experimental.patch	30 Mar 2009 19:45:45 -0000	1.2.2.5
@@ -2,7 +2,7 @@
       V4L/DVB (10982): cx231xx: fix compile warning
       V4L/DVB (10989): cx25840: cx23885 detection was broken
 
-Mauro Carvalho Chehab (11):
+Mauro Carvalho Chehab (12):
       V4L/DVB (10953): cx25840: Fix CodingStyle errors introduced by the last patch
       V4L/DVB (10955): cx231xx: CodingStyle automatic fixes with Lindent
       V4L/DVB (10956): cx231xx: First series of manual CodingStyle fixes
@@ -13,6 +13,7 @@
       V4L/DVB (11133): cx231xx: don't print pcb config debug messages by default
       V4L/DVB (11134): cx231xx: dmesg cleanup
       V4L/DVB (11135): cx231xx: use usb_make_path() for bus_info
+      V4L/DVB (11250): cx231xx: Fix Kconfig help items
       Merge branch 'next' of ../pending into Fedora
 
 Sri Deevi (7):
@@ -391,10 +392,10 @@
 +MODULE_AUTHOR("Pierre Ossman");
 +MODULE_LICENSE("GPL");
 diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index 3f85b9e..114bf04 100644
+index 76bad58..58abbe3 100644
 --- a/drivers/media/video/Kconfig
 +++ b/drivers/media/video/Kconfig
-@@ -793,6 +793,8 @@ source "drivers/media/video/hdpvr/Kconfig"
+@@ -795,6 +795,8 @@ source "drivers/media/video/hdpvr/Kconfig"
  
  source "drivers/media/video/em28xx/Kconfig"
  
@@ -417,7 +418,7 @@
  obj-$(CONFIG_VIDEO_TVP514X) += tvp514x.o
 diff --git a/drivers/media/video/cx231xx/Kconfig b/drivers/media/video/cx231xx/Kconfig
 new file mode 100644
-index 0000000..7a6700f
+index 0000000..9115654
 --- /dev/null
 +++ b/drivers/media/video/cx231xx/Kconfig
 @@ -0,0 +1,35 @@
@@ -431,11 +432,11 @@
 +       select VIDEO_CX25840
 +       select VIDEO_CX231XX_ALSA
 +
-+       ---help---
-+	 This is a video4linux driver for Conexant 231xx USB based TV cards.
++	---help---
++	  This is a video4linux driver for Conexant 231xx USB based TV cards.
 +
-+	 To compile this driver as a module, choose M here: the
-+	 module will be called cx231xx
++	  To compile this driver as a module, choose M here: the
++	  module will be called cx231xx
 +
 +config VIDEO_CX231XX_ALSA
 +    tristate "Conexant Cx231xx ALSA audio module"
@@ -14280,7 +14281,7 @@
 +}
 +#endif
 diff --git a/drivers/media/video/cx25840/cx25840-audio.c b/drivers/media/video/cx25840/cx25840-audio.c
-index d199d80..95e3f95 100644
+index 93d74be..2f846f5 100644
 --- a/drivers/media/video/cx25840/cx25840-audio.c
 +++ b/drivers/media/video/cx25840/cx25840-audio.c
 @@ -32,7 +32,7 @@ static int set_audclk_freq(struct i2c_client *client, u32 freq)
@@ -14419,10 +14420,10 @@
  
  static int get_volume(struct i2c_client *client)
 diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
-index 4a5d5ef..4c3135f 100644
+index 737ee4e..f8ed3c0 100644
 --- a/drivers/media/video/cx25840/cx25840-core.c
 +++ b/drivers/media/video/cx25840/cx25840-core.c
-@@ -348,6 +348,77 @@ static void cx23885_initialize(struct i2c_client *client)
+@@ -345,6 +345,77 @@ static void cx23885_initialize(struct i2c_client *client)
  
  /* ----------------------------------------------------------------------- */
  
@@ -14500,7 +14501,7 @@
  void cx25840_std_setup(struct i2c_client *client)
  {
  	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
-@@ -417,39 +488,41 @@ void cx25840_std_setup(struct i2c_client *client)
+@@ -414,39 +485,41 @@ void cx25840_std_setup(struct i2c_client *client)
  	}
  
  	/* DEBUG: Displays configured PLL frequency */
@@ -14574,7 +14575,7 @@
  	}
  
  	/* Sets horizontal blanking delay and active lines */
-@@ -599,7 +672,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
+@@ -596,7 +669,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
  	 * configuration in reg (for the cx23885) so we have no
  	 * need to attempt to flip bits for earlier av decoders.
  	 */
@@ -14583,7 +14584,7 @@
  		switch (aud_input) {
  		case CX25840_AUDIO_SERIAL:
  			/* do nothing, use serial audio input */
-@@ -622,7 +695,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
+@@ -619,7 +692,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
  	/* Set INPUT_MODE to Composite (0) or S-Video (1) */
  	cx25840_and_or(client, 0x401, ~0x6, is_composite ? 0 : 0x02);
  
@@ -14592,7 +14593,7 @@
  		/* Set CH_SEL_ADC2 to 1 if input comes from CH3 */
  		cx25840_and_or(client, 0x102, ~0x2, (reg & 0x80) == 0 ? 2 : 0);
  		/* Set DUAL_MODE_ADC2 to 1 if input comes from both CH2&CH3 */
-@@ -662,6 +735,19 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
+@@ -659,6 +732,19 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
  		 */
  		cx25840_write(client, 0x918, 0xa0);
  		cx25840_write(client, 0x919, 0x01);
@@ -14612,7 +14613,7 @@
  	}
  
  	return 0;
-@@ -1123,6 +1209,8 @@ static int cx25840_init(struct v4l2_subdev *sd, u32 val)
+@@ -1118,6 +1204,8 @@ static int cx25840_init(struct v4l2_subdev *sd, u32 val)
  			cx25836_initialize(client);
  		else if (state->is_cx23885)
  			cx23885_initialize(client);
@@ -14621,7 +14622,7 @@
  		else
  			cx25840_initialize(client);
  	}
-@@ -1178,7 +1266,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
+@@ -1159,7 +1247,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
  	v4l_dbg(1, cx25840_debug, client, "%s output\n",
  			enable ? "enable" : "disable");
  	if (enable) {
@@ -14630,7 +14631,7 @@
  			u8 v = (cx25840_read(client, 0x421) | 0x0b);
  			cx25840_write(client, 0x421, v);
  		} else {
-@@ -1188,7 +1276,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
+@@ -1169,7 +1257,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
  					state->is_cx25836 ? 0x04 : 0x07);
  		}
  	} else {
@@ -14639,7 +14640,7 @@
  			u8 v = cx25840_read(client, 0x421) & ~(0x0b);
  			cx25840_write(client, 0x421, v);
  		} else {
-@@ -1369,6 +1457,8 @@ static int cx25840_reset(struct v4l2_subdev *sd, u32 val)
+@@ -1350,6 +1438,8 @@ static int cx25840_reset(struct v4l2_subdev *sd, u32 val)
  		cx25836_initialize(client);
  	else if (state->is_cx23885)
  		cx23885_initialize(client);
@@ -14648,7 +14649,7 @@
  	else
  		cx25840_initialize(client);
  	return 0;
-@@ -1481,6 +1571,8 @@ static int cx25840_probe(struct i2c_client *client,
+@@ -1449,6 +1539,8 @@ static int cx25840_probe(struct i2c_client *client,
  		id = V4L2_IDENT_CX25836 + ((device_id >> 4) & 0xf) - 6;
  	} else if (device_id == 0x1313) {
  		id = V4L2_IDENT_CX25836 + ((device_id >> 4) & 0xf) - 6;
@@ -14657,7 +14658,7 @@
  	}
  	else {
  		v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
-@@ -1503,6 +1595,7 @@ static int cx25840_probe(struct i2c_client *client,
+@@ -1471,6 +1563,7 @@ static int cx25840_probe(struct i2c_client *client,
  	state->c = client;
  	state->is_cx25836 = ((device_id & 0xff00) == 0x8300);
  	state->is_cx23885 = (device_id == 0x0000) || (device_id == 0x1313);
@@ -14666,7 +14667,7 @@
  	state->aud_input = CX25840_AUDIO8;
  	state->audclk_freq = 48000;
 diff --git a/drivers/media/video/cx25840/cx25840-core.h b/drivers/media/video/cx25840/cx25840-core.h
-index be05582..93941be 100644
+index 9ad0eb8..814b565 100644
 --- a/drivers/media/video/cx25840/cx25840-core.h
 +++ b/drivers/media/video/cx25840/cx25840-core.h
 @@ -50,6 +50,7 @@ struct cx25840_state {

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

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.2.8.6 -r 1.2.8.7 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.6
retrieving revision 1.2.8.7
diff -u -r1.2.8.6 -r1.2.8.7
--- linux-2.6-v4l-dvb-fixes.patch	28 Mar 2009 15:18:51 -0000	1.2.8.6
+++ linux-2.6-v4l-dvb-fixes.patch	30 Mar 2009 19:45:45 -0000	1.2.8.7
@@ -98,6 +98,9 @@
 Arne Luehrs (1):
       V4L/DVB (10319): dib0700: enable IR receiver in Nova TD usb stick (52009)
 
+Artem Makhutov (1):
+      V4L/DVB (11248): Remove debug output from stb6100_cfg.h
+
 Bruno Christo (1):
       V4L/DVB (10827): Add support for GeoVision GV-800(S)
 
@@ -179,7 +182,7 @@
       V4L/DVB (11026): sh-mobile-ceu-camera: set field to the value, configured at open()
       V4L/DVB (11027): soc-camera: configure drivers with a default format at probe time
 
-Hans Verkuil (142):
+Hans Verkuil (171):
       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.
@@ -322,6 +325,35 @@
       V4L/DVB (11117): ov7670: add support to get/set registers
       V4L/DVB (11118): cafe_ccic: replace debugfs with g/s_register ioctls.
       V4L/DVB (11120): cafe_ccic: stick in a comment with a request for test results
+      V4L/DVB (11253): saa7134: fix RTD Embedded Technologies VFG7350 support.
+      V4L/DVB (11254): cs53l32a: remove legacy support.
+      V4L/DVB (11255): dst_ca: fix compile warning.
+      V4L/DVB (11256): dabusb: fix compile warning.
+      V4L/DVB (11275): tvaudio: fix mute and s/g_tuner handling
+      V4L/DVB (11276): tvaudio: add tda9875 support.
+      V4L/DVB (11277): tvaudio: always call init_timer to prevent rmmod crash.
+      V4L/DVB (11278): bttv: convert to v4l2_subdev since i2c autoprobing will disappear.
+      V4L/DVB (11279): bttv: tda9875 is no longer used by bttv, so remove from bt8xx/Kconfig.
+      V4L/DVB (11281): bttv: move saa6588 config to the helper chip config
+      V4L/DVB (11282): saa7134: add RDS support.
+      V4L/DVB (11283): saa6588: remove legacy code.
+      V4L/DVB (11295): cx23885: convert to v4l2_device.
+      V4L/DVB (11297): cx23885: convert to v4l2_subdev.
+      V4L/DVB (11298): cx25840: remove legacy code for old-style i2c API
+      V4L/DVB (11300): cx88: convert to v4l2_subdev.
+      V4L/DVB (11301): wm8775: remove legacy code for old-style i2c API
+      V4L/DVB (11302): tda9875: remove legacy code for old-style i2c API
+      V4L/DVB (11303): tda7432: remove legacy code for old-style i2c API
+      V4L/DVB (11304): v4l2: remove v4l2_subdev_command calls where they are no longer needed.
+      V4L/DVB (11305): cx88: prevent probing rtc and ir devices
+      V4L/DVB (11309): cx25840: cleanup: remove intermediate 'ioctl' step
+      V4L/DVB (11310): cx18: remove intermediate 'ioctl' step
+      V4L/DVB (11311): v4l: replace 'ioctl' references in v4l i2c drivers
+      V4L/DVB (11312): tuner: remove V4L1 code from this driver.
+      V4L/DVB (11313): v4l2-subdev: add enum_framesizes and enum_frameintervals.
+      V4L/DVB (11314): au8522: remove unused I2C_DRIVERID
+      V4L/DVB (11315): cx25840: fix 'unused variable' warning.
+      V4L/DVB (11316): saa7191: tuner ops wasn't set.
 
 Hans Werner (1):
       V4L/DVB (10392): lnbp21: documentation about the system register
@@ -466,6 +498,9 @@
 Kay Sievers (1):
       V4L/DVB (10395): struct device - replace bus_id with dev_name(), dev_set_name()
 
+Klaus Flittner (1):
+      V4L/DVB (11290): Add Elgato EyeTV DTT to dibcom driver
+
 Kuninori Morimoto (8):
       V4L/DVB (10616): tw9910: color format check is added on set_fmt
       V4L/DVB (10666): ov772x: move configuration from start_capture() to set_fmt()
@@ -481,7 +516,7 @@
       V4L/DVB (10366): gspca - mr97310a: New subdriver.
       V4L/DVB (10369): gspca - mr97310a: Fix camera initialization copy/paste bugs.
 
-Laurent Pinchart (7):
+Laurent Pinchart (8):
       V4L/DVB (10293): uvcvideo: replace strn{cpy,cat} with strl{cpy,cat}.
       V4L/DVB (10294): uvcvideo: Add support for the Alcor Micro AU3820 chipset.
       V4L/DVB (10295): uvcvideo: Retry URB buffers allocation when the system is low on memory.
@@ -489,6 +524,7 @@
       V4L/DVB (10650): uvcvideo: Initialize streaming parameters with the probe control value
       V4L/DVB (10651): uvcvideo: Ignore empty bulk URBs
       V4L/DVB (10652): uvcvideo: Add quirk to override wrong bandwidth value for Vimicro devices
+      V4L/DVB (11292): uvcvideo: Add support for Syntek cameras found in JAOtech Smart Terminals
 
 Lierdakil (1):
       V4L/DVB (10388): gspca - pac207: Webcam 093a:2474 added.
@@ -506,7 +542,7 @@
       V4L/DVB (10823): saa7134: add DVB support for Avermedia A700 cards
       V4L/DVB (10948): flexcop-pci: Print a message in case the new stream watchdog detects a problem
 
-Mauro Carvalho Chehab (48):
+Mauro Carvalho Chehab (49):
       V4L/DVB (10211): vivi: Implements 4 inputs on vivi
       V4L/DVB (10298): remove err macro from few usb devices
       V4L/DVB (10305): videobuf-vmalloc: Fix: videobuf memory were never freed
@@ -555,8 +591,9 @@
       V4L/DVB (11225): v4lgrab: fix compilation warnings
       V4L/DVB (11226): avoid warnings for request_ihex_firmware on dabusb and vicam
       V4L/DVB (11227): ce6230: avoid using unitialized var
+      V4L/DVB (11308): msp3400: use the V4L2 header since no V4L1 code is there
 
-Michael Krufky (35):
+Michael Krufky (36):
       V4L/DVB (10415): dib0700: add data debug to dib0700_i2c_xfer_new
       V4L/DVB (10416): tveeprom: update to include Hauppauge tuners 151-155
       V4L/DVB (10417): sms1xxx: add missing usb id 2040:2011
@@ -592,6 +629,7 @@
       V4L/DVB (10969): lgdt3305: add missing space in comment
       V4L/DVB (10970): lgdt3305: add MODULE_VERSION
       V4L/DVB (10984): lgdt3305: avoid OOPS in error path of lgdt3305_attach
+      V4L/DVB (11251): tuner: prevent invalid initialization of t->config in set_type
 
 Mike Isely (62):
       V4L/DVB (10236): pvrusb2: Stop advertising VBI capability - it isn't there
@@ -657,8 +695,9 @@
       V4L/DVB (11207): pvrusb2: Add composite and s-video input support for OnAir devices
       V4L/DVB (11208): pvrusb2: Use v4l2_device_disconnect()
 
-Márton Németh (1):
+Márton Németh (2):
       V4L/DVB (10633): DAB: fix typo
+      V4L/DVB (11293): uvcvideo: Add zero fill for VIDIOC_ENUM_FMT
 
 Nam Phạm Thành (1):
       V4L/DVB (10242): pwc: add support for webcam snapshot button
@@ -676,6 +715,10 @@
 Pascal Terjan (1):
       V4L/DVB (10825): Add ids for Yuan PD378S DVB adapter
 
+Patrick Boettcher (2):
+      V4L/DVB (11284): Fix i2c code of flexcop-driver for rare revisions
+      V4L/DVB (11285): Remove unecessary udelay
+
 Philippe Rétornaz (1):
       V4L/DVB (11035): mt9t031 bugfix
 
@@ -720,6 +763,9 @@
 Stephan Wienczny (1):
       V4L/DVB (10949): Add support for Terratec Cinergy HT PCI MKII
 
+Steven Toth (1):
+      V4L/DVB (11296): cx23885: bugfix error message if firmware is not found
+
 Stoyan Gaydarov (1):
       V4L/DVB (11235): changed ioctls to unlocked
 
@@ -745,7 +791,7 @@
       V4L/DVB (10531): Code rearrangements in preparation for other report types
       V4L/DVB (10534): Output HW/SW version from scratchpad
 
-Trent Piepho (28):
+Trent Piepho (41):
       V4L/DVB (10558): bttv: norm value should be unsigned
       V4L/DVB (10559): bttv: Fix TDA9880 norm setting code
       V4L/DVB (10560): bttv: make tuner card info more consistent
@@ -774,14 +820,34 @@
       V4L/DVB (10930): zoran: Unify buffer descriptors
       V4L/DVB (10933): zoran: Pass zoran_fh pointers instead of file pointers
       V4L/DVB (10934): zoran: replace functions names in strings with __func__
+      V4L/DVB (11260): v4l2-ioctl:  Check format for S_PARM and G_PARM
+      V4L/DVB (11261): saa7146: Remove buffer type check from vidioc_g_parm
+      V4L/DVB (11262): bttv: Remove buffer type check from vidioc_g_parm
+      V4L/DVB (11263): gspca: Stop setting buffer type, and avoid memset in querycap
+      V4L/DVB (11264): omap24xxcam: Remove buffer type check from vidioc_s/g_parm
+      V4L/DVB (11265): stkwebcam: Remove buffer type check from g_parm and q/dq/reqbufs
+      V4L/DVB (11266): vino: Remove code for things already done by video_ioctl2
+      V4L/DVB (11267): cafe_ccic: Remove buffer type check from XXXbuf
+      V4L/DVB (11268): cx23885-417: Don't need to zero ioctl parameter fields
+      V4L/DVB (11269): cx88-blackbird: Stop setting buffer type in XXX_fmt_vid_cap
+      V4L/DVB (11270): meye: Remove buffer type checks from XXX_fmt_vid_cap, XXXbuf
+      V4L/DVB (11271): usbvision: Remove buffer type checks from enum_fmt_vid_cap, XXXbuf
+      V4L/DVB (11272): zr364xx: Remove code for things already done by video_ioctl2
 
 Uri Shkolnik (2):
       V4L/DVB (10748): sms1xxx: restore smsusb_driver.name to smsusb
       V4L/DVB (10750): import changes from Siano
 
+Uwe Bugla (2):
+      V4L/DVB (11287): Code cleanup (passes checkpatch now) of the b2c2-flexcop-drivers 1/2
+      V4L/DVB (11288): Code cleanup (passes checkpatch now) of the b2c2-flexcop-drivers 2/2
+
 Vitaly Wool (1):
       V4L/DVB (10833): em28xx: enable Compro VideoMate ForYou sound
 
+Xoan Loureiro (1):
+      V4L/DVB (11289): Patch for Yuan MC770 DVB-T (1164:0871)
+
 klaas de waal (1):
       V4L/DVB (11236): tda827x: fix locking issues with DVB-C
 
@@ -2096,7 +2162,7 @@
  		i2c_adapter->algo	   = &saa7146_algo;
  		i2c_adapter->algo_data     = NULL;
 diff --git a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c
-index 47fee05..8035285 100644
+index 47fee05..552dab4 100644
[...12983 lines suppressed...]
@@ -97026,17 +103735,72 @@
  #undef PDBGG
  #define PDBGG(fmt, args...) do {;} while(0); /* nothing: it's a placeholder */
 diff --git a/drivers/media/video/wm8739.c b/drivers/media/video/wm8739.c
-index f2864d5..18535c4 100644
+index f2864d5..b572ce2 100644
 --- a/drivers/media/video/wm8739.c
 +++ b/drivers/media/video/wm8739.c
-@@ -343,7 +343,6 @@ MODULE_DEVICE_TABLE(i2c, wm8739_id);
+@@ -252,11 +252,6 @@ static int wm8739_log_status(struct v4l2_subdev *sd)
+ 	return 0;
+ }
+ 
+-static int wm8739_command(struct i2c_client *client, unsigned cmd, void *arg)
+-{
+-	return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
+-}
+-
+ /* ----------------------------------------------------------------------- */
+ 
+ static const struct v4l2_subdev_core_ops wm8739_core_ops = {
+@@ -343,8 +338,6 @@ MODULE_DEVICE_TABLE(i2c, wm8739_id);
  
  static struct v4l2_i2c_driver_data v4l2_i2c_data = {
  	.name = "wm8739",
 -	.driverid = I2C_DRIVERID_WM8739,
- 	.command = wm8739_command,
+-	.command = wm8739_command,
  	.probe = wm8739_probe,
  	.remove = wm8739_remove,
+ 	.id_table = wm8739_id,
+diff --git a/drivers/media/video/wm8775.c b/drivers/media/video/wm8775.c
+index 53fcd42..eddf11a 100644
+--- a/drivers/media/video/wm8775.c
++++ b/drivers/media/video/wm8775.c
+@@ -34,15 +34,12 @@
+ #include <linux/videodev2.h>
+ #include <media/v4l2-device.h>
+ #include <media/v4l2-chip-ident.h>
+-#include <media/v4l2-i2c-drv-legacy.h>
++#include <media/v4l2-i2c-drv.h>
+ 
+ MODULE_DESCRIPTION("wm8775 driver");
+ MODULE_AUTHOR("Ulf Eklund, Hans Verkuil");
+ MODULE_LICENSE("GPL");
+ 
+-static unsigned short normal_i2c[] = { 0x36 >> 1, I2C_CLIENT_END };
+-
+-I2C_CLIENT_INSMOD;
+ 
+ 
+ /* ----------------------------------------------------------------------- */
+@@ -161,11 +158,6 @@ static int wm8775_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *fre
+ 	return 0;
+ }
+ 
+-static int wm8775_command(struct i2c_client *client, unsigned cmd, void *arg)
+-{
+-	return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
+-}
+-
+ /* ----------------------------------------------------------------------- */
+ 
+ static const struct v4l2_subdev_core_ops wm8775_core_ops = {
+@@ -268,8 +260,6 @@ MODULE_DEVICE_TABLE(i2c, wm8775_id);
+ 
+ static struct v4l2_i2c_driver_data v4l2_i2c_data = {
+ 	.name = "wm8775",
+-	.driverid = I2C_DRIVERID_WM8775,
+-	.command = wm8775_command,
+ 	.probe = wm8775_probe,
+ 	.remove = wm8775_remove,
+ 	.id_table = wm8775_id,
 diff --git a/drivers/media/video/zc0301/zc0301_sensor.h b/drivers/media/video/zc0301/zc0301_sensor.h
 index b0cd49c..3a408de 100644
 --- a/drivers/media/video/zc0301/zc0301_sensor.h
@@ -104941,7 +111705,7 @@
  /* headerfile of this module */
  #include "zr36060.h"
 diff --git a/drivers/media/video/zr364xx.c b/drivers/media/video/zr364xx.c
-index 9302356..f2f8cdd 100644
+index 9302356..221409f 100644
 --- a/drivers/media/video/zr364xx.c
 +++ b/drivers/media/video/zr364xx.c
 @@ -96,6 +96,7 @@ static struct usb_device_id device_table[] = {
@@ -104952,6 +111716,64 @@
  	{}			/* Terminating entry */
  };
  
+@@ -425,7 +426,6 @@ static ssize_t zr364xx_read(struct file *file, char __user *buf, size_t cnt,
+ static int zr364xx_vidioc_querycap(struct file *file, void *priv,
+ 				   struct v4l2_capability *cap)
+ {
+-	memset(cap, 0, sizeof(*cap));
+ 	strcpy(cap->driver, DRIVER_DESC);
+ 	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE;
+ 	return 0;
+@@ -436,8 +436,6 @@ static int zr364xx_vidioc_enum_input(struct file *file, void *priv,
+ {
+ 	if (i->index != 0)
+ 		return -EINVAL;
+-	memset(i, 0, sizeof(*i));
+-	i->index = 0;
+ 	strcpy(i->name, DRIVER_DESC " Camera");
+ 	i->type = V4L2_INPUT_TYPE_CAMERA;
+ 	return 0;
+@@ -529,11 +527,6 @@ static int zr364xx_vidioc_enum_fmt_vid_cap(struct file *file,
+ {
+ 	if (f->index > 0)
+ 		return -EINVAL;
+-	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+-		return -EINVAL;
+-	memset(f, 0, sizeof(*f));
+-	f->index = 0;
+-	f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ 	f->flags = V4L2_FMT_FLAG_COMPRESSED;
+ 	strcpy(f->description, "JPEG");
+ 	f->pixelformat = V4L2_PIX_FMT_JPEG;
+@@ -550,8 +543,6 @@ static int zr364xx_vidioc_try_fmt_vid_cap(struct file *file, void *priv,
+ 		return -ENODEV;
+ 	cam = video_get_drvdata(vdev);
+ 
+-	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+-		return -EINVAL;
+ 	if (f->fmt.pix.pixelformat != V4L2_PIX_FMT_JPEG)
+ 		return -EINVAL;
+ 	if (f->fmt.pix.field != V4L2_FIELD_ANY &&
+@@ -577,10 +568,6 @@ static int zr364xx_vidioc_g_fmt_vid_cap(struct file *file, void *priv,
+ 		return -ENODEV;
+ 	cam = video_get_drvdata(vdev);
+ 
+-	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+-		return -EINVAL;
+-	memset(&f->fmt.pix, 0, sizeof(struct v4l2_pix_format));
+-	f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ 	f->fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG;
+ 	f->fmt.pix.field = V4L2_FIELD_NONE;
+ 	f->fmt.pix.width = cam->width;
+@@ -602,8 +589,6 @@ static int zr364xx_vidioc_s_fmt_vid_cap(struct file *file, void *priv,
+ 		return -ENODEV;
+ 	cam = video_get_drvdata(vdev);
+ 
+-	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+-		return -EINVAL;
+ 	if (f->fmt.pix.pixelformat != V4L2_PIX_FMT_JPEG)
+ 		return -EINVAL;
+ 	if (f->fmt.pix.field != V4L2_FIELD_ANY &&
 diff --git a/include/linux/Kbuild b/include/linux/Kbuild
 index 106c3ba..5bd3efd 100644
 --- a/include/linux/Kbuild
@@ -105888,7 +112710,7 @@
  				    int id, const char *name);
  /* Prints the ioctl in a human-readable format */
 diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index 37b09e5..d7a72d2 100644
+index 37b09e5..1d181b4 100644
 --- a/include/media/v4l2-subdev.h
 +++ b/include/media/v4l2-subdev.h
 @@ -78,6 +78,9 @@ struct v4l2_subdev_core_ops {
@@ -105901,7 +112723,7 @@
  	int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
  	long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
  #ifdef CONFIG_VIDEO_ADV_DEBUG
-@@ -112,9 +115,15 @@ struct v4l2_subdev_video_ops {
+@@ -112,9 +115,17 @@ struct v4l2_subdev_video_ops {
  	int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data);
  	int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap);
  	int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
@@ -105915,10 +112737,12 @@
 +	int (*s_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt);
 +	int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
 +	int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
++	int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize);
++	int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival);
  };
  
  struct v4l2_subdev_ops {
-@@ -132,7 +141,7 @@ struct v4l2_subdev_ops {
+@@ -132,7 +143,7 @@ struct v4l2_subdev_ops {
  struct v4l2_subdev {
  	struct list_head list;
  	struct module *owner;
@@ -105927,7 +112751,7 @@
  	const struct v4l2_subdev_ops *ops;
  	/* name must be unique */
  	char name[V4L2_SUBDEV_NAME_SIZE];
-@@ -171,7 +180,7 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
+@@ -171,7 +182,7 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
  	/* ops->core MUST be set */
  	BUG_ON(!ops || !ops->core);
  	sd->ops = ops;
@@ -105936,7 +112760,7 @@
  	sd->name[0] = '\0';
  	sd->grp_id = 0;
  	sd->priv = NULL;
-@@ -186,4 +195,9 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
+@@ -186,4 +197,9 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
  	(!(sd) ? -ENODEV : (((sd) && (sd)->ops->o && (sd)->ops->o->f) ?	\
  		(sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD))
  

xen.pvops.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.1.2.14 -r 1.1.2.15 xen.pvops.patch
Index: xen.pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.patch,v
retrieving revision 1.1.2.14
retrieving revision 1.1.2.15
diff -u -r1.1.2.14 -r1.1.2.15
--- xen.pvops.patch	29 Mar 2009 16:55:07 -0000	1.1.2.14
+++ xen.pvops.patch	30 Mar 2009 19:45:46 -0000	1.1.2.15
@@ -2028,29 +2028,30 @@
  
  Unused mutexes cannot be part of the cause of an error.
  
-diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
-index c771278..ff3f219 100644
---- a/Documentation/networking/ip-sysctl.txt
-+++ b/Documentation/networking/ip-sysctl.txt
-@@ -782,6 +782,12 @@ arp_ignore - INTEGER
- 	The max value from conf/{all,interface}/arp_ignore is used
- 	when ARP request is received on the {interface}
- 
-+arp_notify - BOOLEAN
-+	Define mode for notification of address and device changes.
-+	0 - (default): do nothing
-+	1 - Generate gratuitous arp replies when device is brought up
-+	    or hardware address changes.
-+
- arp_accept - BOOLEAN
- 	Define behavior when gratuitous arp replies are received:
- 	0 - drop gratuitous arp frames
-diff --git a/Documentation/perf-counters.txt b/Documentation/perf-counters.txt
+diff --git a/Documentation/perf_counter/Makefile b/Documentation/perf_counter/Makefile
 new file mode 100644
-index 0000000..fddd321
+index 0000000..194b662
 --- /dev/null
-+++ b/Documentation/perf-counters.txt
-@@ -0,0 +1,147 @@
++++ b/Documentation/perf_counter/Makefile
+@@ -0,0 +1,12 @@
++BINS = kerneltop perfstat
++
++all: $(BINS)
++
++kerneltop: kerneltop.c ../../include/linux/perf_counter.h
++	cc -O6 -Wall -lrt -o $@ $<
++
++perfstat: kerneltop
++	ln -sf kerneltop perfstat
++
++clean:
++	rm $(BINS)
+diff --git a/Documentation/perf_counter/design.txt b/Documentation/perf_counter/design.txt
+new file mode 100644
+index 0000000..aaf105c
+--- /dev/null
++++ b/Documentation/perf_counter/design.txt
+@@ -0,0 +1,283 @@
 +
 +Performance Counters for Linux
 +------------------------------
@@ -2064,7 +2065,9 @@
 +
 +The Linux Performance Counter subsystem provides an abstraction of these
 +hardware capabilities. It provides per task and per CPU counters, counter
-+groups, and it provides event capabilities on top of those.
++groups, and it provides event capabilities on top of those.  It
++provides "virtual" 64-bit counters, regardless of the width of the
++underlying hardware counters.
 +
 +Performance counters are accessed via special file descriptors.
 +There's one file descriptor per virtual counter used.
@@ -2073,7 +2076,8 @@
 +system call:
 +
 +   int sys_perf_counter_open(struct perf_counter_hw_event *hw_event_uptr,
-+			     pid_t pid, int cpu, int group_fd);
++			     pid_t pid, int cpu, int group_fd,
++			     unsigned long flags);
 +
 +The syscall returns the new fd. The fd can be used via the normal
 +VFS system calls: read() can be used to read the counter, fcntl()
@@ -2085,90 +2089,180 @@
 +When creating a new counter fd, 'perf_counter_hw_event' is:
 +
 +/*
-+ * Hardware event to monitor via a performance monitoring counter:
++ * Event to monitor via a performance monitoring counter:
 + */
 +struct perf_counter_hw_event {
-+	s64			type;
++	__u64			event_config;
++
++	__u64			irq_period;
++	__u64			record_type;
++	__u64			read_format;
++
++	__u64			disabled       :  1, /* off by default        */
++				nmi	       :  1, /* NMI sampling          */
++				inherit	       :  1, /* children inherit it   */
++				pinned	       :  1, /* must always be on PMU */
++				exclusive      :  1, /* only group on PMU     */
++				exclude_user   :  1, /* don't count user      */
++				exclude_kernel :  1, /* ditto kernel          */
++				exclude_hv     :  1, /* ditto hypervisor      */
++				exclude_idle   :  1, /* don't count when idle */
++
++				__reserved_1   : 55;
++
++	__u32			extra_config_len;
++
++	__u32			__reserved_4;
++	__u64			__reserved_2;
++	__u64			__reserved_3;
++};
 +
-+	u64			irq_period;
-+	u32			record_type;
++The 'event_config' field specifies what the counter should count.  It
++is divided into 3 bit-fields:
 +
-+	u32			disabled     :  1, /* off by default */
-+				nmi	     :  1, /* NMI sampling   */
-+				raw	     :  1, /* raw event type */
-+				__reserved_1 : 29;
++raw_type: 1 bit (most significant bit)		0x8000_0000_0000_0000
++type:	  7 bits (next most significant)	0x7f00_0000_0000_0000
++event_id: 56 bits (least significant)		0x00ff_0000_0000_0000
++
++If 'raw_type' is 1, then the counter will count a hardware event
++specified by the remaining 63 bits of event_config.  The encoding is
++machine-specific.
 +
-+	u64			__reserved_2;
++If 'raw_type' is 0, then the 'type' field says what kind of counter
++this is, with the following encoding:
++
++enum perf_event_types {
++	PERF_TYPE_HARDWARE		= 0,
++	PERF_TYPE_SOFTWARE		= 1,
++	PERF_TYPE_TRACEPOINT		= 2,
 +};
 +
++A counter of PERF_TYPE_HARDWARE will count the hardware event
++specified by 'event_id':
++
 +/*
-+ * Generalized performance counter event types, used by the hw_event.type
++ * Generalized performance counter event types, used by the hw_event.event_id
 + * parameter of the sys_perf_counter_open() syscall:
 + */
-+enum hw_event_types {
++enum hw_event_ids {
 +	/*
 +	 * Common hardware events, generalized by the kernel:
 +	 */
-+	PERF_COUNT_CYCLES		=  0,
-+	PERF_COUNT_INSTRUCTIONS		=  1,
-+	PERF_COUNT_CACHE_REFERENCES	=  2,
-+	PERF_COUNT_CACHE_MISSES		=  3,
-+	PERF_COUNT_BRANCH_INSTRUCTIONS	=  4,
-+	PERF_COUNT_BRANCH_MISSES	=  5,
-+
-+	/*
-+	 * Special "software" counters provided by the kernel, even if
-+	 * the hardware does not support performance counters. These
-+	 * counters measure various physical and sw events of the
-+	 * kernel (and allow the profiling of them as well):
-+	 */
-+	PERF_COUNT_CPU_CLOCK		= -1,
-+	PERF_COUNT_TASK_CLOCK		= -2,
-+	/*
-+	 * Future software events:
-+	 */
-+	/* PERF_COUNT_PAGE_FAULTS	= -3,
-+	   PERF_COUNT_CONTEXT_SWITCHES	= -4, */
-+};
-+
-+These are standardized types of events that work uniformly on all CPUs
-+that implements Performance Counters support under Linux. If a CPU is
-+not able to count branch-misses, then the system call will return
-+-EINVAL.
-+
-+More hw_event_types are supported as well, but they are CPU
-+specific and are enumerated via /sys on a per CPU basis. Raw hw event
-+types can be passed in under hw_event.type if hw_event.raw is 1.
-+For example, to count "External bus cycles while bus lock signal asserted"
-+events on Intel Core CPUs, pass in a 0x4064 event type value and set
-+hw_event.raw to 1.
++	PERF_COUNT_CPU_CYCLES		= 0,
++	PERF_COUNT_INSTRUCTIONS		= 1,
++	PERF_COUNT_CACHE_REFERENCES	= 2,
++	PERF_COUNT_CACHE_MISSES		= 3,
++	PERF_COUNT_BRANCH_INSTRUCTIONS	= 4,
++	PERF_COUNT_BRANCH_MISSES	= 5,
++	PERF_COUNT_BUS_CYCLES		= 6,
++};
++
++These are standardized types of events that work relatively uniformly
++on all CPUs that implement Performance Counters support under Linux,
++although there may be variations (e.g., different CPUs might count
[...15800 lines suppressed...]
  	unsigned short *swap_map = NULL;
+diff --git a/mm/util.c b/mm/util.c
+index 37eaccd..8d4b900 100644
+--- a/mm/util.c
++++ b/mm/util.c
+@@ -4,6 +4,7 @@
+ #include <linux/module.h>
+ #include <linux/err.h>
+ #include <linux/sched.h>
++#include <linux/tracepoint.h>
+ #include <asm/uaccess.h>
+ 
+ /**
+@@ -206,3 +207,18 @@ int __attribute__((weak)) get_user_pages_fast(unsigned long start,
+ 	return ret;
+ }
+ EXPORT_SYMBOL_GPL(get_user_pages_fast);
++
++/* Tracepoints definitions. */
++DEFINE_TRACE(kmalloc);
++DEFINE_TRACE(kmem_cache_alloc);
++DEFINE_TRACE(kmalloc_node);
++DEFINE_TRACE(kmem_cache_alloc_node);
++DEFINE_TRACE(kfree);
++DEFINE_TRACE(kmem_cache_free);
++
++EXPORT_TRACEPOINT_SYMBOL(kmalloc);
++EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc);
++EXPORT_TRACEPOINT_SYMBOL(kmalloc_node);
++EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc_node);
++EXPORT_TRACEPOINT_SYMBOL(kfree);
++EXPORT_TRACEPOINT_SYMBOL(kmem_cache_free);
 diff --git a/mm/vmalloc.c b/mm/vmalloc.c
 index 520a759..af58324 100644
 --- a/mm/vmalloc.c
@@ -152143,6 +156912,30 @@
  	tristate "Plan 9 Resource Sharing Support (9P2000) (Experimental)"
  	help
  	  If you say Y here, you will get experimental support for
+diff --git a/net/core/dev.c b/net/core/dev.c
+index e3fe5c7..c1e9dc0 100644
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -2588,9 +2588,9 @@ static int process_backlog(struct napi_struct *napi, int quota)
+ 		local_irq_disable();
+ 		skb = __skb_dequeue(&queue->input_pkt_queue);
+ 		if (!skb) {
++			__napi_complete(napi);
+ 			local_irq_enable();
+-			napi_complete(napi);
+-			goto out;
++			break;
+ 		}
+ 		local_irq_enable();
+ 
+@@ -2599,7 +2599,6 @@ static int process_backlog(struct napi_struct *napi, int quota)
+ 
+ 	napi_gro_flush(napi);
+ 
+-out:
+ 	return work;
+ }
+ 
 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
 index c6a6b16..e83e994 100644
 --- a/net/core/skbuff.c
@@ -152222,33 +157015,6 @@
  	if (!ptr[1])
  		goto err1;
  	return 0;
-diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
-index 309997e..d519a6a 100644
---- a/net/ipv4/devinet.c
-+++ b/net/ipv4/devinet.c
-@@ -1075,6 +1075,14 @@ static int inetdev_event(struct notifier_block *this, unsigned long event,
- 			}
- 		}
- 		ip_mc_up(in_dev);
-+		/* fall through */
-+	case NETDEV_CHANGEADDR:
-+		if (IN_DEV_ARP_NOTIFY(in_dev))
-+			arp_send(ARPOP_REQUEST, ETH_P_ARP,
-+				 in_dev->ifa_list->ifa_address,
-+				 dev,
-+				 in_dev->ifa_list->ifa_address,
-+				 NULL, dev->dev_addr, NULL);
- 		break;
- 	case NETDEV_DOWN:
- 		ip_mc_down(in_dev);
-@@ -1439,6 +1447,7 @@ static struct devinet_sysctl_table {
- 		DEVINET_SYSCTL_RW_ENTRY(ARP_ANNOUNCE, "arp_announce"),
- 		DEVINET_SYSCTL_RW_ENTRY(ARP_IGNORE, "arp_ignore"),
- 		DEVINET_SYSCTL_RW_ENTRY(ARP_ACCEPT, "arp_accept"),
-+		DEVINET_SYSCTL_RW_ENTRY(ARP_NOTIFY, "arp_notify"),
- 
- 		DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
- 		DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
 diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c
 index 8554d0e..3369237 100644
 --- a/net/ipv4/inet_timewait_sock.c
@@ -152393,6 +157159,63 @@
 +	TP_PROTO(void),
 +	TP_ARGS());
  #endif
+diff --git a/samples/tracepoints/tracepoint-sample.c b/samples/tracepoints/tracepoint-sample.c
+index 68d5dc0..9cf80a1 100644
+--- a/samples/tracepoints/tracepoint-sample.c
++++ b/samples/tracepoints/tracepoint-sample.c
+@@ -1,6 +1,6 @@
+ /* tracepoint-sample.c
+  *
+- * Executes a tracepoint when /proc/tracepoint-example is opened.
++ * Executes a tracepoint when /proc/tracepoint-sample is opened.
+  *
+  * (C) Copyright 2007 Mathieu Desnoyers <mathieu.desnoyers at polymtl.ca>
+  *
+@@ -16,7 +16,7 @@
+ DEFINE_TRACE(subsys_event);
+ DEFINE_TRACE(subsys_eventb);
+ 
+-struct proc_dir_entry *pentry_example;
++struct proc_dir_entry *pentry_sample;
+ 
+ static int my_open(struct inode *inode, struct file *file)
+ {
+@@ -32,25 +32,25 @@ static struct file_operations mark_ops = {
+ 	.open = my_open,
+ };
+ 
+-static int __init example_init(void)
++static int __init sample_init(void)
+ {
+-	printk(KERN_ALERT "example init\n");
+-	pentry_example = proc_create("tracepoint-example", 0444, NULL,
++	printk(KERN_ALERT "sample init\n");
++	pentry_sample = proc_create("tracepoint-sample", 0444, NULL,
+ 		&mark_ops);
+-	if (!pentry_example)
++	if (!pentry_sample)
+ 		return -EPERM;
+ 	return 0;
+ }
+ 
+-static void __exit example_exit(void)
++static void __exit sample_exit(void)
+ {
+-	printk(KERN_ALERT "example exit\n");
+-	remove_proc_entry("tracepoint-example", NULL);
++	printk(KERN_ALERT "sample exit\n");
++	remove_proc_entry("tracepoint-sample", NULL);
+ }
+ 
+-module_init(example_init)
+-module_exit(example_exit)
++module_init(sample_init)
++module_exit(sample_exit)
+ 
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR("Mathieu Desnoyers");
+-MODULE_DESCRIPTION("Tracepoint example");
++MODULE_DESCRIPTION("Tracepoint sample");
 diff --git a/scripts/Makefile.build b/scripts/Makefile.build
 index c7de8b3..39a9642 100644
 --- a/scripts/Makefile.build
@@ -152649,35 +157472,6 @@
  	/* sort by initial order, so that other symbols are left undisturbed */
  	return sa->start_pos - sb->start_pos;
  }
-diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
-index 273d738..1572f2e 100644
---- a/scripts/kconfig/confdata.c
-+++ b/scripts/kconfig/confdata.c
-@@ -889,16 +889,17 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
- 
- 		cnt = 0;
- 		expr_list_for_each_sym(prop->expr, e, sym) {
--			if (def == cnt++) {
--				sym->def[S_DEF_USER].tri = yes;
--				csym->def[S_DEF_USER].val = sym;
--			}
--			else {
--				sym->def[S_DEF_USER].tri = no;
-+			if (sym) {
-+				if (def == cnt++) {
-+					sym->def[S_DEF_USER].tri = yes;
-+					csym->def[S_DEF_USER].val = sym;
-+				}
-+				else {
-+					sym->def[S_DEF_USER].tri = no;
-+				}
- 			}
- 		}
- 		csym->flags |= SYMBOL_DEF_USER;
--		/* clear VALID to get value calculated */
- 		csym->flags &= ~(SYMBOL_VALID);
- 	}
- }
 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
 index 8892161..7e62303 100644
 --- a/scripts/mod/modpost.c

xen.pvops.post.patch:

Index: xen.pvops.post.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.post.patch,v
retrieving revision 1.1.2.8
retrieving revision 1.1.2.9
diff -u -r1.1.2.8 -r1.1.2.9
--- xen.pvops.post.patch	28 Mar 2009 15:18:54 -0000	1.1.2.8
+++ xen.pvops.post.patch	30 Mar 2009 19:45:49 -0000	1.1.2.9
@@ -867,6 +867,84 @@
  	help
  	  Say Y here to support the Afatech AF9005 based DVB-T USB1.1 receiver
  	  and the TerraTec Cinergy T USB XE (Rev.1)
+--- a/init/do_mounts_rd.c	2009-03-23 23:12:14.000000000 +0000
++++ b/init/do_mounts_rd.c	2009-03-30 19:36:28.000000000 +0100
+@@ -9,7 +9,12 @@
+ #include <linux/string.h>
+ 
+ #include "do_mounts.h"
++
++#if defined(CONFIG_SQUASHFS3) || defined(CONFIG_SQUASHFS3_MODULE)
++#include "../fs/squashfs3/squashfs3_fs.h"
++#else
+ #include "../fs/squashfs/squashfs_fs.h"
++#endif
+ 
+ #include <linux/decompress/generic.h>
+
+@@ -38,6 +43,7 @@
+  * numbers could not be found.
+  *
+  * We currently check for the following magic numbers:
++ *      squashfs
+  *	minix
+  *	ext2
+  *	romfs
+--- a/arch/x86/mm/pat.c	2009-03-23 23:12:14.000000000 +0000
++++ b/arch/x86/mm/pat.c	2009-03-30 19:36:52.000000000 +0100
+@@ -644,12 +647,18 @@
+	 * reserve_pfn_range() doesn't support RAM pages. Maintain the current
+	 * behavior with RAM pages by returning success.
+ 	 */
+-	if (is_ram != 0)
+-		return 0;
++	if (is_ram != 0) {
++		printk(KERN_WARNING "reserve_pfn_range: is_ram is %d for 0x%llx!\n",
++			is_ram, paddr);
++		return 0;
++	}
+ 
+ 	ret = reserve_memtype(paddr, paddr + size, want_flags, &flags);
+-	if (ret)
++	if (ret) {
++		printk(KERN_WARNING "reserve_pfn_range: reserve_memtype ret %d for 0x%llx 0x%lx 0x%lx\n",
++			ret, paddr, size, want_flags);
+ 		return ret;
++	}
+ 
+ 	if (flags != want_flags) {
+ 		if (strict_prot || !is_new_memtype_allowed(want_flags, flags)) {
+--- a/include/linux/mm.h	2009-03-23 23:12:14.000000000 +0000
++++ b/include/linux/mm.h	2009-03-30 19:36:52.000000000 +0100
+@@ -145,7 +156,7 @@
+  */
+ static inline int is_linear_pfn_mapping(struct vm_area_struct *vma)
+ {
+-	return (vma->vm_flags & VM_PFN_AT_MMAP);
++	return ((vma->vm_flags & VM_PFNMAP_AT_MMAP) == VM_PFNMAP_AT_MMAP);
+ }
+ 
+ static inline int is_pfn_mapping(struct vm_area_struct *vma)
+--- a/mm/memory.c	2009-03-23 23:12:14.000000000 +0000
++++ b/mm/memory.c	2009-03-30 19:36:52.000000000 +0100
+@@ -1667,7 +1667,7 @@
+ 	 */
+	if (addr == vma->vm_start && end == vma->vm_end) {
+ 		vma->vm_pgoff = pfn;
+-		vma->vm_flags |= VM_PFN_AT_MMAP;
++		vma->vm_flags |= VM_PFNMAP_AT_MMAP;
+	} else if (is_cow_mapping(vma->vm_flags))
+ 		return -EINVAL;
+ 
+@@ -1679,7 +1679,7 @@
+ 		 * needed from higher level routine calling unmap_vmas
+ 		 */
+ 		vma->vm_flags &= ~(VM_IO | VM_RESERVED | VM_PFNMAP);
+-		vma->vm_flags &= ~VM_PFN_AT_MMAP;
++		vma->vm_flags &= ~VM_PFNMAP_AT_MMAP;
+ 		return -EINVAL;
+ 	}
+ 
 --- a/localversion-tip	2009-02-17 19:49:34.000000000 +0000
 +++ /dev/null	2009-02-17 18:08:14.005240123 +0000
 @@ -1 +0,0 @@

xen.pvops.pre.patch:

Index: xen.pvops.pre.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.pre.patch,v
retrieving revision 1.1.2.7
retrieving revision 1.1.2.8
diff -u -r1.1.2.7 -r1.1.2.8
--- xen.pvops.pre.patch	26 Mar 2009 00:02:15 -0000	1.1.2.7
+++ xen.pvops.pre.patch	30 Mar 2009 19:45:49 -0000	1.1.2.8
@@ -6,6 +6,8 @@
 drm-next.patch - drivers/gpu/drm/drm_proc.c
 linux-2.6-debug-taint-vm.patch - kernel/panic.c
 linux-2.6-v4l-dvb-update.patch - drivers/media/dvb/dvb-usb/Kconfig
+squashfs3.patch squashfs-fixups.patch - init/do_mounts_rd.c
+linux-2.6.29-pat-fixes.patch - arch/x86/mm/pat.c arch/x86/pci/i386.c include/linux/mm.h mm/memory.c
 
 --- a/arch/x86/mm/pat.c	2009-02-14 12:49:46.000000000 +0000
 +++ b/arch/x86/mm/pat.c	2009-02-14 09:16:34.000000000 +0000
@@ -874,3 +876,100 @@
  	help
  	  Say Y here to support the Afatech AF9005 based DVB-T USB1.1 receiver
  	  and the TerraTec Cinergy T USB XE (Rev.1)
+--- a/init/do_mounts_rd.c	2009-03-30 19:36:28.000000000 +0100
++++ b/init/do_mounts_rd.c	2009-03-23 23:12:14.000000000 +0000
+@@ -9,12 +9,7 @@
+ #include <linux/string.h>
+ 
+ #include "do_mounts.h"
+-
+-#if defined(CONFIG_SQUASHFS3) || defined(CONFIG_SQUASHFS3_MODULE)
+-#include "../fs/squashfs3/squashfs3_fs.h"
+-#else
+ #include "../fs/squashfs/squashfs_fs.h"
+-#endif
+ 
+ int __initdata rd_prompt = 1;/* 1 = prompt for RAM disk, 0 = don't prompt */
+ 
+@@ -43,7 +38,6 @@
+  * numbers could not be found.
+  *
+  * We currently check for the following magic numbers:
+- *      squashfs
+  * 	minix
+  * 	ext2
+  *	romfs
+--- a/arch/x86/mm/pat.c	2009-03-30 19:36:52.000000000 +0100
++++ b/arch/x86/mm/pat.c	2009-03-23 23:12:14.000000000 +0000
+@@ -644,21 +641,14 @@
+ 	is_ram = pat_pagerange_is_ram(paddr, paddr + size);
+ 
+ 	/*
+-	 * reserve_pfn_range() doesn't support RAM pages. Maintain the current
+-	 * behavior with RAM pages by returning success.
++	 * reserve_pfn_range() doesn't support RAM pages.
+ 	 */
+-	if (is_ram != 0) {
+-		printk(KERN_WARNING "reserve_pfn_range: is_ram is %d for 0x%llx!\n",
+-			is_ram, paddr);
+-		return 0;
+-	}
++	if (is_ram != 0)
++		return -EINVAL;
+ 
+ 	ret = reserve_memtype(paddr, paddr + size, want_flags, &flags);
+-	if (ret) {
+-		printk(KERN_WARNING "reserve_pfn_range: reserve_memtype ret %d for 0x%llx 0x%lx 0x%lx\n",
+-			ret, paddr, size, want_flags);
++	if (ret)
+ 		return ret;
+-	}
+ 
+ 	if (flags != want_flags) {
+ 		if (strict_prot || !is_new_memtype_allowed(want_flags, flags)) {
+--- a/arch/x86/pci/i386.c	2009-03-30 19:36:52.000000000 +0100
++++ b/arch/x86/pci/i386.c	2009-03-23 23:12:14.000000000 +0000
+@@ -319,9 +319,6 @@
+ 			return -EINVAL;
+ 		}
+ 		flags = new_flags;
+-		vma->vm_page_prot = __pgprot(
+-			(pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK) |
+-			flags);
+ 	}
+ 
+ 	if (((vma->vm_pgoff < max_low_pfn_mapped) ||
+--- a/include/linux/mm.h	2009-03-30 19:36:52.000000000 +0100
++++ b/include/linux/mm.h	2009-03-23 23:12:14.000000000 +0000
+@@ -156,7 +145,7 @@
+  */
+ static inline int is_linear_pfn_mapping(struct vm_area_struct *vma)
+ {
+-	return ((vma->vm_flags & VM_PFNMAP_AT_MMAP) == VM_PFNMAP_AT_MMAP);
++	return ((vma->vm_flags & VM_PFNMAP) && vma->vm_pgoff);
+ }
+ 
+ static inline int is_pfn_mapping(struct vm_area_struct *vma)
+--- a/mm/memory.c	2009-03-30 19:36:52.000000000 +0100
++++ b/mm/memory.c	2009-03-23 23:12:14.000000000 +0000
+@@ -1665,10 +1665,9 @@
+ 	 * behaviour that some programs depend on. We mark the "original"
+ 	 * un-COW'ed pages by matching them up with "vma->vm_pgoff".
+ 	 */
+-	if (addr == vma->vm_start && end == vma->vm_end) {
++	if (addr == vma->vm_start && end == vma->vm_end)
+ 		vma->vm_pgoff = pfn;
+-		vma->vm_flags |= VM_PFNMAP_AT_MMAP;
+-	} else if (is_cow_mapping(vma->vm_flags))
++	else if (is_cow_mapping(vma->vm_flags))
+ 		return -EINVAL;
+ 
+ 	vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
+@@ -1680,7 +1679,6 @@
+ 		 * needed from higher level routine calling unmap_vmas
+ 		 */
+ 		vma->vm_flags &= ~(VM_IO | VM_RESERVED | VM_PFNMAP);
+-		vma->vm_flags &= ~VM_PFNMAP_AT_MMAP;
+ 		return -EINVAL;
+ 	}
+ 




More information about the fedora-extras-commits mailing list