## Automatically generated incremental diff
## From:   linux-2.6.18-rc6
## To:     linux-2.6.18-rc7
## Robot:  $Id: make-incremental-diff,v 1.12 2004/01/06 07:19:36 hpa Exp $

diff -urN linux-2.6.18-rc6/Makefile linux-2.6.18-rc7/Makefile
--- linux-2.6.18-rc6/Makefile	2006-09-13 03:15:58.594413471 +0000
+++ linux-2.6.18-rc7/Makefile	2006-09-13 03:16:03.730968018 +0000
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 18
-EXTRAVERSION = -rc6
+EXTRAVERSION = -rc7
 NAME=Crazed Snow-Weasel
 
 # *DOCUMENTATION*
diff -urN linux-2.6.18-rc6/arch/arm/mach-ixp4xx/nslu2-pci.c linux-2.6.18-rc7/arch/arm/mach-ixp4xx/nslu2-pci.c
--- linux-2.6.18-rc6/arch/arm/mach-ixp4xx/nslu2-pci.c	2006-09-13 03:15:58.646419086 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-ixp4xx/nslu2-pci.c	2006-09-13 03:16:03.786974065 +0000
@@ -17,6 +17,7 @@
 
 #include <linux/pci.h>
 #include <linux/init.h>
+#include <linux/irq.h>
 
 #include <asm/mach/pci.h>
 #include <asm/mach-types.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-ixp4xx/nslu2-power.c linux-2.6.18-rc7/arch/arm/mach-ixp4xx/nslu2-power.c
--- linux-2.6.18-rc6/arch/arm/mach-ixp4xx/nslu2-power.c	2006-09-13 03:15:58.646419086 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-ixp4xx/nslu2-power.c	2006-09-13 03:16:03.786974065 +0000
@@ -19,6 +19,7 @@
 
 #include <linux/module.h>
 #include <linux/reboot.h>
+#include <linux/irq.h>
 #include <linux/interrupt.h>
 #include <linux/reboot.h>
 
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/Makefile linux-2.6.18-rc7/arch/arm/mach-s3c2410/Makefile
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/Makefile	2006-09-13 03:15:58.670421677 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/Makefile	2006-09-13 03:16:03.810976656 +0000
@@ -28,6 +28,7 @@
 
 # S3C2412 support
 obj-$(CONFIG_CPU_S3C2412)	+= s3c2412.o
+obj-$(CONFIG_CPU_S3C2412)	+= s3c2412-irq.o
 obj-$(CONFIG_CPU_S3C2412)	+= s3c2412-clock.o
 
 #
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/cpu.h linux-2.6.18-rc7/arch/arm/mach-s3c2410/cpu.h
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/cpu.h	2006-09-13 03:15:58.670421677 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/cpu.h	2006-09-13 03:16:03.814977088 +0000
@@ -8,16 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Modifications:
- *     24-Aug-2004 BJD  Start of generic S3C24XX support
- *     18-Oct-2004 BJD  Moved board struct into this file
- *     04-Jan-2005 BJD  New uart initialisation
- *     10-Jan-2005 BJD  Moved generic init here, specific to cpu headers
- *     14-Jan-2005 BJD  Added s3c24xx_init_clocks() call
- *     10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} & IODESC_ENT
- *     14-Mar-2005 BJD  Updated for __iomem
- *     15-Jan-2006 LCVR Updated S3C2410_PA_##x to new S3C24XX_PA_##x macro
 */
 
 /* todo - fix when rmk changes iodescs to use `void __iomem *` */
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/devs.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/devs.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/devs.c	2006-09-13 03:15:58.670421677 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/devs.c	2006-09-13 03:16:03.814977088 +0000
@@ -1,22 +1,14 @@
 /* linux/arch/arm/mach-s3c2410/devs.c
  *
  * Copyright (c) 2004 Simtec Electronics
- * Ben Dooks <ben@simtec.co.uk>
+ *	Ben Dooks <ben@simtec.co.uk>
  *
- * Base S3C2410 platform device definitions
+ * Base S3C24XX platform device definitions
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * Modifications:
- *     15-Jan-2006 LCVR Using S3C24XX_PA_##x macro for common S3C24XX devices
- *     10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ}
- *     10-Feb-2005 BJD  Added camera from guillaume.gourat@nexvision.tv
- *     29-Aug-2004 BJD  Added timers 0 through 3
- *     29-Aug-2004 BJD  Changed index of devices we only have one of to -1
- *     21-Aug-2004 BJD  Added IRQ_TICK to RTC resources
- *     18-Aug-2004 BJD  Created initial version
 */
 
 #include <linux/kernel.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/irq.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/irq.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/irq.c	2006-09-13 03:15:58.674422109 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/irq.c	2006-09-13 03:16:03.814977088 +0000
@@ -86,7 +86,7 @@
 unsigned long s3c_irqwake_eintallow	= 0x0000fff0L;
 unsigned long s3c_irqwake_eintmask	= 0xffffffffL;
 
-static int
+int
 s3c_irq_wake(unsigned int irqno, unsigned int state)
 {
 	unsigned long irqbit = 1 << (irqno - IRQ_EINT0);
@@ -260,7 +260,7 @@
 	s3c_irq_unmask((irqno <= (IRQ_EINT7 - EXTINT_OFF)) ? IRQ_EINT4t7 : IRQ_EINT8t23);
 }
 
-static int
+int
 s3c_irqext_type(unsigned int irq, unsigned int type)
 {
 	void __iomem *extint_reg;
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/irq.h linux-2.6.18-rc7/arch/arm/mach-s3c2410/irq.h
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/irq.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/irq.h	2006-09-13 03:16:03.814977088 +0000
@@ -97,3 +97,8 @@
 		__raw_writel(parentmask, S3C2410_INTPND);
 	}
 }
+
+/* exported for use in arch/arm/mach-s3c2410 */
+
+extern int s3c_irq_wake(unsigned int irqno, unsigned int state);
+extern int s3c_irqext_type(unsigned int irq, unsigned int type);
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-bast.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-bast.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-bast.c	2006-09-13 03:15:58.674422109 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-bast.c	2006-09-13 03:16:03.814977088 +0000
@@ -8,31 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Modifications:
- *     14-Sep-2004 BJD  USB power control
- *     20-Aug-2004 BJD  Added s3c2410_board struct
- *     18-Aug-2004 BJD  Added platform devices from default set
- *     16-May-2003 BJD  Created initial version
- *     16-Aug-2003 BJD  Fixed header files and copyright, added URL
- *     05-Sep-2003 BJD  Moved to v2.6 kernel
- *     06-Jan-2003 BJD  Updates for <arch/map.h>
- *     18-Jan-2003 BJD  Added serial port configuration
- *     05-Oct-2004 BJD  Power management code
- *     04-Nov-2004 BJD  Updated serial port clocks
- *     04-Jan-2005 BJD  New uart init call
- *     10-Jan-2005 BJD  Removed include of s3c2410.h
- *     14-Jan-2005 BJD  Add support for muitlple NAND devices
- *     03-Mar-2005 BJD  Ensured that bast-cpld.h is included
- *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
- *     14-Mar-2005 BJD  Updated for __iomem changes
- *     22-Jun-2005 BJD  Added DM9000 platform information
- *     28-Jun-2005 BJD  Moved pm functionality out to common code
- *     17-Jul-2005 BJD  Changed to platform device for SuperIO 16550s
- *     25-Jul-2005 BJD  Removed ASIX static mappings
- *     27-Jul-2005 BJD  Ensure maximum frequency of i2c bus
- *     20-Sep-2005 BJD  Added static to non-exported items
- *     26-Oct-2005 BJD  Added FB platform data
 */
 
 #include <linux/kernel.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-h1940.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-h1940.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-h1940.c	2006-09-13 03:15:58.674422109 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-h1940.c	2006-09-13 03:16:03.814977088 +0000
@@ -9,23 +9,6 @@
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * Modifications:
- *     16-May-2003 BJD  Created initial version
- *     16-Aug-2003 BJD  Fixed header files and copyright, added URL
- *     05-Sep-2003 BJD  Moved to v2.6 kernel
- *     06-Jan-2003 BJD  Updates for <arch/map.h>
- *     18-Jan-2003 BJD  Added serial port configuration
- *     17-Feb-2003 BJD  Copied to mach-ipaq.c
- *     21-Aug-2004 BJD  Added struct s3c2410_board
- *     04-Sep-2004 BJD  Changed uart init, renamed ipaq_ -> h1940_
- *     18-Oct-2004 BJD  Updated new board structure name
- *     04-Nov-2004 BJD  Change for new serial clock
- *     04-Jan-2005 BJD  Updated uart init call
- *     10-Jan-2005 BJD  Removed include of s3c2410.h
- *     14-Jan-2005 BJD  Added clock init
- *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
- *     20-Sep-2005 BJD  Added static to non-exported items
- *     26-Oct-2005 BJD  Changed name of fb init call
 */
 
 #include <linux/kernel.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-rx3715.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-rx3715.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-rx3715.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-rx3715.c	2006-09-13 03:16:03.818977520 +0000
@@ -9,15 +9,6 @@
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * Modifications:
- *	16-Sep-2004 BJD  Copied from mach-h1940.c
- *	25-Oct-2004 BJD  Updates for 2.6.10-rc1
- *	10-Jan-2005 BJD  Removed include of s3c2410.h s3c2440.h
- *	14-Jan-2005 BJD  Added new clock init
- *	10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
- *	14-Mar-2005 BJD  Fixed __iomem warnings
- *	20-Sep-2005 BJD  Added static to non-exported items
- *	31-Oct-2005 BJD  Added LCD setup for framebuffer
 */
 
 #include <linux/kernel.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-smdk2410.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-smdk2410.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-smdk2410.c	2006-09-13 03:15:58.674422109 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-smdk2410.c	2006-09-13 03:16:03.818977520 +0000
@@ -27,10 +27,6 @@
  * derived from linux/arch/arm/mach-s3c2410/mach-bast.c, written by
  * Ben Dooks <ben@simtec.co.uk>
  *
- * 10-Mar-2005 LCVR  Changed S3C2410_VA to S3C24XX_VA
- * 20-Sep-2005 BJD   Added static to non-exported items
- * 01-Apr-2006 BJD   Moved init code to common smdk
- *
  ***********************************************************************/
 
 #include <linux/kernel.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-smdk2413.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-smdk2413.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-smdk2413.c	2006-09-13 03:15:58.674422109 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-smdk2413.c	2006-09-13 03:16:03.818977520 +0000
@@ -112,7 +112,20 @@
 	smdk_machine_init();
 }
 
-MACHINE_START(S3C2413, "SMDK2413")
+MACHINE_START(S3C2413, "S3C2413")
+	/* Maintainer: Ben Dooks <ben@fluff.org> */
+	.phys_io	= S3C2410_PA_UART,
+	.io_pg_offst	= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
+	.boot_params	= S3C2410_SDRAM_PA + 0x100,
+
+	.fixup		= smdk2413_fixup,
+	.init_irq	= s3c24xx_init_irq,
+	.map_io		= smdk2413_map_io,
+	.init_machine	= smdk2413_machine_init,
+	.timer		= &s3c24xx_timer,
+MACHINE_END
+
+MACHINE_START(SMDK2413, "SMDK2413")
 	/* Maintainer: Ben Dooks <ben@fluff.org> */
 	.phys_io	= S3C2410_PA_UART,
 	.io_pg_offst	= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-vr1000.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-vr1000.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/mach-vr1000.c	2006-09-13 03:15:58.674422109 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/mach-vr1000.c	2006-09-13 03:16:03.818977520 +0000
@@ -10,25 +10,6 @@
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * Modifications:
- *     14-Sep-2004 BJD  USB Power control
- *     04-Sep-2004 BJD  Added new uart init, and io init
- *     21-Aug-2004 BJD  Added struct s3c2410_board
- *     06-Aug-2004 BJD  Fixed call to time initialisation
- *     05-Apr-2004 BJD  Copied to make mach-vr1000.c
- *     18-Oct-2004 BJD  Updated board struct
- *     04-Nov-2004 BJD  Clock and serial configuration update
- *
- *     04-Jan-2005 BJD  Updated uart init call
- *     10-Jan-2005 BJD  Removed include of s3c2410.h
- *     14-Jan-2005 BJD  Added clock init
- *     15-Jan-2005 BJD  Add serial port device definition
- *     20-Jan-2005 BJD  Use UPF_IOREMAP for ports
- *     10-Feb-2005 BJD  Added power-off capability
- *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
- *     14-Mar-2006 BJD  void __iomem fixes
- *     22-Jun-2006 BJD  Added DM9000 platform information
- *     20-Sep-2005 BJD  Added static to non-exported items
 */
 
 #include <linux/kernel.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c2400-gpio.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c2400-gpio.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c2400-gpio.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c2400-gpio.c	2006-09-13 03:16:03.818977520 +0000
@@ -17,10 +17,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Changelog
- *	15-Jan-2006  LCVR  Splitted from gpio.c, adding support for the S3C2400
- */
+*/
 
 #include <linux/kernel.h>
 #include <linux/init.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c2410.h linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c2410.h
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c2410.h	2006-09-13 03:15:58.674422109 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c2410.h	2006-09-13 03:16:03.818977520 +0000
@@ -9,14 +9,6 @@
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * Modifications:
- *     18-Aug-2004 BJD  Created initial version
- *     20-Aug-2004 BJD  Added s3c2410_board struct
- *     04-Sep-2004 BJD  Added s3c2410_init_uarts() call
- *     17-Oct-2004 BJD  Moved board out to cpu
- *     04-Jan-2005 BJD  Changed uart init
- *     10-Jan-2005 BJD  Removed timer to cpu.h, moved 2410 specific bits here
- *     14-Jan-2005 BJD  Added s3c2410_init_clocks call
 */
 
 #ifdef CONFIG_CPU_S3C2410
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c2412-irq.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c2412-irq.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c2412-irq.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c2412-irq.c	2006-09-13 03:16:03.818977520 +0000
@@ -0,0 +1,130 @@
+/* linux/arch/arm/mach-s3c2412/s3c2412-irq.c
+ *
+ * Copyright (c) 2006 Simtec Electronics
+ *	Ben Dooks <ben@simtec.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 of the License, 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, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+*/
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/interrupt.h>
+#include <linux/ioport.h>
+#include <linux/ptrace.h>
+#include <linux/sysdev.h>
+
+#include <asm/hardware.h>
+#include <asm/irq.h>
+#include <asm/io.h>
+
+#include <asm/mach/irq.h>
+
+#include <asm/arch/regs-irq.h>
+#include <asm/arch/regs-gpio.h>
+
+#include "cpu.h"
+#include "irq.h"
+
+/* the s3c2412 changes the behaviour of IRQ_EINT0 through IRQ_EINT3 by
+ * having them turn up in both the INT* and the EINT* registers. Whilst
+ * both show the status, they both now need to be acked when the IRQs
+ * go off.
+*/
+
+static void
+s3c2412_irq_mask(unsigned int irqno)
+{
+	unsigned long bitval = 1UL << (irqno - IRQ_EINT0);
+	unsigned long mask;
+
+	mask = __raw_readl(S3C2410_INTMSK);
+	__raw_writel(mask | bitval, S3C2410_INTMSK);
+
+	mask = __raw_readl(S3C2412_EINTMASK);
+	__raw_writel(mask | bitval, S3C2412_EINTMASK);
+}
+
+static inline void
+s3c2412_irq_ack(unsigned int irqno)
+{
+	unsigned long bitval = 1UL << (irqno - IRQ_EINT0);
+
+	__raw_writel(bitval, S3C2412_EINTPEND);
+	__raw_writel(bitval, S3C2410_SRCPND);
+	__raw_writel(bitval, S3C2410_INTPND);
+}
+
+static inline void
+s3c2412_irq_maskack(unsigned int irqno)
+{
+	unsigned long bitval = 1UL << (irqno - IRQ_EINT0);
+	unsigned long mask;
+
+	mask = __raw_readl(S3C2410_INTMSK);
+	__raw_writel(mask|bitval, S3C2410_INTMSK);
+
+	mask = __raw_readl(S3C2412_EINTMASK);
+	__raw_writel(mask | bitval, S3C2412_EINTMASK);
+
+	__raw_writel(bitval, S3C2412_EINTPEND);
+	__raw_writel(bitval, S3C2410_SRCPND);
+	__raw_writel(bitval, S3C2410_INTPND);
+}
+
+static void
+s3c2412_irq_unmask(unsigned int irqno)
+{
+	unsigned long bitval = 1UL << (irqno - IRQ_EINT0);
+	unsigned long mask;
+
+	mask = __raw_readl(S3C2412_EINTMASK);
+	__raw_writel(mask & ~bitval, S3C2412_EINTMASK);
+
+	mask = __raw_readl(S3C2410_INTMSK);
+	__raw_writel(mask & ~bitval, S3C2410_INTMSK);
+}
+
+static struct irqchip s3c2412_irq_eint0t4 = {
+	.ack	   = s3c2412_irq_ack,
+	.mask	   = s3c2412_irq_mask,
+	.unmask	   = s3c2412_irq_unmask,
+	.set_wake  = s3c_irq_wake,
+	.set_type  = s3c_irqext_type,
+};
+
+static int s3c2412_irq_add(struct sys_device *sysdev)
+{
+	unsigned int irqno;
+
+	for (irqno = IRQ_EINT0; irqno <= IRQ_EINT3; irqno++) {
+		set_irq_chip(irqno, &s3c2412_irq_eint0t4);
+		set_irq_handler(irqno, do_edge_IRQ);
+		set_irq_flags(irqno, IRQF_VALID);
+	}
+
+	return 0;
+}
+
+static struct sysdev_driver s3c2412_irq_driver = {
+	.add		= s3c2412_irq_add,
+};
+
+static int s3c2412_irq_init(void)
+{
+	return sysdev_driver_register(&s3c2412_sysclass, &s3c2412_irq_driver);
+}
+
+arch_initcall(s3c2412_irq_init);
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c2440-irq.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c2440-irq.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c2440-irq.c	2006-09-13 03:15:58.678422541 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c2440-irq.c	2006-09-13 03:16:03.822977952 +0000
@@ -17,9 +17,6 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Changelog:
- *	25-Jul-2005 BJD		Split from irq.c
- *
 */
 
 #include <linux/init.h>
diff -urN linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c244x-irq.c linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c244x-irq.c
--- linux-2.6.18-rc6/arch/arm/mach-s3c2410/s3c244x-irq.c	2006-09-13 03:15:58.678422541 +0000
+++ linux-2.6.18-rc7/arch/arm/mach-s3c2410/s3c244x-irq.c	2006-09-13 03:16:03.822977952 +0000
@@ -17,9 +17,6 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Changelog:
- *	25-Jul-2005 BJD		Split from irq.c
- *
 */
 
 #include <linux/init.h>
@@ -122,21 +119,24 @@
 	return 0;
 }
 
-static struct sysdev_driver s3c244x_irq_driver = {
+static struct sysdev_driver s3c2440_irq_driver = {
 	.add	= s3c244x_irq_add,
 };
 
 static int s3c2440_irq_init(void)
 {
-	return sysdev_driver_register(&s3c2440_sysclass, &s3c244x_irq_driver);
+	return sysdev_driver_register(&s3c2440_sysclass, &s3c2440_irq_driver);
 }
 
 arch_initcall(s3c2440_irq_init);
 
+static struct sysdev_driver s3c2442_irq_driver = {
+	.add	= s3c244x_irq_add,
+};
 
 static int s3c2442_irq_init(void)
 {
-	return sysdev_driver_register(&s3c2442_sysclass, &s3c244x_irq_driver);
+	return sysdev_driver_register(&s3c2442_sysclass, &s3c2442_irq_driver);
 }
 
 arch_initcall(s3c2442_irq_init);
diff -urN linux-2.6.18-rc6/arch/arm/mm/proc-arm926.S linux-2.6.18-rc7/arch/arm/mm/proc-arm926.S
--- linux-2.6.18-rc6/arch/arm/mm/proc-arm926.S	2006-09-13 03:15:58.690423837 +0000
+++ linux-2.6.18-rc7/arch/arm/mm/proc-arm926.S	2006-09-13 03:16:03.834979247 +0000
@@ -480,7 +480,7 @@
 	b	__arm926_setup
 	.long	cpu_arch_name
 	.long	cpu_elf_name
-	.long	HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_JAVA
+	.long	HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_VFP|HWCAP_EDSP|HWCAP_JAVA
 	.long	cpu_arm926_name
 	.long	arm926_processor_functions
 	.long	v4wbi_tlb_fns
diff -urN linux-2.6.18-rc6/arch/frv/Kconfig linux-2.6.18-rc7/arch/frv/Kconfig
--- linux-2.6.18-rc6/arch/frv/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/arch/frv/Kconfig	2006-09-13 03:16:03.862982271 +0000
@@ -29,6 +29,10 @@
 	bool
 	default n
 
+config GENERIC_TIME
+	bool
+	default y
+
 config TIME_LOW_RES
 	bool
 	default y
diff -urN linux-2.6.18-rc6/arch/frv/kernel/time.c linux-2.6.18-rc7/arch/frv/kernel/time.c
--- linux-2.6.18-rc6/arch/frv/kernel/time.c	2006-09-13 03:15:58.722427292 +0000
+++ linux-2.6.18-rc7/arch/frv/kernel/time.c	2006-09-13 03:16:03.870983134 +0000
@@ -32,8 +32,6 @@
 
 #define TICK_SIZE (tick_nsec / 1000)
 
-extern unsigned long wall_jiffies;
-
 unsigned long __nongprelbss __clkin_clock_speed_HZ;
 unsigned long __nongprelbss __ext_bus_clock_speed_HZ;
 unsigned long __nongprelbss __res_bus_clock_speed_HZ;
@@ -145,85 +143,6 @@
 }
 
 /*
- * This version of gettimeofday has near microsecond resolution.
- */
-void do_gettimeofday(struct timeval *tv)
-{
-	unsigned long seq;
-	unsigned long usec, sec;
-	unsigned long max_ntp_tick;
-
-	do {
-		unsigned long lost;
-
-		seq = read_seqbegin(&xtime_lock);
-
-		usec = 0;
-		lost = jiffies - wall_jiffies;
-
-		/*
-		 * If time_adjust is negative then NTP is slowing the clock
-		 * so make sure not to go into next possible interval.
-		 * Better to lose some accuracy than have time go backwards..
-		 */
-		if (unlikely(time_adjust < 0)) {
-			max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj;
-			usec = min(usec, max_ntp_tick);
-
-			if (lost)
-				usec += lost * max_ntp_tick;
-		}
-		else if (unlikely(lost))
-			usec += lost * (USEC_PER_SEC / HZ);
-
-		sec = xtime.tv_sec;
-		usec += (xtime.tv_nsec / 1000);
-	} while (read_seqretry(&xtime_lock, seq));
-
-	while (usec >= 1000000) {
-		usec -= 1000000;
-		sec++;
-	}
-
-	tv->tv_sec = sec;
-	tv->tv_usec = usec;
-}
-
-EXPORT_SYMBOL(do_gettimeofday);
-
-int do_settimeofday(struct timespec *tv)
-{
-	time_t wtm_sec, sec = tv->tv_sec;
-	long wtm_nsec, nsec = tv->tv_nsec;
-
-	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
-		return -EINVAL;
-
-	write_seqlock_irq(&xtime_lock);
-	/*
-	 * This is revolting. We need to set "xtime" correctly. However, the
-	 * value in this location is the value at the most recent update of
-	 * wall time.  Discover what correction gettimeofday() would have
-	 * made, and then undo it!
-	 */
-	nsec -= 0 * NSEC_PER_USEC;
-	nsec -= (jiffies - wall_jiffies) * TICK_NSEC;
-
-	wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
-	wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
-
-	set_normalized_timespec(&xtime, sec, nsec);
-	set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
-
-	ntp_clear();
-	write_sequnlock_irq(&xtime_lock);
-	clock_was_set();
-	return 0;
-}
-
-EXPORT_SYMBOL(do_settimeofday);
-
-/*
  * Scheduler clock - returns current time in nanosec units.
  */
 unsigned long long sched_clock(void)
diff -urN linux-2.6.18-rc6/arch/i386/kernel/Makefile linux-2.6.18-rc7/arch/i386/kernel/Makefile
--- linux-2.6.18-rc6/arch/i386/kernel/Makefile	2006-09-13 03:15:58.730428156 +0000
+++ linux-2.6.18-rc7/arch/i386/kernel/Makefile	2006-09-13 03:16:03.882984430 +0000
@@ -39,7 +39,6 @@
 obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
 obj-$(CONFIG_HPET_TIMER) 	+= hpet.o
 obj-$(CONFIG_K8_NB)		+= k8.o
-obj-$(CONFIG_AUDIT)		+= audit.o
 
 EXTRA_AFLAGS   := -traditional
 
diff -urN linux-2.6.18-rc6/arch/i386/kernel/audit.c linux-2.6.18-rc7/arch/i386/kernel/audit.c
--- linux-2.6.18-rc6/arch/i386/kernel/audit.c	2006-09-13 03:15:58.734428587 +0000
+++ linux-2.6.18-rc7/arch/i386/kernel/audit.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,23 +0,0 @@
-#include <linux/init.h>
-#include <linux/types.h>
-#include <linux/audit.h>
-#include <asm/unistd.h>
-
-static unsigned dir_class[] = {
-#include <asm-generic/audit_dir_write.h>
-~0U
-};
-
-static unsigned chattr_class[] = {
-#include <asm-generic/audit_change_attr.h>
-~0U
-};
-
-static int __init audit_classes_init(void)
-{
-	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
-	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
-	return 0;
-}
-
-__initcall(audit_classes_init);
diff -urN linux-2.6.18-rc6/arch/ia64/Kconfig linux-2.6.18-rc7/arch/ia64/Kconfig
--- linux-2.6.18-rc6/arch/ia64/Kconfig	2006-09-13 03:15:58.766432043 +0000
+++ linux-2.6.18-rc7/arch/ia64/Kconfig	2006-09-13 03:16:03.918988317 +0000
@@ -75,6 +75,10 @@
 	depends on IA64_SGI_SN2
 	default y
 
+config AUDIT_ARCH
+	bool
+	default y
+
 choice
 	prompt "System type"
 	default IA64_GENERIC
diff -urN linux-2.6.18-rc6/arch/ia64/ia32/audit.c linux-2.6.18-rc7/arch/ia64/ia32/audit.c
--- linux-2.6.18-rc6/arch/ia64/ia32/audit.c	2006-09-13 03:15:58.770432474 +0000
+++ linux-2.6.18-rc7/arch/ia64/ia32/audit.c	2006-09-13 03:16:03.922988749 +0000
@@ -9,3 +9,29 @@
 #include <asm-generic/audit_change_attr.h>
 ~0U
 };
+
+unsigned ia32_write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+unsigned ia32_read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+int ia32_classify_syscall(unsigned syscall)
+{
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 1;
+	}
+}
diff -urN linux-2.6.18-rc6/arch/ia64/kernel/audit.c linux-2.6.18-rc7/arch/ia64/kernel/audit.c
--- linux-2.6.18-rc6/arch/ia64/kernel/audit.c	2006-09-13 03:15:58.774432906 +0000
+++ linux-2.6.18-rc7/arch/ia64/kernel/audit.c	2006-09-13 03:16:03.926989181 +0000
@@ -8,19 +8,54 @@
 ~0U
 };
 
+static unsigned read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+static unsigned write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
 static unsigned chattr_class[] = {
 #include <asm-generic/audit_change_attr.h>
 ~0U
 };
 
+int audit_classify_syscall(int abi, unsigned syscall)
+{
+#ifdef CONFIG_IA32_SUPPORT
+	extern int ia32_classify_syscall(unsigned);
+	if (abi == AUDIT_ARCH_I386)
+		return ia32_classify_syscall(syscall);
+#endif
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_execve:
+		return 5;
+	default:
+		return 0;
+	}
+}
+
 static int __init audit_classes_init(void)
 {
 #ifdef CONFIG_IA32_SUPPORT
 	extern __u32 ia32_dir_class[];
+	extern __u32 ia32_write_class[];
+	extern __u32 ia32_read_class[];
 	extern __u32 ia32_chattr_class[];
+	audit_register_class(AUDIT_CLASS_WRITE_32, ia32_write_class);
+	audit_register_class(AUDIT_CLASS_READ_32, ia32_read_class);
 	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, ia32_dir_class);
 	audit_register_class(AUDIT_CLASS_CHATTR_32, ia32_chattr_class);
 #endif
+	audit_register_class(AUDIT_CLASS_WRITE, write_class);
+	audit_register_class(AUDIT_CLASS_READ, read_class);
 	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
 	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
 	return 0;
diff -urN linux-2.6.18-rc6/arch/ia64/kernel/entry.S linux-2.6.18-rc7/arch/ia64/kernel/entry.S
--- linux-2.6.18-rc6/arch/ia64/kernel/entry.S	2006-09-13 03:15:58.774432906 +0000
+++ linux-2.6.18-rc7/arch/ia64/kernel/entry.S	2006-09-13 03:16:03.926989181 +0000
@@ -1605,8 +1605,8 @@
 	data8 sys_ni_syscall			// 1295 reserved for ppoll
 	data8 sys_unshare
 	data8 sys_splice
-	data8 sys_set_robust_list
-	data8 sys_get_robust_list
+	data8 sys_ni_syscall			// reserved for set_robust_list
+	data8 sys_ni_syscall			// reserved for get_robust_list
 	data8 sys_sync_file_range		// 1300
 	data8 sys_tee
 	data8 sys_vmsplice
diff -urN linux-2.6.18-rc6/arch/ia64/kernel/head.S linux-2.6.18-rc7/arch/ia64/kernel/head.S
--- linux-2.6.18-rc6/arch/ia64/kernel/head.S	2006-09-13 03:15:58.774432906 +0000
+++ linux-2.6.18-rc7/arch/ia64/kernel/head.S	2006-09-13 03:16:03.930989613 +0000
@@ -197,6 +197,11 @@
 	;;
 	srlz.i
 	;;
+ {
+	flushrs				// must be first insn in group
+	srlz.i
+ }
+	;;
 	/*
 	 * Save the region registers, predicate before they get clobbered
 	 */
diff -urN linux-2.6.18-rc6/arch/ia64/kernel/perfmon.c linux-2.6.18-rc7/arch/ia64/kernel/perfmon.c
--- linux-2.6.18-rc6/arch/ia64/kernel/perfmon.c	2006-09-13 03:15:58.782433770 +0000
+++ linux-2.6.18-rc7/arch/ia64/kernel/perfmon.c	2006-09-13 03:16:03.934990045 +0000
@@ -4936,13 +4936,15 @@
 	if (likely(ctx)) {
 		DPRINT(("context unlocked\n"));
 		UNPROTECT_CTX(ctx, flags);
-		fput(file);
 	}
 
 	/* copy argument back to user, if needed */
 	if (call_made && PFM_CMD_RW_ARG(cmd) && copy_to_user(arg, args_k, base_sz*count)) ret = -EFAULT;
 
 error_args:
+	if (file)
+		fput(file);
+
 	kfree(args_k);
 
 	DPRINT(("cmd=%s ret=%ld\n", PFM_CMD_NAME(cmd), ret));
diff -urN linux-2.6.18-rc6/arch/ia64/kernel/sys_ia64.c linux-2.6.18-rc7/arch/ia64/kernel/sys_ia64.c
--- linux-2.6.18-rc6/arch/ia64/kernel/sys_ia64.c	2006-09-13 03:15:58.782433770 +0000
+++ linux-2.6.18-rc7/arch/ia64/kernel/sys_ia64.c	2006-09-13 03:16:03.938990476 +0000
@@ -163,10 +163,25 @@
 	return retval;
 }
 
+int ia64_mmap_check(unsigned long addr, unsigned long len,
+		unsigned long flags)
+{
+	unsigned long roff;
+
+	/*
+	 * Don't permit mappings into unmapped space, the virtual page table
+	 * of a region, or across a region boundary.  Note: RGN_MAP_LIMIT is
+	 * equal to 2^n-PAGE_SIZE (for some integer n <= 61) and len > 0.
+	 */
+	roff = REGION_OFFSET(addr);
+	if ((len > RGN_MAP_LIMIT) || (roff > (RGN_MAP_LIMIT - len)))
+		return -EINVAL;
+	return 0;
+}
+
 static inline unsigned long
 do_mmap2 (unsigned long addr, unsigned long len, int prot, int flags, int fd, unsigned long pgoff)
 {
-	unsigned long roff;
 	struct file *file = NULL;
 
 	flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
@@ -188,17 +203,6 @@
 		goto out;
 	}
 
-	/*
-	 * Don't permit mappings into unmapped space, the virtual page table of a region,
-	 * or across a region boundary.  Note: RGN_MAP_LIMIT is equal to 2^n-PAGE_SIZE
-	 * (for some integer n <= 61) and len > 0.
-	 */
-	roff = REGION_OFFSET(addr);
-	if ((len > RGN_MAP_LIMIT) || (roff > (RGN_MAP_LIMIT - len))) {
-		addr = -EINVAL;
-		goto out;
-	}
-
 	down_write(&current->mm->mmap_sem);
 	addr = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
 	up_write(&current->mm->mmap_sem);
diff -urN linux-2.6.18-rc6/arch/ia64/sn/kernel/setup.c linux-2.6.18-rc7/arch/ia64/sn/kernel/setup.c
--- linux-2.6.18-rc6/arch/ia64/sn/kernel/setup.c	2006-09-13 03:15:58.790434634 +0000
+++ linux-2.6.18-rc7/arch/ia64/sn/kernel/setup.c	2006-09-13 03:16:03.946991340 +0000
@@ -565,7 +565,7 @@
  * Also sets up a few fields in the nodepda.  Also known as
  * platform_cpu_init() by the ia64 machvec code.
  */
-void __init sn_cpu_init(void)
+void __cpuinit sn_cpu_init(void)
 {
 	int cpuid;
 	int cpuphyid;
diff -urN linux-2.6.18-rc6/arch/powerpc/Kconfig linux-2.6.18-rc7/arch/powerpc/Kconfig
--- linux-2.6.18-rc6/arch/powerpc/Kconfig	2006-09-13 03:15:58.938450614 +0000
+++ linux-2.6.18-rc7/arch/powerpc/Kconfig	2006-09-13 03:16:04.111009048 +0000
@@ -95,6 +95,10 @@
 	default y if PPC32 && SMP
 	default n
 
+config AUDIT_ARCH
+	bool
+	default y
+
 config DEFAULT_UIMAGE
 	bool
 	help
diff -urN linux-2.6.18-rc6/arch/powerpc/kernel/Makefile linux-2.6.18-rc7/arch/powerpc/kernel/Makefile
--- linux-2.6.18-rc6/arch/powerpc/kernel/Makefile	2006-09-13 03:15:58.950451909 +0000
+++ linux-2.6.18-rc7/arch/powerpc/kernel/Makefile	2006-09-13 03:16:04.123010344 +0000
@@ -70,6 +70,8 @@
 kexec-$(CONFIG_PPC64)		:= machine_kexec_64.o
 kexec-$(CONFIG_PPC32)		:= machine_kexec_32.o
 obj-$(CONFIG_KEXEC)		+= machine_kexec.o crash.o $(kexec-y)
+obj-$(CONFIG_AUDIT)		+= audit.o
+obj64-$(CONFIG_AUDIT)		+= compat_audit.o
 
 ifeq ($(CONFIG_PPC_ISERIES),y)
 $(obj)/head_64.o: $(obj)/lparmap.s
diff -urN linux-2.6.18-rc6/arch/powerpc/kernel/audit.c linux-2.6.18-rc7/arch/powerpc/kernel/audit.c
--- linux-2.6.18-rc6/arch/powerpc/kernel/audit.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/arch/powerpc/kernel/audit.c	2006-09-13 03:16:04.127010775 +0000
@@ -0,0 +1,66 @@
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/audit.h>
+#include <asm/unistd.h>
+
+static unsigned dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+static unsigned read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+static unsigned write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+static unsigned chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+int audit_classify_syscall(int abi, unsigned syscall)
+{
+#ifdef CONFIG_PPC64
+	extern int ppc32_classify_syscall(unsigned);
+	if (abi == AUDIT_ARCH_PPC)
+		return ppc32_classify_syscall(syscall);
+#endif
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 0;
+	}
+}
+
+static int __init audit_classes_init(void)
+{
+#ifdef CONFIG_PPC64
+	extern __u32 ppc32_dir_class[];
+	extern __u32 ppc32_write_class[];
+	extern __u32 ppc32_read_class[];
+	extern __u32 ppc32_chattr_class[];
+	audit_register_class(AUDIT_CLASS_WRITE_32, ppc32_write_class);
+	audit_register_class(AUDIT_CLASS_READ_32, ppc32_read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, ppc32_dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR_32, ppc32_chattr_class);
+#endif
+	audit_register_class(AUDIT_CLASS_WRITE, write_class);
+	audit_register_class(AUDIT_CLASS_READ, read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
+	return 0;
+}
+
+__initcall(audit_classes_init);
diff -urN linux-2.6.18-rc6/arch/powerpc/kernel/compat_audit.c linux-2.6.18-rc7/arch/powerpc/kernel/compat_audit.c
--- linux-2.6.18-rc6/arch/powerpc/kernel/compat_audit.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/arch/powerpc/kernel/compat_audit.c	2006-09-13 03:16:04.127010775 +0000
@@ -0,0 +1,38 @@
+#undef __powerpc64__
+#include <asm/unistd.h>
+
+unsigned ppc32_dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+unsigned ppc32_chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+unsigned ppc32_write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+unsigned ppc32_read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+int ppc32_classify_syscall(unsigned syscall)
+{
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 1;
+	}
+}
diff -urN linux-2.6.18-rc6/arch/s390/Kconfig linux-2.6.18-rc7/arch/s390/Kconfig
--- linux-2.6.18-rc6/arch/s390/Kconfig	2006-09-13 03:15:59.066464434 +0000
+++ linux-2.6.18-rc7/arch/s390/Kconfig	2006-09-13 03:16:04.247023732 +0000
@@ -118,6 +118,10 @@
 	depends on COMPAT && SYSVIPC
 	default y
 
+config AUDIT_ARCH
+	bool
+	default y
+
 comment "Code generation options"
 
 choice
diff -urN linux-2.6.18-rc6/arch/s390/kernel/Makefile linux-2.6.18-rc7/arch/s390/kernel/Makefile
--- linux-2.6.18-rc6/arch/s390/kernel/Makefile	2006-09-13 03:15:59.070464866 +0000
+++ linux-2.6.18-rc7/arch/s390/kernel/Makefile	2006-09-13 03:16:04.255024596 +0000
@@ -16,9 +16,11 @@
 obj-$(CONFIG_MODULES)		+= s390_ksyms.o module.o
 obj-$(CONFIG_SMP)		+= smp.o
 
+obj-$(CONFIG_AUDIT)		+= audit.o
+compat-obj-$(CONFIG_AUDIT)	+= compat_audit.o
 obj-$(CONFIG_COMPAT)		+= compat_linux.o compat_signal.o \
 					compat_wrapper.o compat_exec_domain.o \
-					binfmt_elf32.o
+					binfmt_elf32.o $(compat-obj-y)
 
 obj-$(CONFIG_VIRT_TIMER)	+= vtime.o
 obj-$(CONFIG_STACKTRACE)	+= stacktrace.o
diff -urN linux-2.6.18-rc6/arch/s390/kernel/audit.c linux-2.6.18-rc7/arch/s390/kernel/audit.c
--- linux-2.6.18-rc6/arch/s390/kernel/audit.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/arch/s390/kernel/audit.c	2006-09-13 03:16:04.255024596 +0000
@@ -0,0 +1,66 @@
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/audit.h>
+#include <asm/unistd.h>
+
+static unsigned dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+static unsigned read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+static unsigned write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+static unsigned chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+int audit_classify_syscall(int abi, unsigned syscall)
+{
+#ifdef CONFIG_COMPAT
+	extern int s390_classify_syscall(unsigned);
+	if (abi == AUDIT_ARCH_S390)
+		return s390_classify_syscall(syscall);
+#endif
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 0;
+	}
+}
+
+static int __init audit_classes_init(void)
+{
+#ifdef CONFIG_COMPAT
+	extern __u32 s390_dir_class[];
+	extern __u32 s390_write_class[];
+	extern __u32 s390_read_class[];
+	extern __u32 s390_chattr_class[];
+	audit_register_class(AUDIT_CLASS_WRITE_32, s390_write_class);
+	audit_register_class(AUDIT_CLASS_READ_32, s390_read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, s390_dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR_32, s390_chattr_class);
+#endif
+	audit_register_class(AUDIT_CLASS_WRITE, write_class);
+	audit_register_class(AUDIT_CLASS_READ, read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
+	return 0;
+}
+
+__initcall(audit_classes_init);
diff -urN linux-2.6.18-rc6/arch/s390/kernel/compat_audit.c linux-2.6.18-rc7/arch/s390/kernel/compat_audit.c
--- linux-2.6.18-rc6/arch/s390/kernel/compat_audit.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/arch/s390/kernel/compat_audit.c	2006-09-13 03:16:04.255024596 +0000
@@ -0,0 +1,38 @@
+#undef __s390x__
+#include <asm/unistd.h>
+
+unsigned s390_dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+unsigned s390_chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+unsigned s390_write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+unsigned s390_read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+int s390_classify_syscall(unsigned syscall)
+{
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 1;
+	}
+}
diff -urN linux-2.6.18-rc6/arch/sh64/Makefile linux-2.6.18-rc7/arch/sh64/Makefile
--- linux-2.6.18-rc6/arch/sh64/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/arch/sh64/Makefile	2006-09-13 03:16:04.279027187 +0000
@@ -26,7 +26,6 @@
 endif
 
 # No requirements for endianess support from AFLAGS, 'as' always run through gcc
-AFLAGS		+= -m5 -isa=sh64 -traditional
 CFLAGS		+= $(cpu-y)
 
 LDFLAGS_vmlinux	+= --defsym phys_stext=_stext-$(CONFIG_CACHED_MEMORY_OFFSET) \
diff -urN linux-2.6.18-rc6/arch/sh64/kernel/process.c linux-2.6.18-rc7/arch/sh64/kernel/process.c
--- linux-2.6.18-rc6/arch/sh64/kernel/process.c	2006-09-13 03:15:59.102468321 +0000
+++ linux-2.6.18-rc7/arch/sh64/kernel/process.c	2006-09-13 03:16:04.283027619 +0000
@@ -355,6 +355,9 @@
 	enter_deep_standby();
 }
 
+void (*pm_power_off)(void) = machine_power_off;
+EXPORT_SYMBOL(pm_power_off);
+
 void show_regs(struct pt_regs * regs)
 {
 	unsigned long long ah, al, bh, bl, ch, cl;
diff -urN linux-2.6.18-rc6/arch/sh64/mach-cayman/setup.c linux-2.6.18-rc7/arch/sh64/mach-cayman/setup.c
--- linux-2.6.18-rc6/arch/sh64/mach-cayman/setup.c	2006-09-13 03:15:59.102468321 +0000
+++ linux-2.6.18-rc7/arch/sh64/mach-cayman/setup.c	2006-09-13 03:16:04.283027619 +0000
@@ -112,8 +112,10 @@
 };
 
 struct resource kram_resources[] = {
-	{ "Kernel code", 0, 0 },	/* These must be last in the array */
-	{ "Kernel data", 0, 0 }		/* These must be last in the array */
+	/* These must be last in the array */
+	{ .name = "Kernel code", .start = 0, .end = 0 },
+	/* These must be last in the array */
+	{ .name = "Kernel data", .start = 0, .end = 0 }
 };
 
 struct resource xram_resources[] = {
diff -urN linux-2.6.18-rc6/arch/sh64/mm/ioremap.c linux-2.6.18-rc7/arch/sh64/mm/ioremap.c
--- linux-2.6.18-rc6/arch/sh64/mm/ioremap.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/arch/sh64/mm/ioremap.c	2006-09-13 03:16:04.287028051 +0000
@@ -449,7 +449,9 @@
 		if (p + 32 >= e)        /* Better than nothing */
 			break;
 		if ((nm = r->name) == 0) nm = "???";
-		p += sprintf(p, "%08lx-%08lx: %s\n", r->start, r->end, nm);
+		p += sprintf(p, "%08lx-%08lx: %s\n",
+			     (unsigned long)r->start,
+			     (unsigned long)r->end, nm);
 	}
 
 	return p-buf;
diff -urN linux-2.6.18-rc6/arch/sparc/kernel/sys_sparc.c linux-2.6.18-rc7/arch/sparc/kernel/sys_sparc.c
--- linux-2.6.18-rc6/arch/sparc/kernel/sys_sparc.c	2006-09-13 03:15:59.114469617 +0000
+++ linux-2.6.18-rc7/arch/sparc/kernel/sys_sparc.c	2006-09-13 03:16:04.295028915 +0000
@@ -219,6 +219,21 @@
 	return err;
 }
 
+int sparc_mmap_check(unsigned long addr, unsigned long len, unsigned long flags)
+{
+	if (ARCH_SUN4C_SUN4 &&
+	    (len > 0x20000000 ||
+	     ((flags & MAP_FIXED) &&
+	      addr < 0xe0000000 && addr + len > 0x20000000)))
+		return -EINVAL;
+
+	/* See asm-sparc/uaccess.h */
+	if (len > TASK_SIZE - PAGE_SIZE || addr + len > TASK_SIZE - PAGE_SIZE)
+		return -EINVAL;
+
+	return 0;
+}
+
 /* Linux version of mmap */
 static unsigned long do_mmap2(unsigned long addr, unsigned long len,
 	unsigned long prot, unsigned long flags, unsigned long fd,
@@ -233,25 +248,13 @@
 			goto out;
 	}
 
-	retval = -EINVAL;
 	len = PAGE_ALIGN(len);
-	if (ARCH_SUN4C_SUN4 &&
-	    (len > 0x20000000 ||
-	     ((flags & MAP_FIXED) &&
-	      addr < 0xe0000000 && addr + len > 0x20000000)))
-		goto out_putf;
-
-	/* See asm-sparc/uaccess.h */
-	if (len > TASK_SIZE - PAGE_SIZE || addr + len > TASK_SIZE - PAGE_SIZE)
-		goto out_putf;
-
 	flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
 
 	down_write(&current->mm->mmap_sem);
 	retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
 	up_write(&current->mm->mmap_sem);
 
-out_putf:
 	if (file)
 		fput(file);
 out:
diff -urN linux-2.6.18-rc6/arch/sparc64/Kconfig linux-2.6.18-rc7/arch/sparc64/Kconfig
--- linux-2.6.18-rc6/arch/sparc64/Kconfig	2006-09-13 03:15:59.118470049 +0000
+++ linux-2.6.18-rc7/arch/sparc64/Kconfig	2006-09-13 03:16:04.299029347 +0000
@@ -34,6 +34,10 @@
 	bool
 	default y
 
+config AUDIT_ARCH
+	bool
+	default y
+
 choice
 	prompt "Kernel page size"
 	default SPARC64_PAGE_SIZE_8KB
diff -urN linux-2.6.18-rc6/arch/sparc64/kernel/Makefile linux-2.6.18-rc7/arch/sparc64/kernel/Makefile
--- linux-2.6.18-rc6/arch/sparc64/kernel/Makefile	2006-09-13 03:15:59.118470049 +0000
+++ linux-2.6.18-rc7/arch/sparc64/kernel/Makefile	2006-09-13 03:16:04.299029347 +0000
@@ -25,6 +25,9 @@
 obj-$(CONFIG_US3_FREQ) += us3_cpufreq.o
 obj-$(CONFIG_US2E_FREQ) += us2e_cpufreq.o
 obj-$(CONFIG_KPROBES) += kprobes.o
+obj-$(CONFIG_AUDIT) += audit.o
+obj-$(CONFIG_AUDIT)$(CONFIG_SPARC32_COMPAT) += compat_audit.o
+obj-y += $(obj-yy)
 
 ifdef CONFIG_SUNOS_EMUL
   obj-y += sys_sunos32.o sunos_ioctl32.o
diff -urN linux-2.6.18-rc6/arch/sparc64/kernel/audit.c linux-2.6.18-rc7/arch/sparc64/kernel/audit.c
--- linux-2.6.18-rc6/arch/sparc64/kernel/audit.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/arch/sparc64/kernel/audit.c	2006-09-13 03:16:04.303029779 +0000
@@ -0,0 +1,66 @@
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/audit.h>
+#include <asm/unistd.h>
+
+static unsigned dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+static unsigned read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+static unsigned write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+static unsigned chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+int audit_classify_syscall(int abi, unsigned syscall)
+{
+#ifdef CONFIG_SPARC32_COMPAT
+	extern int sparc32_classify_syscall(unsigned);
+	if (abi == AUDIT_ARCH_SPARC)
+		return sparc32_classify_syscall(syscall);
+#endif
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 0;
+	}
+}
+
+static int __init audit_classes_init(void)
+{
+#ifdef CONFIG_SPARC32_COMPAT
+	extern __u32 sparc32_dir_class[];
+	extern __u32 sparc32_write_class[];
+	extern __u32 sparc32_read_class[];
+	extern __u32 sparc32_chattr_class[];
+	audit_register_class(AUDIT_CLASS_WRITE_32, sparc32_write_class);
+	audit_register_class(AUDIT_CLASS_READ_32, sparc32_read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, sparc32_dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR_32, sparc32_chattr_class);
+#endif
+	audit_register_class(AUDIT_CLASS_WRITE, write_class);
+	audit_register_class(AUDIT_CLASS_READ, read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
+	return 0;
+}
+
+__initcall(audit_classes_init);
diff -urN linux-2.6.18-rc6/arch/sparc64/kernel/compat_audit.c linux-2.6.18-rc7/arch/sparc64/kernel/compat_audit.c
--- linux-2.6.18-rc6/arch/sparc64/kernel/compat_audit.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/arch/sparc64/kernel/compat_audit.c	2006-09-13 03:16:04.303029779 +0000
@@ -0,0 +1,37 @@
+#include <asm-sparc/unistd.h>
+
+unsigned sparc32_dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+unsigned sparc32_chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+unsigned sparc32_write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+unsigned sparc32_read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+int sparc32_classify_syscall(unsigned syscall)
+{
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 1;
+	}
+}
diff -urN linux-2.6.18-rc6/arch/sparc64/kernel/sys_sparc.c linux-2.6.18-rc7/arch/sparc64/kernel/sys_sparc.c
--- linux-2.6.18-rc6/arch/sparc64/kernel/sys_sparc.c	2006-09-13 03:15:59.134471776 +0000
+++ linux-2.6.18-rc7/arch/sparc64/kernel/sys_sparc.c	2006-09-13 03:16:04.319031506 +0000
@@ -548,6 +548,26 @@
 	return ret;
 }
 
+int sparc64_mmap_check(unsigned long addr, unsigned long len,
+		unsigned long flags)
+{
+	if (test_thread_flag(TIF_32BIT)) {
+		if (len >= STACK_TOP32)
+			return -EINVAL;
+
+		if ((flags & MAP_FIXED) && addr > STACK_TOP32 - len)
+			return -EINVAL;
+	} else {
+		if (len >= VA_EXCLUDE_START)
+			return -EINVAL;
+
+		if ((flags & MAP_FIXED) && invalid_64bit_range(addr, len))
+			return -EINVAL;
+	}
+
+	return 0;
+}
+
 /* Linux version of mmap */
 asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len,
 	unsigned long prot, unsigned long flags, unsigned long fd,
@@ -563,27 +583,11 @@
 	}
 	flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
 	len = PAGE_ALIGN(len);
-	retval = -EINVAL;
-
-	if (test_thread_flag(TIF_32BIT)) {
-		if (len >= STACK_TOP32)
-			goto out_putf;
-
-		if ((flags & MAP_FIXED) && addr > STACK_TOP32 - len)
-			goto out_putf;
-	} else {
-		if (len >= VA_EXCLUDE_START)
-			goto out_putf;
-
-		if ((flags & MAP_FIXED) && invalid_64bit_range(addr, len))
-			goto out_putf;
-	}
 
 	down_write(&current->mm->mmap_sem);
 	retval = do_mmap(file, addr, len, prot, flags, off);
 	up_write(&current->mm->mmap_sem);
 
-out_putf:
 	if (file)
 		fput(file);
 out:
diff -urN linux-2.6.18-rc6/arch/x86_64/Kconfig linux-2.6.18-rc7/arch/x86_64/Kconfig
--- linux-2.6.18-rc6/arch/x86_64/Kconfig	2006-09-13 03:15:59.162474800 +0000
+++ linux-2.6.18-rc7/arch/x86_64/Kconfig	2006-09-13 03:16:04.347034530 +0000
@@ -85,6 +85,10 @@
 	bool
 	default y
 
+config AUDIT_ARCH
+	bool
+	default y
+
 source "init/Kconfig"
 
 
diff -urN linux-2.6.18-rc6/arch/x86_64/ia32/audit.c linux-2.6.18-rc7/arch/x86_64/ia32/audit.c
--- linux-2.6.18-rc6/arch/x86_64/ia32/audit.c	2006-09-13 03:15:59.166475231 +0000
+++ linux-2.6.18-rc7/arch/x86_64/ia32/audit.c	2006-09-13 03:16:04.351034961 +0000
@@ -9,3 +9,29 @@
 #include <asm-generic/audit_change_attr.h>
 ~0U
 };
+
+unsigned ia32_write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+unsigned ia32_read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+int ia32_classify_syscall(unsigned syscall)
+{
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_socketcall:
+		return 4;
+	case __NR_execve:
+		return 5;
+	default:
+		return 1;
+	}
+}
diff -urN linux-2.6.18-rc6/arch/x86_64/kernel/audit.c linux-2.6.18-rc7/arch/x86_64/kernel/audit.c
--- linux-2.6.18-rc6/arch/x86_64/kernel/audit.c	2006-09-13 03:15:59.170475663 +0000
+++ linux-2.6.18-rc7/arch/x86_64/kernel/audit.c	2006-09-13 03:16:04.355035393 +0000
@@ -8,19 +8,54 @@
 ~0U
 };
 
+static unsigned read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+static unsigned write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
 static unsigned chattr_class[] = {
 #include <asm-generic/audit_change_attr.h>
 ~0U
 };
 
+int audit_classify_syscall(int abi, unsigned syscall)
+{
+#ifdef CONFIG_IA32_EMULATION
+	extern int ia32_classify_syscall(unsigned);
+	if (abi == AUDIT_ARCH_I386)
+		return ia32_classify_syscall(syscall);
+#endif
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+	case __NR_execve:
+		return 5;
+	default:
+		return 0;
+	}
+}
+
 static int __init audit_classes_init(void)
 {
 #ifdef CONFIG_IA32_EMULATION
 	extern __u32 ia32_dir_class[];
+	extern __u32 ia32_write_class[];
+	extern __u32 ia32_read_class[];
 	extern __u32 ia32_chattr_class[];
+	audit_register_class(AUDIT_CLASS_WRITE_32, ia32_write_class);
+	audit_register_class(AUDIT_CLASS_READ_32, ia32_read_class);
 	audit_register_class(AUDIT_CLASS_DIR_WRITE_32, ia32_dir_class);
 	audit_register_class(AUDIT_CLASS_CHATTR_32, ia32_chattr_class);
 #endif
+	audit_register_class(AUDIT_CLASS_WRITE, write_class);
+	audit_register_class(AUDIT_CLASS_READ, read_class);
 	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
 	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
 	return 0;
diff -urN linux-2.6.18-rc6/drivers/ide/ide-proc.c linux-2.6.18-rc7/drivers/ide/ide-proc.c
--- linux-2.6.18-rc6/drivers/ide/ide-proc.c	2006-09-13 03:15:59.462507191 +0000
+++ linux-2.6.18-rc7/drivers/ide/ide-proc.c	2006-09-13 03:16:04.647066921 +0000
@@ -376,6 +376,8 @@
 				break;
 		case ide_floppy:media = "floppy\n";
 				break;
+		case ide_optical:media = "optical\n";
+				break;
 		default:	media = "UNKNOWN\n";
 				break;
 	}
diff -urN linux-2.6.18-rc6/drivers/ide/pci/aec62xx.c linux-2.6.18-rc7/drivers/ide/pci/aec62xx.c
--- linux-2.6.18-rc6/drivers/ide/pci/aec62xx.c	2006-09-13 03:15:59.470508055 +0000
+++ linux-2.6.18-rc7/drivers/ide/pci/aec62xx.c	2006-09-13 03:16:04.651067353 +0000
@@ -425,12 +425,12 @@
 	return d->init_setup(dev, d);
 }
 
-static const struct pci_device_id aec62xx_pci_tbl[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP850UF), 0 },
-	{ PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860), 1 },
-	{ PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860R), 2 },
-	{ PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865), 3 },
-	{ PCI_DEVICE(PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865R), 4 },
+static struct pci_device_id aec62xx_pci_tbl[] = {
+	{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP850UF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+	{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860,   PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
+	{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860R,  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
+	{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865,   PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
+	{ PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865R,  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
 	{ 0, },
 };
 MODULE_DEVICE_TABLE(pci, aec62xx_pci_tbl);
diff -urN linux-2.6.18-rc6/drivers/ide/pci/serverworks.c linux-2.6.18-rc7/drivers/ide/pci/serverworks.c
--- linux-2.6.18-rc6/drivers/ide/pci/serverworks.c	2006-09-13 03:15:59.474508487 +0000
+++ linux-2.6.18-rc7/drivers/ide/pci/serverworks.c	2006-09-13 03:16:04.655067785 +0000
@@ -649,11 +649,11 @@
 }
 
 static struct pci_device_id svwks_pci_tbl[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE), 0},
-	{ PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE), 1},
-	{ PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE), 2},
-	{ PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2), 3},
-	{ PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE), 4},
+	{ PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+	{ PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
+	{ PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
+	{ PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},
+	{ PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
 	{ 0, },
 };
 MODULE_DEVICE_TABLE(pci, svwks_pci_tbl);
diff -urN linux-2.6.18-rc6/drivers/ide/pci/siimage.c linux-2.6.18-rc7/drivers/ide/pci/siimage.c
--- linux-2.6.18-rc6/drivers/ide/pci/siimage.c	2006-09-13 03:15:59.474508487 +0000
+++ linux-2.6.18-rc7/drivers/ide/pci/siimage.c	2006-09-13 03:16:04.659068217 +0000
@@ -1082,10 +1082,10 @@
 }
 
 static struct pci_device_id siimage_pci_tbl[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680), 0},
+	{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680,  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 #ifdef CONFIG_BLK_DEV_IDE_SATA
-	{ PCI_DEVICE(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_3112), 1},
-	{ PCI_DEVICE(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_1210SA), 2},
+	{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_3112, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
+	{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_1210SA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
 #endif
 	{ 0, },
 };
diff -urN linux-2.6.18-rc6/drivers/ide/pci/sis5513.c linux-2.6.18-rc7/drivers/ide/pci/sis5513.c
--- linux-2.6.18-rc6/drivers/ide/pci/sis5513.c	2006-09-13 03:15:59.474508487 +0000
+++ linux-2.6.18-rc7/drivers/ide/pci/sis5513.c	2006-09-13 03:16:04.659068217 +0000
@@ -86,6 +86,8 @@
 	u8 chipset_family;
 	u8 flags;
 } SiSHostChipInfo[] = {
+	{ "SiS968",	PCI_DEVICE_ID_SI_968,	ATA_133  },
+	{ "SiS966",	PCI_DEVICE_ID_SI_966,	ATA_133  },
 	{ "SiS965",	PCI_DEVICE_ID_SI_965,	ATA_133  },
 	{ "SiS745",	PCI_DEVICE_ID_SI_745,	ATA_100  },
 	{ "SiS735",	PCI_DEVICE_ID_SI_735,	ATA_100  },
diff -urN linux-2.6.18-rc6/drivers/media/Kconfig linux-2.6.18-rc7/drivers/media/Kconfig
--- linux-2.6.18-rc6/drivers/media/Kconfig	2006-09-13 03:15:59.606522739 +0000
+++ linux-2.6.18-rc7/drivers/media/Kconfig	2006-09-13 03:16:04.787082038 +0000
@@ -53,7 +53,7 @@
 	  If you are unsure as to whether this is required, answer Y.
 
 config VIDEO_V4L2
-	tristate
+	bool
 	default y
 
 source "drivers/media/video/Kconfig"
diff -urN linux-2.6.18-rc6/drivers/media/common/saa7146_video.c linux-2.6.18-rc7/drivers/media/common/saa7146_video.c
--- linux-2.6.18-rc6/drivers/media/common/saa7146_video.c	2006-09-13 03:15:59.606522739 +0000
+++ linux-2.6.18-rc7/drivers/media/common/saa7146_video.c	2006-09-13 03:16:04.787082038 +0000
@@ -1190,6 +1190,7 @@
 		}
 		return err;
 	}
+#ifdef CONFIG_VIDEO_V4L1_COMPAT
 	case VIDIOCGMBUF:
 	{
 		struct video_mbuf *mbuf = arg;
@@ -1218,6 +1219,7 @@
 		mutex_unlock(&q->lock);
 		return 0;
 	}
+#endif
 	default:
 		return v4l_compat_translate_ioctl(inode,file,cmd,arg,
 						  saa7146_video_do_ioctl);
diff -urN linux-2.6.18-rc6/drivers/media/dvb/b2c2/Kconfig linux-2.6.18-rc7/drivers/media/dvb/b2c2/Kconfig
--- linux-2.6.18-rc6/drivers/media/dvb/b2c2/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/drivers/media/dvb/b2c2/Kconfig	2006-09-13 03:16:04.791082470 +0000
@@ -1,6 +1,7 @@
 config DVB_B2C2_FLEXCOP
 	tristate "Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters"
 	depends on DVB_CORE && I2C
+	select DVB_PLL
 	select DVB_STV0299
 	select DVB_MT352
 	select DVB_MT312
diff -urN linux-2.6.18-rc6/drivers/media/dvb/bt8xx/Kconfig linux-2.6.18-rc7/drivers/media/dvb/bt8xx/Kconfig
--- linux-2.6.18-rc6/drivers/media/dvb/bt8xx/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/drivers/media/dvb/bt8xx/Kconfig	2006-09-13 03:16:04.791082470 +0000
@@ -1,6 +1,7 @@
 config DVB_BT8XX
 	tristate "BT8xx based PCI cards"
 	depends on DVB_CORE && PCI && I2C && VIDEO_BT848
+	select DVB_PLL
 	select DVB_MT352
 	select DVB_SP887X
 	select DVB_NXT6000
diff -urN linux-2.6.18-rc6/drivers/media/dvb/dvb-usb/Kconfig linux-2.6.18-rc7/drivers/media/dvb/dvb-usb/Kconfig
--- linux-2.6.18-rc6/drivers/media/dvb/dvb-usb/Kconfig	2006-09-13 03:15:59.618524035 +0000
+++ linux-2.6.18-rc7/drivers/media/dvb/dvb-usb/Kconfig	2006-09-13 03:16:04.799083333 +0000
@@ -2,6 +2,7 @@
 	tristate "Support for various USB DVB devices"
 	depends on DVB_CORE && USB && I2C
 	select FW_LOADER
+	select DVB_PLL
 	help
 	  By enabling this you will be able to choose the various supported
 	  USB1.1 and USB2.0 DVB devices.
diff -urN linux-2.6.18-rc6/drivers/media/dvb/frontends/Kconfig linux-2.6.18-rc7/drivers/media/dvb/frontends/Kconfig
--- linux-2.6.18-rc6/drivers/media/dvb/frontends/Kconfig	2006-09-13 03:15:59.622524467 +0000
+++ linux-2.6.18-rc7/drivers/media/dvb/frontends/Kconfig	2006-09-13 03:16:04.803083765 +0000
@@ -6,43 +6,43 @@
 
 config DVB_STV0299
 	tristate "ST STV0299 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-S tuner module. Say Y when you want to support this frontend.
 
 config DVB_CX24110
 	tristate "Conexant CX24110 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-S tuner module. Say Y when you want to support this frontend.
 
 config DVB_CX24123
 	tristate "Conexant CX24123 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-S tuner module. Say Y when you want to support this frontend.
 
 config DVB_TDA8083
 	tristate "Philips TDA8083 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-S tuner module. Say Y when you want to support this frontend.
 
 config DVB_MT312
 	tristate "Zarlink VP310/MT312 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-S tuner module. Say Y when you want to support this frontend.
 
 config DVB_VES1X93
 	tristate "VLSI VES1893 or VES1993 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-S tuner module. Say Y when you want to support this frontend.
 
 config DVB_S5H1420
 	tristate "Samsung S5H1420 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-S tuner module. Say Y when you want to support this frontend.
 
@@ -51,7 +51,7 @@
 
 config DVB_SP8870
 	tristate "Spase sp8870 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	select FW_LOADER
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
@@ -63,7 +63,7 @@
 
 config DVB_SP887X
 	tristate "Spase sp887x based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	select FW_LOADER
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
@@ -75,25 +75,25 @@
 
 config DVB_CX22700
 	tristate "Conexant CX22700 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
 
 config DVB_CX22702
 	tristate "Conexant cx22702 demodulator (OFDM)"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
 
 config DVB_L64781
 	tristate "LSI L64781"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
 
 config DVB_TDA1004X
 	tristate "Philips TDA10045H/TDA10046H based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	select FW_LOADER
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
@@ -106,32 +106,32 @@
 
 config DVB_NXT6000
 	tristate "NxtWave Communications NXT6000 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
 
 config DVB_MT352
 	tristate "Zarlink MT352 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
 
 config DVB_ZL10353
 	tristate "Zarlink ZL10353 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
 
 config DVB_DIB3000MB
 	tristate "DiBcom 3000M-B"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-T tuner module. Designed for mobile usage. Say Y when you want
 	  to support this frontend.
 
 config DVB_DIB3000MC
 	tristate "DiBcom 3000P/M-C"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-T tuner module. Designed for mobile usage. Say Y when you want
 	  to support this frontend.
@@ -141,19 +141,19 @@
 
 config DVB_VES1820
 	tristate "VLSI VES1820 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-C tuner module. Say Y when you want to support this frontend.
 
 config DVB_TDA10021
 	tristate "Philips TDA10021 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-C tuner module. Say Y when you want to support this frontend.
 
 config DVB_STV0297
 	tristate "ST STV0297 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  A DVB-C tuner module. Say Y when you want to support this frontend.
 
@@ -162,7 +162,7 @@
 
 config DVB_NXT200X
 	tristate "NxtWave Communications NXT2002/NXT2004 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	select FW_LOADER
 	help
 	  An ATSC 8VSB and QAM64/256 tuner module. Say Y when you want
@@ -176,7 +176,7 @@
 
 config DVB_OR51211
 	tristate "Oren OR51211 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	select FW_LOADER
 	help
 	  An ATSC 8VSB tuner module. Say Y when you want to support this frontend.
@@ -188,7 +188,7 @@
 
 config DVB_OR51132
 	tristate "Oren OR51132 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	select FW_LOADER
 	help
 	  An ATSC 8VSB and QAM64/256 tuner module. Say Y when you want
@@ -203,7 +203,7 @@
 
 config DVB_BCM3510
 	tristate "Broadcom BCM3510"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	select FW_LOADER
 	help
 	  An ATSC 8VSB/16VSB and QAM64/256 tuner module. Say Y when you want to
@@ -211,7 +211,7 @@
 
 config DVB_LGDT330X
 	tristate "LG Electronics LGDT3302/LGDT3303 based"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  An ATSC 8VSB and QAM64/256 tuner module. Say Y when you want
 	  to support this frontend.
@@ -220,15 +220,19 @@
 comment "Miscellaneous devices"
 	depends on DVB_CORE
 
+config DVB_PLL
+	tristate
+	depends on DVB_CORE && I2C
+
 config DVB_LNBP21
 	tristate "LNBP21 SEC controller"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  An SEC control chip.
 
 config DVB_ISL6421
 	tristate "ISL6421 SEC controller"
-	depends on DVB_CORE
+	depends on DVB_CORE && I2C
 	help
 	  An SEC control chip.
 
diff -urN linux-2.6.18-rc6/drivers/media/dvb/frontends/Makefile linux-2.6.18-rc7/drivers/media/dvb/frontends/Makefile
--- linux-2.6.18-rc6/drivers/media/dvb/frontends/Makefile	2006-09-13 03:15:59.622524467 +0000
+++ linux-2.6.18-rc7/drivers/media/dvb/frontends/Makefile	2006-09-13 03:16:04.803083765 +0000
@@ -4,7 +4,7 @@
 
 EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
 
-obj-$(CONFIG_DVB_CORE) += dvb-pll.o
+obj-$(CONFIG_DVB_PLL) += dvb-pll.o
 obj-$(CONFIG_DVB_STV0299) += stv0299.o
 obj-$(CONFIG_DVB_SP8870) += sp8870.o
 obj-$(CONFIG_DVB_CX22700) += cx22700.o
diff -urN linux-2.6.18-rc6/drivers/media/dvb/pluto2/Kconfig linux-2.6.18-rc7/drivers/media/dvb/pluto2/Kconfig
--- linux-2.6.18-rc6/drivers/media/dvb/pluto2/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/drivers/media/dvb/pluto2/Kconfig	2006-09-13 03:16:04.819085493 +0000
@@ -2,6 +2,7 @@
 	tristate "Pluto2 cards"
 	depends on DVB_CORE && PCI && I2C
 	select I2C_ALGOBIT
+	select DVB_PLL
 	select DVB_TDA1004X
 	help
 	  Support for PCI cards based on the Pluto2 FPGA like the Satelco
diff -urN linux-2.6.18-rc6/drivers/media/dvb/ttpci/Kconfig linux-2.6.18-rc7/drivers/media/dvb/ttpci/Kconfig
--- linux-2.6.18-rc6/drivers/media/dvb/ttpci/Kconfig	2006-09-13 03:15:59.638526194 +0000
+++ linux-2.6.18-rc7/drivers/media/dvb/ttpci/Kconfig	2006-09-13 03:16:04.819085493 +0000
@@ -3,6 +3,7 @@
 	depends on DVB_CORE && PCI && I2C && VIDEO_V4L1
 	select FW_LOADER
 	select VIDEO_SAA7146_VV
+	select DVB_PLL
 	select DVB_VES1820
 	select DVB_VES1X93
 	select DVB_STV0299
@@ -61,6 +62,7 @@
 	tristate "Budget cards"
 	depends on DVB_CORE && PCI && I2C && VIDEO_V4L1
 	select VIDEO_SAA7146
+	select DVB_PLL
 	select DVB_STV0299
 	select DVB_VES1X93
 	select DVB_VES1820
@@ -83,6 +85,7 @@
 	tristate "Budget cards with onboard CI connector"
 	depends on DVB_CORE && PCI && I2C && VIDEO_V4L1
 	select VIDEO_SAA7146
+	select DVB_PLL
 	select DVB_STV0297
 	select DVB_STV0299
 	select DVB_TDA1004X
@@ -104,6 +107,7 @@
 	tristate "Budget cards with analog video inputs"
 	depends on DVB_CORE && PCI && I2C && VIDEO_V4L1
 	select VIDEO_SAA7146_VV
+	select DVB_PLL
 	select DVB_STV0299
 	select DVB_TDA1004X
 	select DVB_TDA10021
@@ -122,6 +126,7 @@
 	tristate "AV7110 cards with Budget Patch"
 	depends on DVB_CORE && DVB_BUDGET && VIDEO_V4L1
 	select DVB_AV7110
+	select DVB_PLL
 	select DVB_STV0299
 	select DVB_VES1X93
 	select DVB_TDA8083
diff -urN linux-2.6.18-rc6/drivers/media/dvb/ttusb-budget/Kconfig linux-2.6.18-rc7/drivers/media/dvb/ttusb-budget/Kconfig
--- linux-2.6.18-rc6/drivers/media/dvb/ttusb-budget/Kconfig	2006-09-13 03:15:59.642526626 +0000
+++ linux-2.6.18-rc7/drivers/media/dvb/ttusb-budget/Kconfig	2006-09-13 03:16:04.823085925 +0000
@@ -1,6 +1,7 @@
 config DVB_TTUSB_BUDGET
 	tristate "Technotrend/Hauppauge Nova-USB devices"
-	depends on DVB_CORE && USB
+	depends on DVB_CORE && USB && I2C
+	select DVB_PLL
 	select DVB_CX22700
 	select DVB_TDA1004X
 	select DVB_VES1820
diff -urN linux-2.6.18-rc6/drivers/media/video/Kconfig linux-2.6.18-rc7/drivers/media/video/Kconfig
--- linux-2.6.18-rc6/drivers/media/video/Kconfig	2006-09-13 03:15:59.650527490 +0000
+++ linux-2.6.18-rc7/drivers/media/video/Kconfig	2006-09-13 03:16:04.835087220 +0000
@@ -260,7 +260,7 @@
 
 config VIDEO_MXB
 	tristate "Siemens-Nixdorf 'Multimedia eXtension Board'"
-	depends on PCI && VIDEO_V4L1
+	depends on PCI && VIDEO_V4L1 && I2C
 	select VIDEO_SAA7146_VV
 	select VIDEO_TUNER
 	---help---
@@ -272,7 +272,7 @@
 
 config VIDEO_DPC
 	tristate "Philips-Semiconductors 'dpc7146 demonstration board'"
-	depends on PCI && VIDEO_V4L1
+	depends on PCI && VIDEO_V4L1 && I2C
 	select VIDEO_SAA7146_VV
 	select VIDEO_V4L2
 	---help---
@@ -287,7 +287,7 @@
 
 config VIDEO_HEXIUM_ORION
 	tristate "Hexium HV-PCI6 and Orion frame grabber"
-	depends on PCI && VIDEO_V4L1
+	depends on PCI && VIDEO_V4L1 && I2C
 	select VIDEO_SAA7146_VV
 	select VIDEO_V4L2
 	---help---
@@ -299,7 +299,7 @@
 
 config VIDEO_HEXIUM_GEMINI
 	tristate "Hexium Gemini frame grabber"
-	depends on PCI && VIDEO_V4L1
+	depends on PCI && VIDEO_V4L1 && I2C
 	select VIDEO_SAA7146_VV
 	select VIDEO_V4L2
 	---help---
diff -urN linux-2.6.18-rc6/drivers/media/video/bt8xx/bttv-input.c linux-2.6.18-rc7/drivers/media/video/bt8xx/bttv-input.c
--- linux-2.6.18-rc6/drivers/media/video/bt8xx/bttv-input.c	2006-09-13 03:15:59.654527922 +0000
+++ linux-2.6.18-rc7/drivers/media/video/bt8xx/bttv-input.c	2006-09-13 03:16:04.839087652 +0000
@@ -303,6 +303,7 @@
 		ir->mask_keyup   = 0x010000;
 		ir->polling      = 50; // ms
 		break;
+	case BTTV_BOARD_PV_M4900:
 	case BTTV_BOARD_PV_BT878P_9B:
 	case BTTV_BOARD_PV_BT878P_PLUS:
 		ir_codes         = ir_codes_pixelview;
diff -urN linux-2.6.18-rc6/drivers/media/video/cx88/Kconfig linux-2.6.18-rc7/drivers/media/video/cx88/Kconfig
--- linux-2.6.18-rc6/drivers/media/video/cx88/Kconfig	2006-09-13 03:15:59.662528786 +0000
+++ linux-2.6.18-rc7/drivers/media/video/cx88/Kconfig	2006-09-13 03:16:04.847088516 +0000
@@ -51,6 +51,7 @@
 	tristate "DVB/ATSC Support for cx2388x based TV cards"
 	depends on VIDEO_CX88 && DVB_CORE
 	select VIDEO_BUF_DVB
+	select DVB_PLL
 	---help---
 	  This adds support for DVB/ATSC cards based on the
 	  Conexant 2388x chip.
diff -urN linux-2.6.18-rc6/drivers/media/video/saa7134/Kconfig linux-2.6.18-rc7/drivers/media/video/saa7134/Kconfig
--- linux-2.6.18-rc6/drivers/media/video/saa7134/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/drivers/media/video/saa7134/Kconfig	2006-09-13 03:16:04.891093267 +0000
@@ -40,6 +40,7 @@
 	depends on VIDEO_SAA7134 && DVB_CORE
 	select VIDEO_BUF_DVB
 	select FW_LOADER
+	select DVB_PLL
 	---help---
 	  This adds support for DVB cards based on the
 	  Philips saa7134 chip.
diff -urN linux-2.6.18-rc6/drivers/media/video/tuner-types.c linux-2.6.18-rc7/drivers/media/video/tuner-types.c
--- linux-2.6.18-rc6/drivers/media/video/tuner-types.c	2006-09-13 03:15:59.722535264 +0000
+++ linux-2.6.18-rc7/drivers/media/video/tuner-types.c	2006-09-13 03:16:04.903094563 +0000
@@ -926,11 +926,17 @@
 
 /* ------------ TUNER_YMEC_TVF66T5_B_DFF - Philips PAL ------------ */
 
+static struct tuner_range tuner_ymec_tvf66t5_b_dff_pal_ranges[] = {
+	{ 16 * 160.25 /*MHz*/, 0x8e, 0x01, },
+	{ 16 * 464.25 /*MHz*/, 0x8e, 0x02, },
+	{ 16 * 999.99        , 0x8e, 0x08, },
+};
+
 static struct tuner_params tuner_ymec_tvf66t5_b_dff_params[] = {
 	{
 		.type   = TUNER_PARAM_TYPE_PAL,
-		.ranges = tuner_tena_9533_di_pal_ranges,
-		.count  = ARRAY_SIZE(tuner_tena_9533_di_pal_ranges),
+		.ranges = tuner_ymec_tvf66t5_b_dff_pal_ranges,
+		.count  = ARRAY_SIZE(tuner_ymec_tvf66t5_b_dff_pal_ranges),
 	},
 };
 
diff -urN linux-2.6.18-rc6/drivers/media/video/zoran.h linux-2.6.18-rc7/drivers/media/video/zoran.h
--- linux-2.6.18-rc6/drivers/media/video/zoran.h	2006-09-13 03:15:59.734536560 +0000
+++ linux-2.6.18-rc7/drivers/media/video/zoran.h	2006-09-13 03:16:04.915095858 +0000
@@ -267,7 +267,7 @@
 };
 
 /* whoops, this one is undeclared if !v4l2 */
-#ifndef HAVE_V4L2
+#ifndef CONFIG_VIDEO_V4L2
 struct v4l2_jpegcompression {
 	int quality;
 	int APPn;
diff -urN linux-2.6.18-rc6/drivers/media/video/zoran_driver.c linux-2.6.18-rc7/drivers/media/video/zoran_driver.c
--- linux-2.6.18-rc6/drivers/media/video/zoran_driver.c	2006-09-13 03:15:59.734536560 +0000
+++ linux-2.6.18-rc7/drivers/media/video/zoran_driver.c	2006-09-13 03:16:04.919096290 +0000
@@ -86,7 +86,7 @@
 #include "zoran_device.h"
 #include "zoran_card.h"
 
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 	/* we declare some card type definitions here, they mean
 	 * the same as the v4l1 ZORAN_VID_TYPE above, except it's v4l2 */
 #define ZORAN_V4L2_VID_FLAGS ( \
@@ -103,7 +103,7 @@
 	{
 		.name = "15-bit RGB",
 		.palette = VIDEO_PALETTE_RGB555,
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 #ifdef __LITTLE_ENDIAN
 		.fourcc = V4L2_PIX_FMT_RGB555,
 #else
@@ -117,7 +117,7 @@
 	}, {
 		.name = "16-bit RGB",
 		.palette = VIDEO_PALETTE_RGB565,
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 #ifdef __LITTLE_ENDIAN
 		.fourcc = V4L2_PIX_FMT_RGB565,
 #else
@@ -131,7 +131,7 @@
 	}, {
 		.name = "24-bit RGB",
 		.palette = VIDEO_PALETTE_RGB24,
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 #ifdef __LITTLE_ENDIAN
 		.fourcc = V4L2_PIX_FMT_BGR24,
 #else
@@ -145,7 +145,7 @@
 	}, {
 		.name = "32-bit RGB",
 		.palette = VIDEO_PALETTE_RGB32,
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 #ifdef __LITTLE_ENDIAN
 		.fourcc = V4L2_PIX_FMT_BGR32,
 #else
@@ -159,7 +159,7 @@
 	}, {
 		.name = "4:2:2, packed, YUYV",
 		.palette = VIDEO_PALETTE_YUV422,
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 		.fourcc = V4L2_PIX_FMT_YUYV,
 		.colorspace = V4L2_COLORSPACE_SMPTE170M,
 #endif
@@ -169,7 +169,7 @@
 	}, {
 		.name = "Hardware-encoded Motion-JPEG",
 		.palette = -1,
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 		.fourcc = V4L2_PIX_FMT_MJPEG,
 		.colorspace = V4L2_COLORSPACE_SMPTE170M,
 #endif
@@ -210,7 +210,7 @@
 module_param(lock_norm, int, 0);
 MODULE_PARM_DESC(lock_norm, "Users can't change norm");
 
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 	/* small helper function for calculating buffersizes for v4l2
 	 * we calculate the nearest higher power-of-two, which
 	 * will be the recommended buffersize */
@@ -1761,7 +1761,7 @@
 	return wait_grab_pending(zr);
 }
 
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 	/* get the status of a buffer in the clients buffer queue */
 static int
 zoran_v4l2_buffer_status (struct file        *file,
@@ -2676,7 +2676,7 @@
 	}
 		break;
 
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 
 		/* The new video4linux2 capture interface - much nicer than video4linux1, since
 		 * it allows for integrating the JPEG capturing calls inside standard v4l2
@@ -4689,7 +4689,7 @@
 struct video_device zoran_template __devinitdata = {
 	.name = ZORAN_NAME,
 	.type = ZORAN_VID_TYPE,
-#ifdef HAVE_V4L2
+#ifdef CONFIG_VIDEO_V4L2
 	.type2 = ZORAN_V4L2_VID_FLAGS,
 #endif
 	.hardware = ZORAN_HARDWARE,
diff -urN linux-2.6.18-rc6/drivers/mmc/imxmmc.c linux-2.6.18-rc7/drivers/mmc/imxmmc.c
--- linux-2.6.18-rc6/drivers/mmc/imxmmc.c	2006-09-13 03:15:59.758539151 +0000
+++ linux-2.6.18-rc7/drivers/mmc/imxmmc.c	2006-09-13 03:16:04.939098450 +0000
@@ -91,6 +91,8 @@
 	int			dma_allocated;
 
 	unsigned char		actual_bus_width;
+
+	int			prev_cmd_code;
 };
 
 #define IMXMCI_PEND_IRQ_b	0
@@ -248,16 +250,14 @@
 	 * partial FIFO fills and reads. The length has to be rounded up to burst size multiple.
 	 * This is required for SCR read at least.
 	 */
-	if (datasz < 64) {
+	if (datasz < 512) {
 		host->dma_size = datasz;
 		if (data->flags & MMC_DATA_READ) {
 			host->dma_dir = DMA_FROM_DEVICE;
 
 			/* Hack to enable read SCR */
-			if(datasz < 16) {
-				MMC_NOB = 1;
-				MMC_BLK_LEN = 16;
-			}
+			MMC_NOB = 1;
+			MMC_BLK_LEN = 512;
 		} else {
 			host->dma_dir = DMA_TO_DEVICE;
 		}
@@ -409,6 +409,9 @@
 
 	spin_unlock_irqrestore(&host->lock, flags);
 
+	if(req && req->cmd)
+		host->prev_cmd_code = req->cmd->opcode;
+
 	host->req = NULL;
 	host->cmd = NULL;
 	host->data = NULL;
@@ -553,7 +556,6 @@
 {
 	int i;
 	int burst_len;
-	int flush_len;
 	int trans_done = 0;
 	unsigned int stat = *pstat;
 
@@ -566,44 +568,43 @@
 	dev_dbg(mmc_dev(host->mmc), "imxmci_cpu_driven_data running STATUS = 0x%x\n",
 		stat);
 
+	udelay(20);	/* required for clocks < 8MHz*/
+
 	if(host->dma_dir == DMA_FROM_DEVICE) {
 		imxmci_busy_wait_for_status(host, &stat,
 				STATUS_APPL_BUFF_FF | STATUS_DATA_TRANS_DONE,
-				20, "imxmci_cpu_driven_data read");
+				50, "imxmci_cpu_driven_data read");
 
 		while((stat & (STATUS_APPL_BUFF_FF |  STATUS_DATA_TRANS_DONE)) &&
-		      (host->data_cnt < host->dma_size)) {
-			if(burst_len >= host->dma_size - host->data_cnt) {
-				flush_len = burst_len;
-				burst_len = host->dma_size - host->data_cnt;
-				flush_len -= burst_len;
-				host->data_cnt = host->dma_size;
-				trans_done = 1;
-			} else {
-				flush_len = 0;
-				host->data_cnt += burst_len;
-			}
+		      (host->data_cnt < 512)) {
+
+			udelay(20);	/* required for clocks < 8MHz*/
 
 			for(i = burst_len; i>=2 ; i-=2) {
-				*(host->data_ptr++) = MMC_BUFFER_ACCESS;
-				udelay(20);	/* required for clocks < 8MHz*/
+				u16 data;
+				data = MMC_BUFFER_ACCESS;
+				udelay(10);	/* required for clocks < 8MHz*/
+				if(host->data_cnt+2 <= host->dma_size) {
+					*(host->data_ptr++) = data;
+				} else {
+					if(host->data_cnt < host->dma_size)
+						*(u8*)(host->data_ptr) = data;
+				}
+				host->data_cnt += 2;
 			}
 
-			if(i == 1)
-				*(u8*)(host->data_ptr) = MMC_BUFFER_ACCESS;
-
 			stat = MMC_STATUS;
 
-			/* Flush extra bytes from FIFO */
-			while(flush_len && !(stat & STATUS_DATA_TRANS_DONE)){
-				i = MMC_BUFFER_ACCESS;
-				stat = MMC_STATUS;
-				stat &= ~STATUS_CRC_READ_ERR; /* Stupid but required there */
-			}
-
-			dev_dbg(mmc_dev(host->mmc), "imxmci_cpu_driven_data read burst %d STATUS = 0x%x\n",
-				burst_len, stat);
+			dev_dbg(mmc_dev(host->mmc), "imxmci_cpu_driven_data read %d burst %d STATUS = 0x%x\n",
+				host->data_cnt, burst_len, stat);
 		}
+
+		if((stat & STATUS_DATA_TRANS_DONE) && (host->data_cnt >= 512))
+			trans_done = 1;
+
+		if(host->dma_size & 0x1ff)
+			stat &= ~STATUS_CRC_READ_ERR;
+
 	} else {
 		imxmci_busy_wait_for_status(host, &stat,
 				STATUS_APPL_BUFF_FE,
@@ -692,8 +693,8 @@
 		       what, stat, MMC_INT_MASK);
 		dev_err(mmc_dev(host->mmc), "CMD_DAT_CONT = 0x%04x, MMC_BLK_LEN = 0x%04x, MMC_NOB = 0x%04x, DMA_CCR = 0x%08x\n",
 		       MMC_CMD_DAT_CONT, MMC_BLK_LEN, MMC_NOB, CCR(host->dma));
-		dev_err(mmc_dev(host->mmc), "CMD%d, bus %d-bit, dma_size = 0x%x\n",
-		       host->cmd?host->cmd->opcode:0, 1<<host->actual_bus_width, host->dma_size);
+		dev_err(mmc_dev(host->mmc), "CMD%d, prevCMD%d, bus %d-bit, dma_size = 0x%x\n",
+		       host->cmd?host->cmd->opcode:0, host->prev_cmd_code, 1<<host->actual_bus_width, host->dma_size);
 	}
 
 	if(!host->present || timeout)
diff -urN linux-2.6.18-rc6/drivers/mmc/mmc.c linux-2.6.18-rc7/drivers/mmc/mmc.c
--- linux-2.6.18-rc6/drivers/mmc/mmc.c	2006-09-13 03:15:59.758539151 +0000
+++ linux-2.6.18-rc7/drivers/mmc/mmc.c	2006-09-13 03:16:04.939098450 +0000
@@ -247,6 +247,55 @@
 
 EXPORT_SYMBOL(mmc_wait_for_app_cmd);
 
+/**
+ *	mmc_set_data_timeout - set the timeout for a data command
+ *	@data: data phase for command
+ *	@card: the MMC card associated with the data transfer
+ *	@write: flag to differentiate reads from writes
+ */
+void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card,
+			  int write)
+{
+	unsigned int mult;
+
+	/*
+	 * SD cards use a 100 multiplier rather than 10
+	 */
+	mult = mmc_card_sd(card) ? 100 : 10;
+
+	/*
+	 * Scale up the multiplier (and therefore the timeout) by
+	 * the r2w factor for writes.
+	 */
+	if (write)
+		mult <<= card->csd.r2w_factor;
+
+	data->timeout_ns = card->csd.tacc_ns * mult;
+	data->timeout_clks = card->csd.tacc_clks * mult;
+
+	/*
+	 * SD cards also have an upper limit on the timeout.
+	 */
+	if (mmc_card_sd(card)) {
+		unsigned int timeout_us, limit_us;
+
+		timeout_us = data->timeout_ns / 1000;
+		timeout_us += data->timeout_clks * 1000 /
+			(card->host->ios.clock / 1000);
+
+		if (write)
+			limit_us = 250000;
+		else
+			limit_us = 100000;
+
+		if (timeout_us > limit_us) {
+			data->timeout_ns = limit_us * 1000;
+			data->timeout_clks = 0;
+		}
+	}
+}
+EXPORT_SYMBOL(mmc_set_data_timeout);
+
 static int mmc_select_card(struct mmc_host *host, struct mmc_card *card);
 
 /**
@@ -908,11 +957,9 @@
 {
 	int err;
 	struct mmc_card *card;
-
 	struct mmc_request mrq;
 	struct mmc_command cmd;
 	struct mmc_data data;
-
 	struct scatterlist sg;
 
 	list_for_each_entry(card, &host->cards, node) {
@@ -947,8 +994,8 @@
 
 		memset(&data, 0, sizeof(struct mmc_data));
 
-		data.timeout_ns = card->csd.tacc_ns * 10;
-		data.timeout_clks = card->csd.tacc_clks * 10;
+		mmc_set_data_timeout(&data, card, 0);
+
 		data.blksz_bits = 3;
 		data.blksz = 1 << 3;
 		data.blocks = 1;
diff -urN linux-2.6.18-rc6/drivers/mmc/mmc_block.c linux-2.6.18-rc7/drivers/mmc/mmc_block.c
--- linux-2.6.18-rc6/drivers/mmc/mmc_block.c	2006-09-13 03:15:59.758539151 +0000
+++ linux-2.6.18-rc7/drivers/mmc/mmc_block.c	2006-09-13 03:16:04.939098450 +0000
@@ -30,6 +30,7 @@
 #include <linux/mutex.h>
 
 #include <linux/mmc/card.h>
+#include <linux/mmc/host.h>
 #include <linux/mmc/protocol.h>
 
 #include <asm/system.h>
@@ -171,8 +172,6 @@
 
 		brq.cmd.arg = req->sector << 9;
 		brq.cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
-		brq.data.timeout_ns = card->csd.tacc_ns * 10;
-		brq.data.timeout_clks = card->csd.tacc_clks * 10;
 		brq.data.blksz_bits = md->block_bits;
 		brq.data.blksz = 1 << md->block_bits;
 		brq.data.blocks = req->nr_sectors >> (md->block_bits - 9);
@@ -180,6 +179,8 @@
 		brq.stop.arg = 0;
 		brq.stop.flags = MMC_RSP_R1B | MMC_CMD_AC;
 
+		mmc_set_data_timeout(&brq.data, card, rq_data_dir(req) != READ);
+
 		if (rq_data_dir(req) == READ) {
 			brq.cmd.opcode = brq.data.blocks > 1 ? MMC_READ_MULTIPLE_BLOCK : MMC_READ_SINGLE_BLOCK;
 			brq.data.flags |= MMC_DATA_READ;
@@ -187,12 +188,6 @@
 			brq.cmd.opcode = MMC_WRITE_BLOCK;
 			brq.data.flags |= MMC_DATA_WRITE;
 			brq.data.blocks = 1;
-
-			/*
-			 * Scale up the timeout by the r2w factor
-			 */
-			brq.data.timeout_ns <<= card->csd.r2w_factor;
-			brq.data.timeout_clks <<= card->csd.r2w_factor;
 		}
 
 		if (brq.data.blocks > 1) {
@@ -324,52 +319,11 @@
 	md->read_only = mmc_blk_readonly(card);
 
 	/*
-	 * Figure out a workable block size.  MMC cards have:
-	 *  - two block sizes, one for read and one for write.
-	 *  - may support partial reads and/or writes
-	 *    (allows block sizes smaller than specified)
-	 */
-	md->block_bits = card->csd.read_blkbits;
-	if (card->csd.write_blkbits != card->csd.read_blkbits) {
-		if (card->csd.write_blkbits < card->csd.read_blkbits &&
-		    card->csd.read_partial) {
-			/*
-			 * write block size is smaller than read block
-			 * size, but we support partial reads, so choose
-			 * the smaller write block size.
-			 */
-			md->block_bits = card->csd.write_blkbits;
-		} else if (card->csd.write_blkbits > card->csd.read_blkbits &&
-			   card->csd.write_partial) {
-			/*
-			 * read block size is smaller than write block
-			 * size, but we support partial writes.  Use read
-			 * block size.
-			 */
-		} else {
-			/*
-			 * We don't support this configuration for writes.
-			 */
-			printk(KERN_ERR "%s: unable to select block size for "
-				"writing (rb%u wb%u rp%u wp%u)\n",
-				mmc_card_id(card),
-				1 << card->csd.read_blkbits,
-				1 << card->csd.write_blkbits,
-				card->csd.read_partial,
-				card->csd.write_partial);
-			md->read_only = 1;
-		}
-	}
-
-	/*
-	 * Refuse to allow block sizes smaller than 512 bytes.
+	 * Both SD and MMC specifications state (although a bit
+	 * unclearly in the MMC case) that a block size of 512
+	 * bytes must always be supported by the card.
 	 */
-	if (md->block_bits < 9) {
-		printk(KERN_ERR "%s: unable to support block size %u\n",
-			mmc_card_id(card), 1 << md->block_bits);
-		ret = -EINVAL;
-		goto err_kfree;
-	}
+	md->block_bits = 9;
 
 	md->disk = alloc_disk(1 << MMC_SHIFT);
 	if (md->disk == NULL) {
diff -urN linux-2.6.18-rc6/drivers/net/Kconfig linux-2.6.18-rc7/drivers/net/Kconfig
--- linux-2.6.18-rc6/drivers/net/Kconfig	2006-09-13 03:15:59.810544765 +0000
+++ linux-2.6.18-rc7/drivers/net/Kconfig	2006-09-13 03:16:04.995104496 +0000
@@ -2393,7 +2393,7 @@
 	  you will need a newer firmware image.
 	  You may get this image or more information, at:
 
-	  <http://www.myri.com/Myri-10G/>
+	  <http://www.myri.com/scs/download-Myri10GE.html>
 
 	  To compile this driver as a module, choose M here and read
 	  <file:Documentation/networking/net-modules.txt>.  The module
diff -urN linux-2.6.18-rc6/drivers/net/dm9000.c linux-2.6.18-rc7/drivers/net/dm9000.c
--- linux-2.6.18-rc6/drivers/net/dm9000.c	2006-09-13 03:15:59.854549516 +0000
+++ linux-2.6.18-rc7/drivers/net/dm9000.c	2006-09-13 03:16:05.035108815 +0000
@@ -377,8 +377,8 @@
 		kfree(db->data_req);
 	}
 
-	if (db->addr_res != NULL) {
-		release_resource(db->addr_res);
+	if (db->addr_req != NULL) {
+		release_resource(db->addr_req);
 		kfree(db->addr_req);
 	}
 }
diff -urN linux-2.6.18-rc6/drivers/scsi/ata_piix.c linux-2.6.18-rc7/drivers/scsi/ata_piix.c
--- linux-2.6.18-rc6/drivers/scsi/ata_piix.c	2006-09-13 03:16:00.218588818 +0000
+++ linux-2.6.18-rc7/drivers/scsi/ata_piix.c	2006-09-13 03:16:05.395147685 +0000
@@ -123,7 +123,8 @@
 	ich6_sata		= 4,
 	ich6_sata_ahci		= 5,
 	ich6m_sata_ahci		= 6,
-	ich8_sata_ahci		= 7,
+	ich7m_sata_ahci		= 7,
+	ich8_sata_ahci		= 8,
 
 	/* constants for mapping table */
 	P0			= 0,  /* port 0 */
@@ -188,7 +189,7 @@
 	/* 82801GB/GR/GH (ICH7, identical to ICH6) */
 	{ 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },
 	/* 2801GBM/GHM (ICH7M, identical to ICH6M) */
-	{ 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6m_sata_ahci },
+	{ 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich7m_sata_ahci },
 	/* Enterprise Southbridge 2 (where's the datasheet?) */
 	{ 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci },
 	/* SATA Controller 1 IDE (ICH8, no datasheet yet) */
@@ -336,6 +337,24 @@
 	},
 };
 
+static const struct piix_map_db ich7m_map_db = {
+	.mask = 0x3,
+	.port_enable = 0x5,
+	.present_shift = 4,
+
+	/* Map 01b isn't specified in the doc but some notebooks use
+	 * it anyway.  ATM, the only case spotted carries subsystem ID
+	 * 1025:0107.  This is the only difference from ich6m.
+	 */
+	.map = {
+		/* PM   PS   SM   SS       MAP */
+		{  P0,  P2,  RV,  RV }, /* 00b */
+		{ IDE, IDE,  P1,  P3 }, /* 01b */
+		{  P0,  P2, IDE, IDE }, /* 10b */
+		{  RV,  RV,  RV,  RV },
+	},
+};
+
 static const struct piix_map_db ich8_map_db = {
 	.mask = 0x3,
 	.port_enable = 0x3,
@@ -355,6 +374,7 @@
 	[ich6_sata]		= &ich6_map_db,
 	[ich6_sata_ahci]	= &ich6_map_db,
 	[ich6m_sata_ahci]	= &ich6m_map_db,
+	[ich7m_sata_ahci]	= &ich7m_map_db,
 	[ich8_sata_ahci]	= &ich8_map_db,
 };
 
@@ -444,6 +464,18 @@
 		.port_ops	= &piix_sata_ops,
 	},
 
+	/* ich7m_sata_ahci */
+	{
+		.sht		= &piix_sht,
+		.host_flags	= ATA_FLAG_SATA |
+				  PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR |
+				  PIIX_FLAG_AHCI,
+		.pio_mask	= 0x1f,	/* pio0-4 */
+		.mwdma_mask	= 0x07, /* mwdma0-2 */
+		.udma_mask	= 0x7f,	/* udma0-6 */
+		.port_ops	= &piix_sata_ops,
+	},
+
 	/* ich8_sata_ahci */
 	{
 		.sht		= &piix_sht,
diff -urN linux-2.6.18-rc6/drivers/scsi/sata_mv.c linux-2.6.18-rc7/drivers/scsi/sata_mv.c
--- linux-2.6.18-rc6/drivers/scsi/sata_mv.c	2006-09-13 03:16:00.382606526 +0000
+++ linux-2.6.18-rc7/drivers/scsi/sata_mv.c	2006-09-13 03:16:05.563165825 +0000
@@ -1961,8 +1961,7 @@
 	timeout = jiffies + msecs_to_jiffies(200);
 	do {
 		sata_scr_read(ap, SCR_STATUS, &sstatus);
-		sstatus &= 0x3;
-		if ((sstatus == 3) || (sstatus == 0))
+		if (((sstatus & 0x3) == 3) || ((sstatus & 0x3) == 0))
 			break;
 
 		__msleep(1, can_sleep);
diff -urN linux-2.6.18-rc6/drivers/scsi/sata_via.c linux-2.6.18-rc7/drivers/scsi/sata_via.c
--- linux-2.6.18-rc6/drivers/scsi/sata_via.c	2006-09-13 03:16:00.386606958 +0000
+++ linux-2.6.18-rc7/drivers/scsi/sata_via.c	2006-09-13 03:16:05.567166257 +0000
@@ -77,6 +77,7 @@
 static void vt6420_error_handler(struct ata_port *ap);
 
 static const struct pci_device_id svia_pci_tbl[] = {
+	{ 0x1106, 0x0591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, vt6420 },
 	{ 0x1106, 0x3149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, vt6420 },
 	{ 0x1106, 0x3249, PCI_ANY_ID, PCI_ANY_ID, 0, 0, vt6421 },
 
diff -urN linux-2.6.18-rc6/drivers/serial/sh-sci.c linux-2.6.18-rc7/drivers/serial/sh-sci.c
--- linux-2.6.18-rc6/drivers/serial/sh-sci.c	2006-09-13 03:16:00.430611708 +0000
+++ linux-2.6.18-rc7/drivers/serial/sh-sci.c	2006-09-13 03:16:05.611171008 +0000
@@ -1579,7 +1579,7 @@
 	h8300_sci_enable(port, sci_enable);
 #endif
 #elif defined(CONFIG_SUPERH64)
-	port->uartclk = current_cpu_info.module_clock * 16;
+	port->uartclk = current_cpu_data.module_clock * 16;
 #else
 	{
 		struct clk *clk = clk_get("module_clk");
@@ -1720,7 +1720,7 @@
 #if defined(__H8300H__) || defined(__H8300S__)
 			sciport->port.uartclk = CONFIG_CPU_CLOCK;
 #elif defined(CONFIG_SUPERH64)
-			sciport->port.uartclk = current_cpu_info.module_clock * 16;
+			sciport->port.uartclk = current_cpu_data.module_clock * 16;
 #else
 			struct clk *clk = clk_get("module_clk");
 			sciport->port.uartclk = clk_get_rate(clk) * 16;
diff -urN linux-2.6.18-rc6/drivers/usb/input/hid-core.c linux-2.6.18-rc7/drivers/usb/input/hid-core.c
--- linux-2.6.18-rc6/drivers/usb/input/hid-core.c	2006-09-13 03:16:00.478616891 +0000
+++ linux-2.6.18-rc7/drivers/usb/input/hid-core.c	2006-09-13 03:16:05.659176190 +0000
@@ -1444,7 +1444,7 @@
 #define USB_DEVICE_ID_GTCO_402		0x0402
 #define USB_DEVICE_ID_GTCO_403		0x0403
 #define USB_DEVICE_ID_GTCO_404		0x0404
-#define USB_DEVICE_ID_GTCO_404		0x0405
+#define USB_DEVICE_ID_GTCO_405		0x0405
 #define USB_DEVICE_ID_GTCO_500		0x0500
 #define USB_DEVICE_ID_GTCO_501		0x0501
 #define USB_DEVICE_ID_GTCO_502		0x0502
@@ -1657,7 +1657,7 @@
 	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_402, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_403, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404, HID_QUIRK_IGNORE },
-	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404, HID_QUIRK_IGNORE },
+	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_405, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_500, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_501, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_502, HID_QUIRK_IGNORE },
diff -urN linux-2.6.18-rc6/drivers/usb/input/usbtouchscreen.c linux-2.6.18-rc7/drivers/usb/input/usbtouchscreen.c
--- linux-2.6.18-rc6/drivers/usb/input/usbtouchscreen.c	2006-09-13 03:16:00.482617323 +0000
+++ linux-2.6.18-rc7/drivers/usb/input/usbtouchscreen.c	2006-09-13 03:16:05.663176622 +0000
@@ -286,7 +286,7 @@
 static int itm_read_data(unsigned char *pkt, int *x, int *y, int *touch, int *press)
 {
 	*x = ((pkt[0] & 0x1F) << 7) | (pkt[3] & 0x7F);
-	*x = ((pkt[1] & 0x1F) << 7) | (pkt[4] & 0x7F);
+	*y = ((pkt[1] & 0x1F) << 7) | (pkt[4] & 0x7F);
 	*press = ((pkt[2] & 0x1F) << 7) | (pkt[5] & 0x7F);
 	*touch = ~pkt[7] & 0x20;
 
diff -urN linux-2.6.18-rc6/drivers/usb/input/yealink.c linux-2.6.18-rc7/drivers/usb/input/yealink.c
--- linux-2.6.18-rc6/drivers/usb/input/yealink.c	2006-09-13 03:16:00.482617323 +0000
+++ linux-2.6.18-rc7/drivers/usb/input/yealink.c	2006-09-13 03:16:05.663176622 +0000
@@ -810,12 +810,9 @@
 	if (yld == NULL)
 		return err;
 
-        if (yld->urb_irq) {
-		usb_kill_urb(yld->urb_irq);
-		usb_free_urb(yld->urb_irq);
-	}
-        if (yld->urb_ctl)
-		usb_free_urb(yld->urb_ctl);
+	usb_kill_urb(yld->urb_irq);	/* parameter validation in core/urb */
+	usb_kill_urb(yld->urb_ctl);	/* parameter validation in core/urb */
+
         if (yld->idev) {
 		if (err)
 			input_free_device(yld->idev);
@@ -831,6 +828,9 @@
 	if (yld->irq_data)
 		usb_buffer_free(yld->udev, USB_PKT_LEN,
 				yld->irq_data, yld->irq_dma);
+
+	usb_free_urb(yld->urb_irq);	/* parameter validation in core/urb */
+	usb_free_urb(yld->urb_ctl);	/* parameter validation in core/urb */
 	kfree(yld);
 	return err;
 }
diff -urN linux-2.6.18-rc6/drivers/usb/misc/sisusbvga/sisusb.c linux-2.6.18-rc7/drivers/usb/misc/sisusbvga/sisusb.c
--- linux-2.6.18-rc6/drivers/usb/misc/sisusbvga/sisusb.c	2006-09-13 03:16:00.486617755 +0000
+++ linux-2.6.18-rc7/drivers/usb/misc/sisusbvga/sisusb.c	2006-09-13 03:16:05.667177054 +0000
@@ -3435,6 +3435,8 @@
 
 static struct usb_device_id sisusb_table [] = {
 	{ USB_DEVICE(0x0711, 0x0900) },
+	{ USB_DEVICE(0x0711, 0x0901) },
+	{ USB_DEVICE(0x0711, 0x0902) },
 	{ USB_DEVICE(0x182d, 0x021c) },
 	{ USB_DEVICE(0x182d, 0x0269) },
 	{ }
diff -urN linux-2.6.18-rc6/drivers/usb/serial/ftdi_sio.c linux-2.6.18-rc7/drivers/usb/serial/ftdi_sio.c
--- linux-2.6.18-rc6/drivers/usb/serial/ftdi_sio.c	2006-09-13 03:16:00.502619482 +0000
+++ linux-2.6.18-rc7/drivers/usb/serial/ftdi_sio.c	2006-09-13 03:16:05.683178782 +0000
@@ -506,6 +506,7 @@
 	{ USB_DEVICE(FTDI_VID, FTDI_YEI_SERVOCENTER31_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_THORLABS_PID) },
 	{ USB_DEVICE(TESTO_VID, TESTO_USB_INTERFACE_PID) },
+	{ USB_DEVICE(FTDI_VID, FTDI_GAMMA_SCOUT_PID) },
 	{ },					/* Optional parameter entry */
 	{ }					/* Terminating entry */
 };
diff -urN linux-2.6.18-rc6/drivers/usb/serial/ftdi_sio.h linux-2.6.18-rc7/drivers/usb/serial/ftdi_sio.h
--- linux-2.6.18-rc6/drivers/usb/serial/ftdi_sio.h	2006-09-13 03:16:00.506619914 +0000
+++ linux-2.6.18-rc7/drivers/usb/serial/ftdi_sio.h	2006-09-13 03:16:05.683178782 +0000
@@ -467,6 +467,11 @@
 #define TESTO_VID			0x128D
 #define TESTO_USB_INTERFACE_PID		0x0001
 
+/*
+ * Gamma Scout (http://gamma-scout.com/). Submitted by rsc@runtux.com.
+ */
+#define FTDI_GAMMA_SCOUT_PID		0xD678	/* Gamma Scout online */
+
 /* Commands */
 #define FTDI_SIO_RESET 		0 /* Reset the port */
 #define FTDI_SIO_MODEM_CTRL 	1 /* Set the modem control register */
diff -urN linux-2.6.18-rc6/drivers/usb/serial/usb-serial.c linux-2.6.18-rc7/drivers/usb/serial/usb-serial.c
--- linux-2.6.18-rc6/drivers/usb/serial/usb-serial.c	2006-09-13 03:16:00.514620778 +0000
+++ linux-2.6.18-rc7/drivers/usb/serial/usb-serial.c	2006-09-13 03:16:05.695180077 +0000
@@ -464,8 +464,10 @@
 		length += sprintf (page+length, " path:%s", tmp);
 			
 		length += sprintf (page+length, "\n");
-		if ((length + begin) > (off + count))
+		if ((length + begin) > (off + count)) {
+			usb_serial_put(serial);
 			goto done;
+		}
 		if ((length + begin) < off) {
 			begin += length;
 			length = 0;
diff -urN linux-2.6.18-rc6/fs/cifs/readdir.c linux-2.6.18-rc7/fs/cifs/readdir.c
--- linux-2.6.18-rc6/fs/cifs/readdir.c	2006-09-13 03:16:00.626632871 +0000
+++ linux-2.6.18-rc7/fs/cifs/readdir.c	2006-09-13 03:16:05.807192170 +0000
@@ -82,7 +82,6 @@
 			if(*ptmp_inode == NULL)
 				return rc;
 			rc = 1;
-			d_instantiate(tmp_dentry, *ptmp_inode);
 		}
 	} else {
 		tmp_dentry = d_alloc(file->f_dentry, qstring);
@@ -99,9 +98,7 @@
 			tmp_dentry->d_op = &cifs_dentry_ops;
 		if(*ptmp_inode == NULL)
 			return rc;
-		rc = 1;
-		d_instantiate(tmp_dentry, *ptmp_inode);
-		d_rehash(tmp_dentry);
+		rc = 2;
 	}
 
 	tmp_dentry->d_time = jiffies;
@@ -870,6 +867,12 @@
 				pfindEntry, &obj_type, rc);
 	else
 		fill_in_inode(tmp_inode, 1 /* NT */, pfindEntry, &obj_type, rc);
+
+	if(rc) /* new inode - needs to be tied to dentry */ {
+		d_instantiate(tmp_dentry, tmp_inode);
+		if(rc == 2)
+			d_rehash(tmp_dentry);
+	}
 	
 	
 	rc = filldir(direntry,qstring.name,qstring.len,file->f_pos,
diff -urN linux-2.6.18-rc6/fs/ext3/inode.c linux-2.6.18-rc7/fs/ext3/inode.c
--- linux-2.6.18-rc6/fs/ext3/inode.c	2006-09-13 03:16:00.646635030 +0000
+++ linux-2.6.18-rc7/fs/ext3/inode.c	2006-09-13 03:16:05.827194330 +0000
@@ -1009,11 +1009,14 @@
 	buffer_trace_init(&dummy.b_history);
 	err = ext3_get_blocks_handle(handle, inode, block, 1,
 					&dummy, create, 1);
-	if (err == 1) {
+	/*
+	 * ext3_get_blocks_handle() returns number of blocks
+	 * mapped. 0 in case of a HOLE.
+	 */
+	if (err > 0) {
+		if (err > 1)
+			WARN_ON(1);
 		err = 0;
-	} else if (err >= 0) {
-		WARN_ON(1);
-		err = -EIO;
 	}
 	*errp = err;
 	if (!err && buffer_mapped(&dummy)) {
diff -urN linux-2.6.18-rc6/fs/nfs/direct.c linux-2.6.18-rc7/fs/nfs/direct.c
--- linux-2.6.18-rc6/fs/nfs/direct.c	2006-09-13 03:16:00.702641077 +0000
+++ linux-2.6.18-rc7/fs/nfs/direct.c	2006-09-13 03:16:05.879199944 +0000
@@ -100,25 +100,6 @@
 	return atomic_dec_and_test(&dreq->io_count);
 }
 
-/*
- * "size" is never larger than rsize or wsize.
- */
-static inline int nfs_direct_count_pages(unsigned long user_addr, size_t size)
-{
-	int page_count;
-
-	page_count = (user_addr + size + PAGE_SIZE - 1) >> PAGE_SHIFT;
-	page_count -= user_addr >> PAGE_SHIFT;
-	BUG_ON(page_count < 0);
-
-	return page_count;
-}
-
-static inline unsigned int nfs_max_pages(unsigned int size)
-{
-	return (size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
-}
-
 /**
  * nfs_direct_IO - NFS address space operation for direct I/O
  * @rw: direction (read or write)
@@ -276,28 +257,24 @@
 	struct nfs_open_context *ctx = dreq->ctx;
 	struct inode *inode = ctx->dentry->d_inode;
 	size_t rsize = NFS_SERVER(inode)->rsize;
-	unsigned int rpages = nfs_max_pages(rsize);
 	unsigned int pgbase;
 	int result;
 	ssize_t started = 0;
 
 	get_dreq(dreq);
 
-	pgbase = user_addr & ~PAGE_MASK;
 	do {
 		struct nfs_read_data *data;
 		size_t bytes;
 
+		pgbase = user_addr & ~PAGE_MASK;
+		bytes = min(rsize,count);
+
 		result = -ENOMEM;
-		data = nfs_readdata_alloc(rpages);
+		data = nfs_readdata_alloc(pgbase + bytes);
 		if (unlikely(!data))
 			break;
 
-		bytes = rsize;
-		if (count < rsize)
-			bytes = count;
-
-		data->npages = nfs_direct_count_pages(user_addr, bytes);
 		down_read(&current->mm->mmap_sem);
 		result = get_user_pages(current, current->mm, user_addr,
 					data->npages, 1, 0, data->pagevec, NULL);
@@ -344,8 +321,10 @@
 		started += bytes;
 		user_addr += bytes;
 		pos += bytes;
+		/* FIXME: Remove this unnecessary math from final patch */
 		pgbase += bytes;
 		pgbase &= ~PAGE_MASK;
+		BUG_ON(pgbase != (user_addr & ~PAGE_MASK));
 
 		count -= bytes;
 	} while (count != 0);
@@ -524,7 +503,7 @@
 
 static void nfs_alloc_commit_data(struct nfs_direct_req *dreq)
 {
-	dreq->commit_data = nfs_commit_alloc(0);
+	dreq->commit_data = nfs_commit_alloc();
 	if (dreq->commit_data != NULL)
 		dreq->commit_data->req = (struct nfs_page *) dreq;
 }
@@ -605,28 +584,24 @@
 	struct nfs_open_context *ctx = dreq->ctx;
 	struct inode *inode = ctx->dentry->d_inode;
 	size_t wsize = NFS_SERVER(inode)->wsize;
-	unsigned int wpages = nfs_max_pages(wsize);
 	unsigned int pgbase;
 	int result;
 	ssize_t started = 0;
 
 	get_dreq(dreq);
 
-	pgbase = user_addr & ~PAGE_MASK;
 	do {
 		struct nfs_write_data *data;
 		size_t bytes;
 
+		pgbase = user_addr & ~PAGE_MASK;
+		bytes = min(wsize,count);
+
 		result = -ENOMEM;
-		data = nfs_writedata_alloc(wpages);
+		data = nfs_writedata_alloc(pgbase + bytes);
 		if (unlikely(!data))
 			break;
 
-		bytes = wsize;
-		if (count < wsize)
-			bytes = count;
-
-		data->npages = nfs_direct_count_pages(user_addr, bytes);
 		down_read(&current->mm->mmap_sem);
 		result = get_user_pages(current, current->mm, user_addr,
 					data->npages, 0, 0, data->pagevec, NULL);
@@ -676,8 +651,11 @@
 		started += bytes;
 		user_addr += bytes;
 		pos += bytes;
+
+		/* FIXME: Remove this useless math from the final patch */
 		pgbase += bytes;
 		pgbase &= ~PAGE_MASK;
+		BUG_ON(pgbase != (user_addr & ~PAGE_MASK));
 
 		count -= bytes;
 	} while (count != 0);
diff -urN linux-2.6.18-rc6/fs/nfs/read.c linux-2.6.18-rc7/fs/nfs/read.c
--- linux-2.6.18-rc6/fs/nfs/read.c	2006-09-13 03:16:00.710641941 +0000
+++ linux-2.6.18-rc7/fs/nfs/read.c	2006-09-13 03:16:05.891201240 +0000
@@ -43,13 +43,15 @@
 
 #define MIN_POOL_READ	(32)
 
-struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount)
+struct nfs_read_data *nfs_readdata_alloc(size_t len)
 {
+	unsigned int pagecount = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
 	struct nfs_read_data *p = mempool_alloc(nfs_rdata_mempool, SLAB_NOFS);
 
 	if (p) {
 		memset(p, 0, sizeof(*p));
 		INIT_LIST_HEAD(&p->pages);
+		p->npages = pagecount;
 		if (pagecount <= ARRAY_SIZE(p->page_array))
 			p->pagevec = p->page_array;
 		else {
@@ -140,7 +142,7 @@
 	int		result;
 	struct nfs_read_data *rdata;
 
-	rdata = nfs_readdata_alloc(1);
+	rdata = nfs_readdata_alloc(count);
 	if (!rdata)
 		return -ENOMEM;
 
@@ -336,25 +338,25 @@
 	struct nfs_page *req = nfs_list_entry(head->next);
 	struct page *page = req->wb_page;
 	struct nfs_read_data *data;
-	unsigned int rsize = NFS_SERVER(inode)->rsize;
-	unsigned int nbytes, offset;
+	size_t rsize = NFS_SERVER(inode)->rsize, nbytes;
+	unsigned int offset;
 	int requests = 0;
 	LIST_HEAD(list);
 
 	nfs_list_remove_request(req);
 
 	nbytes = req->wb_bytes;
-	for(;;) {
-		data = nfs_readdata_alloc(1);
+	do {
+		size_t len = min(nbytes,rsize);
+
+		data = nfs_readdata_alloc(len);
 		if (!data)
 			goto out_bad;
 		INIT_LIST_HEAD(&data->pages);
 		list_add(&data->pages, &list);
 		requests++;
-		if (nbytes <= rsize)
-			break;
-		nbytes -= rsize;
-	}
+		nbytes -= len;
+	} while(nbytes != 0);
 	atomic_set(&req->wb_complete, requests);
 
 	ClearPageError(page);
@@ -402,7 +404,7 @@
 	if (NFS_SERVER(inode)->rsize < PAGE_CACHE_SIZE)
 		return nfs_pagein_multi(head, inode);
 
-	data = nfs_readdata_alloc(NFS_SERVER(inode)->rpages);
+	data = nfs_readdata_alloc(NFS_SERVER(inode)->rsize);
 	if (!data)
 		goto out_bad;
 
diff -urN linux-2.6.18-rc6/fs/nfs/write.c linux-2.6.18-rc7/fs/nfs/write.c
--- linux-2.6.18-rc6/fs/nfs/write.c	2006-09-13 03:16:00.710641941 +0000
+++ linux-2.6.18-rc7/fs/nfs/write.c	2006-09-13 03:16:05.891201240 +0000
@@ -90,22 +90,13 @@
 
 static DECLARE_WAIT_QUEUE_HEAD(nfs_write_congestion);
 
-struct nfs_write_data *nfs_commit_alloc(unsigned int pagecount)
+struct nfs_write_data *nfs_commit_alloc(void)
 {
 	struct nfs_write_data *p = mempool_alloc(nfs_commit_mempool, SLAB_NOFS);
 
 	if (p) {
 		memset(p, 0, sizeof(*p));
 		INIT_LIST_HEAD(&p->pages);
-		if (pagecount <= ARRAY_SIZE(p->page_array))
-			p->pagevec = p->page_array;
-		else {
-			p->pagevec = kcalloc(pagecount, sizeof(struct page *), GFP_NOFS);
-			if (!p->pagevec) {
-				mempool_free(p, nfs_commit_mempool);
-				p = NULL;
-			}
-		}
 	}
 	return p;
 }
@@ -117,13 +108,15 @@
 	mempool_free(p, nfs_commit_mempool);
 }
 
-struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount)
+struct nfs_write_data *nfs_writedata_alloc(size_t len)
 {
+	unsigned int pagecount = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
 	struct nfs_write_data *p = mempool_alloc(nfs_wdata_mempool, SLAB_NOFS);
 
 	if (p) {
 		memset(p, 0, sizeof(*p));
 		INIT_LIST_HEAD(&p->pages);
+		p->npages = pagecount;
 		if (pagecount <= ARRAY_SIZE(p->page_array))
 			p->pagevec = p->page_array;
 		else {
@@ -208,7 +201,7 @@
 	int		result, written = 0;
 	struct nfs_write_data *wdata;
 
-	wdata = nfs_writedata_alloc(1);
+	wdata = nfs_writedata_alloc(wsize);
 	if (!wdata)
 		return -ENOMEM;
 
@@ -999,24 +992,24 @@
 	struct nfs_page *req = nfs_list_entry(head->next);
 	struct page *page = req->wb_page;
 	struct nfs_write_data *data;
-	unsigned int wsize = NFS_SERVER(inode)->wsize;
-	unsigned int nbytes, offset;
+	size_t wsize = NFS_SERVER(inode)->wsize, nbytes;
+	unsigned int offset;
 	int requests = 0;
 	LIST_HEAD(list);
 
 	nfs_list_remove_request(req);
 
 	nbytes = req->wb_bytes;
-	for (;;) {
-		data = nfs_writedata_alloc(1);
+	do {
+		size_t len = min(nbytes, wsize);
+
+		data = nfs_writedata_alloc(len);
 		if (!data)
 			goto out_bad;
 		list_add(&data->pages, &list);
 		requests++;
-		if (nbytes <= wsize)
-			break;
-		nbytes -= wsize;
-	}
+		nbytes -= len;
+	} while (nbytes != 0);
 	atomic_set(&req->wb_complete, requests);
 
 	ClearPageError(page);
@@ -1070,7 +1063,7 @@
 	struct nfs_write_data	*data;
 	unsigned int		count;
 
-	data = nfs_writedata_alloc(NFS_SERVER(inode)->wpages);
+	data = nfs_writedata_alloc(NFS_SERVER(inode)->wsize);
 	if (!data)
 		goto out_bad;
 
@@ -1378,7 +1371,7 @@
 	struct nfs_write_data	*data;
 	struct nfs_page         *req;
 
-	data = nfs_commit_alloc(NFS_SERVER(inode)->wpages);
+	data = nfs_commit_alloc();
 
 	if (!data)
 		goto out_bad;
diff -urN linux-2.6.18-rc6/fs/super.c linux-2.6.18-rc7/fs/super.c
--- linux-2.6.18-rc6/fs/super.c	2006-09-13 03:16:00.762647555 +0000
+++ linux-2.6.18-rc7/fs/super.c	2006-09-13 03:16:05.943206855 +0000
@@ -49,6 +49,7 @@
 
 /**
  *	alloc_super	-	create new superblock
+ *	@type:	filesystem type superblock should belong to
  *
  *	Allocates and initializes a new &struct super_block.  alloc_super()
  *	returns a pointer new superblock or %NULL if allocation had failed.
diff -urN linux-2.6.18-rc6/fs/xfs/linux-2.6/xfs_aops.c linux-2.6.18-rc7/fs/xfs/linux-2.6/xfs_aops.c
--- linux-2.6.18-rc6/fs/xfs/linux-2.6/xfs_aops.c	2006-09-13 03:16:00.774648851 +0000
+++ linux-2.6.18-rc7/fs/xfs/linux-2.6/xfs_aops.c	2006-09-13 03:16:05.955208150 +0000
@@ -1390,11 +1390,19 @@
 
 	iocb->private = xfs_alloc_ioend(inode, IOMAP_UNWRITTEN);
 
-	ret = blockdev_direct_IO_own_locking(rw, iocb, inode,
-		iomap.iomap_target->bt_bdev,
-		iov, offset, nr_segs,
-		xfs_get_blocks_direct,
-		xfs_end_io_direct);
+	if (rw == WRITE) {
+		ret = blockdev_direct_IO_own_locking(rw, iocb, inode,
+			iomap.iomap_target->bt_bdev,
+			iov, offset, nr_segs,
+			xfs_get_blocks_direct,
+			xfs_end_io_direct);
+	} else {
+		ret = blockdev_direct_IO_no_locking(rw, iocb, inode,
+			iomap.iomap_target->bt_bdev,
+			iov, offset, nr_segs,
+			xfs_get_blocks_direct,
+			xfs_end_io_direct);
+	}
 
 	if (unlikely(ret <= 0 && iocb->private))
 		xfs_destroy_ioend(iocb->private);
diff -urN linux-2.6.18-rc6/fs/xfs/linux-2.6/xfs_lrw.c linux-2.6.18-rc7/fs/xfs/linux-2.6/xfs_lrw.c
--- linux-2.6.18-rc6/fs/xfs/linux-2.6/xfs_lrw.c	2006-09-13 03:16:00.778649283 +0000
+++ linux-2.6.18-rc7/fs/xfs/linux-2.6/xfs_lrw.c	2006-09-13 03:16:05.959208582 +0000
@@ -264,7 +264,9 @@
 					dmflags, &locktype);
 		if (ret) {
 			xfs_iunlock(ip, XFS_IOLOCK_SHARED);
-			goto unlock_mutex;
+			if (unlikely(ioflags & IO_ISDIRECT))
+				mutex_unlock(&inode->i_mutex);
+			return ret;
 		}
 	}
 
@@ -272,6 +274,9 @@
 		bhv_vop_flushinval_pages(vp, ctooff(offtoct(*offset)),
 						-1, FI_REMAPF_LOCKED);
 
+	if (unlikely(ioflags & IO_ISDIRECT))
+		mutex_unlock(&inode->i_mutex);
+
 	xfs_rw_enter_trace(XFS_READ_ENTER, &ip->i_iocore,
 				(void *)iovp, segs, *offset, ioflags);
 	ret = __generic_file_aio_read(iocb, iovp, segs, offset);
@@ -281,10 +286,6 @@
 		XFS_STATS_ADD(xs_read_bytes, ret);
 
 	xfs_iunlock(ip, XFS_IOLOCK_SHARED);
-
-unlock_mutex:
-	if (unlikely(ioflags & IO_ISDIRECT))
-		mutex_unlock(&inode->i_mutex);
 	return ret;
 }
 
@@ -390,6 +391,8 @@
 	xfs_inode_t		*ip = XFS_BHVTOI(bdp);
 	xfs_mount_t		*mp = ip->i_mount;
 	ssize_t			ret;
+	struct inode		*inode = outfilp->f_mapping->host;
+	xfs_fsize_t		isize;
 
 	XFS_STATS_INC(xs_write_calls);
 	if (XFS_FORCED_SHUTDOWN(ip->i_mount))
@@ -416,6 +419,20 @@
 	if (ret > 0)
 		XFS_STATS_ADD(xs_write_bytes, ret);
 
+	isize = i_size_read(inode);
+	if (unlikely(ret < 0 && ret != -EFAULT && *ppos > isize))
+		*ppos = isize;
+
+	if (*ppos > ip->i_d.di_size) {
+		xfs_ilock(ip, XFS_ILOCK_EXCL);
+		if (*ppos > ip->i_d.di_size) {
+			ip->i_d.di_size = *ppos;
+			i_size_write(inode, *ppos);
+			ip->i_update_core = 1;
+			ip->i_update_size = 1;
+		}
+		xfs_iunlock(ip, XFS_ILOCK_EXCL);
+	}
 	xfs_iunlock(ip, XFS_IOLOCK_EXCL);
 	return ret;
 }
diff -urN linux-2.6.18-rc6/fs/xfs/quota/xfs_qm_bhv.c linux-2.6.18-rc7/fs/xfs/quota/xfs_qm_bhv.c
--- linux-2.6.18-rc6/fs/xfs/quota/xfs_qm_bhv.c	2006-09-13 03:16:00.786650146 +0000
+++ linux-2.6.18-rc7/fs/xfs/quota/xfs_qm_bhv.c	2006-09-13 03:16:05.967209446 +0000
@@ -203,7 +203,7 @@
 	if (error || !vnode)
 		return error;
 
-	mp = XFS_BHVTOM(bhv);
+	mp = xfs_vfstom(bhvtovfs(bhv));
 	ip = xfs_vtoi(vnode);
 
 	if (!(ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT))
diff -urN linux-2.6.18-rc6/fs/xfs/xfs_alloc.h linux-2.6.18-rc7/fs/xfs/xfs_alloc.h
--- linux-2.6.18-rc6/fs/xfs/xfs_alloc.h	2006-09-13 03:16:00.790650578 +0000
+++ linux-2.6.18-rc7/fs/xfs/xfs_alloc.h	2006-09-13 03:16:05.967209446 +0000
@@ -44,6 +44,26 @@
 #define	XFS_ALLOC_FLAG_FREEING	0x00000002  /* indicate caller is freeing extents*/
 
 /*
+ * In order to avoid ENOSPC-related deadlock caused by
+ * out-of-order locking of AGF buffer (PV 947395), we place
+ * constraints on the relationship among actual allocations for
+ * data blocks, freelist blocks, and potential file data bmap
+ * btree blocks. However, these restrictions may result in no
+ * actual space allocated for a delayed extent, for example, a data
+ * block in a certain AG is allocated but there is no additional
+ * block for the additional bmap btree block due to a split of the
+ * bmap btree of the file. The result of this may lead to an
+ * infinite loop in xfssyncd when the file gets flushed to disk and
+ * all delayed extents need to be actually allocated. To get around
+ * this, we explicitly set aside a few blocks which will not be
+ * reserved in delayed allocation. Considering the minimum number of
+ * needed freelist blocks is 4 fsbs _per AG_, a potential split of file's bmap
+ * btree requires 1 fsb, so we set the number of set-aside blocks
+ * to 4 + 4*agcount.
+ */
+#define XFS_ALLOC_SET_ASIDE(mp)  (4 + ((mp)->m_sb.sb_agcount * 4))
+
+/*
  * Argument structure for xfs_alloc routines.
  * This is turned into a structure to avoid having 20 arguments passed
  * down several levels of the stack.
diff -urN linux-2.6.18-rc6/fs/xfs/xfs_fsops.c linux-2.6.18-rc7/fs/xfs/xfs_fsops.c
--- linux-2.6.18-rc6/fs/xfs/xfs_fsops.c	2006-09-13 03:16:00.810652738 +0000
+++ linux-2.6.18-rc7/fs/xfs/xfs_fsops.c	2006-09-13 03:16:05.991212037 +0000
@@ -462,7 +462,7 @@
 
 	xfs_icsb_sync_counters_lazy(mp);
 	s = XFS_SB_LOCK(mp);
-	cnt->freedata = mp->m_sb.sb_fdblocks;
+	cnt->freedata = mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp);
 	cnt->freertx = mp->m_sb.sb_frextents;
 	cnt->freeino = mp->m_sb.sb_ifree;
 	cnt->allocino = mp->m_sb.sb_icount;
@@ -519,15 +519,19 @@
 		}
 		mp->m_resblks = request;
 	} else {
+		__int64_t	free;
+
+		free =  mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp);
 		delta = request - mp->m_resblks;
-		lcounter = mp->m_sb.sb_fdblocks - delta;
+		lcounter = free - delta;
 		if (lcounter < 0) {
 			/* We can't satisfy the request, just get what we can */
-			mp->m_resblks += mp->m_sb.sb_fdblocks;
-			mp->m_resblks_avail += mp->m_sb.sb_fdblocks;
-			mp->m_sb.sb_fdblocks = 0;
+			mp->m_resblks += free;
+			mp->m_resblks_avail += free;
+			mp->m_sb.sb_fdblocks = XFS_ALLOC_SET_ASIDE(mp);
 		} else {
-			mp->m_sb.sb_fdblocks = lcounter;
+			mp->m_sb.sb_fdblocks =
+				lcounter + XFS_ALLOC_SET_ASIDE(mp);
 			mp->m_resblks = request;
 			mp->m_resblks_avail += delta;
 		}
diff -urN linux-2.6.18-rc6/fs/xfs/xfs_mount.c linux-2.6.18-rc7/fs/xfs/xfs_mount.c
--- linux-2.6.18-rc6/fs/xfs/xfs_mount.c	2006-09-13 03:16:00.818653602 +0000
+++ linux-2.6.18-rc7/fs/xfs/xfs_mount.c	2006-09-13 03:16:05.999212901 +0000
@@ -1243,24 +1243,6 @@
 	xfs_trans_log_buf(tp, bp, first, last);
 }
 
-/*
- * In order to avoid ENOSPC-related deadlock caused by
- * out-of-order locking of AGF buffer (PV 947395), we place
- * constraints on the relationship among actual allocations for
- * data blocks, freelist blocks, and potential file data bmap
- * btree blocks. However, these restrictions may result in no
- * actual space allocated for a delayed extent, for example, a data
- * block in a certain AG is allocated but there is no additional
- * block for the additional bmap btree block due to a split of the
- * bmap btree of the file. The result of this may lead to an
- * infinite loop in xfssyncd when the file gets flushed to disk and
- * all delayed extents need to be actually allocated. To get around
- * this, we explicitly set aside a few blocks which will not be
- * reserved in delayed allocation. Considering the minimum number of
- * needed freelist blocks is 4 fsbs, a potential split of file's bmap
- * btree requires 1 fsb, so we set the number of set-aside blocks to 8.
-*/
-#define SET_ASIDE_BLOCKS 8
 
 /*
  * xfs_mod_incore_sb_unlocked() is a utility routine common used to apply
@@ -1306,7 +1288,8 @@
 		return 0;
 	case XFS_SBS_FDBLOCKS:
 
-		lcounter = (long long)mp->m_sb.sb_fdblocks - SET_ASIDE_BLOCKS;
+		lcounter = (long long)
+			mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp);
 		res_used = (long long)(mp->m_resblks - mp->m_resblks_avail);
 
 		if (delta > 0) {		/* Putting blocks back */
@@ -1340,7 +1323,7 @@
 			}
 		}
 
-		mp->m_sb.sb_fdblocks = lcounter + SET_ASIDE_BLOCKS;
+		mp->m_sb.sb_fdblocks = lcounter + XFS_ALLOC_SET_ASIDE(mp);
 		return 0;
 	case XFS_SBS_FREXTENTS:
 		lcounter = (long long)mp->m_sb.sb_frextents;
@@ -2021,7 +2004,8 @@
  * when we get near ENOSPC.
  */
 #define XFS_ICSB_INO_CNTR_REENABLE	64
-#define XFS_ICSB_FDBLK_CNTR_REENABLE	512
+#define XFS_ICSB_FDBLK_CNTR_REENABLE(mp) \
+		(512 + XFS_ALLOC_SET_ASIDE(mp))
 STATIC void
 xfs_icsb_balance_counter(
 	xfs_mount_t	*mp,
@@ -2055,7 +2039,7 @@
 	case XFS_SBS_FDBLOCKS:
 		count = mp->m_sb.sb_fdblocks;
 		resid = do_div(count, weight);
-		if (count < XFS_ICSB_FDBLK_CNTR_REENABLE)
+		if (count < XFS_ICSB_FDBLK_CNTR_REENABLE(mp))
 			goto out;
 		break;
 	default:
@@ -2110,11 +2094,11 @@
 	case XFS_SBS_FDBLOCKS:
 		BUG_ON((mp->m_resblks - mp->m_resblks_avail) != 0);
 
-		lcounter = icsbp->icsb_fdblocks;
+		lcounter = icsbp->icsb_fdblocks - XFS_ALLOC_SET_ASIDE(mp);
 		lcounter += delta;
 		if (unlikely(lcounter < 0))
 			goto slow_path;
-		icsbp->icsb_fdblocks = lcounter;
+		icsbp->icsb_fdblocks = lcounter + XFS_ALLOC_SET_ASIDE(mp);
 		break;
 	default:
 		BUG();
diff -urN linux-2.6.18-rc6/fs/xfs/xfs_vfsops.c linux-2.6.18-rc7/fs/xfs/xfs_vfsops.c
--- linux-2.6.18-rc6/fs/xfs/xfs_vfsops.c	2006-09-13 03:16:00.826654465 +0000
+++ linux-2.6.18-rc7/fs/xfs/xfs_vfsops.c	2006-09-13 03:16:06.003213333 +0000
@@ -811,7 +811,8 @@
 	statp->f_bsize = sbp->sb_blocksize;
 	lsize = sbp->sb_logstart ? sbp->sb_logblocks : 0;
 	statp->f_blocks = sbp->sb_dblocks - lsize;
-	statp->f_bfree = statp->f_bavail = sbp->sb_fdblocks;
+	statp->f_bfree = statp->f_bavail =
+				sbp->sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp);
 	fakeinos = statp->f_bfree << sbp->sb_inopblog;
 #if XFS_BIG_INUMS
 	fakeinos += mp->m_inoadd;
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/anubis-cpld.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/anubis-cpld.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/anubis-cpld.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/anubis-cpld.h	2006-09-13 03:16:06.043217652 +0000
@@ -9,9 +9,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *
 */
 
 #ifndef __ASM_ARCH_ANUBISCPLD_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/anubis-irq.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/anubis-irq.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/anubis-irq.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/anubis-irq.h	2006-09-13 03:16:06.043217652 +0000
@@ -9,9 +9,7 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- */
+*/
 
 #ifndef __ASM_ARCH_ANUBISIRQ_H
 #define __ASM_ARCH_ANUBISIRQ_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/anubis-map.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/anubis-map.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/anubis-map.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/anubis-map.h	2006-09-13 03:16:06.043217652 +0000
@@ -9,8 +9,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
 */
 
 /* needs arch/map.h including with this */
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/audio.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/audio.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/audio.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/audio.h	2006-09-13 03:16:06.043217652 +0000
@@ -9,10 +9,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *	20-Nov-2004 BJD  Created file
- *	07-Mar-2005 BJD  Added suspend/resume calls
 */
 
 #ifndef __ASM_ARCH_AUDIO_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/bast-cpld.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/bast-cpld.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/bast-cpld.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/bast-cpld.h	2006-09-13 03:16:06.043217652 +0000
@@ -8,11 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  25-May-2003 BJD  Created file, added CTRL1 registers
- *  30-Aug-2004 BJD  Updated definitions from 2.4.26 port
- *  30-Aug-2004 BJD  Added CTRL3 and CTRL4 definitions
 */
 
 #ifndef __ASM_ARCH_BASTCPLD_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/bast-irq.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/bast-irq.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/bast-irq.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/bast-irq.h	2006-09-13 03:16:06.043217652 +0000
@@ -8,11 +8,7 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  14-Sep-2004 BJD  Fixed IRQ_USBOC definition
- *  06-Jan-2003 BJD  Linux 2.6.0 version
- */
+*/
 
 #ifndef __ASM_ARCH_BASTIRQ_H
 #define __ASM_ARCH_BASTIRQ_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/bast-map.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/bast-map.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/bast-map.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/bast-map.h	2006-09-13 03:16:06.043217652 +0000
@@ -8,10 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  06-Jan-2003 BJD  Linux 2.6.0 version, moved bast specifics from arch/map.h
- *  12-Mar-2004 BJD  Fixed header include protection
 */
 
 /* needs arch/map.h including with this */
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/bast-pmu.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/bast-pmu.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/bast-pmu.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/bast-pmu.h	2006-09-13 03:16:06.043217652 +0000
@@ -9,9 +9,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *	08-Oct-2003	BJD	Initial creation
 */
 
 #ifndef __ASM_ARCH_BASTPMU_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/debug-macro.S linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/debug-macro.S
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/debug-macro.S	2006-09-13 03:16:00.862658352 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/debug-macro.S	2006-09-13 03:16:06.043217652 +0000
@@ -10,9 +10,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Modifications:
- *     10-Mar-2005 LCVR  Changed S3C2410_VA to S3C24XX_VA
 */
 
 #include <asm/arch/map.h>
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/fb.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/fb.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/fb.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/fb.h	2006-09-13 03:16:06.043217652 +0000
@@ -7,13 +7,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- *
- *  Changelog:
- *	07-Sep-2004	RTP	Created file
- *	03-Nov-2004	BJD	Updated and minor cleanups
- *	03-Aug-2005     RTP     Renamed to fb.h
- *	26-Oct-2005	BJD	Changed name of platdata init
 */
 
 #ifndef __ASM_ARM_FB_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/hardware.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/hardware.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/hardware.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/hardware.h	2006-09-13 03:16:06.043217652 +0000
@@ -8,16 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  21-May-2003 BJD  Created file
- *  06-Jun-2003 BJD  Added CPU frequency settings
- *  03-Sep-2003 BJD  Linux v2.6 support
- *  12-Mar-2004 BJD  Fixed include protection, fixed type of clock vars
- *  14-Sep-2004 BJD  Added misccr and getpin to gpio
- *  01-Oct-2004 BJD  Added the new gpio functions
- *  16-Oct-2004 BJD  Removed the clock variables
- *  15-Jan-2006 LCVR Added s3c2400_gpio_getirq()
 */
 
 #ifndef __ASM_ARCH_HARDWARE_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/idle.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/idle.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/idle.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/idle.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,10 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 CPU Idle controls
- *
- *  Changelog:
- *	28-Oct-2004  BJD  Initial version
- *
 */
 
 #ifndef __ASM_ARCH_IDLE_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/iic.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/iic.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/iic.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/iic.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,10 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *	05-Oct-2004 BJD  Created file
- *	19-Oct-2004 BJD	 Updated for s3c2440
 */
 
 #ifndef __ASM_ARCH_IIC_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/io.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/io.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/io.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/io.h	2006-09-13 03:16:06.047218084 +0000
@@ -4,13 +4,7 @@
  *
  * Copyright (C) 1997 Russell King
  *	     (C) 2003 Simtec Electronics
- *
- * Modifications:
- *  06-Dec-1997	RMK	Created.
- *  02-Sep-2003 BJD	Modified for S3C2410
- *  10-Mar-2005 LCVR	Changed S3C2410_VA to S3C24XX_VA
- *  13-Oct-2005 BJD	Fixed problems with LDRH/STRH offset range
- */
+*/
 
 #ifndef __ASM_ARM_ARCH_IO_H
 #define __ASM_ARM_ARCH_IO_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/irqs.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/irqs.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/irqs.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/irqs.h	2006-09-13 03:16:06.047218084 +0000
@@ -6,14 +6,7 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  12-May-2003 BJD  Created file
- *  08-Jan-2003 BJD  Linux 2.6.0 version, moved BAST bits out
- *  12-Mar-2004 BJD  Fixed bug in header protection
- *  10-Feb-2005 BJD  Added camera IRQ from guillaume.gourat@nexvision.tv
- *  28-Feb-2005 BJD  Updated s3c2440 IRQs
- */
+*/
 
 
 #ifndef __ASM_ARCH_IRQS_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/map.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/map.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/map.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/map.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,13 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  12-May-2003 BJD   Created file
- *  06-Jan-2003 BJD   Linux 2.6.0 version, moved bast specifics out
- *  10-Feb-2005 BJD   Added CAMIF definition from guillaume.gourat@nexvision.tv
- *  10-Mar-2005 LCVR  Added support to S3C2400, changed {VA,SZ} names
- *  15-Jan-2006 LCVR  Added S3C24XX_PA macros for common S3C24XX resources
 */
 
 #ifndef __ASM_ARCH_MAP_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/memory.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/memory.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/memory.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/memory.h	2006-09-13 03:16:06.047218084 +0000
@@ -1,6 +1,4 @@
-/*
- *  linux/include/asm-arm/arch-s3c2410/memory.h
- *
+/* linux/include/asm-arm/arch-s3c2410/memory.h
  *  from linux/include/asm-arm/arch-rpc/memory.h
  *
  *  Copyright (C) 1996,1997,1998 Russell King.
@@ -8,16 +6,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- *  Changelog:
- *   20-Oct-1996 RMK	Created
- *   31-Dec-1997 RMK	Fixed definitions to reduce warnings
- *   11-Jan-1998 RMK	Uninlined to reduce hits on cache
- *   08-Feb-1998 RMK	Added __virt_to_bus and __bus_to_virt
- *   21-Mar-1999 RMK	Renamed to memory.h
- *		 RMK	Added TASK_SIZE and PAGE_OFFSET
- *   05-Apr-2004 BJD    Copied and altered for arch-s3c2410
- *   17-Mar-2005 LCVR   Modified for S3C2400
 */
 
 #ifndef __ASM_ARCH_MEMORY_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/nand.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/nand.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/nand.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/nand.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,9 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *	23-Sep-2004 BJD  Created file
 */
 
 /* struct s3c2410_nand_set
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/osiris-map.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/osiris-map.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/osiris-map.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/osiris-map.h	2006-09-13 03:16:06.047218084 +0000
@@ -9,8 +9,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
 */
 
 /* needs arch/map.h including with this */
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-adc.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-adc.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-adc.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-adc.h	2006-09-13 03:16:06.047218084 +0000
@@ -7,9 +7,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 ADC registers
- *
- *  Changelog:
- *    27-09-2004     SAH     Created file
 */
 
 #ifndef __ASM_ARCH_REGS_ADC_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-clock.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-clock.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-clock.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-clock.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,18 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 clock register definitions
- *
- *  Changelog:
- *    18-Aug-2004 Ben Dooks         Added 2440 definitions
- *    08-Aug-2004 Herbert Pötzl     Added CLKCON definitions
- *    19-06-2003  Ben Dooks         Created file
- *    12-03-2004  Ben Dooks         Updated include protection
- *    29-Sep-2004 Ben Dooks	    Fixed usage for assembly inclusion
- *    10-Feb-2005 Ben Dooks	    Fixed CAMDIVN address (Guillaume Gourat)
- *    10-Mar-2005 Lucas Villa Real  Changed S3C2410_VA to S3C24XX_VA
- *    27-Aug-2005 Ben Dooks	    Add clock-slow info
- *    20-Oct-2005 Ben Dooks	    Fixed overflow in PLL (Guillaume Gourat)
- *    20-Oct-2005 Ben Dooks	    Add masks for DCLK (Guillaume Gourat)
 */
 
 #ifndef __ASM_ARM_REGS_CLOCK
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-gpio.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-gpio.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-gpio.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-gpio.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,21 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 GPIO register definitions
- *
- *  Changelog:
- *    19-06-2003     BJD     Created file
- *    23-06-2003     BJD     Updated GSTATUS registers
- *    12-03-2004     BJD     Updated include protection
- *    20-07-2004     BJD     Added GPIO pin numbers, added Port A definitions
- *    04-10-2004     BJD     Fixed number of bugs, added EXT IRQ filter defs
- *    17-10-2004     BJD     Added GSTATUS1 register definitions
- *    18-11-2004     BJD     Fixed definitions of GPE3, GPE4, GPE5 and GPE6
- *    18-11-2004     BJD     Added S3C2440 AC97 controls
- *    10-Mar-2005    LCVR    Changed S3C2410_VA to S3C24XX_VA
- *    28-Mar-2005    LCVR    Fixed definition of GPB10
- *    26-Oct-2005    BJD     Added generic configuration types
- *    27-Nov-2005    LCVR    Added definitions to S3C2400 registers
- *    15-Jan-2006    LCVR    Written S3C24XX_GPIO_BASE() macro
 */
 
 
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-gpioj.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-gpioj.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-gpioj.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-gpioj.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,10 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2440 GPIO J register definitions
- *
- *  Changelog:
- *    11-Aug-2004     BJD     Created file
- *    10-Feb-2005     BJD     Fix GPJ12 definition (Guillaume Gourat)
 */
 
 
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-iic.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-iic.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-iic.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-iic.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,10 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 I2C Controller
- *
- *  Changelog:
- *	03-Oct-2004  BJD  Initial include for Linux
- *	08-Nov-2004  BJD  Added S3C2440 filter register
 */
 
 #ifndef __ASM_ARCH_REGS_IIC_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-iis.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-iis.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-iis.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-iis.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,17 +8,7 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 IIS register definition
- *
- *  Changelog:
- *    19-06-2003     BJD     Created file
- *    26-06-2003     BJD     Finished off definitions for register addresses
- *    12-03-2004     BJD     Updated include protection
- *    07-03-2005     BJD     Added FIFO size flags and S3C2440 MPLL
- *    05-04-2005     LCVR    Added IISFCON definitions for the S3C2400
- *    18-07-2005     DA      Change IISCON_MPLL to IISMOD_MPLL
- *                           Correct IISMOD_256FS and IISMOD_384FS
- *                           Add IISCON_PSCEN
- */
+*/
 
 #ifndef __ASM_ARCH_REGS_IIS_H
 #define __ASM_ARCH_REGS_IIS_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-irq.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-irq.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-irq.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-irq.h	2006-09-13 03:16:06.047218084 +0000
@@ -6,14 +6,7 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- *
- *
- *  Changelog:
- *    19-06-2003     BJD     Created file
- *    12-03-2004     BJD     Updated include protection
- *    10-03-2005     LCVR    Changed S3C2410_VA to S3C24XX_VA
- */
+*/
 
 
 #ifndef ___ASM_ARCH_REGS_IRQ_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-lcd.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-lcd.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-lcd.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-lcd.h	2006-09-13 03:16:06.047218084 +0000
@@ -6,14 +6,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- *
- *
- *  Changelog:
- *    12-06-2003     BJD     Created file
- *    26-06-2003     BJD     Updated LCDCON register definitions
- *    12-03-2004     BJD     Updated include protection
- *    10-03-2005     LCVR    Changed S3C2410_VA to S3C24XX_VA
 */
 
 
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-mem.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-mem.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-mem.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-mem.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,12 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 Memory Control register definitions
- *
- *  Changelog:
- *	29-Sep-2004  BJD  Initial include for Linux
- *      10-Mar-2005  LCVR Changed S3C2410_VA to S3C24XX_VA
- *      04-Apr-2005  LCVR Added S3C2400 DRAM/BANKSIZE_MASK definitions
- *
 */
 
 #ifndef __ASM_ARM_MEMREGS_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-nand.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-nand.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-nand.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-nand.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,10 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 NAND register definitions
- *
- *  Changelog:
- *    18-Aug-2004    BJD     Copied file from 2.4 and updated
- *    01-May-2005    BJD     Added definitions for s3c2440 controller
 */
 
 #ifndef __ASM_ARM_REGS_NAND
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-rtc.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-rtc.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-rtc.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-rtc.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,11 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 Internal RTC register definition
- *
- *  Changelog:
- *    19-06-2003     BJD     Created file
- *    12-03-2004     BJD     Updated include protection
- *    15-01-2005     LCVR    Changed S3C2410_VA to S3C24XX_VA (s3c2400 support)
 */
 
 #ifndef __ASM_ARCH_REGS_RTC_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-sdi.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-sdi.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-sdi.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-sdi.h	2006-09-13 03:16:06.047218084 +0000
@@ -8,11 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 MMC/SDIO register definitions
- *
- *  Changelog:
- *    18-Aug-2004 Ben Dooks      Created initial file
- *    29-Nov-2004 Koen Martens   Added some missing defines, fixed duplicates
- *    29-Nov-2004 Ben Dooks	 Updated Koen's patch
 */
 
 #ifndef __ASM_ARM_REGS_SDI
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-serial.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-serial.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-serial.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-serial.h	2006-09-13 03:16:06.047218084 +0000
@@ -27,10 +27,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Modifications:
- *     10-Mar-2005 LCVR  Changed S3C2410_VA to S3C24XX_VA (s3c2400 support)
- */
+*/
 
 #ifndef __ASM_ARM_REGS_SERIAL_H
 #define __ASM_ARM_REGS_SERIAL_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-spi.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-spi.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-spi.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-spi.h	2006-09-13 03:16:06.047218084 +0000
@@ -7,13 +7,7 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 SPI register definition
- *
- *  Changelog:
- *    20-04-2004     KF      Created file
- *    04-10-2004     BJD     Removed VA address (no longer mapped)
- *			     tidied file for submission
- *    03-04-2005     LCVR    Added S3C2400_SPPIN_nCS definition
- */
+*/
 
 #ifndef __ASM_ARCH_REGS_SPI_H
 #define __ASM_ARCH_REGS_SPI_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-timer.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-timer.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-timer.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-timer.h	2006-09-13 03:16:06.051218516 +0000
@@ -8,13 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 Timer configuration
- *
- *  Changelog:
- *    05-06-2003     BJD     Created file
- *    26-06-2003     BJD     Added more timer definitions to mux / control
- *    12-03-2004     BJD     Updated include protection
- *    10-02-2005     BJD     Added S3C2410_TCFG1_MUX4_SHIFT (Guillaume Gourat)
- *    10-03-2005     LCVR    Changed S3C2410_VA to S3C24XX_VA
 */
 
 
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-udc.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-udc.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-udc.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-udc.h	2006-09-13 03:16:06.051218516 +0000
@@ -6,13 +6,7 @@
  * modify it under the terms of the GNU General Public License as
  * published by the Free Software Foundation; either version 2 of
  * the License, or (at your option) any later version.
- *
- *  Changelog:
- *    01-08-2004	Initial creation
- *    12-09-2004	Cleanup for submission
- *    24-10-2004	Fixed S3C2410_UDC_MAXP_REG definition
- *    10-03-2005	Changed S3C2410_VA to S3C24XX_VA
- */
+*/
 
 #ifndef __ASM_ARCH_REGS_UDC_H
 #define __ASM_ARCH_REGS_UDC_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-watchdog.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-watchdog.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/regs-watchdog.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/regs-watchdog.h	2006-09-13 03:16:06.051218516 +0000
@@ -1,4 +1,4 @@
-/* linux/include/asm/arch-s3c2410/regs0watchdog.h
+/* linux/include/asm/arch-s3c2410/regs-watchdog.h
  *
  * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
  *		      http://www.simtec.co.uk/products/SWLINUX/
@@ -8,11 +8,6 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 Watchdog timer control
- *
- *  Changelog:
- *    21-06-2003     BJD     Created file
- *    12-03-2004     BJD     Updated include protection
- *    10-03-2005     LCVR    Changed S3C2410_VA to S3C24XX_VA
 */
 
 
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/system.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/system.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/system.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/system.h	2006-09-13 03:16:06.051218516 +0000
@@ -8,14 +8,7 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  12-May-2003 BJD  Created file
- *  14-May-2003 BJD  Removed idle to aid debugging
- *  12-Jun-2003 BJD  Added reset via watchdog
- *  04-Sep-2003 BJD  Moved to v2.6
- *  28-Oct-2004 BJD  Added over-ride for idle, and fixed reset panic()
- */
+*/
 
 #include <asm/hardware.h>
 #include <asm/io.h>
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/timex.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/timex.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/timex.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/timex.h	2006-09-13 03:16:06.051218516 +0000
@@ -8,12 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  02-Sep-2003 BJD  Created file
- *  05-Jan-2004 BJD  Updated for Linux 2.6.0
- *  22-Nov-2004 BJD  Fixed CLOCK_TICK_RATE
- *  10-Jan-2004 BJD  Removed s3c2410_clock_tick_rate
 */
 
 #ifndef __ASM_ARCH_TIMEX_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/uncompress.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/uncompress.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/uncompress.h	2006-09-13 03:16:00.866658784 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/uncompress.h	2006-09-13 03:16:06.051218516 +0000
@@ -8,15 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  22-May-2003 BJD  Created
- *  08-Sep-2003 BJD  Moved to linux v2.6
- *  12-Mar-2004 BJD  Updated header protection
- *  12-Oct-2004 BJD  Take account of debug uart configuration
- *  15-Nov-2004 BJD  Fixed uart configuration
- *  22-Feb-2005 BJD  Added watchdog to uncompress
- *  04-Apr-2005 LCVR Added support to S3C2400 (no cpuid at GSTATUS1)
 */
 
 #ifndef __ASM_ARCH_UNCOMPRESS_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/usb-control.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/usb-control.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/usb-control.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/usb-control.h	2006-09-13 03:16:06.051218516 +0000
@@ -8,11 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  11-Sep-2004 BJD  Created file
- *  21-Sep-2004 BJD  Updated port info
- *  09-Aug-2005 BJD  Renamed s3c2410_report_oc s3c2410_usb_report_oc
 */
 
 #ifndef __ASM_ARCH_USBCONTROL_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/vmalloc.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/vmalloc.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/vmalloc.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/vmalloc.h	2006-09-13 03:16:06.051218516 +0000
@@ -10,11 +10,7 @@
  * published by the Free Software Foundation.
  *
  * S3C2410 vmalloc definition
- *
- *  Changelog:
- *    12-Mar-2004 BJD	Fixed header, added include protection
- *    12=Mar-2004 BJD	Fixed VMALLOC_END definitions
- */
+*/
 
 #ifndef __ASM_ARCH_VMALLOC_H
 #define __ASM_ARCH_VMALLOC_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/vr1000-cpld.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/vr1000-cpld.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/vr1000-cpld.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/vr1000-cpld.h	2006-09-13 03:16:06.051218516 +0000
@@ -8,10 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  25-May-2003 BJD  Created file, added CTRL1 registers
- *  19-Mar-2004 BJD  Added VR1000 CPLD definitions
 */
 
 #ifndef __ASM_ARCH_VR1000CPLD_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/vr1000-irq.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/vr1000-irq.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/vr1000-irq.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/vr1000-irq.h	2006-09-13 03:16:06.051218516 +0000
@@ -8,11 +8,7 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  06-Jan-2003 BJD  Linux 2.6.0 version
- *  19-Mar-2004 BJD  Updates for VR1000
- */
+*/
 
 #ifndef __ASM_ARCH_VR1000IRQ_H
 #define __ASM_ARCH_VR1000IRQ_H
diff -urN linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/vr1000-map.h linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/vr1000-map.h
--- linux-2.6.18-rc6/include/asm-arm/arch-s3c2410/vr1000-map.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-arm/arch-s3c2410/vr1000-map.h	2006-09-13 03:16:06.051218516 +0000
@@ -8,12 +8,6 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
- *
- * Changelog:
- *  06-Jan-2003 BJD  Linux 2.6.0 version, split specifics from arch/map.h
- *  12-Mar-2004 BJD  Fixed header include protection
- *  19-Mar-2004 BJD  Copied to VR1000 machine headers.
- *  19-Jan-2005 BJD  Updated map definitions
 */
 
 /* needs arch/map.h including with this */
diff -urN linux-2.6.18-rc6/include/asm-arm/spinlock.h linux-2.6.18-rc7/include/asm-arm/spinlock.h
--- linux-2.6.18-rc6/include/asm-arm/spinlock.h	2006-09-13 03:16:00.874659648 +0000
+++ linux-2.6.18-rc7/include/asm-arm/spinlock.h	2006-09-13 03:16:06.059219380 +0000
@@ -201,7 +201,7 @@
 
 static inline int __raw_read_trylock(raw_rwlock_t *rw)
 {
-	unsigned long tmp tmp2 = 1;
+	unsigned long tmp, tmp2 = 1;
 
 	__asm__ __volatile__(
 "1:	ldrex	%0, [%2]\n"
diff -urN linux-2.6.18-rc6/include/asm-generic/audit_read.h linux-2.6.18-rc7/include/asm-generic/audit_read.h
--- linux-2.6.18-rc6/include/asm-generic/audit_read.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-generic/audit_read.h	2006-09-13 03:16:06.075221107 +0000
@@ -0,0 +1,8 @@
+__NR_readlink,
+__NR_quotactl,
+__NR_listxattr,
+__NR_llistxattr,
+__NR_flistxattr,
+__NR_getxattr,
+__NR_lgetxattr,
+__NR_fgetxattr,
diff -urN linux-2.6.18-rc6/include/asm-generic/audit_write.h linux-2.6.18-rc7/include/asm-generic/audit_write.h
--- linux-2.6.18-rc6/include/asm-generic/audit_write.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-generic/audit_write.h	2006-09-13 03:16:06.075221107 +0000
@@ -0,0 +1,11 @@
+#include <asm-generic/audit_dir_write.h>
+__NR_acct,
+__NR_swapon,
+__NR_quotactl,
+__NR_truncate,
+#ifdef __NR_truncate64
+__NR_truncate64,
+#endif
+#ifdef __NR_bind
+__NR_bind,		/* bind can affect fs object only in one way... */
+#endif
diff -urN linux-2.6.18-rc6/include/asm-i386/Kbuild linux-2.6.18-rc7/include/asm-i386/Kbuild
--- linux-2.6.18-rc6/include/asm-i386/Kbuild	2006-09-13 03:16:00.894661808 +0000
+++ linux-2.6.18-rc7/include/asm-i386/Kbuild	2006-09-13 03:16:06.079221539 +0000
@@ -1,5 +1,5 @@
 include include/asm-generic/Kbuild.asm
 
-header-y += boot.h cpufeature.h debugreg.h ldt.h setup.h ucontext.h
+header-y += boot.h debugreg.h ldt.h setup.h ucontext.h
 
 unifdef-y += mtrr.h vm86.h
diff -urN linux-2.6.18-rc6/include/asm-ia64/mman.h linux-2.6.18-rc7/include/asm-ia64/mman.h
--- linux-2.6.18-rc6/include/asm-ia64/mman.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-ia64/mman.h	2006-09-13 03:16:06.099223698 +0000
@@ -22,4 +22,12 @@
 #define MCL_CURRENT	1		/* lock all current mappings */
 #define MCL_FUTURE	2		/* lock all future mappings */
 
+#ifdef __KERNEL__
+#ifndef __ASSEMBLY__
+#define arch_mmap_check	ia64_mmap_check
+int ia64_mmap_check(unsigned long addr, unsigned long len,
+		unsigned long flags);
+#endif
+#endif
+
 #endif /* _ASM_IA64_MMAN_H */
diff -urN linux-2.6.18-rc6/include/asm-ia64/unistd.h linux-2.6.18-rc7/include/asm-ia64/unistd.h
--- linux-2.6.18-rc6/include/asm-ia64/unistd.h	2006-09-13 03:16:00.922664831 +0000
+++ linux-2.6.18-rc7/include/asm-ia64/unistd.h	2006-09-13 03:16:06.107224562 +0000
@@ -286,8 +286,7 @@
 /* 1294, 1295 reserved for pselect/ppoll */
 #define __NR_unshare			1296
 #define __NR_splice			1297
-#define __NR_set_robust_list		1298
-#define __NR_get_robust_list		1299
+/* 1298, 1299 reserved for set_robust_list/get_robust_list */
 #define __NR_sync_file_range		1300
 #define __NR_tee			1301
 #define __NR_vmsplice			1302
diff -urN linux-2.6.18-rc6/include/asm-sh/page.h linux-2.6.18-rc7/include/asm-sh/page.h
--- linux-2.6.18-rc6/include/asm-sh/page.h	2006-09-13 03:16:01.018675196 +0000
+++ linux-2.6.18-rc7/include/asm-sh/page.h	2006-09-13 03:16:06.203234928 +0000
@@ -104,7 +104,7 @@
 
 /* PFN start number, because of __MEMORY_START */
 #define PFN_START		(__MEMORY_START >> PAGE_SHIFT)
-#define ARCH_PFN_OFFSET		(FPN_START)
+#define ARCH_PFN_OFFSET		(PFN_START)
 #define virt_to_page(kaddr)	pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
 #define pfn_valid(pfn)		(((pfn) - PFN_START) < max_mapnr)
 #define virt_addr_valid(kaddr)	pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
diff -urN linux-2.6.18-rc6/include/asm-sh64/bug.h linux-2.6.18-rc7/include/asm-sh64/bug.h
--- linux-2.6.18-rc6/include/asm-sh64/bug.h	2006-09-13 03:16:01.018675196 +0000
+++ linux-2.6.18-rc7/include/asm-sh64/bug.h	2006-09-13 03:16:06.207235360 +0000
@@ -1,7 +1,7 @@
 #ifndef __ASM_SH64_BUG_H
 #define __ASM_SH64_BUG_H
 
-
+#ifdef CONFIG_BUG
 /*
  * Tell the user there is some problem, then force a segfault (in process
  * context) or a panic (interrupt context).
@@ -11,17 +11,9 @@
 	*(volatile int *)0 = 0; \
 } while (0)
 
-#define BUG_ON(condition) do { \
-	if (unlikely((condition)!=0)) \
-		BUG(); \
-} while(0)
+#define HAVE_ARCH_BUG
+#endif
 
-#define WARN_ON(condition) do { \
-	if (unlikely((condition)!=0)) { \
-		printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
-		dump_stack(); \
-	} \
-} while (0)
+#include <asm-generic/bug.h>
 
 #endif /* __ASM_SH64_BUG_H */
-
diff -urN linux-2.6.18-rc6/include/asm-sh64/byteorder.h linux-2.6.18-rc7/include/asm-sh64/byteorder.h
--- linux-2.6.18-rc6/include/asm-sh64/byteorder.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-sh64/byteorder.h	2006-09-13 03:16:06.207235360 +0000
@@ -14,7 +14,7 @@
 
 #include <asm/types.h>
 
-static __inline__ __const__ __u32 ___arch__swab32(__u32 x)
+static inline __attribute_const__ __u32 ___arch__swab32(__u32 x)
 {
 	__asm__("byterev	%0, %0\n\t"
 		"shari		%0, 32, %0"
@@ -23,7 +23,7 @@
 	return x;
 }
 
-static __inline__ __const__ __u16 ___arch__swab16(__u16 x)
+static inline __attribute_const__ __u16 ___arch__swab16(__u16 x)
 {
 	__asm__("byterev	%0, %0\n\t"
 		"shari		%0, 48, %0"
diff -urN linux-2.6.18-rc6/include/asm-sh64/dma-mapping.h linux-2.6.18-rc7/include/asm-sh64/dma-mapping.h
--- linux-2.6.18-rc6/include/asm-sh64/dma-mapping.h	2006-09-13 03:16:01.018675196 +0000
+++ linux-2.6.18-rc7/include/asm-sh64/dma-mapping.h	2006-09-13 03:16:06.207235360 +0000
@@ -126,22 +126,30 @@
 static inline void dma_sync_single_for_cpu(struct device *dev,
 					   dma_addr_t dma_handle, size_t size,
 					   enum dma_data_direction dir)
-	__attribute__ ((alias("dma_sync_single")));
+{
+	dma_sync_single(dev, dma_handle, size, dir);
+}
 
 static inline void dma_sync_single_for_device(struct device *dev,
 					   dma_addr_t dma_handle, size_t size,
 					   enum dma_data_direction dir)
-	__attribute__ ((alias("dma_sync_single")));
+{
+	dma_sync_single(dev, dma_handle, size, dir);
+}
 
 static inline void dma_sync_sg_for_cpu(struct device *dev,
 				       struct scatterlist *sg, int nelems,
 				       enum dma_data_direction dir)
-	__attribute__ ((alias("dma_sync_sg")));
+{
+	dma_sync_sg(dev, sg, nelems, dir);
+}
 
 static inline void dma_sync_sg_for_device(struct device *dev,
 				       struct scatterlist *sg, int nelems,
 				       enum dma_data_direction dir)
-	__attribute__ ((alias("dma_sync_sg")));
+{
+	dma_sync_sg(dev, sg, nelems, dir);
+}
 
 static inline int dma_get_cache_alignment(void)
 {
diff -urN linux-2.6.18-rc6/include/asm-sh64/io.h linux-2.6.18-rc7/include/asm-sh64/io.h
--- linux-2.6.18-rc6/include/asm-sh64/io.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-sh64/io.h	2006-09-13 03:16:06.207235360 +0000
@@ -123,6 +123,13 @@
 void outsl(unsigned long port, const void *addr, unsigned long count);
 void insl(unsigned long port, void *addr, unsigned long count);
 
+#define __raw_readb		readb
+#define __raw_readw		readw
+#define __raw_readl		readl
+#define __raw_writeb		writeb
+#define __raw_writew		writew
+#define __raw_writel		writel
+
 void memcpy_toio(void __iomem *to, const void *from, long count);
 void memcpy_fromio(void *to, void __iomem *from, long count);
 
diff -urN linux-2.6.18-rc6/include/asm-sh64/ptrace.h linux-2.6.18-rc7/include/asm-sh64/ptrace.h
--- linux-2.6.18-rc6/include/asm-sh64/ptrace.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-sh64/ptrace.h	2006-09-13 03:16:06.207235360 +0000
@@ -28,7 +28,7 @@
 #ifdef __KERNEL__
 #define user_mode(regs) (((regs)->sr & 0x40000000)==0)
 #define instruction_pointer(regs) ((regs)->pc)
-#define profile_pc(regs) instruction_pointer(regs)
+#define profile_pc(regs) ((unsigned long)instruction_pointer(regs))
 extern void show_regs(struct pt_regs *);
 #endif
 
diff -urN linux-2.6.18-rc6/include/asm-sh64/system.h linux-2.6.18-rc7/include/asm-sh64/system.h
--- linux-2.6.18-rc6/include/asm-sh64/system.h	2006-09-13 03:16:01.022675628 +0000
+++ linux-2.6.18-rc7/include/asm-sh64/system.h	2006-09-13 03:16:06.207235360 +0000
@@ -64,7 +64,7 @@
 #define smp_read_barrier_depends()	do { } while (0)
 #endif /* CONFIG_SMP */
 
-#define set_rmb(var, value) do { xchg(&var, value); } while (0)
+#define set_rmb(var, value) do { (void)xchg(&var, value); } while (0)
 #define set_mb(var, value) set_rmb(var, value)
 
 /* Interrupt Control */
diff -urN linux-2.6.18-rc6/include/asm-sh64/uaccess.h linux-2.6.18-rc7/include/asm-sh64/uaccess.h
--- linux-2.6.18-rc6/include/asm-sh64/uaccess.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-sh64/uaccess.h	2006-09-13 03:16:06.207235360 +0000
@@ -128,25 +128,20 @@
 
 #define __get_user_nocheck(x,ptr,size)				\
 ({								\
-	long __gu_addr = (long)(ptr);				\
-	long __gu_err;						\
-	__typeof(*(ptr)) __gu_val;				\
-	__asm__ ("":"=r" (__gu_val));				\
-	__asm__ ("":"=r" (__gu_err));				\
-	__get_user_size((void *)&__gu_val, __gu_addr, (size), __gu_err); \
-	(x) = (__typeof__(*(ptr))) __gu_val;			\
+	long __gu_err, __gu_val;				\
+	__get_user_size((void *)&__gu_val, (long)(ptr),		\
+			(size), __gu_err);			\
+	(x) = (__typeof__(*(ptr)))__gu_val;			\
 	__gu_err;						\
 })
 
 #define __get_user_check(x,ptr,size)				\
 ({								\
 	long __gu_addr = (long)(ptr);				\
-	long __gu_err = -EFAULT;				\
-	__typeof(*(ptr)) __gu_val;				\
-	__asm__ ("":"=r" (__gu_val));				\
-	__asm__ ("":"=r" (__gu_err));				\
+	long __gu_err = -EFAULT, __gu_val;			\
 	if (__access_ok(__gu_addr, (size)))			\
-		__get_user_size((void *)&__gu_val, __gu_addr, (size), __gu_err); \
+		__get_user_size((void *)&__gu_val, __gu_addr,	\
+				(size), __gu_err);		\
 	(x) = (__typeof__(*(ptr))) __gu_val;			\
 	__gu_err;						\
 })
diff -urN linux-2.6.18-rc6/include/asm-sparc/mman.h linux-2.6.18-rc7/include/asm-sparc/mman.h
--- linux-2.6.18-rc6/include/asm-sparc/mman.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-sparc/mman.h	2006-09-13 03:16:06.211235792 +0000
@@ -35,4 +35,12 @@
 
 #define MADV_FREE	0x5		/* (Solaris) contents can be freed */
 
+#ifdef __KERNEL__
+#ifndef __ASSEMBLY__
+#define arch_mmap_check	sparc_mmap_check
+int sparc_mmap_check(unsigned long addr, unsigned long len,
+		unsigned long flags);
+#endif
+#endif
+
 #endif /* __SPARC_MMAN_H__ */
diff -urN linux-2.6.18-rc6/include/asm-sparc64/mman.h linux-2.6.18-rc7/include/asm-sparc64/mman.h
--- linux-2.6.18-rc6/include/asm-sparc64/mman.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/asm-sparc64/mman.h	2006-09-13 03:16:06.219236655 +0000
@@ -35,4 +35,12 @@
 
 #define MADV_FREE	0x5		/* (Solaris) contents can be freed */
 
+#ifdef __KERNEL__
+#ifndef __ASSEMBLY__
+#define arch_mmap_check	sparc64_mmap_check
+int sparc64_mmap_check(unsigned long addr, unsigned long len,
+		unsigned long flags);
+#endif
+#endif
+
 #endif /* __SPARC64_MMAN_H__ */
diff -urN linux-2.6.18-rc6/include/linux/atmdev.h linux-2.6.18-rc7/include/linux/atmdev.h
--- linux-2.6.18-rc6/include/linux/atmdev.h	2006-09-13 03:16:01.058679515 +0000
+++ linux-2.6.18-rc7/include/linux/atmdev.h	2006-09-13 03:16:06.243239247 +0000
@@ -7,7 +7,6 @@
 #define LINUX_ATMDEV_H
 
 
-#include <linux/device.h>
 #include <linux/atmapi.h>
 #include <linux/atm.h>
 #include <linux/atmioc.h>
@@ -210,6 +209,7 @@
 
 #ifdef __KERNEL__
 
+#include <linux/device.h>
 #include <linux/wait.h> /* wait_queue_head_t */
 #include <linux/time.h> /* struct timeval */
 #include <linux/net.h>
diff -urN linux-2.6.18-rc6/include/linux/audit.h linux-2.6.18-rc7/include/linux/audit.h
--- linux-2.6.18-rc6/include/linux/audit.h	2006-09-13 03:16:01.058679515 +0000
+++ linux-2.6.18-rc7/include/linux/audit.h	2006-09-13 03:16:06.243239247 +0000
@@ -132,6 +132,10 @@
 #define AUDIT_CLASS_DIR_WRITE_32 1
 #define AUDIT_CLASS_CHATTR 2
 #define AUDIT_CLASS_CHATTR_32 3
+#define AUDIT_CLASS_READ 4
+#define AUDIT_CLASS_READ_32 5
+#define AUDIT_CLASS_WRITE 6
+#define AUDIT_CLASS_WRITE_32 7
 
 /* This bitmask is used to validate user input.  It represents all bits that
  * are currently used in an audit field constant understood by the kernel.
@@ -177,6 +181,7 @@
 #define AUDIT_EXIT	103
 #define AUDIT_SUCCESS   104	/* exit >= 0; value ignored */
 #define AUDIT_WATCH	105
+#define AUDIT_PERM	106
 
 #define AUDIT_ARG0      200
 #define AUDIT_ARG1      (AUDIT_ARG0+1)
@@ -252,6 +257,11 @@
 #define AUDIT_ARCH_V850		(EM_V850|__AUDIT_ARCH_LE)
 #define AUDIT_ARCH_X86_64	(EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
 
+#define AUDIT_PERM_EXEC		1
+#define AUDIT_PERM_WRITE	2
+#define AUDIT_PERM_READ		4
+#define AUDIT_PERM_ATTR		8
+
 struct audit_status {
 	__u32		mask;		/* Bit mask for valid entries */
 	__u32		enabled;	/* 1 = enabled, 0 = disabled */
@@ -314,6 +324,7 @@
 #define AUDITSC_FAILURE 2
 #define AUDITSC_RESULT(x) ( ((long)(x))<0?AUDITSC_FAILURE:AUDITSC_SUCCESS )
 extern int __init audit_register_class(int class, unsigned *list);
+extern int audit_classify_syscall(int abi, unsigned syscall);
 #ifdef CONFIG_AUDITSYSCALL
 /* These are defined in auditsc.c */
 				/* Public API */
diff -urN linux-2.6.18-rc6/include/linux/hrtimer.h linux-2.6.18-rc7/include/linux/hrtimer.h
--- linux-2.6.18-rc6/include/linux/hrtimer.h	2006-09-13 03:16:01.074681243 +0000
+++ linux-2.6.18-rc7/include/linux/hrtimer.h	2006-09-13 03:16:06.263241406 +0000
@@ -80,6 +80,7 @@
  * @get_softirq_time:	function to retrieve the current time from the softirq
  * @curr_timer:		the timer which is executing a callback right now
  * @softirq_time:	the time when running the hrtimer queue in the softirq
+ * @lock_key:		the lock_class_key for use with lockdep
  */
 struct hrtimer_base {
 	clockid_t		index;
diff -urN linux-2.6.18-rc6/include/linux/ktime.h linux-2.6.18-rc7/include/linux/ktime.h
--- linux-2.6.18-rc6/include/linux/ktime.h	2006-09-13 03:16:01.090682970 +0000
+++ linux-2.6.18-rc7/include/linux/ktime.h	2006-09-13 03:16:06.275242702 +0000
@@ -56,7 +56,8 @@
 #endif
 } ktime_t;
 
-#define KTIME_MAX			(~((u64)1 << 63))
+#define KTIME_MAX			((s64)~((u64)1 << 63))
+#define KTIME_SEC_MAX			(KTIME_MAX / NSEC_PER_SEC)
 
 /*
  * ktime_t definitions when using the 64-bit scalar representation:
@@ -73,6 +74,10 @@
  */
 static inline ktime_t ktime_set(const long secs, const unsigned long nsecs)
 {
+#if (BITS_PER_LONG == 64)
+	if (unlikely(secs >= KTIME_SEC_MAX))
+		return (ktime_t){ .tv64 = KTIME_MAX };
+#endif
 	return (ktime_t) { .tv64 = (s64)secs * NSEC_PER_SEC + (s64)nsecs };
 }
 
diff -urN linux-2.6.18-rc6/include/linux/mmc/host.h linux-2.6.18-rc7/include/linux/mmc/host.h
--- linux-2.6.18-rc6/include/linux/mmc/host.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/linux/mmc/host.h	2006-09-13 03:16:06.279243134 +0000
@@ -77,7 +77,7 @@
 	struct device		*dev;
 	struct class_device	class_dev;
 	int			index;
-	struct mmc_host_ops	*ops;
+	const struct mmc_host_ops *ops;
 	unsigned int		f_min;
 	unsigned int		f_max;
 	u32			ocr_avail;
diff -urN linux-2.6.18-rc6/include/linux/mmc/mmc.h linux-2.6.18-rc7/include/linux/mmc/mmc.h
--- linux-2.6.18-rc6/include/linux/mmc/mmc.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.18-rc7/include/linux/mmc/mmc.h	2006-09-13 03:16:06.279243134 +0000
@@ -105,6 +105,8 @@
 extern int mmc_wait_for_app_cmd(struct mmc_host *, unsigned int,
 	struct mmc_command *, int);
 
+extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *, int);
+
 extern int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card);
 
 static inline void mmc_claim_host(struct mmc_host *host)
diff -urN linux-2.6.18-rc6/include/linux/nfs_fs.h linux-2.6.18-rc7/include/linux/nfs_fs.h
--- linux-2.6.18-rc6/include/linux/nfs_fs.h	2006-09-13 03:16:01.102684266 +0000
+++ linux-2.6.18-rc7/include/linux/nfs_fs.h	2006-09-13 03:16:06.287243997 +0000
@@ -427,7 +427,7 @@
 extern void nfs_writedata_release(void *);
 
 #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)
-struct nfs_write_data *nfs_commit_alloc(unsigned int pagecount);
+struct nfs_write_data *nfs_commit_alloc(void);
 void nfs_commit_free(struct nfs_write_data *p);
 #endif
 
@@ -478,7 +478,7 @@
 /*
  * Allocate nfs_write_data structures
  */
-extern struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount);
+extern struct nfs_write_data *nfs_writedata_alloc(size_t len);
 
 /*
  * linux/fs/nfs/read.c
@@ -492,7 +492,7 @@
 /*
  * Allocate nfs_read_data structures
  */
-extern struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount);
+extern struct nfs_read_data *nfs_readdata_alloc(size_t len);
 
 /*
  * linux/fs/nfs3proc.c
diff -urN linux-2.6.18-rc6/include/linux/nfs_xdr.h linux-2.6.18-rc7/include/linux/nfs_xdr.h
--- linux-2.6.18-rc6/include/linux/nfs_xdr.h	2006-09-13 03:16:01.102684266 +0000
+++ linux-2.6.18-rc7/include/linux/nfs_xdr.h	2006-09-13 03:16:06.291244429 +0000
@@ -729,7 +729,7 @@
 	struct list_head	pages;	/* Coalesced read requests */
 	struct nfs_page		*req;	/* multi ops per nfs_page */
 	struct page		**pagevec;
-	unsigned int		npages;	/* active pages in pagevec */
+	unsigned int		npages;	/* Max length of pagevec */
 	struct nfs_readargs args;
 	struct nfs_readres  res;
 #ifdef CONFIG_NFS_V4
@@ -748,7 +748,7 @@
 	struct list_head	pages;		/* Coalesced requests we wish to flush */
 	struct nfs_page		*req;		/* multi ops per nfs_page */
 	struct page		**pagevec;
-	unsigned int		npages;		/* active pages in pagevec */
+	unsigned int		npages;		/* Max length of pagevec */
 	struct nfs_writeargs	args;		/* argument struct */
 	struct nfs_writeres	res;		/* result struct */
 #ifdef CONFIG_NFS_V4
diff -urN linux-2.6.18-rc6/include/linux/pci_ids.h linux-2.6.18-rc7/include/linux/pci_ids.h
--- linux-2.6.18-rc6/include/linux/pci_ids.h	2006-09-13 03:16:01.106684698 +0000
+++ linux-2.6.18-rc7/include/linux/pci_ids.h	2006-09-13 03:16:06.295244861 +0000
@@ -648,6 +648,8 @@
 #define PCI_DEVICE_ID_SI_962		0x0962
 #define PCI_DEVICE_ID_SI_963		0x0963
 #define PCI_DEVICE_ID_SI_965		0x0965
+#define PCI_DEVICE_ID_SI_966		0x0966
+#define PCI_DEVICE_ID_SI_968		0x0968
 #define PCI_DEVICE_ID_SI_5511		0x5511
 #define PCI_DEVICE_ID_SI_5513		0x5513
 #define PCI_DEVICE_ID_SI_5517		0x5517
diff -urN linux-2.6.18-rc6/include/linux/videodev.h linux-2.6.18-rc7/include/linux/videodev.h
--- linux-2.6.18-rc6/include/linux/videodev.h	2006-09-13 03:16:01.138688153 +0000
+++ linux-2.6.18-rc7/include/linux/videodev.h	2006-09-13 03:16:06.323247885 +0000
@@ -14,8 +14,7 @@
 
 #include <linux/videodev2.h>
 
-#ifdef CONFIG_VIDEO_V4L1_COMPAT
-#define HAVE_V4L1 1
+#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
 
 struct video_capability
 {
diff -urN linux-2.6.18-rc6/include/linux/videodev2.h linux-2.6.18-rc7/include/linux/videodev2.h
--- linux-2.6.18-rc6/include/linux/videodev2.h	2006-09-13 03:16:01.138688153 +0000
+++ linux-2.6.18-rc7/include/linux/videodev2.h	2006-09-13 03:16:06.323247885 +0000
@@ -22,8 +22,6 @@
 #endif
 #include <linux/types.h>
 
-#define HAVE_V4L2 1
-
 /*
  * Common stuff for both V4L1 and V4L2
  * Moved from videodev.h
diff -urN linux-2.6.18-rc6/include/media/v4l2-dev.h linux-2.6.18-rc7/include/media/v4l2-dev.h
--- linux-2.6.18-rc6/include/media/v4l2-dev.h	2006-09-13 03:16:01.142688585 +0000
+++ linux-2.6.18-rc7/include/media/v4l2-dev.h	2006-09-13 03:16:06.331248748 +0000
@@ -194,7 +194,7 @@
 
 
 	int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i);
-#ifdef HAVE_V4L1
+#ifdef CONFIG_VIDEO_V4L1_COMPAT
 			/* buffer type is struct vidio_mbuf * */
 	int (*vidiocgmbuf)  (struct file *file, void *fh, struct video_mbuf *p);
 #endif
@@ -335,7 +335,7 @@
 				      unsigned int cmd, void *arg));
 
 
-#ifdef HAVE_V4L1
+#ifdef CONFIG_VIDEO_V4L1_COMPAT
 #include <linux/mm.h>
 
 extern struct video_device* video_devdata(struct file*);
@@ -357,6 +357,8 @@
 	class_device_remove_file(&vfd->class_dev, attr);
 }
 
+#endif /* CONFIG_VIDEO_V4L1_COMPAT */
+
 #ifdef OBSOLETE_OWNER /* to be removed soon */
 /* helper functions to access driver private data. */
 static inline void *video_get_drvdata(struct video_device *dev)
@@ -372,6 +374,5 @@
 
 extern int video_exclusive_open(struct inode *inode, struct file *file);
 extern int video_exclusive_release(struct inode *inode, struct file *file);
-#endif /* HAVE_V4L1 */
 
 #endif /* _V4L2_DEV_H */
diff -urN linux-2.6.18-rc6/kernel/audit.c linux-2.6.18-rc7/kernel/audit.c
--- linux-2.6.18-rc6/kernel/audit.c	2006-09-13 03:16:01.178692472 +0000
+++ linux-2.6.18-rc7/kernel/audit.c	2006-09-13 03:16:06.363252203 +0000
@@ -1028,6 +1028,9 @@
 	struct sk_buff *skb;
 	static const unsigned char *hex = "0123456789ABCDEF";
 
+	if (!ab)
+		return;
+
 	BUG_ON(!ab->skb);
 	skb = ab->skb;
 	avail = skb_tailroom(skb);
@@ -1060,6 +1063,9 @@
 	unsigned char *ptr;
 	struct sk_buff *skb;
 
+	if (!ab)
+		return;
+
 	BUG_ON(!ab->skb);
 	skb = ab->skb;
 	avail = skb_tailroom(skb);
diff -urN linux-2.6.18-rc6/kernel/audit.h linux-2.6.18-rc7/kernel/audit.h
--- linux-2.6.18-rc6/kernel/audit.h	2006-09-13 03:16:01.178692472 +0000
+++ linux-2.6.18-rc7/kernel/audit.h	2006-09-13 03:16:06.363252203 +0000
@@ -104,6 +104,7 @@
 	return (ino & (AUDIT_INODE_BUCKETS-1));
 }
 
+extern int audit_match_class(int class, unsigned syscall);
 extern int audit_comparator(const u32 left, const u32 op, const u32 right);
 extern int audit_compare_dname_path(const char *dname, const char *path,
 				    int *dirlen);
diff -urN linux-2.6.18-rc6/kernel/auditfilter.c linux-2.6.18-rc7/kernel/auditfilter.c
--- linux-2.6.18-rc6/kernel/auditfilter.c	2006-09-13 03:16:01.178692472 +0000
+++ linux-2.6.18-rc7/kernel/auditfilter.c	2006-09-13 03:16:06.363252203 +0000
@@ -302,6 +302,15 @@
 	return 0;
 }
 
+int audit_match_class(int class, unsigned syscall)
+{
+	if (unlikely(syscall >= AUDIT_BITMASK_SIZE * sizeof(__u32)))
+		return 0;
+	if (unlikely(class >= AUDIT_SYSCALL_CLASSES || !classes[class]))
+		return 0;
+	return classes[class][AUDIT_WORD(syscall)] & AUDIT_BIT(syscall);
+}
+
 /* Common user-space to kernel rule translation. */
 static inline struct audit_entry *audit_to_entry_common(struct audit_rule *rule)
 {
@@ -404,6 +413,7 @@
 		case AUDIT_PERS:
 		case AUDIT_ARCH:
 		case AUDIT_MSGTYPE:
+		case AUDIT_PPID:
 		case AUDIT_DEVMAJOR:
 		case AUDIT_DEVMINOR:
 		case AUDIT_EXIT:
@@ -413,6 +423,10 @@
 		case AUDIT_ARG2:
 		case AUDIT_ARG3:
 			break;
+		case AUDIT_PERM:
+			if (f->val & ~15)
+				goto exit_free;
+			break;
 		case AUDIT_INODE:
 			err = audit_to_inode(&entry->rule, f);
 			if (err)
@@ -567,6 +581,10 @@
 			entry->rule.buflen += f->val;
 			entry->rule.filterkey = str;
 			break;
+		case AUDIT_PERM:
+			if (f->val & ~15)
+				goto exit_free;
+			break;
 		default:
 			goto exit_free;
 		}
@@ -913,7 +931,7 @@
 		}
 
 		ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE);
-		audit_log_format(ab, "audit updated rules specifying watch=");
+		audit_log_format(ab, "audit updated rules specifying path=");
 		audit_log_untrustedstring(ab, owatch->path);
 		audit_log_format(ab, " with dev=%u ino=%lu\n", dev, ino);
 		audit_log_end(ab);
@@ -936,19 +954,28 @@
 	struct audit_watch *w, *nextw;
 	struct audit_krule *r, *nextr;
 	struct audit_entry *e;
+	struct audit_buffer *ab;
 
 	mutex_lock(&audit_filter_mutex);
 	parent->flags |= AUDIT_PARENT_INVALID;
 	list_for_each_entry_safe(w, nextw, &parent->watches, wlist) {
 		list_for_each_entry_safe(r, nextr, &w->rules, rlist) {
 			e = container_of(r, struct audit_entry, rule);
+
+			ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE);
+			audit_log_format(ab, "audit implicitly removed rule path=");
+			audit_log_untrustedstring(ab, w->path);
+			if (r->filterkey) {
+				audit_log_format(ab, " key=");
+				audit_log_untrustedstring(ab, r->filterkey);
+			} else
+				audit_log_format(ab, " key=(null)");
+			audit_log_format(ab, " list=%d", r->listnr);
+			audit_log_end(ab);
+
 			list_del(&r->rlist);
 			list_del_rcu(&e->list);
 			call_rcu(&e->rcu, audit_free_rule_rcu);
-
-			audit_log(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE,
-				 "audit implicitly removed rule from list=%d\n",
-				  AUDIT_FILTER_EXIT);
 		}
 		audit_remove_watch(w);
 	}
diff -urN linux-2.6.18-rc6/kernel/auditsc.c linux-2.6.18-rc7/kernel/auditsc.c
--- linux-2.6.18-rc6/kernel/auditsc.c	2006-09-13 03:16:01.178692472 +0000
+++ linux-2.6.18-rc7/kernel/auditsc.c	2006-09-13 03:16:06.367252635 +0000
@@ -209,6 +209,54 @@
 #endif
 };
 
+#define ACC_MODE(x) ("\004\002\006\006"[(x)&O_ACCMODE])
+static inline int open_arg(int flags, int mask)
+{
+	int n = ACC_MODE(flags);
+	if (flags & (O_TRUNC | O_CREAT))
+		n |= AUDIT_PERM_WRITE;
+	return n & mask;
+}
+
+static int audit_match_perm(struct audit_context *ctx, int mask)
+{
+	unsigned n = ctx->major;
+	switch (audit_classify_syscall(ctx->arch, n)) {
+	case 0:	/* native */
+		if ((mask & AUDIT_PERM_WRITE) &&
+		     audit_match_class(AUDIT_CLASS_WRITE, n))
+			return 1;
+		if ((mask & AUDIT_PERM_READ) &&
+		     audit_match_class(AUDIT_CLASS_READ, n))
+			return 1;
+		if ((mask & AUDIT_PERM_ATTR) &&
+		     audit_match_class(AUDIT_CLASS_CHATTR, n))
+			return 1;
+		return 0;
+	case 1: /* 32bit on biarch */
+		if ((mask & AUDIT_PERM_WRITE) &&
+		     audit_match_class(AUDIT_CLASS_WRITE_32, n))
+			return 1;
+		if ((mask & AUDIT_PERM_READ) &&
+		     audit_match_class(AUDIT_CLASS_READ_32, n))
+			return 1;
+		if ((mask & AUDIT_PERM_ATTR) &&
+		     audit_match_class(AUDIT_CLASS_CHATTR_32, n))
+			return 1;
+		return 0;
+	case 2: /* open */
+		return mask & ACC_MODE(ctx->argv[1]);
+	case 3: /* openat */
+		return mask & ACC_MODE(ctx->argv[2]);
+	case 4: /* socketcall */
+		return ((mask & AUDIT_PERM_WRITE) && ctx->argv[0] == SYS_BIND);
+	case 5: /* execve */
+		return mask & AUDIT_PERM_EXEC;
+	default:
+		return 0;
+	}
+}
+
 /* Determine if any context name data matches a rule's watch data */
 /* Compare a task_struct with an audit_rule.  Return 1 on match, 0
  * otherwise. */
@@ -397,6 +445,9 @@
 			/* ignore this field for filtering */
 			result = 1;
 			break;
+		case AUDIT_PERM:
+			result = audit_match_perm(ctx, f->val);
+			break;
 		}
 
 		if (!result)
diff -urN linux-2.6.18-rc6/kernel/futex.c linux-2.6.18-rc7/kernel/futex.c
--- linux-2.6.18-rc6/kernel/futex.c	2006-09-13 03:16:01.186693336 +0000
+++ linux-2.6.18-rc7/kernel/futex.c	2006-09-13 03:16:06.371253067 +0000
@@ -1120,9 +1120,10 @@
  * if there are waiters then it will block, it does PI, etc. (Due to
  * races the kernel might see a 0 value of the futex too.)
  */
-static int do_futex_lock_pi(u32 __user *uaddr, int detect, int trylock,
-			    struct hrtimer_sleeper *to)
+static int futex_lock_pi(u32 __user *uaddr, int detect, unsigned long sec,
+			 long nsec, int trylock)
 {
+	struct hrtimer_sleeper timeout, *to = NULL;
 	struct task_struct *curr = current;
 	struct futex_hash_bucket *hb;
 	u32 uval, newval, curval;
@@ -1132,6 +1133,13 @@
 	if (refill_pi_state_cache())
 		return -ENOMEM;
 
+	if (sec != MAX_SCHEDULE_TIMEOUT) {
+		to = &timeout;
+		hrtimer_init(&to->timer, CLOCK_REALTIME, HRTIMER_ABS);
+		hrtimer_init_sleeper(to, current);
+		to->timer.expires = ktime_set(sec, nsec);
+	}
+
 	q.pi_state = NULL;
  retry:
 	down_read(&curr->mm->mmap_sem);
@@ -1307,7 +1315,7 @@
 	if (!detect && ret == -EDEADLK && 0)
 		force_sig(SIGKILL, current);
 
-	return ret;
+	return ret != -EINTR ? ret : -ERESTARTNOINTR;
 
  out_unlock_release_sem:
 	queue_unlock(&q, hb);
@@ -1342,76 +1350,6 @@
 }
 
 /*
- * Restart handler
- */
-static long futex_lock_pi_restart(struct restart_block *restart)
-{
-	struct hrtimer_sleeper timeout, *to = NULL;
-	int ret;
-
-	restart->fn = do_no_restart_syscall;
-
-	if (restart->arg2 || restart->arg3) {
-		to = &timeout;
-		hrtimer_init(&to->timer, CLOCK_REALTIME, HRTIMER_ABS);
-		hrtimer_init_sleeper(to, current);
-		to->timer.expires.tv64 = ((u64)restart->arg1 << 32) |
-			(u64) restart->arg0;
-	}
-
-	pr_debug("lock_pi restart: %p, %d (%d)\n",
-		 (u32 __user *)restart->arg0, current->pid);
-
-	ret = do_futex_lock_pi((u32 __user *)restart->arg0, restart->arg1,
-			       0, to);
-
-	if (ret != -EINTR)
-		return ret;
-
-	restart->fn = futex_lock_pi_restart;
-
-	/* The other values are filled in */
-	return -ERESTART_RESTARTBLOCK;
-}
-
-/*
- * Called from the syscall entry below.
- */
-static int futex_lock_pi(u32 __user *uaddr, int detect, unsigned long sec,
-			 long nsec, int trylock)
-{
-	struct hrtimer_sleeper timeout, *to = NULL;
-	struct restart_block *restart;
-	int ret;
-
-	if (sec != MAX_SCHEDULE_TIMEOUT) {
-		to = &timeout;
-		hrtimer_init(&to->timer, CLOCK_REALTIME, HRTIMER_ABS);
-		hrtimer_init_sleeper(to, current);
-		to->timer.expires = ktime_set(sec, nsec);
-	}
-
-	ret = do_futex_lock_pi(uaddr, detect, trylock, to);
-
-	if (ret != -EINTR)
-		return ret;
-
-	pr_debug("lock_pi interrupted: %p, %d (%d)\n", uaddr, current->pid);
-
-	restart = &current_thread_info()->restart_block;
-	restart->fn = futex_lock_pi_restart;
-	restart->arg0 = (unsigned long) uaddr;
-	restart->arg1 = detect;
-	if (to) {
-		restart->arg2 = to->timer.expires.tv64 & 0xFFFFFFFF;
-		restart->arg3 = to->timer.expires.tv64 >> 32;
-	} else
-		restart->arg2 = restart->arg3 = 0;
-
-	return -ERESTART_RESTARTBLOCK;
-}
-
-/*
  * Userspace attempted a TID -> 0 atomic transition, and failed.
  * This is the in-kernel slowpath: we look up the PI state (if any),
  * and do the rt-mutex unlock.
diff -urN linux-2.6.18-rc6/kernel/panic.c linux-2.6.18-rc7/kernel/panic.c
--- linux-2.6.18-rc6/kernel/panic.c	2006-09-13 03:16:01.194694199 +0000
+++ linux-2.6.18-rc7/kernel/panic.c	2006-09-13 03:16:06.383254363 +0000
@@ -173,7 +173,7 @@
 
 void add_taint(unsigned flag)
 {
-	debug_locks_off(); /* can't trust the integrity of the kernel anymore */
+	debug_locks = 0; /* can't trust the integrity of the kernel anymore */
 	tainted |= flag;
 }
 EXPORT_SYMBOL(add_taint);
diff -urN linux-2.6.18-rc6/kernel/power/Kconfig linux-2.6.18-rc7/kernel/power/Kconfig
--- linux-2.6.18-rc6/kernel/power/Kconfig	2006-09-13 03:16:01.198694631 +0000
+++ linux-2.6.18-rc7/kernel/power/Kconfig	2006-09-13 03:16:06.383254363 +0000
@@ -56,7 +56,7 @@
 
 config SOFTWARE_SUSPEND
 	bool "Software Suspend"
-	depends on PM && SWAP && (X86 && (!SMP || SUSPEND_SMP)) || ((FRV || PPC32) && !SMP)
+	depends on PM && SWAP && ((X86 && (!SMP || SUSPEND_SMP) && !X86_PAE) || ((FRV || PPC32) && !SMP))
 	---help---
 	  Enable the possibility of suspending the machine.
 	  It doesn't need ACPI or APM.
@@ -78,6 +78,10 @@
 
 	  For more information take a look at <file:Documentation/power/swsusp.txt>.
 
+	  (For now, swsusp is incompatible with PAE aka HIGHMEM_64G on i386.
+	  we need identity mapping for resume to work, and that is trivial
+	  to get with 4MB pages, but less than trivial on PAE).
+
 config PM_STD_PARTITION
 	string "Default resume partition"
 	depends on SOFTWARE_SUSPEND
diff -urN linux-2.6.18-rc6/kernel/spinlock.c linux-2.6.18-rc7/kernel/spinlock.c
--- linux-2.6.18-rc6/kernel/spinlock.c	2006-09-13 03:16:01.210695927 +0000
+++ linux-2.6.18-rc7/kernel/spinlock.c	2006-09-13 03:16:06.395255659 +0000
@@ -72,7 +72,7 @@
  * not re-enabled during lock-acquire (which the preempt-spin-ops do):
  */
 #if !defined(CONFIG_PREEMPT) || !defined(CONFIG_SMP) || \
-	defined(CONFIG_PROVE_LOCKING)
+	defined(CONFIG_DEBUG_LOCK_ALLOC)
 
 void __lockfunc _read_lock(rwlock_t *lock)
 {
diff -urN linux-2.6.18-rc6/lib/Kconfig linux-2.6.18-rc7/lib/Kconfig
--- linux-2.6.18-rc6/lib/Kconfig	2006-09-13 03:16:01.218696791 +0000
+++ linux-2.6.18-rc7/lib/Kconfig	2006-09-13 03:16:06.403256522 +0000
@@ -38,6 +38,11 @@
 	  require M here.  See Castagnoli93.
 	  Module will be libcrc32c.
 
+config AUDIT_GENERIC
+	bool
+	depends on AUDIT && !AUDIT_ARCH
+	default y
+
 #
 # compression support is select'ed if needed
 #
diff -urN linux-2.6.18-rc6/lib/Makefile linux-2.6.18-rc7/lib/Makefile
--- linux-2.6.18-rc6/lib/Makefile	2006-09-13 03:16:01.218696791 +0000
+++ linux-2.6.18-rc7/lib/Makefile	2006-09-13 03:16:06.403256522 +0000
@@ -49,6 +49,7 @@
 obj-$(CONFIG_TEXTSEARCH_BM) += ts_bm.o
 obj-$(CONFIG_TEXTSEARCH_FSM) += ts_fsm.o
 obj-$(CONFIG_SMP) += percpu_counter.o
+obj-$(CONFIG_AUDIT_GENERIC) += audit.o
 
 obj-$(CONFIG_SWIOTLB) += swiotlb.o
 
diff -urN linux-2.6.18-rc6/lib/audit.c linux-2.6.18-rc7/lib/audit.c
--- linux-2.6.18-rc6/lib/audit.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.18-rc7/lib/audit.c	2006-09-13 03:16:06.403256522 +0000
@@ -0,0 +1,53 @@
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/audit.h>
+#include <asm/unistd.h>
+
+static unsigned dir_class[] = {
+#include <asm-generic/audit_dir_write.h>
+~0U
+};
+
+static unsigned read_class[] = {
+#include <asm-generic/audit_read.h>
+~0U
+};
+
+static unsigned write_class[] = {
+#include <asm-generic/audit_write.h>
+~0U
+};
+
+static unsigned chattr_class[] = {
+#include <asm-generic/audit_change_attr.h>
+~0U
+};
+
+int audit_classify_syscall(int abi, unsigned syscall)
+{
+	switch(syscall) {
+	case __NR_open:
+		return 2;
+	case __NR_openat:
+		return 3;
+#ifdef __NR_socketcall
+	case __NR_socketcall:
+		return 4;
+#endif
+	case __NR_execve:
+		return 5;
+	default:
+		return 0;
+	}
+}
+
+static int __init audit_classes_init(void)
+{
+	audit_register_class(AUDIT_CLASS_WRITE, write_class);
+	audit_register_class(AUDIT_CLASS_READ, read_class);
+	audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
+	audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
+	return 0;
+}
+
+__initcall(audit_classes_init);
diff -urN linux-2.6.18-rc6/mm/mmap.c linux-2.6.18-rc7/mm/mmap.c
--- linux-2.6.18-rc6/mm/mmap.c	2006-09-13 03:16:01.242699382 +0000
+++ linux-2.6.18-rc7/mm/mmap.c	2006-09-13 03:16:06.427259114 +0000
@@ -30,6 +30,10 @@
 #include <asm/cacheflush.h>
 #include <asm/tlb.h>
 
+#ifndef arch_mmap_check
+#define arch_mmap_check(addr, len, flags)	(0)
+#endif
+
 static void unmap_region(struct mm_struct *mm,
 		struct vm_area_struct *vma, struct vm_area_struct *prev,
 		unsigned long start, unsigned long end);
@@ -913,6 +917,10 @@
 	if (!len)
 		return -EINVAL;
 
+	error = arch_mmap_check(addr, len, flags);
+	if (error)
+		return error;
+
 	/* Careful about overflows.. */
 	len = PAGE_ALIGN(len);
 	if (!len || len > TASK_SIZE)
@@ -1859,6 +1867,7 @@
 	unsigned long flags;
 	struct rb_node ** rb_link, * rb_parent;
 	pgoff_t pgoff = addr >> PAGE_SHIFT;
+	int error;
 
 	len = PAGE_ALIGN(len);
 	if (!len)
@@ -1867,6 +1876,12 @@
 	if ((addr + len) > TASK_SIZE || (addr + len) < addr)
 		return -EINVAL;
 
+	flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
+
+	error = arch_mmap_check(addr, len, flags);
+	if (error)
+		return error;
+
 	/*
 	 * mlock MCL_FUTURE?
 	 */
@@ -1907,8 +1922,6 @@
 	if (security_vm_enough_memory(len >> PAGE_SHIFT))
 		return -ENOMEM;
 
-	flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
-
 	/* Can we just expand an old private anonymous mapping? */
 	if (vma_merge(mm, prev, addr, addr + len, flags,
 					NULL, NULL, pgoff, NULL))
diff -urN linux-2.6.18-rc6/mm/truncate.c linux-2.6.18-rc7/mm/truncate.c
--- linux-2.6.18-rc6/mm/truncate.c	2006-09-13 03:16:01.250700246 +0000
+++ linux-2.6.18-rc7/mm/truncate.c	2006-09-13 03:16:06.435259978 +0000
@@ -68,10 +68,10 @@
 		return 0;
 
 	write_lock_irq(&mapping->tree_lock);
-	if (PageDirty(page)) {
-		write_unlock_irq(&mapping->tree_lock);
-		return 0;
-	}
+	if (PageDirty(page))
+		goto failed;
+	if (page_count(page) != 2)	/* caller's ref + pagecache ref */
+		goto failed;
 
 	BUG_ON(PagePrivate(page));
 	__remove_from_page_cache(page);
@@ -79,6 +79,9 @@
 	ClearPageUptodate(page);
 	page_cache_release(page);	/* pagecache ref */
 	return 1;
+failed:
+	write_unlock_irq(&mapping->tree_lock);
+	return 0;
 }
 
 /**
