linux-cvs-patches
[Top] [All Lists]

CVS Update@linux-mips.org: linux

To: linux-cvs-patches@linux-mips.org
Subject: CVS Update@linux-mips.org: linux
From: ralf@linux-mips.org
Date: Sat, 18 Jun 2005 15:42:58 +0100
Reply-to: linux-mips@linux-mips.org
Sender: linux-cvs-patches-bounce@linux-mips.org
CVSROOT:        /home/cvs
Module name:    linux
Changes by:     ralf@ftp.linux-mips.org 05/06/18 15:42:52

Modified files:
        .              : CREDITS MAINTAINERS Makefile 
        Documentation  : SubmittingPatches 
        Documentation/networking: vortex.txt 
        arch/arm       : Kconfig 
        arch/arm/boot/compressed: head-xscale.S 
        arch/arm/configs: badge4_defconfig h3600_defconfig 
                          hackkit_defconfig 
        arch/arm/kernel: entry-armv.S traps.c 
        arch/arm/lib   : io-writesw-armv4.S 
        arch/arm/mach-integrator: integrator_cp.c 
        arch/arm/mach-pxa: lubbock.c mainstone.c pm.c pxa25x.c pxa27x.c 
        arch/arm/mach-s3c2410: dma.c 
        arch/arm/mach-sa1100: Kconfig 
        arch/arm/mach-versatile: core.c 
        arch/arm/mm    : Kconfig Makefile 
        arch/i386/kernel: Makefile apm.c 
        arch/ia64/kernel: fsys.S module.c ptrace.c setup.c traps.c 
        arch/ia64/mm   : init.c 
        arch/ia64/sn/kernel: setup.c 
        arch/m68k      : defconfig 
        arch/m68k/configs: amiga_defconfig apollo_defconfig 
                           atari_defconfig bvme6000_defconfig 
                           hp300_defconfig mac_defconfig 
                           mvme147_defconfig mvme16x_defconfig 
                           q40_defconfig sun3_defconfig sun3x_defconfig 
        arch/mips      : defconfig 
        arch/mips/configs: atlas_defconfig capcella_defconfig 
                           cobalt_defconfig db1000_defconfig 
                           db1100_defconfig db1500_defconfig 
                           db1550_defconfig ddb5476_defconfig 
                           ddb5477_defconfig e55_defconfig 
                           ev64120_defconfig ev96100_defconfig 
                           ip22_defconfig ip27_defconfig ip32_defconfig 
                           it8172_defconfig ivr_defconfig 
                           jaguar-atx_defconfig jmr3927_defconfig 
                           lasat200_defconfig malta_defconfig 
                           mpc30x_defconfig ocelot_3_defconfig 
                           ocelot_c_defconfig ocelot_defconfig 
                           ocelot_g_defconfig pb1100_defconfig 
                           pb1500_defconfig pb1550_defconfig 
                           rm200_defconfig sb1250-swarm_defconfig 
                           sead_defconfig tb0226_defconfig 
                           tb0229_defconfig workpad_defconfig 
                           yosemite_defconfig 
        arch/ppc/kernel: cputable.c misc.S 
        arch/ppc/platforms: pmac_cpufreq.c 
        arch/ppc64     : defconfig 
        arch/ppc64/boot: prom.c 
        arch/ppc64/configs: g5_defconfig iSeries_defconfig 
                            maple_defconfig pSeries_defconfig 
        arch/ppc64/kernel: kprobes.c misc.S sys_ppc32.c syscalls.c 
        arch/um        : Kconfig_char 
        arch/um/drivers: Makefile chan_user.c mmapper_kern.c net_user.c 
                         slip.h slip_kern.c slip_user.c slirp.h 
                         slirp_kern.c slirp_user.c stderr_console.c 
        arch/um/include: mconsole.h net_user.h os.h user_util.h 
        arch/um/include/sysdep-i386: ptrace.h 
        arch/um/kernel : main.c process.c um_arch.c 
        arch/um/kernel/skas: process_kern.c 
        arch/um/os-Linux: elf_aux.c file.c 
        arch/um/scripts: Makefile.rules 
        arch/x86_64/kernel: aperture.c 
        drivers/block  : cfq-iosched.c elevator.c ub.c 
        drivers/char   : mxser.c 
        drivers/char/agp: agp.h ali-agp.c amd-k7-agp.c amd64-agp.c 
                          ati-agp.c backend.c efficeon-agp.c generic.c 
                          hp-agp.c i460-agp.c intel-agp.c sgi-agp.c 
                          sworks-agp.c uninorth-agp.c 
        drivers/char/drm: drm_pciids.h radeon_irq.c 
        drivers/ieee1394: sbp2.c 
        drivers/input/keyboard: atkbd.c 
        drivers/input/mouse: alps.c 
        drivers/macintosh: via-pmu.c 
        drivers/md     : dm-mpath.c 
        drivers/message/i2o: i2o_block.c 
        drivers/net    : iseries_veth.c r8169.c tg3.c 
        drivers/net/irda: Kconfig 
        drivers/pci    : pci-driver.c pci.ids probe.c quirks.c 
        drivers/pci/hotplug: cpci_hotplug_core.c cpci_hotplug_pci.c 
        drivers/scsi   : Kconfig libata-core.c sata_sil.c 
        drivers/serial : sa1100.c 
        drivers/usb/host: ehci-hub.c 
        drivers/usb/media/pwc: pwc-if.c 
        drivers/usb/net: kaweth.c 
        drivers/usb/serial: ftdi_sio.c 
        drivers/video  : fbsysfs.c macmodes.c 
        drivers/video/aty: radeon_base.c 
        fs             : binfmt_elf.c binfmt_flat.c namei.c 
        fs/cifs        : CHANGES cifsfs.h file.c inode.c 
        fs/nfs         : dir.c file.c 
        include/asm-alpha: agp.h 
        include/asm-arm: elf.h 
        include/asm-arm/arch-integrator: platform.h 
        include/asm-arm/arch-ixp2000: io.h 
        include/asm-arm/arch-pxa: pxa-regs.h 
        include/asm-arm/arch-versatile: platform.h 
        include/asm-arm26: elf.h signal.h 
        include/asm-h8300: kmap_types.h mman.h 
        include/asm-i386: agp.h 
        include/asm-i386/mach-numaq: mach_ipi.h 
        include/asm-ia64: agp.h pgtable.h processor.h 
        include/asm-ppc: agp.h sigcontext.h 
        include/asm-ppc64: agp.h elf.h 
        include/asm-sparc: uaccess.h 
        include/asm-sparc64: agp.h 
        include/asm-x86_64: agp.h 
        include/linux  : acpi.h if_tr.h pci_ids.h signal.h sysctl.h 
        include/linux/tc_ematch: tc_em_meta.h 
        include/net    : ip.h 
        kernel         : exit.c posix-timers.c sched.c 
        mm             : filemap.c 
        net/core       : dev.c ethtool.c net-sysfs.c 
        net/ipv4       : af_inet.c icmp.c multipath_drr.c 
                         multipath_random.c multipath_rr.c 
                         multipath_wrandom.c sysctl_net_ipv4.c tcp.c 
        net/ipv4/netfilter: ip_conntrack_standalone.c ipt_recent.c 
        net/ipv6       : addrconf.c icmp.c ip6_tunnel.c 
        net/sched      : Kconfig act_api.c cls_basic.c em_meta.c 
        net/sctp       : input.c ipv6.c proc.c protocol.c socket.c 
        sound/usb      : usbaudio.c 
        sound/usb/usx2y: usbusx2y.c 
Added files:
        arch/arm/mm    : copypage-xscale.c 
        arch/um/drivers: slip_common.c slip_common.h 
Removed files:
        arch/arm/mm    : copypage-xscale.S minicache.c 
        arch/um/drivers: slip_proto.h 

Log message:
        Merge with 2.6.12.

diff -urN linux/CREDITS linux/CREDITS
--- linux/CREDITS       2005/05/26 09:12:35     1.144
+++ linux/CREDITS       2005/06/18 14:42:38     1.145
@@ -2475,13 +2475,9 @@
 S: USA
 
 N: Dave Neuer
-E: dneuer@innovation-charter.com
-E: mr_fred_smoothie@yahoo.com
+E: dave.neuer@pobox.com
 D: Helped implement support for Compaq's H31xx series iPAQs
 D: Other mostly minor tweaks & bugfixes
-S: 325 E. Main St., Suite 3
-S: Carnegie, PA 15105
-S: USA
 
 N: Michael Neuffer
 E: mike@i-Connect.Net
diff -urN linux/MAINTAINERS linux/MAINTAINERS
--- linux/MAINTAINERS   2005/06/07 13:45:25     1.181
+++ linux/MAINTAINERS   2005/06/18 14:42:38     1.182
@@ -73,7 +73,7 @@
 3C359 NETWORK DRIVER
 P:     Mike Phillips
 M:     mikep@linuxtr.net
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 L:     linux-tr@linuxtr.net
 W:     http://www.linuxtr.net
 S:     Maintained
@@ -81,13 +81,13 @@
 3C505 NETWORK DRIVER
 P:     Philip Blundell
 M:     philb@gnu.org
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 3CR990 NETWORK DRIVER
 P:     David Dillow
 M:     dave@thedillows.org
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 3W-XXXX ATA-RAID CONTROLLER DRIVER
@@ -130,7 +130,7 @@
 8169 10/100/1000 GIGABIT ETHERNET DRIVER
 P:     Francois Romieu
 M:     romieu@fr.zoreil.com
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
@@ -143,7 +143,7 @@
 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
 P:     Paul Gortmaker
 M:     p_gortmaker@yahoo.com
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 A2232 SERIAL BOARD DRIVER
@@ -332,7 +332,7 @@
 
 ARPD SUPPORT
 P:     Jonathan Layes
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 ASUS ACPI EXTRAS DRIVER
@@ -706,7 +706,7 @@
 
 DIGI RIGHTSWITCH NETWORK DRIVER
 P:     Rick Richardson
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 W:     http://www.digi.com
 S:     Orphaned
 
@@ -812,7 +812,7 @@
 ETHEREXPRESS-16 NETWORK DRIVER
 P:     Philip Blundell
 M:     philb@gnu.org
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 ETHERNET BRIDGE
@@ -875,7 +875,7 @@
 FRAME RELAY DLCI/FRAD (Sangoma drivers too)
 P:     Mike McLagan
 M:     mike.mclagan@linux.org
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 FREEVXFS FILESYSTEM
@@ -1215,7 +1215,7 @@
 IPX NETWORK LAYER
 P:     Arnaldo Carvalho de Melo
 M:     acme@conectiva.com.br
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 IRDA SUBSYSTEM
@@ -1482,7 +1482,7 @@
 P:     Manish Lachwani
 M:     Manish_Lachwani@pmc-sierra.com
 L:     linux-mips@linux-mips.org
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Supported
 
 MATROX FRAMEBUFFER DRIVER
@@ -1592,13 +1592,13 @@
 M:     akpm@osdl.org
 P:     Jeff Garzik
 M:     jgarzik@pobox.com
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 NETWORKING [GENERAL]
 P:     Networking Team
-M:     netdev@oss.sgi.com
-L:     netdev@oss.sgi.com
+M:     netdev@vger.kernel.org
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 NETWORKING [IPv4/IPv6]
@@ -1614,7 +1614,7 @@
 M:     yoshfuji@linux-ipv6.org
 P:     Patrick McHardy
 M:     kaber@coreworks.de
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 IPVS
@@ -1634,7 +1634,7 @@
 P:     Jan-Pascal van Best and Andreas Mohr
 M:     Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl>
 M:     Andreas Mohr <100.30936@germany.net>
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER
@@ -1676,7 +1676,7 @@
 M:     p2@ace.ulyssis.student.kuleuven.ac.be
 P:     Mike Phillips
 M:     mikep@linuxtr.net 
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 L:     linux-tr@linuxtr.net
 W:     http://www.linuxtr.net
 S:     Maintained
@@ -1783,7 +1783,7 @@
 PCNET32 NETWORK DRIVER
 P:     Thomas Bogendörfer
 M:     tsbogend@alpha.franken.de
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 PHRAM MTD DRIVER
@@ -1795,7 +1795,7 @@
 POSIX CLOCKS and TIMERS
 P:     George Anzinger
 M:     george@mvista.com
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Supported
 
 PNP SUPPORT
@@ -1830,7 +1830,7 @@
 PRISM54 WIRELESS DRIVER
 P:     Prism54 Development Team
 M:     prism54-private@prism54.org
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 W:     http://prism54.org
 S:     Maintained
 
@@ -2047,7 +2047,7 @@
 P:     Daniele Venzano
 M:     venza@brownhat.org
 W:     http://www.brownhat.org/sis900.html
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 SIS FRAMEBUFFER DRIVER
@@ -2106,7 +2106,7 @@
 SONIC NETWORK DRIVER
 P:     Thomas Bogendoerfer
 M:     tsbogend@alpha.franken.de
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Maintained
 
 SONY VAIO CONTROL DEVICE DRIVER
@@ -2163,7 +2163,7 @@
 SPX NETWORK LAYER
 P:     Jay Schulist
 M:     jschlst@samba.org
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 S:     Supported
 
 SRM (Alpha) environment access
@@ -2242,7 +2242,7 @@
 TOKEN-RING NETWORK DRIVER
 P:     Mike Phillips
 M:     mikep@linuxtr.net
-L:     netdev@oss.sgi.com
+L:     netdev@vger.kernel.org
 L:     linux-tr@linuxtr.net
 W:     http://www.linuxtr.net
 S:     Maintained
diff -urN linux/Makefile linux/Makefile
--- linux/Makefile      2005/06/07 13:45:25     1.253
+++ linux/Makefile      2005/06/18 14:42:38     1.254
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 12
-EXTRAVERSION =-rc6
+EXTRAVERSION =
 NAME=Woozy Numbat
 
 # *DOCUMENTATION*
diff -urN linux/Documentation/SubmittingPatches 
linux/Documentation/SubmittingPatches
--- linux/Documentation/SubmittingPatches       2004/06/09 14:12:03     1.10
+++ linux/Documentation/SubmittingPatches       2005/06/18 14:42:38     1.11
@@ -271,7 +271,7 @@
 pass it on as a open-source patch.  The rules are pretty simple: if you
 can certify the below:
 
-        Developer's Certificate of Origin 1.0
+        Developer's Certificate of Origin 1.1
 
         By making a contribution to this project, I certify that:
 
@@ -291,6 +291,12 @@
             person who certified (a), (b) or (c) and I have not modified
             it.
 
+       (d) I understand and agree that this project and the contribution
+           are public and that a record of the contribution (including all
+           personal information I submit with it, including my sign-off) is
+           maintained indefinitely and may be redistributed consistent with
+           this project or the open source license(s) involved.
+
 then you just add a line saying
 
        Signed-off-by: Random J Developer <random@developer.org>
diff -urN linux/Documentation/networking/vortex.txt 
linux/Documentation/networking/vortex.txt
--- linux/Documentation/networking/vortex.txt   2004/03/11 16:46:40     1.13
+++ linux/Documentation/networking/vortex.txt   2005/06/18 14:42:38     1.14
@@ -12,7 +12,7 @@
 Please report problems to one or more of:
 
   Andrew Morton <andrewm@uow.edu.au>
-  Netdev mailing list <netdev@oss.sgi.com>
+  Netdev mailing list <netdev@vger.kernel.org>
   Linux kernel mailing list <linux-kernel@vger.kernel.org>
 
 Please note the 'Reporting and Diagnosing Problems' section at the end
diff -urN linux/arch/arm/Kconfig linux/arch/arm/Kconfig
--- linux/arch/arm/Kconfig      2005/05/19 12:08:06     1.47
+++ linux/arch/arm/Kconfig      2005/06/18 14:42:38     1.48
@@ -497,7 +497,7 @@
 
 config CPU_FREQ_SA1100
        bool
-       depends on CPU_FREQ && (SA1100_LART || SA1100_PLEB)
+       depends on CPU_FREQ && (SA1100_H3100 || SA1100_H3600 || SA1100_H3800 || 
SA1100_LART || SA1100_PLEB || SA1100_BADGE4 || SA1100_HACKKIT)
        default y
 
 config CPU_FREQ_SA1110
@@ -689,7 +689,9 @@
 
 source "drivers/acorn/block/Kconfig"
 
-if ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX || ARCH_L7200 || ARCH_LH7A40X 
|| ARCH_PXA || ARCH_RPC || ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || 
FOOTBRIDGE
+if PCMCIA || ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX \
+       || ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC \
+       || ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE
 source "drivers/ide/Kconfig"
 endif
 
diff -urN linux/arch/arm/boot/compressed/head-xscale.S 
linux/arch/arm/boot/compressed/head-xscale.S
--- linux/arch/arm/boot/compressed/head-xscale.S        2005/02/07 02:54:30     
1.10
+++ linux/arch/arm/boot/compressed/head-xscale.S        2005/06/18 14:42:38     
1.11
@@ -47,3 +47,10 @@
                orr     r7, r7, #(MACH_TYPE_GTWX5715 & 0xff00)
 #endif
 
+#ifdef CONFIG_ARCH_IXP2000
+               mov     r1, #-1
+               mov     r0, #0xd6000000
+               str     r1, [r0, #0x14]
+               str     r1, [r0, #0x18]
+#endif
+
diff -urN linux/arch/arm/configs/badge4_defconfig 
linux/arch/arm/configs/badge4_defconfig
--- linux/arch/arm/configs/badge4_defconfig     2005/04/08 18:57:49     1.4
+++ linux/arch/arm/configs/badge4_defconfig     2005/06/18 14:42:38     1.5
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc1-bk2
-# Sat Mar 26 21:32:26 2005
+# Linux kernel version: 2.6.12-rc6-git3
+# Thu Jun  9 19:00:50 2005
 #
 CONFIG_ARM=y
 CONFIG_MMU=y
@@ -16,6 +16,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -34,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -109,7 +112,6 @@
 CONFIG_CPU_CACHE_V4WB=y
 CONFIG_CPU_CACHE_VIVT=y
 CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_MINICACHE=y
 
 #
 # Processor Features
@@ -122,6 +124,7 @@
 # Bus support
 #
 CONFIG_ISA=y
+CONFIG_ISA_DMA_API=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -131,6 +134,7 @@
 #
 # Kernel Features
 #
+# CONFIG_SMP is not set
 # CONFIG_PREEMPT is not set
 CONFIG_DISCONTIGMEM=y
 # CONFIG_LEDS is not set
@@ -152,12 +156,14 @@
 # CONFIG_CPU_FREQ_DEBUG is not set
 CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
 # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
-# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
 # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_SA1100=y
 
 #
 # Floating point emulation
@@ -294,7 +300,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_XD is not set
 # CONFIG_PARIDE is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
@@ -428,7 +433,6 @@
 #
 CONFIG_PACKET=y
 # CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
 # CONFIG_NET_KEY is not set
 CONFIG_INET=y
@@ -526,6 +530,7 @@
 # CONFIG_SMC_IRCC_FIR is not set
 # CONFIG_ALI_FIR is not set
 CONFIG_SA1100_FIR=y
+# CONFIG_VIA_FIR is not set
 CONFIG_BT=m
 CONFIG_BT_L2CAP=m
 # CONFIG_BT_SCO is not set
@@ -618,7 +623,6 @@
 #
 # CONFIG_SERIO is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
@@ -687,7 +691,6 @@
 #
 # TPM devices
 #
-# CONFIG_TCG_TPM is not set
 
 #
 # I2C support
@@ -736,6 +739,7 @@
 # CONFIG_SENSORS_LM85 is not set
 # CONFIG_SENSORS_LM87 is not set
 # CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
 # CONFIG_SENSORS_MAX1619 is not set
 # CONFIG_SENSORS_PC87360 is not set
 # CONFIG_SENSORS_SMSC47B397 is not set
@@ -747,6 +751,7 @@
 #
 # Other I2C Chip support
 #
+# CONFIG_SENSORS_DS1337 is not set
 # CONFIG_SENSORS_EEPROM is not set
 # CONFIG_SENSORS_PCF8574 is not set
 # CONFIG_SENSORS_PCF8591 is not set
@@ -871,7 +876,6 @@
 #
 CONFIG_USB_STORAGE=y
 CONFIG_USB_STORAGE_DEBUG=y
-# CONFIG_USB_STORAGE_RW_DETECT is not set
 # CONFIG_USB_STORAGE_DATAFAB is not set
 # CONFIG_USB_STORAGE_FREECOM is not set
 # CONFIG_USB_STORAGE_ISD200 is not set
@@ -954,9 +958,11 @@
 #
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
 CONFIG_USB_SERIAL_BELKIN=m
 CONFIG_USB_SERIAL_WHITEHEAT=m
 CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
 # CONFIG_USB_SERIAL_CYPRESS_M8 is not set
 CONFIG_USB_SERIAL_EMPEG=m
 CONFIG_USB_SERIAL_FTDI_SIO=m
@@ -985,6 +991,7 @@
 # CONFIG_USB_SERIAL_KOBIL_SCT is not set
 CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_SAFE is not set
 # CONFIG_USB_SERIAL_TI is not set
 CONFIG_USB_SERIAL_CYBERJACK=m
diff -urN linux/arch/arm/configs/h3600_defconfig 
linux/arch/arm/configs/h3600_defconfig
--- linux/arch/arm/configs/h3600_defconfig      2005/04/08 18:57:49     1.4
+++ linux/arch/arm/configs/h3600_defconfig      2005/06/18 14:42:38     1.5
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc1-bk2
-# Mon Mar 28 00:02:26 2005
+# Linux kernel version: 2.6.12-rc4
+# Thu Jun  9 01:59:03 2005
 #
 CONFIG_ARM=y
 CONFIG_MMU=y
@@ -16,6 +16,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -33,6 +34,8 @@
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -120,6 +123,7 @@
 # Bus support
 #
 CONFIG_ISA=y
+CONFIG_ISA_DMA_API=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -138,6 +142,7 @@
 #
 # Kernel Features
 #
+# CONFIG_SMP is not set
 # CONFIG_PREEMPT is not set
 CONFIG_DISCONTIGMEM=y
 # CONFIG_LEDS is not set
@@ -159,12 +164,13 @@
 # CONFIG_CPU_FREQ_DEBUG is not set
 CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
 # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
-# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
 # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_SA1100=y
 
 #
 # Floating point emulation
@@ -298,7 +304,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_XD is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 CONFIG_BLK_DEV_LOOP=m
@@ -379,7 +384,6 @@
 # Networking options
 #
 # CONFIG_PACKET is not set
-# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
 # CONFIG_NET_KEY is not set
 CONFIG_INET=y
@@ -476,6 +480,7 @@
 # CONFIG_SMC_IRCC_FIR is not set
 # CONFIG_ALI_FIR is not set
 CONFIG_SA1100_FIR=m
+# CONFIG_VIA_FIR is not set
 # CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
@@ -647,7 +652,6 @@
 #
 # TPM devices
 #
-# CONFIG_TCG_TPM is not set
 
 #
 # I2C support
@@ -676,9 +680,11 @@
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
 CONFIG_FB_SOFT_CURSOR=y
+# CONFIG_FB_MACMODES is not set
 # CONFIG_FB_MODE_HELPERS is not set
 # CONFIG_FB_TILEBLITTING is not set
 CONFIG_FB_SA1100=y
+# CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
 
 #
diff -urN linux/arch/arm/configs/hackkit_defconfig 
linux/arch/arm/configs/hackkit_defconfig
--- linux/arch/arm/configs/hackkit_defconfig    2005/04/08 18:57:49     1.4
+++ linux/arch/arm/configs/hackkit_defconfig    2005/06/18 14:42:38     1.5
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc1-bk2
-# Mon Mar 28 00:22:34 2005
+# Linux kernel version: 2.6.12-rc6-git3
+# Thu Jun  9 20:58:58 2005
 #
 CONFIG_ARM=y
 CONFIG_MMU=y
@@ -16,6 +16,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -34,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -109,7 +112,6 @@
 CONFIG_CPU_CACHE_V4WB=y
 CONFIG_CPU_CACHE_VIVT=y
 CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_MINICACHE=y
 
 #
 # Processor Features
@@ -119,6 +121,7 @@
 # Bus support
 #
 CONFIG_ISA=y
+CONFIG_ISA_DMA_API=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -128,6 +131,7 @@
 #
 # Kernel Features
 #
+# CONFIG_SMP is not set
 # CONFIG_PREEMPT is not set
 CONFIG_DISCONTIGMEM=y
 CONFIG_LEDS=y
@@ -151,12 +155,14 @@
 # CONFIG_CPU_FREQ_DEBUG is not set
 CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
 # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
-# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
 # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_SA1100=y
 
 #
 # Floating point emulation
@@ -280,7 +286,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_XD is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 # CONFIG_BLK_DEV_LOOP is not set
@@ -338,7 +343,6 @@
 #
 CONFIG_PACKET=y
 # CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
 # CONFIG_NET_KEY is not set
 CONFIG_INET=y
@@ -484,7 +488,6 @@
 CONFIG_SERIO_SERPORT=y
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
@@ -533,7 +536,6 @@
 #
 # TPM devices
 #
-# CONFIG_TCG_TPM is not set
 
 #
 # I2C support
diff -urN linux/arch/arm/kernel/entry-armv.S linux/arch/arm/kernel/entry-armv.S
--- linux/arch/arm/kernel/entry-armv.S  2005/05/19 12:08:06     1.66
+++ linux/arch/arm/kernel/entry-armv.S  2005/06/18 14:42:38     1.67
@@ -269,7 +269,7 @@
        add     r5, sp, #S_PC
        ldmia   r7, {r2 - r4}                   @ Get USR pc, cpsr
 
-#if __LINUX_ARM_ARCH__ < 6
+#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
        @ make sure our user space atomic helper is aborted
        cmp     r2, #VIRT_OFFSET
        bichs   r3, r3, #PSR_Z_BIT
@@ -616,11 +616,17 @@
 
 __kuser_cmpxchg:                               @ 0xffff0fc0
 
-#if __LINUX_ARM_ARCH__ < 6
+#if defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
 
-#ifdef CONFIG_SMP  /* sanity check */
-#error "CONFIG_SMP on a machine supporting pre-ARMv6 processors?"
-#endif
+       /*
+        * Poor you.  No fast solution possible...
+        * The kernel itself must perform the operation.
+        * A special ghost syscall is used for that (see traps.c).
+        */
+       swi     #0x9ffff0
+       mov     pc, lr
+
+#elif __LINUX_ARM_ARCH__ < 6
 
        /*
         * Theory of operation:
diff -urN linux/arch/arm/kernel/traps.c linux/arch/arm/kernel/traps.c
--- linux/arch/arm/kernel/traps.c       2005/05/19 12:08:06     1.51
+++ linux/arch/arm/kernel/traps.c       2005/06/18 14:42:38     1.52
@@ -464,6 +464,55 @@
 #endif
                return 0;
 
+#ifdef CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG
+       /*
+        * Atomically store r1 in *r2 if *r2 is equal to r0 for user space.
+        * Return zero in r0 if *MEM was changed or non-zero if no exchange
+        * happened.  Also set the user C flag accordingly.
+        * If access permissions have to be fixed up then non-zero is
+        * returned and the operation has to be re-attempted.
+        *
+        * *NOTE*: This is a ghost syscall private to the kernel.  Only the
+        * __kuser_cmpxchg code in entry-armv.S should be aware of its
+        * existence.  Don't ever use this from user code.
+        */
+       case 0xfff0:
+       {
+               extern void do_DataAbort(unsigned long addr, unsigned int fsr,
+                                        struct pt_regs *regs);
+               unsigned long val;
+               unsigned long addr = regs->ARM_r2;
+               struct mm_struct *mm = current->mm;
+               pgd_t *pgd; pmd_t *pmd; pte_t *pte;
+
+               regs->ARM_cpsr &= ~PSR_C_BIT;
+               spin_lock(&mm->page_table_lock);
+               pgd = pgd_offset(mm, addr);
+               if (!pgd_present(*pgd))
+                       goto bad_access;
+               pmd = pmd_offset(pgd, addr);
+               if (!pmd_present(*pmd))
+                       goto bad_access;
+               pte = pte_offset_map(pmd, addr);
+               if (!pte_present(*pte) || !pte_write(*pte))
+                       goto bad_access;
+               val = *(unsigned long *)addr;
+               val -= regs->ARM_r0;
+               if (val == 0) {
+                       *(unsigned long *)addr = regs->ARM_r1;
+                       regs->ARM_cpsr |= PSR_C_BIT;
+               }
+               spin_unlock(&mm->page_table_lock);
+               return val;
+
+               bad_access:
+               spin_unlock(&mm->page_table_lock);
+               /* simulate a read access fault */
+               do_DataAbort(addr, 15 + (1 << 11), regs);
+               return -1;
+       }
+#endif
+
        default:
                /* Calls 9f00xx..9f07ff are defined to return -ENOSYS
                   if not implemented, rather than raising SIGILL.  This
diff -urN linux/arch/arm/lib/io-writesw-armv4.S 
linux/arch/arm/lib/io-writesw-armv4.S
--- linux/arch/arm/lib/io-writesw-armv4.S       2005/01/25 04:27:52     1.6
+++ linux/arch/arm/lib/io-writesw-armv4.S       2005/06/18 14:42:38     1.7
@@ -87,9 +87,9 @@
                subs    r2, r2, #2
                orr     ip, ip, r3, push_hbyte1
                strh    ip, [r0]
-               bpl     2b
+               bpl     1b
 
-3:             tst     r2, #1
-2:             movne   ip, r3, lsr #8
+               tst     r2, #1
+3:             movne   ip, r3, lsr #8
                strneh  ip, [r0]
                mov     pc, lr
diff -urN linux/arch/arm/mach-integrator/integrator_cp.c 
linux/arch/arm/mach-integrator/integrator_cp.c
--- linux/arch/arm/mach-integrator/integrator_cp.c      2005/05/19 12:08:07     
1.7
+++ linux/arch/arm/mach-integrator/integrator_cp.c      2005/06/18 14:42:38     
1.8
@@ -83,7 +83,6 @@
  { IO_ADDRESS(INTEGRATOR_UART1_BASE), INTEGRATOR_UART1_BASE, SZ_4K,  MT_DEVICE 
},
  { IO_ADDRESS(INTEGRATOR_DBG_BASE),   INTEGRATOR_DBG_BASE,   SZ_4K,  MT_DEVICE 
},
  { IO_ADDRESS(INTEGRATOR_GPIO_BASE),  INTEGRATOR_GPIO_BASE,  SZ_4K,  MT_DEVICE 
},
- { 0xfc900000, 0xc9000000, SZ_4K, MT_DEVICE },
  { 0xfca00000, 0xca000000, SZ_4K, MT_DEVICE },
  { 0xfcb00000, 0xcb000000, SZ_4K, MT_DEVICE },
 };
diff -urN linux/arch/arm/mach-pxa/lubbock.c linux/arch/arm/mach-pxa/lubbock.c
--- linux/arch/arm/mach-pxa/lubbock.c   2005/03/18 17:36:46     1.23
+++ linux/arch/arm/mach-pxa/lubbock.c   2005/06/18 14:42:39     1.24
@@ -15,6 +15,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/device.h>
+#include <linux/sysdev.h>
 #include <linux/major.h>
 #include <linux/fb.h>
 #include <linux/interrupt.h>
@@ -106,6 +107,35 @@
        set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
 }
 
+#ifdef CONFIG_PM
+
+static int lubbock_irq_resume(struct sys_device *dev)
+{
+       LUB_IRQ_MASK_EN = lubbock_irq_enabled;
+       return 0;
+}
+
+static struct sysdev_class lubbock_irq_sysclass = {
+       set_kset_name("cpld_irq"),
+       .resume = lubbock_irq_resume,
+};
+
+static struct sys_device lubbock_irq_device = {
+       .cls = &lubbock_irq_sysclass,
+};
+
+static int __init lubbock_irq_device_init(void)
+{
+       int ret = sysdev_class_register(&lubbock_irq_sysclass);
+       if (ret == 0)
+               ret = sysdev_register(&lubbock_irq_device);
+       return ret;
+}
+
+device_initcall(lubbock_irq_device_init);
+
+#endif
+
 static int lubbock_udc_is_connected(void)
 {
        return (LUB_MISC_RD & (1 << 9)) == 0;
diff -urN linux/arch/arm/mach-pxa/mainstone.c 
linux/arch/arm/mach-pxa/mainstone.c
--- linux/arch/arm/mach-pxa/mainstone.c 2005/03/18 17:36:46     1.9
+++ linux/arch/arm/mach-pxa/mainstone.c 2005/06/18 14:42:39     1.10
@@ -15,6 +15,7 @@
 
 #include <linux/init.h>
 #include <linux/device.h>
+#include <linux/sysdev.h>
 #include <linux/interrupt.h>
 #include <linux/sched.h>
 #include <linux/bitops.h>
@@ -62,7 +63,6 @@
        .unmask         = mainstone_unmask_irq,
 };
 
-
 static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc,
                                  struct pt_regs *regs)
 {
@@ -100,6 +100,35 @@
        set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
 }
 
+#ifdef CONFIG_PM
+
+static int mainstone_irq_resume(struct sys_device *dev)
+{
+       MST_INTMSKENA = mainstone_irq_enabled;
+       return 0;
+}
+
+static struct sysdev_class mainstone_irq_sysclass = {
+       set_kset_name("cpld_irq"),
+       .resume = mainstone_irq_resume,
+};
+
+static struct sys_device mainstone_irq_device = {
+       .cls = &mainstone_irq_sysclass,
+};
+
+static int __init mainstone_irq_device_init(void)
+{
+       int ret = sysdev_class_register(&mainstone_irq_sysclass);
+       if (ret == 0)
+               ret = sysdev_register(&mainstone_irq_device);
+       return ret;
+}
+
+device_initcall(mainstone_irq_device_init);
+
+#endif
+
 
 static struct resource smc91x_resources[] = {
        [0] = {
@@ -304,6 +333,15 @@
        PWER  = 0xC0000002;
        PRER  = 0x00000002;
        PFER  = 0x00000002;
+       /*      for use I SRAM as framebuffer.  */
+       PSLR |= 0xF04;
+       PCFR = 0x66;
+       /*      For Keypad wakeup.      */
+       KPC &=~KPC_ASACT;
+       KPC |=KPC_AS;
+       PKWR  = 0x000FD000;
+       /*      Need read PKWR back after set it.       */
+       PKWR;
 }
 
 MACHINE_START(MAINSTONE, "Intel HCDDBBVA0 Development Platform (aka 
Mainstone)")
diff -urN linux/arch/arm/mach-pxa/pm.c linux/arch/arm/mach-pxa/pm.c
--- linux/arch/arm/mach-pxa/pm.c        2005/03/18 17:36:46     1.13
+++ linux/arch/arm/mach-pxa/pm.c        2005/06/18 14:42:39     1.14
@@ -29,9 +29,6 @@
  */
 #undef DEBUG
 
-extern void pxa_cpu_suspend(void);
-extern void pxa_cpu_resume(void);
-
 #define SAVE(x)                sleep_save[SLEEP_SAVE_##x] = x
 #define RESTORE(x)     x = sleep_save[SLEEP_SAVE_##x]
 
@@ -63,6 +60,12 @@
        SLEEP_SAVE_ICMR,
        SLEEP_SAVE_CKEN,
 
+#ifdef CONFIG_PXA27x
+       SLEEP_SAVE_MDREFR,
+       SLEEP_SAVE_PWER, SLEEP_SAVE_PCFR, SLEEP_SAVE_PRER,
+       SLEEP_SAVE_PFER, SLEEP_SAVE_PKWR,
+#endif
+
        SLEEP_SAVE_CKSUM,
 
        SLEEP_SAVE_SIZE
@@ -75,9 +78,7 @@
        unsigned long checksum = 0;
        struct timespec delta, rtc;
        int i;
-
-       if (state != PM_SUSPEND_MEM)
-               return -EINVAL;
+       extern void pxa_cpu_pm_enter(suspend_state_t state);
 
 #ifdef CONFIG_IWMMXT
        /* force any iWMMXt context to ram **/
@@ -100,16 +101,17 @@
        SAVE(GAFR2_L); SAVE(GAFR2_U);
 
 #ifdef CONFIG_PXA27x
+       SAVE(MDREFR);
        SAVE(GPLR3); SAVE(GPDR3); SAVE(GRER3); SAVE(GFER3); SAVE(PGSR3);
        SAVE(GAFR3_L); SAVE(GAFR3_U);
+       SAVE(PWER); SAVE(PCFR); SAVE(PRER);
+       SAVE(PFER); SAVE(PKWR);
 #endif
 
        SAVE(ICMR);
        ICMR = 0;
 
        SAVE(CKEN);
-       CKEN = 0;
-
        SAVE(PSTR);
 
        /* Note: wake up source are set up in each machine specific files */
@@ -123,16 +125,13 @@
        /* Clear sleep reset status */
        RCSR = RCSR_SMR;
 
-       /* set resume return address */
-       PSPR = virt_to_phys(pxa_cpu_resume);
-
        /* before sleeping, calculate and save a checksum */
        for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
                checksum += sleep_save[i];
        sleep_save[SLEEP_SAVE_CKSUM] = checksum;
 
        /* *** go zzz *** */
-       pxa_cpu_suspend();
+       pxa_cpu_pm_enter(state);
 
        /* after sleeping, validate the checksum */
        checksum = 0;
@@ -145,7 +144,7 @@
                LUB_HEXLED = 0xbadbadc5;
 #endif
                while (1)
-                       pxa_cpu_suspend();
+                       pxa_cpu_pm_enter(state);
        }
 
        /* ensure not to come back here if it wasn't intended */
@@ -162,8 +161,11 @@
        RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2);
 
 #ifdef CONFIG_PXA27x
+       RESTORE(MDREFR);
        RESTORE(GAFR3_L); RESTORE(GAFR3_U); RESTORE_GPLEVEL(3);
        RESTORE(GPDR3); RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3);
+       RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER);
+       RESTORE(PFER); RESTORE(PKWR);
 #endif
 
        PSSR = PSSR_RDH | PSSR_PH;
@@ -197,7 +199,9 @@
  */
 static int pxa_pm_prepare(suspend_state_t state)
 {
-       return 0;
+       extern int pxa_cpu_pm_prepare(suspend_state_t state);
+
+       return pxa_cpu_pm_prepare(state);
 }
 
 /*
diff -urN linux/arch/arm/mach-pxa/pxa25x.c linux/arch/arm/mach-pxa/pxa25x.c
--- linux/arch/arm/mach-pxa/pxa25x.c    2004/10/12 01:45:40     1.3
+++ linux/arch/arm/mach-pxa/pxa25x.c    2005/06/18 14:42:39     1.4
@@ -16,6 +16,7 @@
  * initialization stuff for PXA machines which can be overridden later if
  * need be.
  */
+#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -102,3 +103,35 @@
 }
 
 EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
+
+#ifdef CONFIG_PM
+
+int pxa_cpu_pm_prepare(suspend_state_t state)
+{
+       switch (state) {
+       case PM_SUSPEND_MEM:
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+void pxa_cpu_pm_enter(suspend_state_t state)
+{
+       extern void pxa_cpu_suspend(unsigned int);
+       extern void pxa_cpu_resume(void);
+
+       CKEN = 0;
+
+       switch (state) {
+       case PM_SUSPEND_MEM:
+               /* set resume return address */
+               PSPR = virt_to_phys(pxa_cpu_resume);
+               pxa_cpu_suspend(3);
+               break;
+       }
+}
+
+#endif
diff -urN linux/arch/arm/mach-pxa/pxa27x.c linux/arch/arm/mach-pxa/pxa27x.c
--- linux/arch/arm/mach-pxa/pxa27x.c    2004/10/25 20:44:11     1.4
+++ linux/arch/arm/mach-pxa/pxa27x.c    2005/06/18 14:42:39     1.5
@@ -120,6 +120,42 @@
 EXPORT_SYMBOL(get_memclk_frequency_10khz);
 EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
 
+#ifdef CONFIG_PM
+
+int pxa_cpu_pm_prepare(suspend_state_t state)
+{
+       switch (state) {
+       case PM_SUSPEND_MEM:
+               return 0;
+       default:
+               return -EINVAL;
+       }
+}
+
+void pxa_cpu_pm_enter(suspend_state_t state)
+{
+       extern void pxa_cpu_standby(void);
+       extern void pxa_cpu_suspend(unsigned int);
+       extern void pxa_cpu_resume(void);
+
+       CKEN = CKEN22_MEMC | CKEN9_OSTIMER;
+
+       /* ensure voltage-change sequencer not initiated, which hangs */
+       PCFR &= ~PCFR_FVC;
+
+       /* Clear edge-detect status register. */
+       PEDR = 0xDF12FE1B;
+
+       switch (state) {
+       case PM_SUSPEND_MEM:
+               /* set resume return address */
+               PSPR = virt_to_phys(pxa_cpu_resume);
+               pxa_cpu_suspend(3);
+               break;
+       }
+}
+
+#endif
 
 /*
  * device registration specific to PXA27x.
diff -urN linux/arch/arm/mach-s3c2410/dma.c linux/arch/arm/mach-s3c2410/dma.c
--- linux/arch/arm/mach-s3c2410/dma.c   2005/04/08 18:57:52     1.6
+++ linux/arch/arm/mach-s3c2410/dma.c   2005/06/18 14:42:39     1.7
@@ -785,6 +785,10 @@
        chan->client = NULL;
        chan->in_use = 0;
 
+       if (chan->irq_claimed)
+               free_irq(chan->irq, (void *)chan);
+       chan->irq_claimed = 0;
+
        local_irq_restore(flags);
 
        return 0;
diff -urN linux/arch/arm/mach-sa1100/Kconfig linux/arch/arm/mach-sa1100/Kconfig
--- linux/arch/arm/mach-sa1100/Kconfig  2005/04/08 18:57:52     1.11
+++ linux/arch/arm/mach-sa1100/Kconfig  2005/06/18 14:42:39     1.12
@@ -150,7 +150,7 @@
 
 config H3600_SLEEVE
        tristate "Compaq iPAQ Handheld sleeve support"
-       depends on SA1100_H3600
+       depends on SA1100_H3100 || SA1100_H3600
        help
          Choose this option to enable support for extension packs (sleeves)
          for the Compaq iPAQ H3XXX series of handheld computers.  This option
diff -urN linux/arch/arm/mach-versatile/core.c 
linux/arch/arm/mach-versatile/core.c
--- linux/arch/arm/mach-versatile/core.c        2005/01/13 14:05:19     1.10
+++ linux/arch/arm/mach-versatile/core.c        2005/06/18 14:42:39     1.11
@@ -543,7 +543,7 @@
                val |= SYS_CLCD_MODE_5551;
                break;
        case 6:
-               val |= SYS_CLCD_MODE_565_BLSB;
+               val |= SYS_CLCD_MODE_565_RLSB;
                break;
        case 8:
                val |= SYS_CLCD_MODE_888;
diff -urN linux/arch/arm/mm/copypage-xscale.c 
linux/arch/arm/mm/copypage-xscale.c
--- linux/arch/arm/mm/copypage-xscale.c 1970/01/01 00:00:00
+++ linux/arch/arm/mm/copypage-xscale.c 2005-06-18 15:42:39.514031000 +0100     
1.1
@@ -0,0 +1,131 @@
+/*
+ *  linux/arch/arm/lib/copypage-xscale.S
+ *
+ *  Copyright (C) 1995-2005 Russell King
+ *
+ * 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.
+ *
+ * This handles the mini data cache, as found on SA11x0 and XScale
+ * processors.  When we copy a user page page, we map it in such a way
+ * that accesses to this page will not touch the main data cache, but
+ * will be cached in the mini data cache.  This prevents us thrashing
+ * the main data cache on page faults.
+ */
+#include <linux/init.h>
+#include <linux/mm.h>
+
+#include <asm/page.h>
+#include <asm/pgtable.h>
+#include <asm/tlbflush.h>
+
+/*
+ * 0xffff8000 to 0xffffffff is reserved for any ARM architecture
+ * specific hacks for copying pages efficiently.
+ */
+#define COPYPAGE_MINICACHE     0xffff8000
+
+#define minicache_pgprot __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | \
+                                 L_PTE_CACHEABLE)
+
+#define TOP_PTE(x)     pte_offset_kernel(top_pmd, x)
+
+static DEFINE_SPINLOCK(minicache_lock);
+
+/*
+ * XScale mini-dcache optimised copy_user_page
+ *
+ * We flush the destination cache lines just before we write the data into the
+ * corresponding address.  Since the Dcache is read-allocate, this removes the
+ * Dcache aliasing issue.  The writes will be forwarded to the write buffer,
+ * and merged as appropriate.
+ */
+static void __attribute__((naked))
+mc_copy_user_page(void *from, void *to)
+{
+       /*
+        * Strangely enough, best performance is achieved
+        * when prefetching destination as well.  (NP)
+        */
+       asm volatile(
+       "stmfd  sp!, {r4, r5, lr}               \n\
+       mov     lr, %2                          \n\
+       pld     [r0, #0]                        \n\
+       pld     [r0, #32]                       \n\
+       pld     [r1, #0]                        \n\
+       pld     [r1, #32]                       \n\
+1:     pld     [r0, #64]                       \n\
+       pld     [r0, #96]                       \n\
+       pld     [r1, #64]                       \n\
+       pld     [r1, #96]                       \n\
+2:     ldrd    r2, [r0], #8                    \n\
+       ldrd    r4, [r0], #8                    \n\
+       mov     ip, r1                          \n\
+       strd    r2, [r1], #8                    \n\
+       ldrd    r2, [r0], #8                    \n\
+       strd    r4, [r1], #8                    \n\
+       ldrd    r4, [r0], #8                    \n\
+       strd    r2, [r1], #8                    \n\
+       strd    r4, [r1], #8                    \n\
+       mcr     p15, 0, ip, c7, c10, 1          @ clean D line\n\
+       ldrd    r2, [r0], #8                    \n\
+       mcr     p15, 0, ip, c7, c6, 1           @ invalidate D line\n\
+       ldrd    r4, [r0], #8                    \n\
+       mov     ip, r1                          \n\
+       strd    r2, [r1], #8                    \n\
+       ldrd    r2, [r0], #8                    \n\
+       strd    r4, [r1], #8                    \n\
+       ldrd    r4, [r0], #8                    \n\
+       strd    r2, [r1], #8                    \n\
+       strd    r4, [r1], #8                    \n\
+       mcr     p15, 0, ip, c7, c10, 1          @ clean D line\n\
+       subs    lr, lr, #1                      \n\
+       mcr     p15, 0, ip, c7, c6, 1           @ invalidate D line\n\
+       bgt     1b                              \n\
+       beq     2b                              \n\
+       ldmfd   sp!, {r4, r5, pc}               "
+       :
+       : "r" (from), "r" (to), "I" (PAGE_SIZE / 64 - 1));
+}
+
+void xscale_mc_copy_user_page(void *kto, const void *kfrom, unsigned long 
vaddr)
+{
+       spin_lock(&minicache_lock);
+
+       set_pte(TOP_PTE(COPYPAGE_MINICACHE), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, 
minicache_pgprot));
+       flush_tlb_kernel_page(COPYPAGE_MINICACHE);
+
+       mc_copy_user_page((void *)COPYPAGE_MINICACHE, kto);
+
+       spin_unlock(&minicache_lock);
+}
+
+/*
+ * XScale optimised clear_user_page
+ */
+void __attribute__((naked))
+xscale_mc_clear_user_page(void *kaddr, unsigned long vaddr)
+{
+       asm volatile(
+       "mov    r1, %0                          \n\
+       mov     r2, #0                          \n\
+       mov     r3, #0                          \n\
+1:     mov     ip, r0                          \n\
+       strd    r2, [r0], #8                    \n\
+       strd    r2, [r0], #8                    \n\
+       strd    r2, [r0], #8                    \n\
+       strd    r2, [r0], #8                    \n\
+       mcr     p15, 0, ip, c7, c10, 1          @ clean D line\n\
+       subs    r1, r1, #1                      \n\
+       mcr     p15, 0, ip, c7, c6, 1           @ invalidate D line\n\
+       bne     1b                              \n\
+       mov     pc, lr"
+       :
+       : "I" (PAGE_SIZE / 32));
+}
+
+struct cpu_user_fns xscale_mc_user_fns __initdata = {
+       .cpu_clear_user_page    = xscale_mc_clear_user_page, 
+       .cpu_copy_user_page     = xscale_mc_copy_user_page,
+};
diff -urN linux/arch/arm/mm/Kconfig linux/arch/arm/mm/Kconfig
--- linux/arch/arm/mm/Kconfig   2005/05/26 09:12:36     1.18
+++ linux/arch/arm/mm/Kconfig   2005/06/18 14:42:39     1.19
@@ -228,7 +228,6 @@
        select CPU_CACHE_V4WB
        select CPU_CACHE_VIVT
        select CPU_TLB_V4WB
-       select CPU_MINICACHE
 
 # XScale
 config CPU_XSCALE
@@ -239,7 +238,6 @@
        select CPU_ABRT_EV5T
        select CPU_CACHE_VIVT
        select CPU_TLB_V4WBI
-       select CPU_MINICACHE
 
 # ARMv6
 config CPU_V6
@@ -345,11 +343,6 @@
 config CPU_TLB_V6
        bool
 
-config CPU_MINICACHE
-       bool
-       help
-         Processor has a minicache.
-
 comment "Processor Features"
 
 config ARM_THUMB
@@ -429,3 +422,11 @@
          assume directly accessing that register and always obtain the
          expected value only on ARMv7 and above.
 
+config NEEDS_SYSCALL_FOR_CMPXCHG
+       bool
+       default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3)
+       help
+         SMP on a pre-ARMv6 processor?  Well OK then.
+         Forget about fast user space cmpxchg support.
+         It is just not possible.
+
diff -urN linux/arch/arm/mm/Makefile linux/arch/arm/mm/Makefile
--- linux/arch/arm/mm/Makefile  2004/09/19 12:30:02     1.33
+++ linux/arch/arm/mm/Makefile  2005/06/18 14:42:39     1.34
@@ -31,8 +31,6 @@
 obj-$(CONFIG_CPU_SA1100)       += copypage-v4mc.o
 obj-$(CONFIG_CPU_XSCALE)       += copypage-xscale.o
 
-obj-$(CONFIG_CPU_MINICACHE)    += minicache.o
-
 obj-$(CONFIG_CPU_TLB_V3)       += tlb-v3.o
 obj-$(CONFIG_CPU_TLB_V4WT)     += tlb-v4.o
 obj-$(CONFIG_CPU_TLB_V4WB)     += tlb-v4wb.o
diff -urN linux/arch/arm/mm/copypage-xscale.S 
linux/arch/arm/mm/copypage-xscale.S
--- linux/arch/arm/mm/Attic/copypage-xscale.S   2005-06-18 15:42:39.569988000 
+0100     1.4
+++ linux/arch/arm/mm/Attic/copypage-xscale.S   1970/01/01 00:00:00+0100
@@ -1,113 +0,0 @@
-/*
- *  linux/arch/arm/lib/copypage-xscale.S
- *
- *  Copyright (C) 2001 Russell King
- *
- * 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.
- */
-#include <linux/linkage.h>
-#include <linux/init.h>
-#include <asm/constants.h>
-
-/*
- * General note:
- *  We don't really want write-allocate cache behaviour for these functions
- *  since that will just eat through 8K of the cache.
- */
-
-       .text
-       .align  5
-/*
- * XScale optimised copy_user_page
- *  r0 = destination
- *  r1 = source
- *  r2 = virtual user address of ultimate destination page
- *
- * The source page may have some clean entries in the cache already, but we
- * can safely ignore them - break_cow() will flush them out of the cache
- * if we eventually end up using our copied page.
- *
- * What we could do is use the mini-cache to buffer reads from the source
- * page.  We rely on the mini-cache being smaller than one page, so we'll
- * cycle through the complete cache anyway.
- */
-ENTRY(xscale_mc_copy_user_page)
-       stmfd   sp!, {r4, r5, lr}
-       mov     r5, r0
-       mov     r0, r1
-       bl      map_page_minicache
-       mov     r1, r5
-       mov     lr, #PAGE_SZ/64-1
-
-       /*
-        * Strangely enough, best performance is achieved
-        * when prefetching destination as well.  (NP)
-        */
-       pld     [r0, #0]
-       pld     [r0, #32]
-       pld     [r1, #0]
-       pld     [r1, #32]
-
-1:     pld     [r0, #64]
-       pld     [r0, #96]
-       pld     [r1, #64]
-       pld     [r1, #96]
-
-2:     ldrd    r2, [r0], #8
-       ldrd    r4, [r0], #8
-       mov     ip, r1
-       strd    r2, [r1], #8
-       ldrd    r2, [r0], #8
-       strd    r4, [r1], #8
-       ldrd    r4, [r0], #8
-       strd    r2, [r1], #8
-       strd    r4, [r1], #8
-       mcr     p15, 0, ip, c7, c10, 1          @ clean D line
-       ldrd    r2, [r0], #8
-       mcr     p15, 0, ip, c7, c6, 1           @ invalidate D line
-       ldrd    r4, [r0], #8
-       mov     ip, r1
-       strd    r2, [r1], #8
-       ldrd    r2, [r0], #8
-       strd    r4, [r1], #8
-       ldrd    r4, [r0], #8
-       strd    r2, [r1], #8
-       strd    r4, [r1], #8
-       mcr     p15, 0, ip, c7, c10, 1          @ clean D line
-       subs    lr, lr, #1
-       mcr     p15, 0, ip, c7, c6, 1           @ invalidate D line
-       bgt     1b
-       beq     2b
-
-       ldmfd   sp!, {r4, r5, pc}
-
-       .align  5
-/*
- * XScale optimised clear_user_page
- *  r0 = destination
- *  r1 = virtual user address of ultimate destination page
- */
-ENTRY(xscale_mc_clear_user_page)
-       mov     r1, #PAGE_SZ/32
-       mov     r2, #0
-       mov     r3, #0
-1:     mov     ip, r0
-       strd    r2, [r0], #8
-       strd    r2, [r0], #8
-       strd    r2, [r0], #8
-       strd    r2, [r0], #8
-       mcr     p15, 0, ip, c7, c10, 1          @ clean D line
-       subs    r1, r1, #1
-       mcr     p15, 0, ip, c7, c6, 1           @ invalidate D line
-       bne     1b
-       mov     pc, lr
-
-       __INITDATA
-
-       .type   xscale_mc_user_fns, #object
-ENTRY(xscale_mc_user_fns)
-       .long   xscale_mc_clear_user_page
-       .long   xscale_mc_copy_user_page
-       .size   xscale_mc_user_fns, . - xscale_mc_user_fns
diff -urN linux/arch/arm/mm/minicache.c linux/arch/arm/mm/minicache.c
--- linux/arch/arm/mm/Attic/minicache.c 2005-06-18 15:42:39.585568000 +0100     
1.8
+++ linux/arch/arm/mm/Attic/minicache.c 1970/01/01 00:00:00+0100
@@ -1,73 +0,0 @@
-/*
- *  linux/arch/arm/mm/minicache.c
- *
- *  Copyright (C) 2001 Russell King
- *
- * 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.
- *
- * This handles the mini data cache, as found on SA11x0 and XScale
- * processors.  When we copy a user page page, we map it in such a way
- * that accesses to this page will not touch the main data cache, but
- * will be cached in the mini data cache.  This prevents us thrashing
- * the main data cache on page faults.
- */
-#include <linux/init.h>
-#include <linux/mm.h>
-
-#include <asm/page.h>
-#include <asm/pgtable.h>
-#include <asm/tlbflush.h>
-
-/*
- * 0xffff8000 to 0xffffffff is reserved for any ARM architecture
- * specific hacks for copying pages efficiently.
- */
-#define minicache_address (0xffff8000)
-#define minicache_pgprot __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | \
-                                 L_PTE_CACHEABLE)
-
-static pte_t *minicache_pte;
-
-/*
- * Note that this is intended to be called only from the copy_user_page
- * asm code; anything else will require special locking to prevent the
- * mini-cache space being re-used.  (Note: probably preempt unsafe).
- *
- * We rely on the fact that the minicache is 2K, and we'll be pushing
- * 4K of data through it, so we don't actually have to specifically
- * flush the minicache when we change the mapping.
- *
- * Note also: assert(PAGE_OFFSET <= virt < high_memory).
- * Unsafe: preempt, kmap.
- */
-unsigned long map_page_minicache(unsigned long virt)
-{
-       set_pte(minicache_pte, pfn_pte(__pa(virt) >> PAGE_SHIFT, 
minicache_pgprot));
-       flush_tlb_kernel_page(minicache_address);
-
-       return minicache_address;
-}
-
-static int __init minicache_init(void)
-{
-       pgd_t *pgd;
-       pmd_t *pmd;
-
-       spin_lock(&init_mm.page_table_lock);
-
-       pgd = pgd_offset_k(minicache_address);
-       pmd = pmd_alloc(&init_mm, pgd, minicache_address);
-       if (!pmd)
-               BUG();
-       minicache_pte = pte_alloc_kernel(&init_mm, pmd, minicache_address);
-       if (!minicache_pte)
-               BUG();
-
-       spin_unlock(&init_mm.page_table_lock);
-
-       return 0;
-}
-
-core_initcall(minicache_init);
diff -urN linux/arch/i386/kernel/Makefile linux/arch/i386/kernel/Makefile
--- linux/arch/i386/kernel/Makefile     2005/05/19 12:08:08     1.72
+++ linux/arch/i386/kernel/Makefile     2005/06/18 14:42:39     1.73
@@ -43,7 +43,7 @@
 # Note: kbuild does not track this dependency due to usage of .incbin
 $(obj)/vsyscall.o: $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so
 targets += $(foreach F,int80 sysenter,vsyscall-$F.o vsyscall-$F.so)
-targets += vsyscall.lds
+targets += vsyscall-note.o vsyscall.lds
 
 # The DSO images are built using a special linker script.
 quiet_cmd_syscall = SYSCALL $@
diff -urN linux/arch/i386/kernel/apm.c linux/arch/i386/kernel/apm.c
--- linux/arch/i386/kernel/apm.c        2005/04/08 18:57:53     1.76
+++ linux/arch/i386/kernel/apm.c        2005/06/18 14:42:39     1.77
@@ -1222,6 +1222,7 @@
 
        save_processor_state();
        err = set_system_power_state(APM_STATE_SUSPEND);
+       ignore_normal_resume = 1;
        restore_processor_state();
 
        local_irq_disable();
@@ -1229,7 +1230,6 @@
        spin_lock(&i8253_lock);
        reinit_timer();
        set_time();
-       ignore_normal_resume = 1;
 
        spin_unlock(&i8253_lock);
        write_sequnlock(&xtime_lock);
diff -urN linux/arch/ia64/kernel/fsys.S linux/arch/ia64/kernel/fsys.S
--- linux/arch/ia64/kernel/fsys.S       2005/05/19 12:08:09     1.19
+++ linux/arch/ia64/kernel/fsys.S       2005/06/18 14:42:39     1.20
@@ -460,9 +460,9 @@
        ;;
 
        st8 [r2]=r14                            // update current->blocked with 
new mask
-       cmpxchg4.acq r14=[r9],r18,ar.ccv        // current->thread_info->flags 
<- r18
+       cmpxchg4.acq r8=[r9],r18,ar.ccv         // current->thread_info->flags 
<- r18
        ;;
-       cmp.ne p6,p0=r17,r14                    // update failed?
+       cmp.ne p6,p0=r17,r8                     // update failed?
 (p6)   br.cond.spnt.few 1b                     // yes -> retry
 
 #ifdef CONFIG_SMP
diff -urN linux/arch/ia64/kernel/module.c linux/arch/ia64/kernel/module.c
--- linux/arch/ia64/kernel/module.c     2004/10/12 14:36:32     1.8
+++ linux/arch/ia64/kernel/module.c     2005/06/18 14:42:39     1.9
@@ -825,14 +825,16 @@
                 * XXX Should have an arch-hook for running this after final 
section
                 *     addresses have been selected...
                 */
-               /* See if gp can cover the entire core module:  */
-               uint64_t gp = (uint64_t) mod->module_core + MAX_LTOFF / 2;
-               if (mod->core_size >= MAX_LTOFF)
+               uint64_t gp;
+               if (mod->core_size > MAX_LTOFF)
                        /*
                         * This takes advantage of fact that SHF_ARCH_SMALL 
gets allocated
                         * at the end of the module.
                         */
-                       gp = (uint64_t) mod->module_core + mod->core_size - 
MAX_LTOFF / 2;
+                       gp = mod->core_size - MAX_LTOFF / 2;
+               else
+                       gp = mod->core_size / 2;
+               gp = (uint64_t) mod->module_core + ((gp + 7) & -8);
                mod->arch.gp = gp;
                DEBUGP("%s: placing gp at 0x%lx\n", __FUNCTION__, gp);
        }
diff -urN linux/arch/ia64/kernel/ptrace.c linux/arch/ia64/kernel/ptrace.c
--- linux/arch/ia64/kernel/ptrace.c     2005/06/07 13:45:26     1.38
+++ linux/arch/ia64/kernel/ptrace.c     2005/06/18 14:42:39     1.39
@@ -635,11 +635,17 @@
 {
        struct ia64_psr *psr = ia64_psr(ia64_task_regs(task));
 
+       /*
+        * Prevent migrating this task while
+        * we're fiddling with the FPU state
+        */
+       preempt_disable();
        if (ia64_is_local_fpu_owner(task) && psr->mfh) {
                psr->mfh = 0;
                task->thread.flags |= IA64_THREAD_FPH_VALID;
                ia64_save_fpu(&task->thread.fph[0]);
        }
+       preempt_enable();
 }
 
 /*
diff -urN linux/arch/ia64/kernel/setup.c linux/arch/ia64/kernel/setup.c
--- linux/arch/ia64/kernel/setup.c      2005/05/19 12:08:09     1.49
+++ linux/arch/ia64/kernel/setup.c      2005/06/18 14:42:39     1.50
@@ -720,7 +720,8 @@
        ia64_set_kr(IA64_KR_PT_BASE, __pa(ia64_imva(empty_zero_page)));
 
        /*
-        * Initialize default control register to defer all speculative faults. 
 The
+        * Initialize default control register to defer speculative faults 
except
+        * for those arising from TLB misses, which are not deferred.  The
         * kernel MUST NOT depend on a particular setting of these bits (in 
other words,
         * the kernel must have recovery code for all speculative accesses).  
Turn on
         * dcr.lc as per recommendation by the architecture team.  Most IA-32 
apps
diff -urN linux/arch/ia64/kernel/traps.c linux/arch/ia64/kernel/traps.c
--- linux/arch/ia64/kernel/traps.c      2005/02/13 20:16:16     1.34
+++ linux/arch/ia64/kernel/traps.c      2005/06/18 14:42:39     1.35
@@ -111,6 +111,24 @@
        siginfo_t siginfo;
        int sig, code;
 
+       /* break.b always sets cr.iim to 0, which causes problems for
+        * debuggers.  Get the real break number from the original instruction,
+        * but only for kernel code.  User space break.b is left alone, to
+        * preserve the existing behaviour.  All break codings have the same
+        * format, so there is no need to check the slot type.
+        */
+       if (break_num == 0 && !user_mode(regs)) {
+               struct ia64_psr *ipsr = ia64_psr(regs);
+               unsigned long *bundle = (unsigned long *)regs->cr_iip;
+               unsigned long slot;
+               switch (ipsr->ri) {
+                     case 0:  slot = (bundle[0] >>  5); break;
+                     case 1:  slot = (bundle[0] >> 46) | (bundle[1] << 18); 
break;
+                     default: slot = (bundle[1] >> 23); break;
+               }
+               break_num = ((slot >> 36 & 1) << 20) | (slot >> 6 & 0xfffff);
+       }
+
        /* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */
        siginfo.si_addr = (void __user *) (regs->cr_iip + ia64_psr(regs)->ri);
        siginfo.si_imm = break_num;
@@ -202,13 +220,21 @@
 
        /* first, grant user-level access to fph partition: */
        psr->dfh = 0;
+
+       /*
+        * Make sure that no other task gets in on this processor
+        * while we're claiming the FPU
+        */
+       preempt_disable();
 #ifndef CONFIG_SMP
        {
                struct task_struct *fpu_owner
                        = (struct task_struct *)ia64_get_kr(IA64_KR_FPU_OWNER);
 
-               if (ia64_is_local_fpu_owner(current))
+               if (ia64_is_local_fpu_owner(current)) {
+                       preempt_enable_no_resched();
                        return;
+               }
 
                if (fpu_owner)
                        ia64_flush_fph(fpu_owner);
@@ -226,6 +252,7 @@
                 */
                psr->mfh = 1;
        }
+       preempt_enable_no_resched();
 }
 
 static inline int
diff -urN linux/arch/ia64/mm/init.c linux/arch/ia64/mm/init.c
--- linux/arch/ia64/mm/init.c   2005/05/19 12:08:10     1.55
+++ linux/arch/ia64/mm/init.c   2005/06/18 14:42:40     1.56
@@ -305,8 +305,9 @@
        struct page *page;
 
        /*
-        * Map the gate page twice: once read-only to export the ELF headers 
etc. and once
-        * execute-only page to enable privilege-promotion via "epc":
+        * Map the gate page twice: once read-only to export the ELF
+        * headers etc. and once execute-only page to enable
+        * privilege-promotion via "epc":
         */
        page = virt_to_page(ia64_imva(__start_gate_section));
        put_kernel_page(page, GATE_ADDR, PAGE_READONLY);
@@ -315,6 +316,20 @@
        put_kernel_page(page, GATE_ADDR + PAGE_SIZE, PAGE_GATE);
 #else
        put_kernel_page(page, GATE_ADDR + PERCPU_PAGE_SIZE, PAGE_GATE);
+       /* Fill in the holes (if any) with read-only zero pages: */
+       {
+               unsigned long addr;
+
+               for (addr = GATE_ADDR + PAGE_SIZE;
+                    addr < GATE_ADDR + PERCPU_PAGE_SIZE;
+                    addr += PAGE_SIZE)
+               {
+                       put_kernel_page(ZERO_PAGE(0), addr,
+                                       PAGE_READONLY);
+                       put_kernel_page(ZERO_PAGE(0), addr + PERCPU_PAGE_SIZE,
+                                       PAGE_READONLY);
+               }
+       }
 #endif
        ia64_patch_gate();
 }
diff -urN linux/arch/ia64/sn/kernel/setup.c linux/arch/ia64/sn/kernel/setup.c
--- linux/arch/ia64/sn/kernel/setup.c   2005/06/07 13:45:27     1.33
+++ linux/arch/ia64/sn/kernel/setup.c   2005/06/18 14:42:40     1.34
@@ -222,7 +222,7 @@
 
 extern int platform_intr_list[];
 extern nasid_t master_nasid;
-static int shub_1_1_found __initdata;
+static int __initdata shub_1_1_found = 0;
 
 /*
  * sn_check_for_wars
@@ -251,7 +251,7 @@
        } else {
                for_each_online_node(cnode) {
                        if (is_shub_1_1(cnodeid_to_nasid(cnode)))
-                               sn_hub_info->shub_1_1_found = 1;
+                               shub_1_1_found = 1;
                }
        }
 }
diff -urN linux/arch/m68k/defconfig linux/arch/m68k/defconfig
--- linux/arch/m68k/defconfig   2005/04/29 11:15:01     1.27
+++ linux/arch/m68k/defconfig   2005/06/18 14:42:40     1.28
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:05:31 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:17 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -33,6 +33,8 @@
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -355,7 +357,6 @@
 CONFIG_SERIO_LIBPS2=y
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/amiga_defconfig 
linux/arch/m68k/configs/amiga_defconfig
--- linux/arch/m68k/configs/amiga_defconfig     2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/amiga_defconfig     2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:05:59 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:23 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -135,7 +137,6 @@
 #
 CONFIG_AMIGA_FLOPPY=y
 CONFIG_AMIGA_Z2RAM=y
-# CONFIG_BLK_DEV_XD is not set
 # CONFIG_PARIDE is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 CONFIG_BLK_DEV_LOOP=y
@@ -223,17 +224,12 @@
 #
 # SCSI low-level drivers
 #
-# CONFIG_SCSI_7000FASST is not set
 # CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
 # CONFIG_SCSI_AIC7XXX_OLD is not set
 # CONFIG_SCSI_IN2000 is not set
 # CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
 # CONFIG_SCSI_GENERIC_NCR5380 is not set
 # CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
 # CONFIG_SCSI_PPA is not set
@@ -244,7 +240,6 @@
 # CONFIG_SCSI_QLOGIC_FAS is not set
 # CONFIG_SCSI_SYM53C416 is not set
 # CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
 # CONFIG_SCSI_DEBUG is not set
 CONFIG_A3000_SCSI=y
 CONFIG_A2091_SCSI=y
@@ -492,7 +487,6 @@
 CONFIG_ZORRO8390=m
 CONFIG_APNE=m
 # CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
 # CONFIG_NET_VENDOR_SMC is not set
 # CONFIG_NET_VENDOR_RACAL is not set
 # CONFIG_AT1700 is not set
@@ -620,7 +614,6 @@
 # CONFIG_SERIO_PARKBD is not set
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/apollo_defconfig 
linux/arch/m68k/configs/apollo_defconfig
--- linux/arch/m68k/configs/apollo_defconfig    2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/apollo_defconfig    2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:00 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:27 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -497,7 +499,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/atari_defconfig 
linux/arch/m68k/configs/atari_defconfig
--- linux/arch/m68k/configs/atari_defconfig     2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/atari_defconfig     2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:18 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:32 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -531,7 +533,6 @@
 CONFIG_SERIO_LIBPS2=y
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/bvme6000_defconfig 
linux/arch/m68k/configs/bvme6000_defconfig
--- linux/arch/m68k/configs/bvme6000_defconfig  2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/bvme6000_defconfig  2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:19 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:37 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -496,7 +498,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/hp300_defconfig 
linux/arch/m68k/configs/hp300_defconfig
--- linux/arch/m68k/configs/hp300_defconfig     2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/hp300_defconfig     2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:21 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:41 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -498,7 +500,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/mac_defconfig 
linux/arch/m68k/configs/mac_defconfig
--- linux/arch/m68k/configs/mac_defconfig       2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/mac_defconfig       2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:24 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:45 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -540,7 +542,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/mvme147_defconfig 
linux/arch/m68k/configs/mvme147_defconfig
--- linux/arch/m68k/configs/mvme147_defconfig   2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/mvme147_defconfig   2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:28 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:50 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -498,7 +500,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/mvme16x_defconfig 
linux/arch/m68k/configs/mvme16x_defconfig
--- linux/arch/m68k/configs/mvme16x_defconfig   2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/mvme16x_defconfig   2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:31 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:53 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -497,7 +499,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/q40_defconfig 
linux/arch/m68k/configs/q40_defconfig
--- linux/arch/m68k/configs/q40_defconfig       2005/04/29 11:15:01     1.5
+++ linux/arch/m68k/configs/q40_defconfig       2005/06/18 14:42:40     1.6
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:34 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:34:58 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -125,7 +127,6 @@
 # Block devices
 #
 # CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_CRYPTOLOOP=m
@@ -210,17 +211,12 @@
 #
 # SCSI low-level drivers
 #
-# CONFIG_SCSI_7000FASST is not set
 # CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
 # CONFIG_SCSI_AIC7XXX_OLD is not set
 # CONFIG_SCSI_IN2000 is not set
 # CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
 # CONFIG_SCSI_GENERIC_NCR5380 is not set
 # CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
 # CONFIG_SCSI_NCR53C406A is not set
@@ -229,7 +225,6 @@
 # CONFIG_SCSI_QLOGIC_FAS is not set
 # CONFIG_SCSI_SYM53C416 is not set
 # CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
 # CONFIG_SCSI_DEBUG is not set
 
 #
@@ -466,7 +461,6 @@
 CONFIG_NET_ETHERNET=y
 CONFIG_MII=m
 # CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
 # CONFIG_NET_VENDOR_SMC is not set
 # CONFIG_NET_VENDOR_RACAL is not set
 # CONFIG_AT1700 is not set
@@ -570,7 +564,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/sun3_defconfig 
linux/arch/m68k/configs/sun3_defconfig
--- linux/arch/m68k/configs/sun3_defconfig      2005/04/29 11:15:01     1.6
+++ linux/arch/m68k/configs/sun3_defconfig      2005/06/18 14:42:40     1.7
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:37 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:35:02 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -171,7 +173,6 @@
 #
 # CONFIG_SCSI_SATA is not set
 # CONFIG_SCSI_DEBUG is not set
-CONFIG_SUN3_SCSI=y
 
 #
 # Multi-device support (RAID and LVM)
@@ -487,7 +488,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/m68k/configs/sun3x_defconfig 
linux/arch/m68k/configs/sun3x_defconfig
--- linux/arch/m68k/configs/sun3x_defconfig     2005/04/29 11:15:01     1.6
+++ linux/arch/m68k/configs/sun3x_defconfig     2005/06/18 14:42:40     1.7
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc2-m68k
-# Tue Apr  5 14:06:40 2005
+# Linux kernel version: 2.6.12-rc6-m68k
+# Tue Jun  7 20:35:06 2005
 #
 CONFIG_M68K=y
 CONFIG_MMU=y
@@ -35,6 +35,8 @@
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -497,7 +499,6 @@
 CONFIG_SERIO_LIBPS2=m
 # CONFIG_SERIO_RAW is not set
 # CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
diff -urN linux/arch/mips/defconfig linux/arch/mips/defconfig
--- linux/arch/mips/defconfig   2005/06/07 13:45:27     1.292
+++ linux/arch/mips/defconfig   2005/06/18 14:42:40     1.293
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:47 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:00 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/atlas_defconfig 
linux/arch/mips/configs/atlas_defconfig
--- linux/arch/mips/configs/atlas_defconfig     2005/06/07 13:45:27     1.56
+++ linux/arch/mips/configs/atlas_defconfig     2005/06/18 14:42:40     1.57
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:50 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:01 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/capcella_defconfig 
linux/arch/mips/configs/capcella_defconfig
--- linux/arch/mips/configs/capcella_defconfig  2005/06/07 13:45:27     1.56
+++ linux/arch/mips/configs/capcella_defconfig  2005/06/18 14:42:40     1.57
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:51 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:01 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/cobalt_defconfig 
linux/arch/mips/configs/cobalt_defconfig
--- linux/arch/mips/configs/cobalt_defconfig    2005/06/07 13:45:27     1.53
+++ linux/arch/mips/configs/cobalt_defconfig    2005/06/18 14:42:40     1.54
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:52 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:02 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/db1000_defconfig 
linux/arch/mips/configs/db1000_defconfig
--- linux/arch/mips/configs/db1000_defconfig    2005/06/07 13:45:27     1.59
+++ linux/arch/mips/configs/db1000_defconfig    2005/06/18 14:42:40     1.60
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:53 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:02 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/db1100_defconfig 
linux/arch/mips/configs/db1100_defconfig
--- linux/arch/mips/configs/db1100_defconfig    2005/06/07 13:45:27     1.58
+++ linux/arch/mips/configs/db1100_defconfig    2005/06/18 14:42:40     1.59
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:54 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:03 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/db1500_defconfig 
linux/arch/mips/configs/db1500_defconfig
--- linux/arch/mips/configs/db1500_defconfig    2005/06/07 13:45:27     1.61
+++ linux/arch/mips/configs/db1500_defconfig    2005/06/18 14:42:40     1.62
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:55 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:03 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/db1550_defconfig 
linux/arch/mips/configs/db1550_defconfig
--- linux/arch/mips/configs/db1550_defconfig    2005/06/07 13:45:27     1.36
+++ linux/arch/mips/configs/db1550_defconfig    2005/06/18 14:42:40     1.37
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:57 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:04 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ddb5476_defconfig 
linux/arch/mips/configs/ddb5476_defconfig
--- linux/arch/mips/configs/ddb5476_defconfig   2005/06/07 13:45:27     1.53
+++ linux/arch/mips/configs/ddb5476_defconfig   2005/06/18 14:42:40     1.54
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:35:58 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:04 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ddb5477_defconfig 
linux/arch/mips/configs/ddb5477_defconfig
--- linux/arch/mips/configs/ddb5477_defconfig   2005/06/07 13:45:27     1.53
+++ linux/arch/mips/configs/ddb5477_defconfig   2005/06/18 14:42:40     1.54
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:00 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:05 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/e55_defconfig 
linux/arch/mips/configs/e55_defconfig
--- linux/arch/mips/configs/e55_defconfig       2005/06/07 13:45:27     1.55
+++ linux/arch/mips/configs/e55_defconfig       2005/06/18 14:42:40     1.56
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:01 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:15 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ev64120_defconfig 
linux/arch/mips/configs/ev64120_defconfig
--- linux/arch/mips/configs/ev64120_defconfig   2005/06/07 13:45:27     1.52
+++ linux/arch/mips/configs/ev64120_defconfig   2005/06/18 14:42:40     1.53
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:03 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:16 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ev96100_defconfig 
linux/arch/mips/configs/ev96100_defconfig
--- linux/arch/mips/configs/ev96100_defconfig   2005/06/07 13:45:27     1.53
+++ linux/arch/mips/configs/ev96100_defconfig   2005/06/18 14:42:40     1.54
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:03 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:16 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ip22_defconfig 
linux/arch/mips/configs/ip22_defconfig
--- linux/arch/mips/configs/ip22_defconfig      2005/06/07 13:45:27     1.62
+++ linux/arch/mips/configs/ip22_defconfig      2005/06/18 14:42:40     1.63
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:04 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:17 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ip27_defconfig 
linux/arch/mips/configs/ip27_defconfig
--- linux/arch/mips/configs/ip27_defconfig      2005/06/07 13:45:27     1.66
+++ linux/arch/mips/configs/ip27_defconfig      2005/06/18 14:42:40     1.67
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:06 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:17 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ip32_defconfig 
linux/arch/mips/configs/ip32_defconfig
--- linux/arch/mips/configs/ip32_defconfig      2005/06/07 13:45:27     1.56
+++ linux/arch/mips/configs/ip32_defconfig      2005/06/18 14:42:40     1.57
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:07 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:18 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/it8172_defconfig 
linux/arch/mips/configs/it8172_defconfig
--- linux/arch/mips/configs/it8172_defconfig    2005/06/07 13:45:27     1.52
+++ linux/arch/mips/configs/it8172_defconfig    2005/06/18 14:42:40     1.53
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:08 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:19 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ivr_defconfig 
linux/arch/mips/configs/ivr_defconfig
--- linux/arch/mips/configs/ivr_defconfig       2005/06/07 13:45:27     1.52
+++ linux/arch/mips/configs/ivr_defconfig       2005/06/18 14:42:40     1.53
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:09 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:19 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/jaguar-atx_defconfig 
linux/arch/mips/configs/jaguar-atx_defconfig
--- linux/arch/mips/configs/jaguar-atx_defconfig        2005/06/07 13:45:27     
1.57
+++ linux/arch/mips/configs/jaguar-atx_defconfig        2005/06/18 14:42:40     
1.58
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:11 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:20 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/jmr3927_defconfig 
linux/arch/mips/configs/jmr3927_defconfig
--- linux/arch/mips/configs/jmr3927_defconfig   2005/06/07 13:45:27     1.53
+++ linux/arch/mips/configs/jmr3927_defconfig   2005/06/18 14:42:40     1.54
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:12 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:20 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/lasat200_defconfig 
linux/arch/mips/configs/lasat200_defconfig
--- linux/arch/mips/configs/lasat200_defconfig  2005/06/07 13:45:27     1.53
+++ linux/arch/mips/configs/lasat200_defconfig  2005/06/18 14:42:40     1.54
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:13 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:21 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/malta_defconfig 
linux/arch/mips/configs/malta_defconfig
--- linux/arch/mips/configs/malta_defconfig     2005/06/07 13:45:27     1.55
+++ linux/arch/mips/configs/malta_defconfig     2005/06/18 14:42:40     1.56
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:15 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:22 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/mpc30x_defconfig 
linux/arch/mips/configs/mpc30x_defconfig
--- linux/arch/mips/configs/mpc30x_defconfig    2005/06/07 13:45:27     1.57
+++ linux/arch/mips/configs/mpc30x_defconfig    2005/06/18 14:42:40     1.58
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:16 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:22 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ocelot_3_defconfig 
linux/arch/mips/configs/ocelot_3_defconfig
--- linux/arch/mips/configs/ocelot_3_defconfig  2005/06/07 13:45:27     1.25
+++ linux/arch/mips/configs/ocelot_3_defconfig  2005/06/18 14:42:40     1.26
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:18 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:23 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ocelot_c_defconfig 
linux/arch/mips/configs/ocelot_c_defconfig
--- linux/arch/mips/configs/ocelot_c_defconfig  2005/06/07 13:45:27     1.51
+++ linux/arch/mips/configs/ocelot_c_defconfig  2005/06/18 14:42:40     1.52
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:19 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:23 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ocelot_defconfig 
linux/arch/mips/configs/ocelot_defconfig
--- linux/arch/mips/configs/ocelot_defconfig    2005/06/07 13:45:27     1.53
+++ linux/arch/mips/configs/ocelot_defconfig    2005/06/18 14:42:40     1.54
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:20 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:24 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/ocelot_g_defconfig 
linux/arch/mips/configs/ocelot_g_defconfig
--- linux/arch/mips/configs/ocelot_g_defconfig  2005/06/07 13:45:27     1.46
+++ linux/arch/mips/configs/ocelot_g_defconfig  2005/06/18 14:42:40     1.47
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:23 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:24 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/pb1100_defconfig 
linux/arch/mips/configs/pb1100_defconfig
--- linux/arch/mips/configs/pb1100_defconfig    2005/06/07 13:45:27     1.55
+++ linux/arch/mips/configs/pb1100_defconfig    2005/06/18 14:42:40     1.56
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:24 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:25 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/pb1500_defconfig 
linux/arch/mips/configs/pb1500_defconfig
--- linux/arch/mips/configs/pb1500_defconfig    2005/06/07 13:45:27     1.61
+++ linux/arch/mips/configs/pb1500_defconfig    2005/06/18 14:42:40     1.62
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:27 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:25 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/pb1550_defconfig 
linux/arch/mips/configs/pb1550_defconfig
--- linux/arch/mips/configs/pb1550_defconfig    2005/06/07 13:45:27     1.51
+++ linux/arch/mips/configs/pb1550_defconfig    2005/06/18 14:42:40     1.52
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:32 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:26 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/rm200_defconfig 
linux/arch/mips/configs/rm200_defconfig
--- linux/arch/mips/configs/rm200_defconfig     2005/06/07 15:23:20     1.63
+++ linux/arch/mips/configs/rm200_defconfig     2005/06/18 14:42:40     1.64
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:39 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:26 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/sb1250-swarm_defconfig 
linux/arch/mips/configs/sb1250-swarm_defconfig
--- linux/arch/mips/configs/sb1250-swarm_defconfig      2005/06/07 13:45:27     
1.59
+++ linux/arch/mips/configs/sb1250-swarm_defconfig      2005/06/18 14:42:40     
1.60
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:40 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:27 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/sead_defconfig 
linux/arch/mips/configs/sead_defconfig
--- linux/arch/mips/configs/sead_defconfig      2005/06/07 13:45:27     1.51
+++ linux/arch/mips/configs/sead_defconfig      2005/06/18 14:42:40     1.52
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:41 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:27 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/tb0226_defconfig 
linux/arch/mips/configs/tb0226_defconfig
--- linux/arch/mips/configs/tb0226_defconfig    2005/06/07 13:45:27     1.55
+++ linux/arch/mips/configs/tb0226_defconfig    2005/06/18 14:42:40     1.56
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:42 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:28 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/tb0229_defconfig 
linux/arch/mips/configs/tb0229_defconfig
--- linux/arch/mips/configs/tb0229_defconfig    2005/06/07 13:45:27     1.58
+++ linux/arch/mips/configs/tb0229_defconfig    2005/06/18 14:42:40     1.59
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:45 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:28 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/workpad_defconfig 
linux/arch/mips/configs/workpad_defconfig
--- linux/arch/mips/configs/workpad_defconfig   2005/06/07 13:45:27     1.55
+++ linux/arch/mips/configs/workpad_defconfig   2005/06/18 14:42:40     1.56
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:45 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:29 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/mips/configs/yosemite_defconfig 
linux/arch/mips/configs/yosemite_defconfig
--- linux/arch/mips/configs/yosemite_defconfig  2005/06/07 13:45:27     1.57
+++ linux/arch/mips/configs/yosemite_defconfig  2005/06/18 14:42:40     1.58
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12-rc6
-# Tue Jun  7 13:36:46 2005
+# Linux kernel version: 2.6.12
+# Sat Jun 18 14:53:29 2005
 #
 CONFIG_MIPS=y
 
diff -urN linux/arch/ppc/kernel/cputable.c linux/arch/ppc/kernel/cputable.c
--- linux/arch/ppc/kernel/cputable.c    2005/03/18 17:36:56     1.23
+++ linux/arch/ppc/kernel/cputable.c    2005/06/18 14:42:42     1.24
@@ -838,6 +838,17 @@
                .icache_bsize           = 32,
                .dcache_bsize           = 32,
        },
+       {       /* 405EP */
+               .pvr_mask               = 0xffff0000,
+               .pvr_value              = 0x51210000,
+               .cpu_name               = "405EP",
+               .cpu_features           = CPU_FTR_SPLIT_ID_CACHE |
+                       CPU_FTR_USE_TB,
+               .cpu_user_features      = PPC_FEATURE_32 |
+                       PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
+               .icache_bsize           = 32,
+               .dcache_bsize           = 32,
+       },
 
 #endif /* CONFIG_40x */
 #ifdef CONFIG_44x
diff -urN linux/arch/ppc/kernel/misc.S linux/arch/ppc/kernel/misc.S
--- linux/arch/ppc/kernel/misc.S        2005/05/19 12:08:13     1.78
+++ linux/arch/ppc/kernel/misc.S        2005/06/18 14:42:42     1.79
@@ -619,7 +619,7 @@
 _GLOBAL(flush_icache_range)
 BEGIN_FTR_SECTION
        blr                             /* for 601, do nothing */
-END_FTR_SECTION_IFSET(PPC_FEATURE_UNIFIED_CACHE)
+END_FTR_SECTION_IFCLR(CPU_FTR_SPLIT_ID_CACHE)
        li      r5,L1_CACHE_LINE_SIZE-1
        andc    r3,r3,r5
        subf    r4,r3,r4
@@ -736,7 +736,7 @@
 _GLOBAL(__flush_dcache_icache)
 BEGIN_FTR_SECTION
        blr                                     /* for 601, do nothing */
-END_FTR_SECTION_IFSET(PPC_FEATURE_UNIFIED_CACHE)
+END_FTR_SECTION_IFCLR(CPU_FTR_SPLIT_ID_CACHE)
        rlwinm  r3,r3,0,0,19                    /* Get page base address */
        li      r4,4096/L1_CACHE_LINE_SIZE      /* Number of lines in a page */
        mtctr   r4
@@ -764,7 +764,7 @@
 _GLOBAL(__flush_dcache_icache_phys)
 BEGIN_FTR_SECTION
        blr                                     /* for 601, do nothing */
-END_FTR_SECTION_IFSET(PPC_FEATURE_UNIFIED_CACHE)
+END_FTR_SECTION_IFCLR(CPU_FTR_SPLIT_ID_CACHE)
        mfmsr   r10
        rlwinm  r0,r10,0,28,26                  /* clear DR */
        mtmsr   r0
diff -urN linux/arch/ppc/platforms/pmac_cpufreq.c 
linux/arch/ppc/platforms/pmac_cpufreq.c
--- linux/arch/ppc/platforms/pmac_cpufreq.c     2005/06/07 13:45:28     1.19
+++ linux/arch/ppc/platforms/pmac_cpufreq.c     2005/06/18 14:42:42     1.20
@@ -83,7 +83,7 @@
 static u32 slew_done_gpio;
 static int no_schedule;
 static int has_cpu_l2lve;
-
+static int is_pmu_based;
 
 /* There are only two frequency states for each processor. Values
  * are in kHz for the time being.
@@ -463,7 +463,7 @@
         */
        no_schedule = 1;
        sleep_freq = cur_freq;
-       if (cur_freq == low_freq)
+       if (cur_freq == low_freq && !is_pmu_based)
                do_set_cpu_speed(CPUFREQ_HIGH, 0);
        return 0;
 }
@@ -588,6 +588,7 @@
                return 1;
        hi_freq = (*value) / 1000;
        set_speed_proc = pmu_set_cpu_speed;
+       is_pmu_based = 1;
 
        return 0;
 }
@@ -692,6 +693,7 @@
                hi_freq = cur_freq;
                low_freq = 400000;
                set_speed_proc = pmu_set_cpu_speed;
+               is_pmu_based = 1;
        }
        /* Else check for TiPb 400 & 500 */
        else if (machine_is_compatible("PowerBook3,2")) {
@@ -703,6 +705,7 @@
                hi_freq = cur_freq;
                low_freq = 300000;
                set_speed_proc = pmu_set_cpu_speed;
+               is_pmu_based = 1;
        }
        /* Else check for 750FX */
        else if (PVR_VER(mfspr(SPRN_PVR)) == 0x7000)
diff -urN linux/arch/ppc64/defconfig linux/arch/ppc64/defconfig
--- linux/arch/ppc64/defconfig  2005/03/18 17:36:58     1.27
+++ linux/arch/ppc64/defconfig  2005/06/18 14:42:42     1.28
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-rc3-bk6
-# Wed Feb  9 23:34:51 2005
+# Linux kernel version: 2.6.12-rc5-git9
+# Sun Jun  5 09:26:47 2005
 #
 CONFIG_64BIT=y
 CONFIG_MMU=y
@@ -11,7 +11,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_EARLY_PRINTK=y
 CONFIG_COMPAT=y
-CONFIG_FRAME_POINTER=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
 CONFIG_FORCE_MAX_ZONEORDER=13
 
 #
@@ -20,6 +20,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -30,24 +31,28 @@
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-CONFIG_LOG_BUF_SHIFT=17
+# CONFIG_AUDIT is not set
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+CONFIG_CPUSETS=y
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -91,9 +96,12 @@
 CONFIG_EEH=y
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_PPC_RTAS=y
+CONFIG_RTAS_PROC=y
 CONFIG_RTAS_FLASH=m
 CONFIG_SCANLOG=m
 CONFIG_LPARCFG=y
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
 
 #
 # General setup
@@ -104,6 +112,7 @@
 CONFIG_BINFMT_MISC=m
 # CONFIG_PCI_LEGACY_PROC is not set
 # CONFIG_PCI_NAMES is not set
+# CONFIG_PCI_DEBUG is not set
 CONFIG_HOTPLUG_CPU=y
 
 #
@@ -112,10 +121,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 CONFIG_HOTPLUG_PCI=m
@@ -149,11 +154,10 @@
 #
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
 # CONFIG_PARPORT_SERIAL is not set
 # CONFIG_PARPORT_PC_FIFO is not set
 # CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_GSC is not set
 # CONFIG_PARPORT_1284 is not set
 
 #
@@ -301,6 +305,7 @@
 # CONFIG_SCSI_ATA_PIIX is not set
 # CONFIG_SCSI_SATA_NV is not set
 # CONFIG_SCSI_SATA_PROMISE is not set
+# CONFIG_SCSI_SATA_QSTOR is not set
 # CONFIG_SCSI_SATA_SX4 is not set
 # CONFIG_SCSI_SATA_SIL is not set
 # CONFIG_SCSI_SATA_SIS is not set
@@ -310,7 +315,6 @@
 # CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_PIO is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_GDTH is not set
 # CONFIG_SCSI_IPS is not set
@@ -327,7 +331,6 @@
 CONFIG_SCSI_IPR=y
 CONFIG_SCSI_IPR_TRACE=y
 CONFIG_SCSI_IPR_DUMP=y
-# CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 CONFIG_SCSI_QLA2XXX=y
@@ -336,6 +339,7 @@
 CONFIG_SCSI_QLA2300=m
 CONFIG_SCSI_QLA2322=m
 CONFIG_SCSI_QLA6312=m
+CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 CONFIG_SCSI_DEBUG=m
@@ -358,6 +362,8 @@
 CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_MIRROR=m
 CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
 
 #
 # Fusion MPT device support
@@ -405,6 +411,7 @@
 #
 CONFIG_ADB=y
 CONFIG_ADB_PMU=y
+CONFIG_PMAC_SMU=y
 # CONFIG_PMAC_PBOOK is not set
 # CONFIG_PMAC_BACKLIGHT is not set
 # CONFIG_INPUT_ADBHID is not set
@@ -420,7 +427,6 @@
 #
 CONFIG_PACKET=y
 # CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
 CONFIG_NET_KEY=m
 CONFIG_INET=y
@@ -588,7 +594,6 @@
 # CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
-# CONFIG_E100_NAPI is not set
 # CONFIG_FEALNX is not set
 # CONFIG_NATSEMI is not set
 # CONFIG_NE2K_PCI is not set
@@ -614,6 +619,8 @@
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 CONFIG_TIGON3=y
+# CONFIG_BNX2 is not set
+# CONFIG_MV643XX_ETH is not set
 
 #
 # Ethernet (10000 Mbit)
@@ -683,20 +690,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -716,6 +709,18 @@
 # CONFIG_INPUT_UINPUT is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -738,6 +743,7 @@
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_SERIAL_PMACZILOG is not set
 CONFIG_SERIAL_ICOM=m
+CONFIG_SERIAL_JSM=m
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -766,9 +772,16 @@
 #
 # Ftape, the floppy tape device driver
 #
+# CONFIG_AGP is not set
 # CONFIG_DRM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
 
 #
 # I2C support
@@ -793,9 +806,9 @@
 CONFIG_I2C_AMD8111=y
 # CONFIG_I2C_I801 is not set
 # CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
 # CONFIG_I2C_ISA is not set
 CONFIG_I2C_KEYWEST=y
-# CONFIG_I2C_MPC is not set
 # CONFIG_I2C_NFORCE2 is not set
 # CONFIG_I2C_PARPORT is not set
 # CONFIG_I2C_PARPORT_LIGHT is not set
@@ -822,7 +835,9 @@
 # CONFIG_SENSORS_ASB100 is not set
 # CONFIG_SENSORS_DS1621 is not set
 # CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
 # CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
 # CONFIG_SENSORS_IT87 is not set
 # CONFIG_SENSORS_LM63 is not set
 # CONFIG_SENSORS_LM75 is not set
@@ -833,9 +848,11 @@
 # CONFIG_SENSORS_LM85 is not set
 # CONFIG_SENSORS_LM87 is not set
 # CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
 # CONFIG_SENSORS_MAX1619 is not set
 # CONFIG_SENSORS_PC87360 is not set
 # CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SIS5595 is not set
 # CONFIG_SENSORS_SMSC47M1 is not set
 # CONFIG_SENSORS_VIA686A is not set
 # CONFIG_SENSORS_W83781D is not set
@@ -845,6 +862,7 @@
 #
 # Other I2C Chip support
 #
+# CONFIG_SENSORS_DS1337 is not set
 # CONFIG_SENSORS_EEPROM is not set
 # CONFIG_SENSORS_PCF8574 is not set
 # CONFIG_SENSORS_PCF8591 is not set
@@ -877,6 +895,11 @@
 # Graphics support
 #
 CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+CONFIG_FB_SOFT_CURSOR=y
+CONFIG_FB_MACMODES=y
 CONFIG_FB_MODE_HELPERS=y
 CONFIG_FB_TILEBLITTING=y
 # CONFIG_FB_CIRRUS is not set
@@ -890,9 +913,8 @@
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
 # CONFIG_FB_VGA16 is not set
-CONFIG_FB_RIVA=y
-CONFIG_FB_RIVA_I2C=y
-# CONFIG_FB_RIVA_DEBUG is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
 CONFIG_FB_MATROX=y
 CONFIG_FB_MATROX_MILLENIUM=y
 CONFIG_FB_MATROX_MYSTIQUE=y
@@ -913,6 +935,7 @@
 # CONFIG_FB_3DFX is not set
 # CONFIG_FB_VOODOO1 is not set
 # CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
 
 #
@@ -946,6 +969,8 @@
 #
 # USB support
 #
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB=y
 # CONFIG_USB_DEBUG is not set
 
@@ -956,8 +981,6 @@
 # CONFIG_USB_BANDWIDTH is not set
 # CONFIG_USB_DYNAMIC_MINORS is not set
 # CONFIG_USB_OTG is not set
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
 
 #
 # USB Host Controller Drivers
@@ -966,6 +989,8 @@
 # CONFIG_USB_EHCI_SPLIT_ISO is not set
 # CONFIG_USB_EHCI_ROOT_HUB_TT is not set
 CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 # CONFIG_USB_UHCI_HCD is not set
 # CONFIG_USB_SL811_HCD is not set
 
@@ -981,12 +1006,11 @@
 #
 CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_RW_DETECT=y
 # CONFIG_USB_STORAGE_DATAFAB is not set
 # CONFIG_USB_STORAGE_FREECOM is not set
 # CONFIG_USB_STORAGE_ISD200 is not set
 # CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_USBAT is not set
 # CONFIG_USB_STORAGE_SDDR09 is not set
 # CONFIG_USB_STORAGE_SDDR55 is not set
 # CONFIG_USB_STORAGE_JUMPSHOT is not set
@@ -1030,6 +1054,7 @@
 CONFIG_USB_PEGASUS=y
 # CONFIG_USB_RTL8150 is not set
 # CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
 
 #
 # USB port drivers
@@ -1055,6 +1080,7 @@
 # CONFIG_USB_PHIDGETKIT is not set
 # CONFIG_USB_PHIDGETSERVO is not set
 # CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_SISUSBVGA is not set
 # CONFIG_USB_TEST is not set
 
 #
@@ -1276,10 +1302,13 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 CONFIG_DEBUG_KERNEL=y
 CONFIG_MAGIC_SYSRQ=y
+CONFIG_LOG_BUF_SHIFT=17
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_INFO is not set
@@ -1311,6 +1340,7 @@
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
diff -urN linux/arch/ppc64/boot/prom.c linux/arch/ppc64/boot/prom.c
--- linux/arch/ppc64/boot/prom.c        2004/02/19 03:06:24     1.4
+++ linux/arch/ppc64/boot/prom.c        2005/06/18 14:42:42     1.5
@@ -11,6 +11,23 @@
 #include <linux/string.h>
 #include <linux/ctype.h>
 
+extern __u32 __div64_32(unsigned long long *dividend, __u32 divisor);
+
+/* The unnecessary pointer compare is there
+ * to check for type safety (n must be 64bit)
+ */
+# define do_div(n,base) ({                             \
+       __u32 __base = (base);                  \
+       __u32 __rem;                                    \
+       (void)(((typeof((n)) *)0) == ((unsigned long long *)0));        \
+       if (((n) >> 32) == 0) {                 \
+               __rem = (__u32)(n) % __base;            \
+               (n) = (__u32)(n) / __base;              \
+       } else                                          \
+               __rem = __div64_32(&(n), __base);       \
+       __rem;                                          \
+ })
+
 int (*prom)(void *);
 
 void *chosen_handle;
@@ -352,7 +369,7 @@
 #define SPECIAL        32              /* 0x */
 #define LARGE  64              /* use 'ABCDEF' instead of 'abcdef' */
 
-static char * number(char * str, long num, int base, int size, int precision, 
int type)
+static char * number(char * str, unsigned long long num, int base, int size, 
int precision, int type)
 {
        char c,sign,tmp[66];
        const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
@@ -367,9 +384,9 @@
        c = (type & ZEROPAD) ? '0' : ' ';
        sign = 0;
        if (type & SIGN) {
-               if (num < 0) {
+               if ((signed long long)num < 0) {
                        sign = '-';
-                       num = -num;
+                       num = - (signed long long)num;
                        size--;
                } else if (type & PLUS) {
                        sign = '+';
@@ -389,8 +406,7 @@
        if (num == 0)
                tmp[i++]='0';
        else while (num != 0) {
-               tmp[i++] = digits[num % base];
-               num /= base;
+               tmp[i++] = digits[do_div(num, base)];
        }
        if (i > precision)
                precision = i;
@@ -426,7 +442,7 @@
 int vsprintf(char *buf, const char *fmt, va_list args)
 {
        int len;
-       unsigned long num;
+       unsigned long long num;
        int i, base;
        char * str;
        const char *s;
diff -urN linux/arch/ppc64/configs/g5_defconfig 
linux/arch/ppc64/configs/g5_defconfig
--- linux/arch/ppc64/configs/g5_defconfig       2005/03/18 17:36:58     1.9
+++ linux/arch/ppc64/configs/g5_defconfig       2005/06/18 14:42:42     1.10
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Thu Mar 10 16:47:04 2005
+# Linux kernel version: 2.6.12-rc6
+# Tue Jun 14 16:59:20 2005
 #
 CONFIG_64BIT=y
 CONFIG_MMU=y
@@ -11,7 +11,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_EARLY_PRINTK=y
 CONFIG_COMPAT=y
-CONFIG_FRAME_POINTER=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
 CONFIG_FORCE_MAX_ZONEORDER=13
 
 #
@@ -20,6 +20,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -31,19 +32,20 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=17
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+# CONFIG_CPUSETS is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
@@ -87,6 +89,8 @@
 # CONFIG_SCHED_SMT is not set
 # CONFIG_PREEMPT is not set
 CONFIG_GENERIC_HARDIRQS=y
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
 
 #
 # General setup
@@ -97,6 +101,7 @@
 # CONFIG_BINFMT_MISC is not set
 CONFIG_PCI_LEGACY_PROC=y
 CONFIG_PCI_NAMES=y
+# CONFIG_PCI_DEBUG is not set
 # CONFIG_HOTPLUG_CPU is not set
 
 #
@@ -105,10 +110,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -293,7 +294,6 @@
 # CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_PIO is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_GDTH is not set
 # CONFIG_SCSI_IPS is not set
@@ -301,7 +301,6 @@
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_SYM53C8XX_2 is not set
 # CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 CONFIG_SCSI_QLA2XXX=y
@@ -310,6 +309,7 @@
 # CONFIG_SCSI_QLA2300 is not set
 # CONFIG_SCSI_QLA2322 is not set
 # CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_LPFC is not set
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_DEBUG is not set
@@ -332,6 +332,7 @@
 CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_MIRROR=m
 CONFIG_DM_ZERO=m
+# CONFIG_DM_MULTIPATH is not set
 
 #
 # Fusion MPT device support
@@ -394,7 +395,6 @@
 #
 CONFIG_PACKET=y
 # CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
 CONFIG_NET_KEY=m
 CONFIG_INET=y
@@ -564,6 +564,8 @@
 # CONFIG_R8169 is not set
 # CONFIG_SK98LIN is not set
 CONFIG_TIGON3=m
+# CONFIG_BNX2 is not set
+# CONFIG_MV643XX_ETH is not set
 
 #
 # Ethernet (10000 Mbit)
@@ -631,18 +633,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -660,6 +650,16 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -676,6 +676,7 @@
 # Non-8250 serial port support
 #
 # CONFIG_SERIAL_PMACZILOG is not set
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -698,9 +699,12 @@
 #
 # Ftape, the floppy tape device driver
 #
+CONFIG_AGP=m
+CONFIG_AGP_UNINORTH=m
 # CONFIG_DRM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
+# CONFIG_HANGCHECK_TIMER is not set
 
 #
 # TPM devices
@@ -730,12 +734,11 @@
 # CONFIG_I2C_AMD8111 is not set
 # CONFIG_I2C_I801 is not set
 # CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
 # CONFIG_I2C_ISA is not set
 CONFIG_I2C_KEYWEST=y
-# CONFIG_I2C_MPC is not set
 # CONFIG_I2C_NFORCE2 is not set
 # CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PIIX4 is not set
 # CONFIG_I2C_PROSAVAGE is not set
 # CONFIG_I2C_SAVAGE4 is not set
 # CONFIG_SCx200_ACB is not set
@@ -772,6 +775,7 @@
 # CONFIG_SENSORS_LM85 is not set
 # CONFIG_SENSORS_LM87 is not set
 # CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
 # CONFIG_SENSORS_MAX1619 is not set
 # CONFIG_SENSORS_PC87360 is not set
 # CONFIG_SENSORS_SMSC47B397 is not set
@@ -785,6 +789,7 @@
 #
 # Other I2C Chip support
 #
+# CONFIG_SENSORS_DS1337 is not set
 # CONFIG_SENSORS_EEPROM is not set
 # CONFIG_SENSORS_PCF8574 is not set
 # CONFIG_SENSORS_PCF8591 is not set
@@ -817,6 +822,11 @@
 # Graphics support
 #
 CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+CONFIG_FB_SOFT_CURSOR=y
+CONFIG_FB_MACMODES=y
 CONFIG_FB_MODE_HELPERS=y
 CONFIG_FB_TILEBLITTING=y
 # CONFIG_FB_CIRRUS is not set
@@ -830,6 +840,7 @@
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
 # CONFIG_FB_VGA16 is not set
+# CONFIG_FB_NVIDIA is not set
 CONFIG_FB_RIVA=y
 # CONFIG_FB_RIVA_I2C is not set
 # CONFIG_FB_RIVA_DEBUG is not set
@@ -847,6 +858,7 @@
 # CONFIG_FB_3DFX is not set
 # CONFIG_FB_VOODOO1 is not set
 # CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
 
 #
@@ -880,6 +892,8 @@
 #
 # USB support
 #
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB=y
 # CONFIG_USB_DEBUG is not set
 
@@ -890,8 +904,6 @@
 # CONFIG_USB_BANDWIDTH is not set
 # CONFIG_USB_DYNAMIC_MINORS is not set
 # CONFIG_USB_OTG is not set
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
 
 #
 # USB Host Controller Drivers
@@ -917,7 +929,6 @@
 #
 CONFIG_USB_STORAGE=y
 # CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_RW_DETECT=y
 CONFIG_USB_STORAGE_DATAFAB=y
 CONFIG_USB_STORAGE_FREECOM=y
 CONFIG_USB_STORAGE_ISD200=y
@@ -1004,8 +1015,10 @@
 #
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
 CONFIG_USB_SERIAL_BELKIN=m
 CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 CONFIG_USB_SERIAL_EMPEG=m
 CONFIG_USB_SERIAL_FTDI_SIO=m
@@ -1034,6 +1047,7 @@
 CONFIG_USB_SERIAL_KOBIL_SCT=m
 CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
 CONFIG_USB_SERIAL_SAFE=m
 CONFIG_USB_SERIAL_SAFE_PADDED=y
 CONFIG_USB_SERIAL_TI=m
@@ -1270,11 +1284,13 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 CONFIG_DEBUG_KERNEL=y
 CONFIG_MAGIC_SYSRQ=y
-# CONFIG_PRINTK_TIME is not set
+CONFIG_LOG_BUF_SHIFT=17
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_INFO is not set
diff -urN linux/arch/ppc64/configs/iSeries_defconfig 
linux/arch/ppc64/configs/iSeries_defconfig
--- linux/arch/ppc64/configs/iSeries_defconfig  2005/03/18 17:36:58     1.7
+++ linux/arch/ppc64/configs/iSeries_defconfig  2005/06/18 14:42:42     1.8
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-rc3-bk6
-# Wed Feb  9 23:34:52 2005
+# Linux kernel version: 2.6.12-rc6
+# Tue Jun 14 17:01:28 2005
 #
 CONFIG_64BIT=y
 CONFIG_MMU=y
@@ -11,7 +11,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_EARLY_PRINTK=y
 CONFIG_COMPAT=y
-CONFIG_FRAME_POINTER=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
 CONFIG_FORCE_MAX_ZONEORDER=13
 
 #
@@ -20,6 +20,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -30,24 +31,29 @@
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-CONFIG_LOG_BUF_SHIFT=17
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+# CONFIG_CPUSETS is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -79,6 +85,8 @@
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_MSCHUNKS=y
 CONFIG_LPARCFG=y
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
 
 #
 # General setup
@@ -89,6 +97,7 @@
 # CONFIG_BINFMT_MISC is not set
 CONFIG_PCI_LEGACY_PROC=y
 CONFIG_PCI_NAMES=y
+# CONFIG_PCI_DEBUG is not set
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -96,10 +105,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -210,7 +215,6 @@
 # CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_PIO is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_GDTH is not set
 # CONFIG_SCSI_IPS is not set
@@ -219,7 +223,6 @@
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_SYM53C8XX_2 is not set
 # CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 CONFIG_SCSI_QLA2XXX=y
@@ -228,6 +231,7 @@
 # CONFIG_SCSI_QLA2300 is not set
 # CONFIG_SCSI_QLA2322 is not set
 # CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_LPFC is not set
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_DEBUG is not set
@@ -250,6 +254,7 @@
 CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_MIRROR=m
 CONFIG_DM_ZERO=m
+# CONFIG_DM_MULTIPATH is not set
 
 #
 # Fusion MPT device support
@@ -280,7 +285,6 @@
 #
 CONFIG_PACKET=y
 # CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
 CONFIG_NET_KEY=m
 CONFIG_INET=y
@@ -445,7 +449,6 @@
 # CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
-# CONFIG_E100_NAPI is not set
 # CONFIG_FEALNX is not set
 # CONFIG_NATSEMI is not set
 # CONFIG_NE2K_PCI is not set
@@ -471,6 +474,7 @@
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 # CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
 
 #
 # Ethernet (10000 Mbit)
@@ -539,14 +543,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-# CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -556,6 +552,12 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 # CONFIG_SERIAL_NONSTANDARD is not set
@@ -570,6 +572,7 @@
 #
 CONFIG_SERIAL_CORE=m
 CONFIG_SERIAL_ICOM=m
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -592,9 +595,16 @@
 #
 # Ftape, the floppy tape device driver
 #
+# CONFIG_AGP is not set
 # CONFIG_DRM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
 
 #
 # I2C support
@@ -633,13 +643,9 @@
 #
 # USB support
 #
-# CONFIG_USB is not set
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
+# CONFIG_USB is not set
 
 #
 # USB Gadget Support
@@ -848,10 +854,13 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 CONFIG_DEBUG_KERNEL=y
 CONFIG_MAGIC_SYSRQ=y
+CONFIG_LOG_BUF_SHIFT=17
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_INFO is not set
@@ -881,6 +890,7 @@
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
diff -urN linux/arch/ppc64/configs/maple_defconfig 
linux/arch/ppc64/configs/maple_defconfig
--- linux/arch/ppc64/configs/maple_defconfig    2005/03/18 17:36:58     1.2
+++ linux/arch/ppc64/configs/maple_defconfig    2005/06/18 14:42:42     1.3
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-rc3-bk6
-# Wed Feb  9 23:34:53 2005
+# Linux kernel version: 2.6.12-rc6
+# Tue Jun 14 17:12:48 2005
 #
 CONFIG_64BIT=y
 CONFIG_MMU=y
@@ -11,7 +11,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_EARLY_PRINTK=y
 CONFIG_COMPAT=y
-CONFIG_FRAME_POINTER=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
 CONFIG_FORCE_MAX_ZONEORDER=13
 
 #
@@ -20,6 +20,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -30,24 +31,28 @@
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-CONFIG_LOG_BUF_SHIFT=17
+# CONFIG_AUDIT is not set
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+# CONFIG_CPUSETS is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS_ALL=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -84,6 +89,8 @@
 # CONFIG_SCHED_SMT is not set
 # CONFIG_PREEMPT is not set
 CONFIG_GENERIC_HARDIRQS=y
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
 
 #
 # General setup
@@ -94,6 +101,7 @@
 # CONFIG_BINFMT_MISC is not set
 CONFIG_PCI_LEGACY_PROC=y
 CONFIG_PCI_NAMES=y
+# CONFIG_PCI_DEBUG is not set
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -101,10 +109,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -261,7 +265,6 @@
 #
 CONFIG_PACKET=y
 CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
 # CONFIG_NET_KEY is not set
 CONFIG_INET=y
@@ -376,6 +379,8 @@
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 # CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_MV643XX_ETH is not set
 
 #
 # Ethernet (10000 Mbit)
@@ -432,14 +437,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-# CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -449,6 +446,12 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -469,7 +472,7 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_PMACZILOG is not set
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -492,8 +495,15 @@
 #
 # Ftape, the floppy tape device driver
 #
+# CONFIG_AGP is not set
 # CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
 
 #
 # I2C support
@@ -518,8 +528,8 @@
 CONFIG_I2C_AMD8111=y
 # CONFIG_I2C_I801 is not set
 # CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
 # CONFIG_I2C_ISA is not set
-# CONFIG_I2C_MPC is not set
 # CONFIG_I2C_NFORCE2 is not set
 # CONFIG_I2C_PARPORT_LIGHT is not set
 # CONFIG_I2C_PROSAVAGE is not set
@@ -545,7 +555,9 @@
 # CONFIG_SENSORS_ASB100 is not set
 # CONFIG_SENSORS_DS1621 is not set
 # CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
 # CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
 # CONFIG_SENSORS_IT87 is not set
 # CONFIG_SENSORS_LM63 is not set
 # CONFIG_SENSORS_LM75 is not set
@@ -556,9 +568,11 @@
 # CONFIG_SENSORS_LM85 is not set
 # CONFIG_SENSORS_LM87 is not set
 # CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
 # CONFIG_SENSORS_MAX1619 is not set
 # CONFIG_SENSORS_PC87360 is not set
 # CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SIS5595 is not set
 # CONFIG_SENSORS_SMSC47M1 is not set
 # CONFIG_SENSORS_VIA686A is not set
 # CONFIG_SENSORS_W83781D is not set
@@ -568,6 +582,7 @@
 #
 # Other I2C Chip support
 #
+# CONFIG_SENSORS_DS1337 is not set
 # CONFIG_SENSORS_EEPROM is not set
 # CONFIG_SENSORS_PCF8574 is not set
 # CONFIG_SENSORS_PCF8591 is not set
@@ -615,6 +630,8 @@
 #
 # USB support
 #
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB=y
 # CONFIG_USB_DEBUG is not set
 
@@ -625,8 +642,6 @@
 # CONFIG_USB_BANDWIDTH is not set
 # CONFIG_USB_DYNAMIC_MINORS is not set
 # CONFIG_USB_OTG is not set
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
 
 #
 # USB Host Controller Drivers
@@ -635,6 +650,8 @@
 CONFIG_USB_EHCI_SPLIT_ISO=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_UHCI_HCD=y
 # CONFIG_USB_SL811_HCD is not set
 
@@ -688,6 +705,7 @@
 CONFIG_USB_PEGASUS=y
 # CONFIG_USB_RTL8150 is not set
 # CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
 
 #
 # USB port drivers
@@ -699,8 +717,10 @@
 CONFIG_USB_SERIAL=y
 # CONFIG_USB_SERIAL_CONSOLE is not set
 CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
 # CONFIG_USB_SERIAL_BELKIN is not set
 # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 # CONFIG_USB_SERIAL_EMPEG is not set
 # CONFIG_USB_SERIAL_FTDI_SIO is not set
@@ -729,6 +749,7 @@
 # CONFIG_USB_SERIAL_KOBIL_SCT is not set
 # CONFIG_USB_SERIAL_MCT_U232 is not set
 # CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_SAFE is not set
 CONFIG_USB_SERIAL_TI=m
 # CONFIG_USB_SERIAL_CYBERJACK is not set
@@ -750,6 +771,7 @@
 # CONFIG_USB_PHIDGETKIT is not set
 # CONFIG_USB_PHIDGETSERVO is not set
 # CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_SISUSBVGA is not set
 # CONFIG_USB_TEST is not set
 
 #
@@ -936,10 +958,13 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 CONFIG_DEBUG_KERNEL=y
 CONFIG_MAGIC_SYSRQ=y
+CONFIG_LOG_BUF_SHIFT=17
 # CONFIG_SCHEDSTATS is not set
 CONFIG_DEBUG_SLAB=y
+# CONFIG_DEBUG_SPINLOCK is not set
 CONFIG_DEBUG_SPINLOCK_SLEEP=y
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_INFO is not set
@@ -971,6 +996,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 # CONFIG_CRYPTO_SHA512 is not set
 # CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_BLOWFISH is not set
 # CONFIG_CRYPTO_TWOFISH is not set
diff -urN linux/arch/ppc64/configs/pSeries_defconfig 
linux/arch/ppc64/configs/pSeries_defconfig
--- linux/arch/ppc64/configs/pSeries_defconfig  2005/03/18 17:36:58     1.11
+++ linux/arch/ppc64/configs/pSeries_defconfig  2005/06/18 14:42:43     1.12
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-rc3-bk6
-# Wed Feb  9 23:34:54 2005
+# Linux kernel version: 2.6.12-rc6
+# Tue Jun 14 17:13:47 2005
 #
 CONFIG_64BIT=y
 CONFIG_MMU=y
@@ -11,7 +11,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_EARLY_PRINTK=y
 CONFIG_COMPAT=y
-CONFIG_FRAME_POINTER=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
 CONFIG_FORCE_MAX_ZONEORDER=13
 
 #
@@ -20,6 +20,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -30,24 +31,29 @@
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-CONFIG_LOG_BUF_SHIFT=17
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+CONFIG_CPUSETS=y
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS_ALL=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -89,9 +95,12 @@
 CONFIG_EEH=y
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_PPC_RTAS=y
+CONFIG_RTAS_PROC=y
 CONFIG_RTAS_FLASH=m
 CONFIG_SCANLOG=m
 CONFIG_LPARCFG=y
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
 
 #
 # General setup
@@ -102,6 +111,7 @@
 # CONFIG_BINFMT_MISC is not set
 CONFIG_PCI_LEGACY_PROC=y
 CONFIG_PCI_NAMES=y
+# CONFIG_PCI_DEBUG is not set
 CONFIG_HOTPLUG_CPU=y
 
 #
@@ -110,10 +120,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 CONFIG_HOTPLUG_PCI=m
@@ -147,11 +153,10 @@
 #
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
 # CONFIG_PARPORT_SERIAL is not set
 # CONFIG_PARPORT_PC_FIFO is not set
 # CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_GSC is not set
 # CONFIG_PARPORT_1284 is not set
 
 #
@@ -293,7 +298,6 @@
 # CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_PIO is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_GDTH is not set
 # CONFIG_SCSI_IPS is not set
@@ -310,7 +314,6 @@
 CONFIG_SCSI_IPR=y
 CONFIG_SCSI_IPR_TRACE=y
 CONFIG_SCSI_IPR_DUMP=y
-# CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 CONFIG_SCSI_QLA2XXX=y
@@ -319,6 +322,7 @@
 CONFIG_SCSI_QLA2300=m
 CONFIG_SCSI_QLA2322=m
 CONFIG_SCSI_QLA6312=m
+CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_DEBUG is not set
@@ -341,6 +345,8 @@
 CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_MIRROR=m
 CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
 
 #
 # Fusion MPT device support
@@ -371,7 +377,6 @@
 #
 CONFIG_PACKET=y
 # CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
 CONFIG_NET_KEY=m
 CONFIG_INET=y
@@ -539,7 +544,6 @@
 # CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
-# CONFIG_E100_NAPI is not set
 # CONFIG_FEALNX is not set
 # CONFIG_NATSEMI is not set
 # CONFIG_NE2K_PCI is not set
@@ -565,6 +569,8 @@
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 CONFIG_TIGON3=y
+# CONFIG_BNX2 is not set
+# CONFIG_MV643XX_ETH is not set
 
 #
 # Ethernet (10000 Mbit)
@@ -636,20 +642,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -669,6 +661,18 @@
 # CONFIG_INPUT_UINPUT is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -689,8 +693,8 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_PMACZILOG is not set
 CONFIG_SERIAL_ICOM=m
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -718,9 +722,16 @@
 #
 # Ftape, the floppy tape device driver
 #
+# CONFIG_AGP is not set
 # CONFIG_DRM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=1024
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
 
 #
 # I2C support
@@ -745,8 +756,8 @@
 # CONFIG_I2C_AMD8111 is not set
 # CONFIG_I2C_I801 is not set
 # CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
 # CONFIG_I2C_ISA is not set
-# CONFIG_I2C_MPC is not set
 # CONFIG_I2C_NFORCE2 is not set
 # CONFIG_I2C_PARPORT is not set
 # CONFIG_I2C_PARPORT_LIGHT is not set
@@ -773,7 +784,9 @@
 # CONFIG_SENSORS_ASB100 is not set
 # CONFIG_SENSORS_DS1621 is not set
 # CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
 # CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
 # CONFIG_SENSORS_IT87 is not set
 # CONFIG_SENSORS_LM63 is not set
 # CONFIG_SENSORS_LM75 is not set
@@ -784,9 +797,11 @@
 # CONFIG_SENSORS_LM85 is not set
 # CONFIG_SENSORS_LM87 is not set
 # CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
 # CONFIG_SENSORS_MAX1619 is not set
 # CONFIG_SENSORS_PC87360 is not set
 # CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SIS5595 is not set
 # CONFIG_SENSORS_SMSC47M1 is not set
 # CONFIG_SENSORS_VIA686A is not set
 # CONFIG_SENSORS_W83781D is not set
@@ -796,6 +811,7 @@
 #
 # Other I2C Chip support
 #
+# CONFIG_SENSORS_DS1337 is not set
 # CONFIG_SENSORS_EEPROM is not set
 # CONFIG_SENSORS_PCF8574 is not set
 # CONFIG_SENSORS_PCF8591 is not set
@@ -828,8 +844,13 @@
 # Graphics support
 #
 CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+CONFIG_FB_SOFT_CURSOR=y
+CONFIG_FB_MACMODES=y
 CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_TILEBLITTING=y
 # CONFIG_FB_CIRRUS is not set
 # CONFIG_FB_PM2 is not set
 # CONFIG_FB_CYBER2000 is not set
@@ -838,6 +859,7 @@
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
 # CONFIG_FB_VGA16 is not set
+# CONFIG_FB_NVIDIA is not set
 # CONFIG_FB_RIVA is not set
 CONFIG_FB_MATROX=y
 CONFIG_FB_MATROX_MILLENIUM=y
@@ -858,6 +880,7 @@
 # CONFIG_FB_3DFX is not set
 # CONFIG_FB_VOODOO1 is not set
 # CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
 
 #
@@ -891,6 +914,8 @@
 #
 # USB support
 #
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB=y
 # CONFIG_USB_DEBUG is not set
 
@@ -901,8 +926,6 @@
 # CONFIG_USB_BANDWIDTH is not set
 # CONFIG_USB_DYNAMIC_MINORS is not set
 # CONFIG_USB_OTG is not set
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
 
 #
 # USB Host Controller Drivers
@@ -911,6 +934,8 @@
 # CONFIG_USB_EHCI_SPLIT_ISO is not set
 # CONFIG_USB_EHCI_ROOT_HUB_TT is not set
 CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 # CONFIG_USB_UHCI_HCD is not set
 # CONFIG_USB_SL811_HCD is not set
 
@@ -926,12 +951,11 @@
 #
 CONFIG_USB_STORAGE=y
 # CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_RW_DETECT is not set
 # CONFIG_USB_STORAGE_DATAFAB is not set
 # CONFIG_USB_STORAGE_FREECOM is not set
 # CONFIG_USB_STORAGE_ISD200 is not set
 # CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_USBAT is not set
 # CONFIG_USB_STORAGE_SDDR09 is not set
 # CONFIG_USB_STORAGE_SDDR55 is not set
 # CONFIG_USB_STORAGE_JUMPSHOT is not set
@@ -975,6 +999,7 @@
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
 # CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
 
 #
 # USB port drivers
@@ -1000,6 +1025,7 @@
 # CONFIG_USB_PHIDGETKIT is not set
 # CONFIG_USB_PHIDGETSERVO is not set
 # CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_SISUSBVGA is not set
 # CONFIG_USB_TEST is not set
 
 #
@@ -1208,10 +1234,13 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 CONFIG_DEBUG_KERNEL=y
 CONFIG_MAGIC_SYSRQ=y
+CONFIG_LOG_BUF_SHIFT=17
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_INFO is not set
@@ -1243,6 +1272,7 @@
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
diff -urN linux/arch/ppc64/kernel/kprobes.c linux/arch/ppc64/kernel/kprobes.c
--- linux/arch/ppc64/kernel/kprobes.c   2005/04/08 18:58:02     1.4
+++ linux/arch/ppc64/kernel/kprobes.c   2005/06/18 14:42:43     1.5
@@ -45,12 +45,17 @@
 
 int arch_prepare_kprobe(struct kprobe *p)
 {
+       int ret = 0;
        kprobe_opcode_t insn = *p->addr;
 
-       if (IS_MTMSRD(insn) || IS_RFID(insn))
-               /* cannot put bp on RFID/MTMSRD */
-               return 1;
-       return 0;
+       if ((unsigned long)p->addr & 0x03) {
+               printk("Attempt to register kprobe at an unaligned address\n");
+               ret = -EINVAL;
+       } else if (IS_MTMSRD(insn) || IS_RFID(insn)) {
+               printk("Cannot register a kprobe on rfid or mtmsrd\n");
+               ret = -EINVAL;
+       }
+       return ret;
 }
 
 void arch_copy_kprobe(struct kprobe *p)
@@ -172,8 +177,6 @@
        ret = emulate_step(regs, p->ainsn.insn[0]);
        if (ret == 0)
                regs->nip = (unsigned long)p->addr + 4;
-
-       regs->msr &= ~MSR_SE;
 }
 
 static inline int post_kprobe_handler(struct pt_regs *regs)
@@ -210,6 +213,7 @@
 
        if (kprobe_status & KPROBE_HIT_SS) {
                resume_execution(current_kprobe, regs);
+               regs->msr &= ~MSR_SE;
                regs->msr |= kprobe_saved_msr;
 
                unlock_kprobes();
@@ -233,8 +237,6 @@
         */
        preempt_disable();
        switch (val) {
-       case DIE_IABR_MATCH:
-       case DIE_DABR_MATCH:
        case DIE_BPT:
                if (kprobe_handler(args->regs))
                        ret = NOTIFY_STOP;
diff -urN linux/arch/ppc64/kernel/misc.S linux/arch/ppc64/kernel/misc.S
--- linux/arch/ppc64/kernel/misc.S      2005/05/19 12:08:14     1.43
+++ linux/arch/ppc64/kernel/misc.S      2005/06/18 14:42:43     1.44
@@ -792,7 +792,7 @@
        .llong .compat_sys_newstat
        .llong .compat_sys_newlstat
        .llong .compat_sys_newfstat
-       .llong .sys_uname
+       .llong .sys32_uname
        .llong .sys_ni_syscall          /* 110 old iopl syscall */
        .llong .sys_vhangup
        .llong .sys_ni_syscall          /* old idle syscall */
diff -urN linux/arch/ppc64/kernel/sys_ppc32.c 
linux/arch/ppc64/kernel/sys_ppc32.c
--- linux/arch/ppc64/kernel/sys_ppc32.c 2005/04/08 18:58:02     1.47
+++ linux/arch/ppc64/kernel/sys_ppc32.c 2005/06/18 14:42:43     1.48
@@ -791,31 +791,6 @@
 }
 
 
-asmlinkage int ppc64_newuname(struct new_utsname __user * name)
-{
-       int errno = sys_newuname(name);
-
-       if (current->personality == PER_LINUX32 && !errno) {
-               if(copy_to_user(name->machine, "ppc\0\0", 8)) {
-                       errno = -EFAULT;
-               }
-       }
-       return errno;
-}
-
-asmlinkage int ppc64_personality(unsigned long personality)
-{
-       int ret;
-       if (current->personality == PER_LINUX32 && personality == PER_LINUX)
-               personality = PER_LINUX32;
-       ret = sys_personality(personality);
-       if (ret == PER_LINUX32)
-               ret = PER_LINUX;
-       return ret;
-}
-
-
-
 /* Note: it is necessary to treat mode as an unsigned int,
  * with the corresponding cast to a signed int to insure that the 
  * proper conversion (sign extension) between the register representation of a 
signed int (msr in 32-bit mode)
@@ -1158,26 +1133,47 @@
 }
 #endif
 
+asmlinkage int sys32_uname(struct old_utsname __user * name)
+{
+       int err = 0;
+       
+       down_read(&uts_sem);
+       if (copy_to_user(name, &system_utsname, sizeof(*name)))
+               err = -EFAULT;
+       up_read(&uts_sem);
+       if (!err && personality(current->personality) == PER_LINUX32) {
+               /* change "ppc64" to "ppc" */
+               if (__put_user(0, name->machine + 3)
+                   || __put_user(0, name->machine + 4))
+                       err = -EFAULT;
+       }
+       return err;
+}
+
 asmlinkage int sys32_olduname(struct oldold_utsname __user * name)
 {
        int error;
-       
-       if (!name)
-               return -EFAULT;
+
        if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname)))
                return -EFAULT;
   
        down_read(&uts_sem);
        error = 
__copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN);
-       error -= __put_user(0,name->sysname+__OLD_UTS_LEN);
-       error -= 
__copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN);
-       error -= __put_user(0,name->nodename+__OLD_UTS_LEN);
-       error -= 
__copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN);
-       error -= __put_user(0,name->release+__OLD_UTS_LEN);
-       error -= 
__copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN);
-       error -= __put_user(0,name->version+__OLD_UTS_LEN);
-       error -= 
__copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN);
-       error = __put_user(0,name->machine+__OLD_UTS_LEN);
+       error |= __put_user(0,name->sysname+__OLD_UTS_LEN);
+       error |= 
__copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN);
+       error |= __put_user(0,name->nodename+__OLD_UTS_LEN);
+       error |= 
__copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN);
+       error |= __put_user(0,name->release+__OLD_UTS_LEN);
+       error |= 
__copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN);
+       error |= __put_user(0,name->version+__OLD_UTS_LEN);
+       error |= 
__copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN);
+       error |= __put_user(0,name->machine+__OLD_UTS_LEN);
+       if (personality(current->personality) == PER_LINUX32) {
+               /* change "ppc64" to "ppc" */
+               error |= __put_user(0, name->machine + 3);
+               error |= __put_user(0, name->machine + 4);
+       }
+       
        up_read(&uts_sem);
 
        error = error ? -EFAULT : 0;
diff -urN linux/arch/ppc64/kernel/syscalls.c linux/arch/ppc64/kernel/syscalls.c
--- linux/arch/ppc64/kernel/syscalls.c  2005/04/08 18:58:02     1.18
+++ linux/arch/ppc64/kernel/syscalls.c  2005/06/18 14:42:43     1.19
@@ -199,24 +199,33 @@
        return ret;
 }
 
-static int __init set_fakeppc(char *str)
+long ppc64_personality(unsigned long personality)
 {
-       if (*str)
-               return 0;
-       init_task.personality = PER_LINUX32;
-       return 1;
+       long ret;
+
+       if (personality(current->personality) == PER_LINUX32
+           && personality == PER_LINUX)
+               personality = PER_LINUX32;
+       ret = sys_personality(personality);
+       if (ret == PER_LINUX32)
+               ret = PER_LINUX;
+       return ret;
 }
-__setup("fakeppc", set_fakeppc);
 
-asmlinkage int sys_uname(struct old_utsname __user * name)
+long ppc64_newuname(struct new_utsname __user * name)
 {
-       int err = -EFAULT;
-       
+       int err = 0;
+
        down_read(&uts_sem);
-       if (name && !copy_to_user(name, &system_utsname, sizeof (*name)))
-               err = 0;
+       if (copy_to_user(name, &system_utsname, sizeof(*name)))
+               err = -EFAULT;
        up_read(&uts_sem);
-       
+       if (!err && personality(current->personality) == PER_LINUX32) {
+               /* change ppc64 to ppc */
+               if (__put_user(0, name->machine + 3)
+                   || __put_user(0, name->machine + 4))
+                       err = -EFAULT;
+       }
        return err;
 }
 
diff -urN linux/arch/um/Kconfig_char linux/arch/um/Kconfig_char
--- linux/arch/um/Kconfig_char  2005/03/18 17:37:05     1.7
+++ linux/arch/um/Kconfig_char  2005/06/18 14:42:43     1.8
@@ -204,5 +204,11 @@
        http://sourceforge.net/projects/gkernel/).  rngd periodically reads
        /dev/hwrng and injects the entropy into /dev/random.
 
+config MMAPPER
+       tristate "iomem emulation driver"
+       help
+       This driver allows a host file to be used as emulated IO memory inside
+       UML.
+
 endmenu
 
diff -urN linux/arch/um/drivers/slip_common.c 
linux/arch/um/drivers/slip_common.c
--- linux/arch/um/drivers/slip_common.c 1970/01/01 00:00:00
+++ linux/arch/um/drivers/slip_common.c 2005-06-18 15:42:43.672752000 +0100     
1.1
@@ -0,0 +1,54 @@
+#include <string.h>
+#include "slip_common.h"
+#include "net_user.h"
+
+int slip_proto_read(int fd, void *buf, int len, struct slip_proto *slip)
+{
+       int i, n, size, start;
+
+       if(slip->more > 0){
+               i = 0;
+               while(i < slip->more){
+                       size = slip_unesc(slip->ibuf[i++], slip->ibuf,
+                                         &slip->pos, &slip->esc);
+                       if(size){
+                               memcpy(buf, slip->ibuf, size);
+                               memmove(slip->ibuf, &slip->ibuf[i],
+                                       slip->more - i);
+                               slip->more = slip->more - i;
+                               return size;
+                       }
+               }
+               slip->more = 0;
+       }
+
+       n = net_read(fd, &slip->ibuf[slip->pos],
+                    sizeof(slip->ibuf) - slip->pos);
+       if(n <= 0)
+               return n;
+
+       start = slip->pos;
+       for(i = 0; i < n; i++){
+               size = slip_unesc(slip->ibuf[start + i], slip->ibuf,&slip->pos,
+                                 &slip->esc);
+               if(size){
+                       memcpy(buf, slip->ibuf, size);
+                       memmove(slip->ibuf, &slip->ibuf[start+i+1],
+                               n - (i + 1));
+                       slip->more = n - (i + 1);
+                       return size;
+               }
+       }
+       return 0;
+}
+
+int slip_proto_write(int fd, void *buf, int len, struct slip_proto *slip)
+{
+       int actual, n;
+
+       actual = slip_esc(buf, slip->obuf, len);
+       n = net_write(fd, slip->obuf, actual);
+       if(n < 0)
+               return n;
+       else return len;
+}
diff -urN linux/arch/um/drivers/slip_common.h 
linux/arch/um/drivers/slip_common.h
--- linux/arch/um/drivers/slip_common.h 1970/01/01 00:00:00
+++ linux/arch/um/drivers/slip_common.h 2005-06-18 15:42:43.687203000 +0100     
1.1
@@ -0,0 +1,104 @@
+#ifndef __UM_SLIP_COMMON_H
+#define __UM_SLIP_COMMON_H
+
+#define BUF_SIZE 1500
+ /* two bytes each for a (pathological) max packet of escaped chars +  *
+  * terminating END char + initial END char                            */
+#define ENC_BUF_SIZE (2 * BUF_SIZE + 2)
+
+/* SLIP protocol characters. */
+#define SLIP_END             0300      /* indicates end of frame       */
+#define SLIP_ESC             0333      /* indicates byte stuffing      */
+#define SLIP_ESC_END         0334      /* ESC ESC_END means END 'data' */
+#define SLIP_ESC_ESC         0335      /* ESC ESC_ESC means ESC 'data' */
+
+static inline int slip_unesc(unsigned char c, unsigned char *buf, int *pos,
+                             int *esc)
+{
+       int ret;
+
+       switch(c){
+       case SLIP_END:
+               *esc = 0;
+               ret=*pos;
+               *pos=0;
+               return(ret);
+       case SLIP_ESC:
+               *esc = 1;
+               return(0);
+       case SLIP_ESC_ESC:
+               if(*esc){
+                       *esc = 0;
+                       c = SLIP_ESC;
+               }
+               break;
+       case SLIP_ESC_END:
+               if(*esc){
+                       *esc = 0;
+                       c = SLIP_END;
+               }
+               break;
+       }
+       buf[(*pos)++] = c;
+       return(0);
+}
+
+static inline int slip_esc(unsigned char *s, unsigned char *d, int len)
+{
+       unsigned char *ptr = d;
+       unsigned char c;
+
+       /*
+        * Send an initial END character to flush out any
+        * data that may have accumulated in the receiver
+        * due to line noise.
+        */
+
+       *ptr++ = SLIP_END;
+
+       /*
+        * For each byte in the packet, send the appropriate
+        * character sequence, according to the SLIP protocol.
+        */
+
+       while (len-- > 0) {
+               switch(c = *s++) {
+               case SLIP_END:
+                       *ptr++ = SLIP_ESC;
+                       *ptr++ = SLIP_ESC_END;
+                       break;
+               case SLIP_ESC:
+                       *ptr++ = SLIP_ESC;
+                       *ptr++ = SLIP_ESC_ESC;
+                       break;
+               default:
+                       *ptr++ = c;
+                       break;
+               }
+       }
+       *ptr++ = SLIP_END;
+       return (ptr - d);
+}
+
+struct slip_proto {
+       unsigned char ibuf[ENC_BUF_SIZE];
+       unsigned char obuf[ENC_BUF_SIZE];
+       int more; /* more data: do not read fd until ibuf has been drained */
+       int pos;
+       int esc;
+};
+
+#define SLIP_PROTO_INIT { \
+       .ibuf   = { '\0' }, \
+       .obuf   = { '\0' }, \
+        .more  = 0, \
+       .pos    = 0, \
+       .esc    = 0 \
+}
+
+extern int slip_proto_read(int fd, void *buf, int len,
+                          struct slip_proto *slip);
+extern int slip_proto_write(int fd, void *buf, int len,
+                           struct slip_proto *slip);
+
+#endif
diff -urN linux/arch/um/drivers/Makefile linux/arch/um/drivers/Makefile
--- linux/arch/um/drivers/Makefile      2005/04/08 18:58:06     1.11
+++ linux/arch/um/drivers/Makefile      2005/06/18 14:42:43     1.12
@@ -22,8 +22,8 @@
 obj-$(CONFIG_SSL) += ssl.o
 obj-$(CONFIG_STDERR_CONSOLE) += stderr_console.o
 
-obj-$(CONFIG_UML_NET_SLIP) += slip.o
-obj-$(CONFIG_UML_NET_SLIRP) += slirp.o
+obj-$(CONFIG_UML_NET_SLIP) += slip.o slip_common.o
+obj-$(CONFIG_UML_NET_SLIRP) += slirp.o slip_common.o
 obj-$(CONFIG_UML_NET_DAEMON) += daemon.o 
 obj-$(CONFIG_UML_NET_MCAST) += mcast.o 
 #obj-$(CONFIG_UML_NET_PCAP) += pcap.o $(PCAP)
@@ -41,6 +41,6 @@
 obj-$(CONFIG_BLK_DEV_COW_COMMON) += cow_user.o
 obj-$(CONFIG_UML_RANDOM) += random.o
 
-USER_OBJS := fd.o null.o pty.o tty.o xterm.o
+USER_OBJS := fd.o null.o pty.o tty.o xterm.o slip_common.o
 
 include arch/um/scripts/Makefile.rules
diff -urN linux/arch/um/drivers/chan_user.c linux/arch/um/drivers/chan_user.c
--- linux/arch/um/drivers/chan_user.c   2005/01/25 04:28:07     1.8
+++ linux/arch/um/drivers/chan_user.c   2005/06/18 14:42:43     1.9
@@ -143,22 +143,22 @@
 {
        struct winch_data data;
        unsigned long stack;
-       int fds[2], pid, n, err;
+       int fds[2], n, err;
        char c;
 
        err = os_pipe(fds, 1, 1);
        if(err < 0){
                printk("winch_tramp : os_pipe failed, err = %d\n", -err);
-               return(err);
+               goto out;
        }
 
        data = ((struct winch_data) { .pty_fd           = fd,
                                      .pipe_fd          = fds[1],
                                      .close_me         = fds[0] } );
-       pid = run_helper_thread(winch_thread, &data, 0, &stack, 0);
-       if(pid < 0){
+       err = run_helper_thread(winch_thread, &data, 0, &stack, 0);
+       if(err < 0){
                printk("fork of winch_thread failed - errno = %d\n", errno);
-               return(pid);
+               goto out_close;
        }
 
        os_close_file(fds[1]);
@@ -168,14 +168,22 @@
                printk("winch_tramp : failed to read synchronization byte\n");
                printk("read failed, err = %d\n", -n);
                printk("fd %d will not support SIGWINCH\n", fd);
-               *fd_out = -1;
+                err = -EINVAL;
+               goto out_close1;
        }
-       return(pid);
+       return err ;
+
+ out_close:
+       os_close_file(fds[1]);
+ out_close1:
+       os_close_file(fds[0]);
+ out:
+       return err;
 }
 
 void register_winch(int fd, struct tty_struct *tty)
 {
-       int pid, thread, thread_fd;
+       int pid, thread, thread_fd = -1;
        int count;
        char c = 1;
 
@@ -186,7 +194,7 @@
        if(!CHOOSE_MODE_PROC(is_tracer_winch, is_skas_winch, pid, fd,
                             tty) && (pid == -1)){
                thread = winch_tramp(fd, tty, &thread_fd);
-               if(fd != -1){
+               if(thread > 0){
                        register_winch_irq(thread_fd, fd, thread, tty);
 
                        count = os_write_file(thread_fd, &c, sizeof(c));
diff -urN linux/arch/um/drivers/mmapper_kern.c 
linux/arch/um/drivers/mmapper_kern.c
--- linux/arch/um/drivers/mmapper_kern.c        2005/01/13 14:05:39     1.8
+++ linux/arch/um/drivers/mmapper_kern.c        2005/06/18 14:42:43     1.9
@@ -18,6 +18,7 @@
 #include <linux/slab.h>
 #include <linux/init.h> 
 #include <linux/smp_lock.h>
+#include <linux/miscdevice.h>
 #include <asm/uaccess.h>
 #include <asm/irq.h>
 #include <asm/pgtable.h>
@@ -117,24 +118,39 @@
        .release        = mmapper_release,
 };
 
+static struct miscdevice mmapper_dev = {
+       .minor          = MISC_DYNAMIC_MINOR,
+       .name           = "mmapper",
+       .fops           = &mmapper_fops
+};
+
 static int __init mmapper_init(void)
 {
+       int err;
+
        printk(KERN_INFO "Mapper v0.1\n");
 
        v_buf = (char *) find_iomem("mmapper", &mmapper_size);
        if(mmapper_size == 0){
                printk(KERN_ERR "mmapper_init - find_iomem failed\n");
-               return(0);
+               goto out;
        }
 
-       p_buf = __pa(v_buf);
+       err = misc_register(&mmapper_dev);
+       if(err){
+               printk(KERN_ERR "mmapper - misc_register failed, err = %d\n",
+                      err);
+               goto out;
+       }
 
-       devfs_mk_cdev(MKDEV(30, 0), S_IFCHR|S_IRUGO|S_IWUGO, "mmapper");
-       return(0);
+       p_buf = __pa(v_buf);
+out:
+       return 0;
 }
 
 static void mmapper_exit(void)
 {
+       misc_deregister(&mmapper_dev);
 }
 
 module_init(mmapper_init);
diff -urN linux/arch/um/drivers/net_user.c linux/arch/um/drivers/net_user.c
--- linux/arch/um/drivers/net_user.c    2005/01/13 14:05:39     1.4
+++ linux/arch/um/drivers/net_user.c    2005/06/18 14:42:43     1.5
@@ -32,7 +32,7 @@
        return(0);
 }
 
-void tap_check_ips(char *gate_addr, char *eth_addr)
+void tap_check_ips(char *gate_addr, unsigned char *eth_addr)
 {
        int tap_addr[4];
 
diff -urN linux/arch/um/drivers/slip.h linux/arch/um/drivers/slip.h
--- linux/arch/um/drivers/slip.h        2003/06/02 13:54:09     1.3
+++ linux/arch/um/drivers/slip.h        2005/06/18 14:42:43     1.4
@@ -1,10 +1,7 @@
 #ifndef __UM_SLIP_H
 #define __UM_SLIP_H
 
-#define BUF_SIZE 1500
- /* two bytes each for a (pathological) max packet of escaped chars +  * 
-  * terminating END char + initial END char                            */
-#define ENC_BUF_SIZE (2 * BUF_SIZE + 2)
+#include "slip_common.h"
 
 struct slip_data {
        void *dev;
@@ -12,28 +9,12 @@
        char *addr;
        char *gate_addr;
        int slave;
-       char ibuf[ENC_BUF_SIZE];
-       char obuf[ENC_BUF_SIZE];
-       int more; /* more data: do not read fd until ibuf has been drained */
-       int pos;
-       int esc;
+       struct slip_proto slip;
 };
 
 extern struct net_user_info slip_user_info;
 
-extern int set_umn_addr(int fd, char *addr, char *ptp_addr);
 extern int slip_user_read(int fd, void *buf, int len, struct slip_data *pri);
 extern int slip_user_write(int fd, void *buf, int len, struct slip_data *pri);
 
 #endif
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-file-style: "linux"
- * End:
- */
diff -urN linux/arch/um/drivers/slip_kern.c linux/arch/um/drivers/slip_kern.c
--- linux/arch/um/drivers/slip_kern.c   2003/06/04 14:05:41     1.4
+++ linux/arch/um/drivers/slip_kern.c   2005/06/18 14:42:43     1.5
@@ -26,16 +26,16 @@
                  .addr         = NULL,
                  .gate_addr    = init->gate_addr,
                  .slave        = -1,
-                 .ibuf         = { '\0' },
-                 .obuf         = { '\0' },
-                 .pos          = 0,
-                 .esc          = 0,
+                 .slip         = SLIP_PROTO_INIT,
                  .dev          = dev });
 
        dev->init = NULL;
+       dev->header_cache_update = NULL;
+       dev->hard_header_cache = NULL;
+       dev->hard_header = NULL;
        dev->hard_header_len = 0;
-       dev->addr_len = 4;
-       dev->type = ARPHRD_ETHER;
+       dev->addr_len = 0;
+       dev->type = ARPHRD_SLIP;
        dev->tx_queue_len = 256;
        dev->flags = IFF_NOARP;
        printk("SLIP backend - SLIP IP = %s\n", spri->gate_addr);
diff -urN linux/arch/um/drivers/slip_user.c linux/arch/um/drivers/slip_user.c
--- linux/arch/um/drivers/slip_user.c   2005/04/08 18:58:06     1.5
+++ linux/arch/um/drivers/slip_user.c   2005/06/18 14:42:43     1.6
@@ -13,7 +13,7 @@
 #include "user.h"
 #include "net_user.h"
 #include "slip.h"
-#include "slip_proto.h"
+#include "slip_common.h"
 #include "helper.h"
 #include "os.h"
 
@@ -77,41 +77,51 @@
        err = os_pipe(fds, 1, 0);
        if(err < 0){
                printk("slip_tramp : pipe failed, err = %d\n", -err);
-               return(err);
+               goto out;
        }
 
        err = 0;
        pe_data.stdin = fd;
        pe_data.stdout = fds[1];
        pe_data.close_me = fds[0];
-       pid = run_helper(slip_pre_exec, &pe_data, argv, NULL);
-
-       if(pid < 0) err = pid;
-       else {
-               output_len = page_size();
-               output = um_kmalloc(output_len);
-               if(output == NULL)
-                       printk("slip_tramp : failed to allocate output "
-                              "buffer\n");
-
-               os_close_file(fds[1]);
-               read_output(fds[0], output, output_len);
-               if(output != NULL){
-                       printk("%s", output);
-                       kfree(output);
-               }
-               CATCH_EINTR(err = waitpid(pid, &status, 0));
-               if(err < 0)
-                       err = errno;
-               else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)){
-                       printk("'%s' didn't exit with status 0\n", argv[0]);
-                       err = -EINVAL;
-               }
+       err = run_helper(slip_pre_exec, &pe_data, argv, NULL);
+       if(err < 0)
+               goto out_close;
+       pid = err;
+
+       output_len = page_size();
+       output = um_kmalloc(output_len);
+       if(output == NULL){
+               printk("slip_tramp : failed to allocate output buffer\n");
+               os_kill_process(pid, 1);
+               err = -ENOMEM;
+               goto out_free;
+       }
+
+       os_close_file(fds[1]);
+       read_output(fds[0], output, output_len);
+       printk("%s", output);
+
+       CATCH_EINTR(err = waitpid(pid, &status, 0));
+       if(err < 0)
+               err = errno;
+       else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)){
+               printk("'%s' didn't exit with status 0\n", argv[0]);
+               err = -EINVAL;
        }
+       else err = 0;
 
        os_close_file(fds[0]);
 
-       return(err);
+out_free:
+       kfree(output);
+       return err;
+
+out_close:
+       os_close_file(fds[0]);
+       os_close_file(fds[1]);
+out:
+       return err;
 }
 
 static int slip_open(void *data)
@@ -123,21 +133,26 @@
                         NULL };
        int sfd, mfd, err;
 
-       mfd = get_pty();
-       if(mfd < 0){
-               printk("umn : Failed to open pty, err = %d\n", -mfd);
-               return(mfd);
+       err = get_pty();
+       if(err < 0){
+               printk("slip-open : Failed to open pty, err = %d\n", -err);
+               goto out;
        }
-       sfd = os_open_file(ptsname(mfd), of_rdwr(OPENFLAGS()), 0);
-       if(sfd < 0){
-               printk("Couldn't open tty for slip line, err = %d\n", -sfd);
-               os_close_file(mfd);
-               return(sfd);
+       mfd = err;
+
+       err = os_open_file(ptsname(mfd), of_rdwr(OPENFLAGS()), 0);
+       if(err < 0){
+               printk("Couldn't open tty for slip line, err = %d\n", -err);
+               goto out_close;
        }
-       if(set_up_tty(sfd)) return(-1);
+       sfd = err;
+
+       if(set_up_tty(sfd))
+               goto out_close2;
+
        pri->slave = sfd;
-       pri->pos = 0;
-       pri->esc = 0;
+       pri->slip.pos = 0;
+       pri->slip.esc = 0;
        if(pri->gate_addr != NULL){
                sprintf(version_buf, "%d", UML_NET_VERSION);
                strcpy(gate_buf, pri->gate_addr);
@@ -146,12 +161,12 @@
 
                if(err < 0){
                        printk("slip_tramp failed - err = %d\n", -err);
-                       return(err);
+                       goto out_close2;
                }
                err = os_get_ifname(pri->slave, pri->name);
                if(err < 0){
                        printk("get_ifname failed, err = %d\n", -err);
-                       return(err);
+                       goto out_close2;
                }
                iter_addresses(pri->dev, open_addr, pri->name);
        }
@@ -160,10 +175,16 @@
                if(err < 0){
                        printk("Failed to set slip discipline encapsulation - "
                               "err = %d\n", -err);
-                       return(err);
+                       goto out_close2;
                }
        }
        return(mfd);
+out_close2:
+       os_close_file(sfd);
+out_close:
+       os_close_file(mfd);
+out:
+       return err;
 }
 
 static void slip_close(int fd, void *data)
@@ -190,48 +211,12 @@
 
 int slip_user_read(int fd, void *buf, int len, struct slip_data *pri)
 {
-       int i, n, size, start;
-
-       if(pri->more>0) {
-               i = 0;
-               while(i < pri->more) {
-                       size = slip_unesc(pri->ibuf[i++],
-                                       pri->ibuf, &pri->pos, &pri->esc);
-                       if(size){
-                               memcpy(buf, pri->ibuf, size);
-                               memmove(pri->ibuf, &pri->ibuf[i], pri->more-i);
-                               pri->more=pri->more-i; 
-                               return(size);
-                       }
-               }
-               pri->more=0;
-       }
-
-       n = net_read(fd, &pri->ibuf[pri->pos], sizeof(pri->ibuf) - pri->pos);
-       if(n <= 0) return(n);
-
-       start = pri->pos;
-       for(i = 0; i < n; i++){
-               size = slip_unesc(pri->ibuf[start + i],
-                               pri->ibuf, &pri->pos, &pri->esc);
-               if(size){
-                       memcpy(buf, pri->ibuf, size);
-                       memmove(pri->ibuf, &pri->ibuf[start+i+1], n-(i+1));
-                       pri->more=n-(i+1); 
-                       return(size);
-               }
-       }
-       return(0);
+       return slip_proto_read(fd, buf, len, &pri->slip);
 }
 
 int slip_user_write(int fd, void *buf, int len, struct slip_data *pri)
 {
-       int actual, n;
-
-       actual = slip_esc(buf, pri->obuf, len);
-       n = net_write(fd, pri->obuf, actual);
-       if(n < 0) return(n);
-       else return(len);
+       return slip_proto_write(fd, buf, len, &pri->slip);
 }
 
 static int slip_set_mtu(int mtu, void *data)
@@ -267,14 +252,3 @@
        .delete_address = slip_del_addr,
        .max_packet     = BUF_SIZE
 };
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-file-style: "linux"
- * End:
- */
diff -urN linux/arch/um/drivers/slirp.h linux/arch/um/drivers/slirp.h
--- linux/arch/um/drivers/slirp.h       2003/06/02 13:54:09     1.1
+++ linux/arch/um/drivers/slirp.h       2005/06/18 14:42:43     1.2
@@ -1,10 +1,7 @@
 #ifndef __UM_SLIRP_H
 #define __UM_SLIRP_H
 
-#define BUF_SIZE 1500
- /* two bytes each for a (pathological) max packet of escaped chars +  * 
-  * terminating END char + initial END char                            */
-#define ENC_BUF_SIZE (2 * BUF_SIZE + 2)
+#include "slip_common.h"
 
 #define SLIRP_MAX_ARGS 100
 /*
@@ -24,28 +21,13 @@
        struct arg_list_dummy_wrapper argw;
        int pid;
        int slave;
-       char ibuf[ENC_BUF_SIZE];
-       char obuf[ENC_BUF_SIZE];
-       int more; /* more data: do not read fd until ibuf has been drained */
-       int pos;
-       int esc;
+       struct slip_proto slip;
 };
 
 extern struct net_user_info slirp_user_info;
 
-extern int set_umn_addr(int fd, char *addr, char *ptp_addr);
 extern int slirp_user_read(int fd, void *buf, int len, struct slirp_data *pri);
-extern int slirp_user_write(int fd, void *buf, int len, struct slirp_data 
*pri);
+extern int slirp_user_write(int fd, void *buf, int len,
+                           struct slirp_data *pri);
 
 #endif
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-file-style: "linux"
- * End:
- */
diff -urN linux/arch/um/drivers/slirp_kern.c linux/arch/um/drivers/slirp_kern.c
--- linux/arch/um/drivers/slirp_kern.c  2005/03/18 17:37:05     1.3
+++ linux/arch/um/drivers/slirp_kern.c  2005/06/18 14:42:43     1.4
@@ -25,10 +25,7 @@
                { .argw         = init->argw,
                  .pid          = -1,
                  .slave        = -1,
-                 .ibuf         = { '\0' },
-                 .obuf         = { '\0' },
-                 .pos          = 0,
-                 .esc          = 0,
+                 .slip         = SLIP_PROTO_INIT,
                  .dev          = dev });
 
        dev->init = NULL;
diff -urN linux/arch/um/drivers/slirp_user.c linux/arch/um/drivers/slirp_user.c
--- linux/arch/um/drivers/slirp_user.c  2004/09/19 12:30:07     1.3
+++ linux/arch/um/drivers/slirp_user.c  2005/06/18 14:42:43     1.4
@@ -12,7 +12,7 @@
 #include "user.h"
 #include "net_user.h"
 #include "slirp.h"
-#include "slip_proto.h"
+#include "slip_common.h"
 #include "helper.h"
 #include "os.h"
 
@@ -48,47 +48,32 @@
        return(pid);
 }
 
-/* XXX This is just a trivial wrapper around os_pipe */
-static int slirp_datachan(int *mfd, int *sfd)
-{
-       int fds[2], err;
-
-       err = os_pipe(fds, 1, 1);
-       if(err < 0){
-               printk("slirp_datachan: Failed to open pipe, err = %d\n", -err);
-               return(err);
-       }
-
-       *mfd = fds[0];
-       *sfd = fds[1];
-       return(0);
-}
-
 static int slirp_open(void *data)
 {
        struct slirp_data *pri = data;
-       int sfd, mfd, pid, err;
+       int fds[2], pid, err;
 
-       err = slirp_datachan(&mfd, &sfd);
+       err = os_pipe(fds, 1, 1);
        if(err)
                return(err);
 
-       pid = slirp_tramp(pri->argw.argv, sfd);
-
-       if(pid < 0){
-               printk("slirp_tramp failed - errno = %d\n", -pid);
-               os_close_file(sfd);     
-               os_close_file(mfd);     
-               return(pid);
+       err = slirp_tramp(pri->argw.argv, fds[1]);
+       if(err < 0){
+               printk("slirp_tramp failed - errno = %d\n", -err);
+               goto out;
        }
+       pid = err;
 
-       pri->slave = sfd;
-       pri->pos = 0;
-       pri->esc = 0;
-
-       pri->pid = pid;
-
-       return(mfd);
+       pri->slave = fds[1];
+       pri->slip.pos = 0;
+       pri->slip.esc = 0;
+       pri->pid = err;
+
+       return(fds[0]);
+out:
+       os_close_file(fds[0]);
+       os_close_file(fds[1]);
+       return err;
 }
 
 static void slirp_close(int fd, void *data)
@@ -129,48 +114,12 @@
 
 int slirp_user_read(int fd, void *buf, int len, struct slirp_data *pri)
 {
-       int i, n, size, start;
-
-       if(pri->more>0) {
-               i = 0;
-               while(i < pri->more) {
-                       size = slip_unesc(pri->ibuf[i++],
-                                       pri->ibuf,&pri->pos,&pri->esc);
-                       if(size){
-                               memcpy(buf, pri->ibuf, size);
-                               memmove(pri->ibuf, &pri->ibuf[i], pri->more-i);
-                               pri->more=pri->more-i; 
-                               return(size);
-                       }
-               }
-               pri->more=0;
-       }
-
-       n = net_read(fd, &pri->ibuf[pri->pos], sizeof(pri->ibuf) - pri->pos);
-       if(n <= 0) return(n);
-
-       start = pri->pos;
-       for(i = 0; i < n; i++){
-               size = slip_unesc(pri->ibuf[start + i],
-                               pri->ibuf,&pri->pos,&pri->esc);
-               if(size){
-                       memcpy(buf, pri->ibuf, size);
-                       memmove(pri->ibuf, &pri->ibuf[start+i+1], n-(i+1));
-                       pri->more=n-(i+1); 
-                       return(size);
-               }
-       }
-       return(0);
+       return slip_proto_read(fd, buf, len, &pri->slip);
 }
 
 int slirp_user_write(int fd, void *buf, int len, struct slirp_data *pri)
 {
-       int actual, n;
-
-       actual = slip_esc(buf, pri->obuf, len);
-       n = net_write(fd, pri->obuf, actual);
-       if(n < 0) return(n);
-       else return(len);
+       return slip_proto_write(fd, buf, len, &pri->slip);
 }
 
 static int slirp_set_mtu(int mtu, void *data)
@@ -188,14 +137,3 @@
        .delete_address = NULL,
        .max_packet     = BUF_SIZE
 };
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-file-style: "linux"
- * End:
- */
diff -urN linux/arch/um/drivers/stderr_console.c 
linux/arch/um/drivers/stderr_console.c
--- linux/arch/um/drivers/stderr_console.c      2005/01/13 14:05:39     1.1
+++ linux/arch/um/drivers/stderr_console.c      2005/06/18 14:42:43     1.2
@@ -22,9 +22,9 @@
 }
 
 static struct console stderr_console = {
-       .name           "stderr",
-       .write          stderr_console_write,
-       .flags          CON_PRINTBUFFER,
+       .name           = "stderr",
+       .write          = stderr_console_write,
+       .flags          = CON_PRINTBUFFER,
 };
 
 static int __init stderr_console_init(void)
diff -urN linux/arch/um/drivers/slip_proto.h linux/arch/um/drivers/slip_proto.h
--- linux/arch/um/drivers/Attic/slip_proto.h    2005-06-18 15:42:43.956244000 
+0100     1.1
+++ linux/arch/um/drivers/Attic/slip_proto.h    1970/01/01 00:00:00+0100
@@ -1,93 +0,0 @@
-/* 
- * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
- * Licensed under the GPL
- */
-
-#ifndef __UM_SLIP_PROTO_H__
-#define __UM_SLIP_PROTO_H__
-
-/* SLIP protocol characters. */
-#define SLIP_END             0300      /* indicates end of frame       */
-#define SLIP_ESC             0333      /* indicates byte stuffing      */
-#define SLIP_ESC_END         0334      /* ESC ESC_END means END 'data' */
-#define SLIP_ESC_ESC         0335      /* ESC ESC_ESC means ESC 'data' */
-
-static inline int slip_unesc(unsigned char c,char *buf,int *pos, int *esc)
-{
-       int ret;
-
-       switch(c){
-       case SLIP_END:
-               *esc = 0;
-               ret=*pos;
-               *pos=0;
-               return(ret);
-       case SLIP_ESC:
-               *esc = 1;
-               return(0);
-       case SLIP_ESC_ESC:
-               if(*esc){
-                       *esc = 0;
-                       c = SLIP_ESC;
-               }
-               break;
-       case SLIP_ESC_END:
-               if(*esc){
-                       *esc = 0;
-                       c = SLIP_END;
-               }
-               break;
-       }
-       buf[(*pos)++] = c;
-       return(0);
-}
-
-static inline int slip_esc(unsigned char *s, unsigned char *d, int len)
-{
-       unsigned char *ptr = d;
-       unsigned char c;
-
-       /*
-        * Send an initial END character to flush out any
-        * data that may have accumulated in the receiver
-        * due to line noise.
-        */
-
-       *ptr++ = SLIP_END;
-
-       /*
-        * For each byte in the packet, send the appropriate
-        * character sequence, according to the SLIP protocol.
-        */
-
-       while (len-- > 0) {
-               switch(c = *s++) {
-               case SLIP_END:
-                       *ptr++ = SLIP_ESC;
-                       *ptr++ = SLIP_ESC_END;
-                       break;
-               case SLIP_ESC:
-                       *ptr++ = SLIP_ESC;
-                       *ptr++ = SLIP_ESC_ESC;
-                       break;
-               default:
-                       *ptr++ = c;
-                       break;
-               }
-       }
-       *ptr++ = SLIP_END;
-       return (ptr - d);
-}
-
-#endif
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-file-style: "linux"
- * End:
- */
diff -urN linux/arch/um/include/mconsole.h linux/arch/um/include/mconsole.h
--- linux/arch/um/include/mconsole.h    2004/09/19 12:30:07     1.4
+++ linux/arch/um/include/mconsole.h    2005/06/18 14:42:43     1.5
@@ -56,7 +56,7 @@
        int as_interrupt;
 
        int originating_fd;
-       int originlen;
+       unsigned int originlen;
        unsigned char origin[128];                      /* sockaddr_un */
 
        struct mconsole_request request;
diff -urN linux/arch/um/include/net_user.h linux/arch/um/include/net_user.h
--- linux/arch/um/include/net_user.h    2003/06/02 13:54:09     1.3
+++ linux/arch/um/include/net_user.h    2005/06/18 14:42:43     1.4
@@ -35,7 +35,7 @@
 extern void free_output_buffer(void *buffer);
 
 extern int tap_open_common(void *dev, char *gate_addr);
-extern void tap_check_ips(char *gate_addr, char *eth_addr);
+extern void tap_check_ips(char *gate_addr, unsigned char *eth_addr);
 
 extern void read_output(int fd, char *output_out, int len);
 
diff -urN linux/arch/um/include/os.h linux/arch/um/include/os.h
--- linux/arch/um/include/os.h  2005/05/19 12:08:16     1.7
+++ linux/arch/um/include/os.h  2005/06/18 14:42:43     1.8
@@ -136,7 +136,7 @@
 extern int os_open_file(char *file, struct openflags flags, int mode);
 extern int os_read_file(int fd, void *buf, int len);
 extern int os_write_file(int fd, const void *buf, int count);
-extern int os_file_size(char *file, long long *size_out);
+extern int os_file_size(char *file, unsigned long long *size_out);
 extern int os_file_modtime(char *file, unsigned long *modtime);
 extern int os_pipe(int *fd, int stream, int close_on_exec);
 extern int os_set_fd_async(int fd, int owner);
diff -urN linux/arch/um/include/user_util.h linux/arch/um/include/user_util.h
--- linux/arch/um/include/user_util.h   2005/05/19 12:08:16     1.11
+++ linux/arch/um/include/user_util.h   2005/06/18 14:42:43     1.12
@@ -41,9 +41,6 @@
 extern char host_info[];
 
 extern char saved_command_line[];
-extern char command_line[];
-
-extern char *tempdir;
 
 extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end;
 extern unsigned long _unprotected_end;
diff -urN linux/arch/um/include/sysdep-i386/ptrace.h 
linux/arch/um/include/sysdep-i386/ptrace.h
--- linux/arch/um/include/sysdep-i386/ptrace.h  2005/05/26 09:12:39     1.8
+++ linux/arch/um/include/sysdep-i386/ptrace.h  2005/06/18 14:42:44     1.9
@@ -8,6 +8,8 @@
 
 #include "uml-config.h"
 #include "user_constants.h"
+#include "sysdep/faultinfo.h"
+#include "choose-mode.h"
 
 #define MAX_REG_NR (UM_FRAME_SIZE / sizeof(unsigned long))
 #define MAX_REG_OFFSET (UM_FRAME_SIZE)
@@ -58,9 +60,6 @@
 #define PTRACE_SYSEMU_SINGLESTEP 32
 #endif
 
-#include "sysdep/faultinfo.h"
-#include "choose-mode.h"
-
 union uml_pt_regs {
 #ifdef UML_CONFIG_MODE_TT
        struct tt_regs {
diff -urN linux/arch/um/kernel/main.c linux/arch/um/kernel/main.c
--- linux/arch/um/kernel/main.c 2005/06/07 13:45:30     1.6
+++ linux/arch/um/kernel/main.c 2005/06/18 14:42:44     1.7
@@ -24,8 +24,6 @@
 #include "mode.h"
 #include "choose-mode.h"
 #include "uml-config.h"
-#include "irq_user.h"
-#include "time_user.h"
 #include "os.h"
 
 /* Set in set_stklim, which is called from main and __wrap_malloc.
diff -urN linux/arch/um/kernel/process.c linux/arch/um/kernel/process.c
--- linux/arch/um/kernel/process.c      2005/05/19 12:08:17     1.13
+++ linux/arch/um/kernel/process.c      2005/06/18 14:42:44     1.14
@@ -30,7 +30,6 @@
 #include "init.h"
 #include "os.h"
 #include "uml-config.h"
-#include "ptrace_user.h"
 #include "choose-mode.h"
 #include "mode.h"
 #ifdef UML_CONFIG_MODE_SKAS
@@ -131,7 +130,7 @@
        return(arg.pid);
 }
 
-static int ptrace_child(void *arg)
+static int ptrace_child(void)
 {
        int ret;
        int pid = os_getpid(), ppid = getppid();
@@ -160,20 +159,16 @@
        _exit(ret);
 }
 
-static int start_ptraced_child(void **stack_out)
+static int start_ptraced_child(void)
 {
-       void *stack;
-       unsigned long sp;
        int pid, n, status;
        
-       stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
-                    MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-       if(stack == MAP_FAILED)
-               panic("check_ptrace : mmap failed, errno = %d", errno);
-       sp = (unsigned long) stack + PAGE_SIZE - sizeof(void *);
-       pid = clone(ptrace_child, (void *) sp, SIGCHLD, NULL);
+       pid = fork();
+       if(pid == 0)
+               ptrace_child();
+
        if(pid < 0)
-               panic("check_ptrace : clone failed, errno = %d", errno);
+               panic("check_ptrace : fork failed, errno = %d", errno);
        CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED));
        if(n < 0)
                panic("check_ptrace : wait failed, errno = %d", errno);
@@ -181,7 +176,6 @@
                panic("check_ptrace : expected SIGSTOP, got status = %d",
                      status);
 
-       *stack_out = stack;
        return(pid);
 }
 
@@ -189,12 +183,12 @@
  * just avoid using sysemu, not panic, but only if SYSEMU features are broken.
  * So only for SYSEMU features we test mustpanic, while normal host features
  * must work anyway!*/
-static int stop_ptraced_child(int pid, void *stack, int exitcode, int 
mustpanic)
+static int stop_ptraced_child(int pid, int exitcode, int mustexit)
 {
        int status, n, ret = 0;
 
        if(ptrace(PTRACE_CONT, pid, 0, 0) < 0)
-               panic("check_ptrace : ptrace failed, errno = %d", errno);
+               panic("stop_ptraced_child : ptrace failed, errno = %d", errno);
        CATCH_EINTR(n = waitpid(pid, &status, 0));
        if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) {
                int exit_with = WEXITSTATUS(status);
@@ -205,15 +199,13 @@
                printk("check_ptrace : child exited with exitcode %d, while "
                      "expecting %d; status 0x%x", exit_with,
                      exitcode, status);
-               if (mustpanic)
+               if (mustexit)
                        panic("\n");
                else
                        printk("\n");
                ret = -1;
        }
 
-       if(munmap(stack, PAGE_SIZE) < 0)
-               panic("check_ptrace : munmap failed, errno = %d", errno);
        return ret;
 }
 
@@ -235,12 +227,11 @@
 
 static void __init check_sysemu(void)
 {
-       void *stack;
        int pid, syscall, n, status, count=0;
 
        printk("Checking syscall emulation patch for ptrace...");
        sysemu_supported = 0;
-       pid = start_ptraced_child(&stack);
+       pid = start_ptraced_child();
 
        if(ptrace(PTRACE_SYSEMU, pid, 0, 0) < 0)
                goto fail;
@@ -258,7 +249,7 @@
                panic("check_sysemu : failed to modify system "
                      "call return, errno = %d", errno);
 
-       if (stop_ptraced_child(pid, stack, 0, 0) < 0)
+       if (stop_ptraced_child(pid, 0, 0) < 0)
                goto fail_stopped;
 
        sysemu_supported = 1;
@@ -266,7 +257,7 @@
        set_using_sysemu(!force_sysemu_disabled);
 
        printk("Checking advanced syscall emulation patch for ptrace...");
-       pid = start_ptraced_child(&stack);
+       pid = start_ptraced_child();
        while(1){
                count++;
                if(ptrace(PTRACE_SYSEMU_SINGLESTEP, pid, 0, 0) < 0)
@@ -291,7 +282,7 @@
                        break;
                }
        }
-       if (stop_ptraced_child(pid, stack, 0, 0) < 0)
+       if (stop_ptraced_child(pid, 0, 0) < 0)
                goto fail_stopped;
 
        sysemu_supported = 2;
@@ -302,18 +293,17 @@
        return;
 
 fail:
-       stop_ptraced_child(pid, stack, 1, 0);
+       stop_ptraced_child(pid, 1, 0);
 fail_stopped:
        printk("missing\n");
 }
 
 void __init check_ptrace(void)
 {
-       void *stack;
        int pid, syscall, n, status;
 
        printk("Checking that ptrace can change system call numbers...");
-       pid = start_ptraced_child(&stack);
+       pid = start_ptraced_child();
 
        if (ptrace(PTRACE_OLDSETOPTIONS, pid, 0, (void *)PTRACE_O_TRACESYSGOOD) 
< 0)
                panic("check_ptrace: PTRACE_SETOPTIONS failed, errno = %d", 
errno);
@@ -340,7 +330,7 @@
                        break;
                }
        }
-       stop_ptraced_child(pid, stack, 0, 1);
+       stop_ptraced_child(pid, 0, 1);
        printk("OK\n");
        check_sysemu();
 }
@@ -372,11 +362,10 @@
 static inline int check_skas3_ptrace_support(void)
 {
        struct ptrace_faultinfo fi;
-       void *stack;
        int pid, n, ret = 1;
 
        printf("Checking for the skas3 patch in the host...");
-       pid = start_ptraced_child(&stack);
+       pid = start_ptraced_child();
 
        n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
        if (n < 0) {
@@ -391,7 +380,7 @@
        }
 
        init_registers(pid);
-       stop_ptraced_child(pid, stack, 1, 1);
+       stop_ptraced_child(pid, 1, 1);
 
        return(ret);
 }
diff -urN linux/arch/um/kernel/um_arch.c linux/arch/um/kernel/um_arch.c
--- linux/arch/um/kernel/um_arch.c      2005/06/07 13:45:30     1.15
+++ linux/arch/um/kernel/um_arch.c      2005/06/18 14:42:44     1.16
@@ -26,7 +26,6 @@
 #include "asm/setup.h"
 #include "ubd_user.h"
 #include "asm/current.h"
-#include "asm/setup.h"
 #include "user_util.h"
 #include "kern_util.h"
 #include "kern.h"
diff -urN linux/arch/um/kernel/skas/process_kern.c 
linux/arch/um/kernel/skas/process_kern.c
--- linux/arch/um/kernel/skas/process_kern.c    2005/05/19 12:08:17     1.9
+++ linux/arch/um/kernel/skas/process_kern.c    2005/06/18 14:42:44     1.10
@@ -68,8 +68,11 @@
         * 0 if it just exits
         */
        n = run_kernel_thread(fn, arg, &current->thread.exec_buf);
-       if(n == 1)
+       if(n == 1){
+               /* Handle any immediate reschedules or signals */
+               interrupt_end();
                userspace(&current->thread.regs.regs);
+       }
        else do_exit(0);
 }
 
@@ -96,6 +99,8 @@
        schedule_tail(current->thread.prev_sched);
        current->thread.prev_sched = NULL;
 
+       /* Handle any immediate reschedules or signals */
+       interrupt_end();
        userspace(&current->thread.regs.regs);
 }
 
diff -urN linux/arch/um/os-Linux/elf_aux.c linux/arch/um/os-Linux/elf_aux.c
--- linux/arch/um/os-Linux/elf_aux.c    2005/01/13 14:05:42     1.1
+++ linux/arch/um/os-Linux/elf_aux.c    2005/06/18 14:42:44     1.2
@@ -45,7 +45,11 @@
                                elf_aux_hwcap = auxv->a_un.a_val;
                                break;
                        case AT_PLATFORM:
-                               elf_aux_platform = auxv->a_un.a_ptr;
+                                /* elf.h removed the pointer elements from
+                                 * a_un, so we have to use a_val, which is
+                                 * all that's left.
+                                 */
+                               elf_aux_platform = (char *) auxv->a_un.a_val;
                                break;
                        case AT_PAGESZ:
                                page_size = auxv->a_un.a_val;
diff -urN linux/arch/um/os-Linux/file.c linux/arch/um/os-Linux/file.c
--- linux/arch/um/os-Linux/file.c       2004/11/15 11:49:22     1.8
+++ linux/arch/um/os-Linux/file.c       2005/06/18 14:42:44     1.9
@@ -363,7 +363,7 @@
                       (int (*)(int, void *, int)) write, copy_to_user_proc));
 }
 
-int os_file_size(char *file, long long *size_out)
+int os_file_size(char *file, unsigned long long *size_out)
 {
        struct uml_stat buf;
        int err;
diff -urN linux/arch/um/scripts/Makefile.rules 
linux/arch/um/scripts/Makefile.rules
--- linux/arch/um/scripts/Makefile.rules        2005/05/19 12:08:18     1.2
+++ linux/arch/um/scripts/Makefile.rules        2005/06/18 14:42:45     1.3
@@ -14,7 +14,7 @@
 cmd_make_link       = ln -sf $(srctree)/arch/$(SUBARCH)/$($(notdir 
$@)-dir)/$(notdir $@) $@
 
 # this needs to be before the foreach, because targets does not accept
-# complete paths like $(obj)/$(f). To make sure this works, use a := 
assignment,
+# complete paths like $(obj)/$(f). To make sure this works, use a := assignment
 # or we will get $(obj)/$(f) in the "targets" value.
 # Also, this forces you to use the := syntax when assigning to targets.
 # Otherwise the line below will cause an infinite loop (if you don't know why,
diff -urN linux/arch/x86_64/kernel/aperture.c 
linux/arch/x86_64/kernel/aperture.c
--- linux/arch/x86_64/kernel/aperture.c 2005/04/29 11:15:04     1.11
+++ linux/arch/x86_64/kernel/aperture.c 2005/06/18 14:42:45     1.12
@@ -33,12 +33,10 @@
 
 int fix_aperture __initdata = 1;
 
-#define NB_ID_3 (PCI_VENDOR_ID_AMD | (0x1103<<16))
+/* This code runs before the PCI subsystem is initialized, so just
+   access the northbridge directly. */
 
-static struct resource aper_res = {
-       .name = "Aperture",
-       .flags = IORESOURCE_MEM,
-};
+#define NB_ID_3 (PCI_VENDOR_ID_AMD | (0x1103<<16))
 
 static u32 __init allocate_aperture(void) 
 {
@@ -55,24 +53,11 @@
        aper_size = (32 * 1024 * 1024) << fallback_aper_order; 
 
        /* 
-        * Aperture has to be naturally aligned. This means an 2GB
-        * aperture won't have much chances to find a place in the
-        * lower 4GB of memory.  Unfortunately we cannot move it up
-        * because that would make the IOMMU useless.
+        * Aperture has to be naturally aligned. This means an 2GB aperture 
won't
+        * have much chances to find a place in the lower 4GB of memory.
+        * Unfortunately we cannot move it up because that would make the
+        * IOMMU useless.
         */
-
-       /* First try to find some free unused space */
-       if (!allocate_resource(&iomem_resource, &aper_res,
-                              aper_size,
-                              0, 0xffffffff,
-                              aper_size,
-                              NULL, NULL)) {
-               printk(KERN_INFO "Putting aperture at %lx-%lx\n",
-                      aper_res.start, aper_res.end);
-               return aper_res.start;
-       }
-
-       /* No free space found. Go on to waste some memory... */
        p = __alloc_bootmem_node(nd0, aper_size, aper_size, 0); 
        if (!p || __pa(p)+aper_size > 0xffffffff) {
                printk("Cannot allocate aperture memory hole (%p,%uK)\n",
@@ -81,7 +66,7 @@
                        free_bootmem_node(nd0, (unsigned long)p, aper_size); 
                return 0;
        }
-       printk("Mapping aperture over %d KB of precious RAM @ %lx\n",
+       printk("Mapping aperture over %d KB of RAM @ %lx\n",
               aper_size >> 10, __pa(p)); 
        return (u32)__pa(p); 
 }
@@ -102,16 +87,10 @@
                printk("Aperture from %s pointing to e820 RAM. 
Ignoring.\n",name);
                return 0; 
        } 
-       /* Don't check the resource here because the aperture is usually
-          in an e820 reserved area, and we allocated these earlier. */
        return 1;
 } 
 
-/*
- * Find a PCI capability.
- * This code runs before the PCI subsystem is initialized, so just
- * access the northbridge directly.
- */
+/* Find a PCI capability */
 static __u32 __init find_cap(int num, int slot, int func, int cap) 
 { 
        u8 pos;
@@ -276,6 +255,8 @@
                   fallback_aper_force) { 
                printk("Your BIOS doesn't leave a aperture memory hole\n");
                printk("Please enable the IOMMU option in the BIOS setup\n");
+               printk("This costs you %d MB of RAM\n",
+                      32 << fallback_aper_order);
 
                aper_order = fallback_aper_order;
                aper_alloc = allocate_aperture();
diff -urN linux/drivers/block/cfq-iosched.c linux/drivers/block/cfq-iosched.c
--- linux/drivers/block/cfq-iosched.c   2005/03/18 17:37:10     1.12
+++ linux/drivers/block/cfq-iosched.c   2005/06/18 14:42:45     1.13
@@ -1202,13 +1202,16 @@
                if (new_cfqq) {
                        cfqq = new_cfqq;
                        new_cfqq = NULL;
-               } else if (gfp_mask & __GFP_WAIT) {
+               } else {
                        spin_unlock_irq(cfqd->queue->queue_lock);
                        new_cfqq = kmem_cache_alloc(cfq_pool, gfp_mask);
                        spin_lock_irq(cfqd->queue->queue_lock);
+
+                       if (!new_cfqq && !(gfp_mask & __GFP_WAIT))
+                               goto out;
+
                        goto retry;
-               } else
-                       goto out;
+               }
 
                memset(cfqq, 0, sizeof(*cfqq));
 
diff -urN linux/drivers/block/elevator.c linux/drivers/block/elevator.c
--- linux/drivers/block/elevator.c      2005/03/18 17:37:10     1.42
+++ linux/drivers/block/elevator.c      2005/06/18 14:42:45     1.43
@@ -220,11 +220,6 @@
        kfree(e);
 }
 
-static int elevator_global_init(void)
-{
-       return 0;
-}
-
 int elv_merge(request_queue_t *q, struct request **req, struct bio *bio)
 {
        elevator_t *e = q->elevator;
@@ -322,7 +317,7 @@
                        int nrq = q->rq.count[READ] + q->rq.count[WRITE]
                                  - q->in_flight;
 
-                       if (nrq == q->unplug_thresh)
+                       if (nrq >= q->unplug_thresh)
                                __generic_unplug_device(q);
                }
        } else
@@ -692,8 +687,6 @@
        return len;
 }
 
-module_init(elevator_global_init);
-
 EXPORT_SYMBOL(elv_add_request);
 EXPORT_SYMBOL(__elv_add_request);
 EXPORT_SYMBOL(elv_requeue_request);
diff -urN linux/drivers/block/ub.c linux/drivers/block/ub.c
--- linux/drivers/block/ub.c    2005/06/07 13:45:32     1.9
+++ linux/drivers/block/ub.c    2005/06/18 14:42:45     1.10
@@ -51,7 +51,7 @@
  * This many LUNs per USB device.
  * Every one of them takes a host, see UB_MAX_HOSTS.
  */
-#define UB_MAX_LUNS   4
+#define UB_MAX_LUNS   9
 
 /*
  */
@@ -2100,7 +2100,7 @@
                        nluns = rc;
                        break;
                }
-               mdelay(100);
+               msleep(100);
        }
 
        for (i = 0; i < nluns; i++) {
diff -urN linux/drivers/char/mxser.c linux/drivers/char/mxser.c
--- linux/drivers/char/mxser.c  2005/03/18 17:37:11     1.41
+++ linux/drivers/char/mxser.c  2005/06/18 14:42:45     1.42
@@ -1995,9 +1995,6 @@
        unsigned char ch, gdl;
        int ignored = 0;
        int cnt = 0;
-       unsigned char *cp;
-       char *fp;
-       int count;
        int recv_room;
        int max = 256;
        unsigned long flags;
@@ -2011,10 +2008,6 @@
                //return;
        }
 
-       cp = tty->flip.char_buf;
-       fp = tty->flip.flag_buf;
-       count = 0;
-
        // following add by Victor Yu. 09-02-2002
        if (info->IsMoxaMustChipFlag != MOXA_OTHER_UART) {
 
@@ -2041,12 +2034,10 @@
                }
                while (gdl--) {
                        ch = inb(info->base + UART_RX);
-                       count++;
-                       *cp++ = ch;
-                       *fp++ = 0;
+                       tty_insert_flip_char(tty, ch, 0);
                        cnt++;
                        /*
-                          if((count>=HI_WATER) && (info->stop_rx==0)){
+                          if((cnt>=HI_WATER) && (info->stop_rx==0)){
                           mxser_stoprx(tty);
                           info->stop_rx=1;
                           break;
@@ -2061,7 +2052,7 @@
                if (max-- < 0)
                        break;
                /*
-                  if((count>=HI_WATER) && (info->stop_rx==0)){
+                  if((cnt>=HI_WATER) && (info->stop_rx==0)){
                   mxser_stoprx(tty);
                   info->stop_rx=1;
                   break;
@@ -2078,36 +2069,33 @@
                        if (++ignored > 100)
                                break;
                } else {
-                       count++;
+                       char flag = 0;
                        if (*status & UART_LSR_SPECIAL) {
                                if (*status & UART_LSR_BI) {
-                                       *fp++ = TTY_BREAK;
+                                       flag = TTY_BREAK;
 /* added by casper 1/11/2000 */
                                        info->icount.brk++;
-
 /* */
                                        if (info->flags & ASYNC_SAK)
                                                do_SAK(tty);
                                } else if (*status & UART_LSR_PE) {
-                                       *fp++ = TTY_PARITY;
+                                       flag = TTY_PARITY;
 /* added by casper 1/11/2000 */
                                        info->icount.parity++;
 /* */
                                } else if (*status & UART_LSR_FE) {
-                                       *fp++ = TTY_FRAME;
+                                       flag = TTY_FRAME;
 /* added by casper 1/11/2000 */
                                        info->icount.frame++;
 /* */
                                } else if (*status & UART_LSR_OE) {
-                                       *fp++ = TTY_OVERRUN;
+                                       flag = TTY_OVERRUN;
 /* added by casper 1/11/2000 */
                                        info->icount.overrun++;
 /* */
-                               } else
-                                       *fp++ = 0;
-                       } else
-                               *fp++ = 0;
-                       *cp++ = ch;
+                               }
+                       }
+                       tty_insert_flip_char(tty, ch, flag);
                        cnt++;
                        if (cnt >= recv_room) {
                                if (!info->ldisc_stop_rx) {
@@ -2132,13 +2120,13 @@
                // above add by Victor Yu. 09-02-2002
        } while (*status & UART_LSR_DR);
 
-      end_intr:                // add by Victor Yu. 09-02-2002
+end_intr:              // add by Victor Yu. 09-02-2002
 
        mxvar_log.rxcnt[info->port] += cnt;
        info->mon_data.rxcnt += cnt;
        info->mon_data.up_rxcnt += cnt;
        spin_unlock_irqrestore(&info->slock, flags);
-       
+
        tty_flip_buffer_push(tty);
 }
 
diff -urN linux/drivers/char/agp/agp.h linux/drivers/char/agp/agp.h
--- linux/drivers/char/agp/agp.h        2005/03/18 17:37:12     1.41
+++ linux/drivers/char/agp/agp.h        2005/06/18 14:42:46     1.42
@@ -278,6 +278,8 @@
 #define AGP_GENERIC_SIZES_ENTRIES 11
 extern struct aper_size_info_16 agp3_generic_sizes[];
 
+#define virt_to_gart(x) (phys_to_gart(virt_to_phys(x)))
+#define gart_to_virt(x) (phys_to_virt(gart_to_phys(x)))
 
 extern int agp_off;
 extern int agp_try_unsupported_boot;
diff -urN linux/drivers/char/agp/ali-agp.c linux/drivers/char/agp/ali-agp.c
--- linux/drivers/char/agp/ali-agp.c    2005/05/19 12:08:22     1.17
+++ linux/drivers/char/agp/ali-agp.c    2005/06/18 14:42:46     1.18
@@ -150,7 +150,7 @@
        pci_read_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL, &temp);
        pci_write_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL,
                        (((temp & ALI_CACHE_FLUSH_ADDR_MASK) |
-                         virt_to_phys(addr)) | ALI_CACHE_FLUSH_EN ));
+                         virt_to_gart(addr)) | ALI_CACHE_FLUSH_EN ));
        return addr;
 }
 
@@ -174,7 +174,7 @@
        pci_read_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL, &temp);
        pci_write_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL,
                        (((temp & ALI_CACHE_FLUSH_ADDR_MASK) |
-                         virt_to_phys(addr)) | ALI_CACHE_FLUSH_EN));
+                         virt_to_gart(addr)) | ALI_CACHE_FLUSH_EN));
        agp_generic_destroy_page(addr);
 }
 
diff -urN linux/drivers/char/agp/amd-k7-agp.c 
linux/drivers/char/agp/amd-k7-agp.c
--- linux/drivers/char/agp/amd-k7-agp.c 2005/05/19 12:08:22     1.18
+++ linux/drivers/char/agp/amd-k7-agp.c 2005/06/18 14:42:46     1.19
@@ -43,7 +43,7 @@
 
        SetPageReserved(virt_to_page(page_map->real));
        global_cache_flush();
-       page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real),
+       page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real),
                                            PAGE_SIZE);
        if (page_map->remapped == NULL) {
                ClearPageReserved(virt_to_page(page_map->real));
@@ -154,7 +154,7 @@
 
        agp_bridge->gatt_table_real = (u32 *)page_dir.real;
        agp_bridge->gatt_table = (u32 __iomem *)page_dir.remapped;
-       agp_bridge->gatt_bus_addr = virt_to_phys(page_dir.real);
+       agp_bridge->gatt_bus_addr = virt_to_gart(page_dir.real);
 
        /* Get the address for the gart region.
         * This is a bus address even on the alpha, b/c its
@@ -167,7 +167,7 @@
 
        /* Calculate the agp offset */
        for (i = 0; i < value->num_entries / 1024; i++, addr += 0x00400000) {
-               writel(virt_to_phys(amd_irongate_private.gatt_pages[i]->real) | 
1,
+               writel(virt_to_gart(amd_irongate_private.gatt_pages[i]->real) | 
1,
                        page_dir.remapped+GET_PAGE_DIR_OFF(addr));
                readl(page_dir.remapped+GET_PAGE_DIR_OFF(addr));        /* PCI 
Posting. */
        }
diff -urN linux/drivers/char/agp/amd64-agp.c linux/drivers/char/agp/amd64-agp.c
--- linux/drivers/char/agp/amd64-agp.c  2005/05/19 12:08:22     1.15
+++ linux/drivers/char/agp/amd64-agp.c  2005/06/18 14:42:46     1.16
@@ -219,7 +219,7 @@
 
 static int amd_8151_configure(void)
 {
-       unsigned long gatt_bus = virt_to_phys(agp_bridge->gatt_table_real);
+       unsigned long gatt_bus = virt_to_gart(agp_bridge->gatt_table_real);
 
        /* Configure AGP regs in each x86-64 host bridge. */
        for_each_nb() {
@@ -591,7 +591,7 @@
 {
        struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
 
-       release_mem_region(virt_to_phys(bridge->gatt_table_real),
+       release_mem_region(virt_to_gart(bridge->gatt_table_real),
                           
amd64_aperture_sizes[bridge->aperture_size_idx].size);
        agp_remove_bridge(bridge);
        agp_put_bridge(bridge);
diff -urN linux/drivers/char/agp/ati-agp.c linux/drivers/char/agp/ati-agp.c
--- linux/drivers/char/agp/ati-agp.c    2005/05/19 12:08:22     1.11
+++ linux/drivers/char/agp/ati-agp.c    2005/06/18 14:42:46     1.12
@@ -61,7 +61,7 @@
 
        SetPageReserved(virt_to_page(page_map->real));
        err = map_page_into_agp(virt_to_page(page_map->real));
-       page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real),
+       page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real),
                                            PAGE_SIZE);
        if (page_map->remapped == NULL || err) {
                ClearPageReserved(virt_to_page(page_map->real));
@@ -343,7 +343,7 @@
 
        agp_bridge->gatt_table_real = (u32 *)page_dir.real;
        agp_bridge->gatt_table = (u32 __iomem *) page_dir.remapped;
-       agp_bridge->gatt_bus_addr = virt_to_bus(page_dir.real);
+       agp_bridge->gatt_bus_addr = virt_to_gart(page_dir.real);
 
        /* Write out the size register */
        current_size = A_SIZE_LVL2(agp_bridge->current_size);
@@ -373,7 +373,7 @@
 
        /* Calculate the agp offset */
        for(i = 0; i < value->num_entries / 1024; i++, addr += 0x00400000) {
-               writel(virt_to_bus(ati_generic_private.gatt_pages[i]->real) | 1,
+               writel(virt_to_gart(ati_generic_private.gatt_pages[i]->real) | 
1,
                        page_dir.remapped+GET_PAGE_DIR_OFF(addr));
                readl(page_dir.remapped+GET_PAGE_DIR_OFF(addr));        /* PCI 
Posting. */
        }
diff -urN linux/drivers/char/agp/backend.c linux/drivers/char/agp/backend.c
--- linux/drivers/char/agp/backend.c    2005/05/19 12:08:22     1.16
+++ linux/drivers/char/agp/backend.c    2005/06/18 14:42:46     1.17
@@ -148,7 +148,7 @@
                        return -ENOMEM;
                }
 
-               bridge->scratch_page_real = virt_to_phys(addr);
+               bridge->scratch_page_real = virt_to_gart(addr);
                bridge->scratch_page =
                    bridge->driver->mask_memory(bridge, 
bridge->scratch_page_real, 0);
        }
@@ -189,7 +189,7 @@
 err_out:
        if (bridge->driver->needs_scratch_page)
                bridge->driver->agp_destroy_page(
-                               phys_to_virt(bridge->scratch_page_real));
+                               gart_to_virt(bridge->scratch_page_real));
        if (got_gatt)
                bridge->driver->free_gatt_table(bridge);
        if (got_keylist) {
@@ -214,7 +214,7 @@
        if (bridge->driver->agp_destroy_page &&
            bridge->driver->needs_scratch_page)
                bridge->driver->agp_destroy_page(
-                               phys_to_virt(bridge->scratch_page_real));
+                               gart_to_virt(bridge->scratch_page_real));
 }
 
 /* When we remove the global variable agp_bridge from all drivers
diff -urN linux/drivers/char/agp/efficeon-agp.c 
linux/drivers/char/agp/efficeon-agp.c
--- linux/drivers/char/agp/efficeon-agp.c       2005/05/19 12:08:22     1.6
+++ linux/drivers/char/agp/efficeon-agp.c       2005/06/18 14:42:46     1.7
@@ -219,7 +219,7 @@
 
                efficeon_private.l1_table[index] = page;
 
-               value = __pa(page) | pati | present | index;
+               value = virt_to_gart(page) | pati | present | index;
 
                pci_write_config_dword(agp_bridge->dev,
                        EFFICEON_ATTPAGE, value);
diff -urN linux/drivers/char/agp/generic.c linux/drivers/char/agp/generic.c
--- linux/drivers/char/agp/generic.c    2005/04/08 18:58:11     1.18
+++ linux/drivers/char/agp/generic.c    2005/06/18 14:42:46     1.19
@@ -153,7 +153,7 @@
        }
        if (curr->page_count != 0) {
                for (i = 0; i < curr->page_count; i++) {
-                       
curr->bridge->driver->agp_destroy_page(phys_to_virt(curr->memory[i]));
+                       
curr->bridge->driver->agp_destroy_page(gart_to_virt(curr->memory[i]));
                }
        }
        agp_free_key(curr->key);
@@ -209,7 +209,7 @@
                        agp_free_memory(new);
                        return NULL;
                }
-               new->memory[i] = virt_to_phys(addr);
+               new->memory[i] = virt_to_gart(addr);
                new->page_count++;
        }
        new->bridge = bridge;
@@ -295,19 +295,6 @@
 EXPORT_SYMBOL_GPL(agp_num_entries);
 
 
-static int check_bridge_mode(struct pci_dev *dev)
-{
-       u32 agp3;
-       u8 cap_ptr;
-
-       cap_ptr = pci_find_capability(dev, PCI_CAP_ID_AGP);
-       pci_read_config_dword(dev, cap_ptr+AGPSTAT, &agp3);
-       if (agp3 & AGPSTAT_MODE_3_0)
-               return 1;
-       return 0;
-}
-
-
 /**
  *     agp_copy_info  -  copy bridge state information
  *
@@ -328,7 +315,7 @@
        info->version.minor = bridge->version->minor;
        info->chipset = SUPPORTED;
        info->device = bridge->dev;
-       if (check_bridge_mode(bridge->dev))
+       if (bridge->mode & AGPSTAT_MODE_3_0)
                info->mode = bridge->mode & ~AGP3_RESERVED_MASK;
        else
                info->mode = bridge->mode & ~AGP2_RESERVED_MASK;
@@ -661,7 +648,7 @@
                bridge_agpstat &= ~AGPSTAT_FW;
 
        /* Check to see if we are operating in 3.0 mode */
-       if (check_bridge_mode(agp_bridge->dev))
+       if (agp_bridge->mode & AGPSTAT_MODE_3_0)
                agp_v3_parse_one(&requested_mode, &bridge_agpstat, 
&vga_agpstat);
        else
                agp_v2_parse_one(&requested_mode, &bridge_agpstat, 
&vga_agpstat);
@@ -732,7 +719,7 @@
 
        /* Do AGP version specific frobbing. */
        if (bridge->major_version >= 3) {
-               if (check_bridge_mode(bridge->dev)) {
+               if (bridge->mode & AGPSTAT_MODE_3_0) {
                        /* If we have 3.5, we can do the isoch stuff. */
                        if (bridge->minor_version >= 5)
                                agp_3_5_enable(bridge);
@@ -806,8 +793,7 @@
                                break;
                        }
 
-                       table = (char *) __get_free_pages(GFP_KERNEL,
-                                                         page_order);
+                       table = alloc_gatt_pages(page_order);
 
                        if (table == NULL) {
                                i++;
@@ -838,7 +824,7 @@
                size = ((struct aper_size_info_fixed *) temp)->size;
                page_order = ((struct aper_size_info_fixed *) temp)->page_order;
                num_entries = ((struct aper_size_info_fixed *) 
temp)->num_entries;
-               table = (char *) __get_free_pages(GFP_KERNEL, page_order);
+               table = alloc_gatt_pages(page_order);
        }
 
        if (table == NULL)
@@ -853,7 +839,7 @@
        agp_gatt_table = (void *)table;
 
        bridge->driver->cache_flush();
-       bridge->gatt_table = ioremap_nocache(virt_to_phys(table),
+       bridge->gatt_table = ioremap_nocache(virt_to_gart(table),
                                        (PAGE_SIZE * (1 << page_order)));
        bridge->driver->cache_flush();
 
@@ -861,11 +847,11 @@
                for (page = virt_to_page(table); page <= 
virt_to_page(table_end); page++)
                        ClearPageReserved(page);
 
-               free_pages((unsigned long) table, page_order);
+               free_gatt_pages(table, page_order);
 
                return -ENOMEM;
        }
-       bridge->gatt_bus_addr = virt_to_phys(bridge->gatt_table_real);
+       bridge->gatt_bus_addr = virt_to_gart(bridge->gatt_table_real);
 
        /* AK: bogus, should encode addresses > 4GB */
        for (i = 0; i < num_entries; i++) {
@@ -919,7 +905,7 @@
        for (page = virt_to_page(table); page <= virt_to_page(table_end); 
page++)
                ClearPageReserved(page);
 
-       free_pages((unsigned long) bridge->gatt_table_real, page_order);
+       free_gatt_pages(bridge->gatt_table_real, page_order);
 
        agp_gatt_table = NULL;
        bridge->gatt_table = NULL;
diff -urN linux/drivers/char/agp/hp-agp.c linux/drivers/char/agp/hp-agp.c
--- linux/drivers/char/agp/hp-agp.c     2005/03/18 17:37:12     1.17
+++ linux/drivers/char/agp/hp-agp.c     2005/06/18 14:42:46     1.18
@@ -110,7 +110,7 @@
        hp->gart_size = HP_ZX1_GART_SIZE;
        hp->gatt_entries = hp->gart_size / hp->io_page_size;
 
-       hp->io_pdir = phys_to_virt(readq(hp->ioc_regs+HP_ZX1_PDIR_BASE));
+       hp->io_pdir = gart_to_virt(readq(hp->ioc_regs+HP_ZX1_PDIR_BASE));
        hp->gatt = &hp->io_pdir[HP_ZX1_IOVA_TO_PDIR(hp->gart_base)];
 
        if (hp->gatt[0] != HP_ZX1_SBA_IOMMU_COOKIE) {
@@ -248,7 +248,7 @@
        agp_bridge->mode = 
readl(hp->lba_regs+hp->lba_cap_offset+PCI_AGP_STATUS);
 
        if (hp->io_pdir_owner) {
-               writel(virt_to_phys(hp->io_pdir), 
hp->ioc_regs+HP_ZX1_PDIR_BASE);
+               writel(virt_to_gart(hp->io_pdir), 
hp->ioc_regs+HP_ZX1_PDIR_BASE);
                readl(hp->ioc_regs+HP_ZX1_PDIR_BASE);
                writel(hp->io_tlb_ps, hp->ioc_regs+HP_ZX1_TCNFG);
                readl(hp->ioc_regs+HP_ZX1_TCNFG);
diff -urN linux/drivers/char/agp/i460-agp.c linux/drivers/char/agp/i460-agp.c
--- linux/drivers/char/agp/i460-agp.c   2005/03/18 17:37:12     1.16
+++ linux/drivers/char/agp/i460-agp.c   2005/06/18 14:42:46     1.17
@@ -372,7 +372,7 @@
        }
        memset(lp->alloced_map, 0, map_size);
 
-       lp->paddr = virt_to_phys(lpage);
+       lp->paddr = virt_to_gart(lpage);
        lp->refcount = 0;
        atomic_add(I460_KPAGES_PER_IOPAGE, &agp_bridge->current_memory_agp);
        return 0;
@@ -383,7 +383,7 @@
        kfree(lp->alloced_map);
        lp->alloced_map = NULL;
 
-       free_pages((unsigned long) phys_to_virt(lp->paddr), I460_IO_PAGE_SHIFT 
- PAGE_SHIFT);
+       free_pages((unsigned long) gart_to_virt(lp->paddr), I460_IO_PAGE_SHIFT 
- PAGE_SHIFT);
        atomic_sub(I460_KPAGES_PER_IOPAGE, &agp_bridge->current_memory_agp);
 }
 
diff -urN linux/drivers/char/agp/intel-agp.c linux/drivers/char/agp/intel-agp.c
--- linux/drivers/char/agp/intel-agp.c  2005/03/18 17:37:12     1.29
+++ linux/drivers/char/agp/intel-agp.c  2005/06/18 14:42:46     1.30
@@ -286,7 +286,7 @@
        if (new == NULL)
                return NULL;
 
-       new->memory[0] = virt_to_phys(addr);
+       new->memory[0] = virt_to_gart(addr);
        if (pg_count == 4) {
                /* kludge to get 4 physical pages for ARGB cursor */
                new->memory[1] = new->memory[0] + PAGE_SIZE;
@@ -329,10 +329,10 @@
        agp_free_key(curr->key);
        if(curr->type == AGP_PHYS_MEMORY) {
                if (curr->page_count == 4)
-                       i8xx_destroy_pages(phys_to_virt(curr->memory[0]));
+                       i8xx_destroy_pages(gart_to_virt(curr->memory[0]));
                else
                        agp_bridge->driver->agp_destroy_page(
-                                phys_to_virt(curr->memory[0]));
+                                gart_to_virt(curr->memory[0]));
                vfree(curr->memory);
        }
        kfree(curr);
@@ -418,7 +418,8 @@
                case I915_GMCH_GMS_STOLEN_48M:
                        /* Check it's really I915G */
                        if (agp_bridge->dev->device == 
PCI_DEVICE_ID_INTEL_82915G_HB ||
-                           agp_bridge->dev->device == 
PCI_DEVICE_ID_INTEL_82915GM_HB)
+                           agp_bridge->dev->device == 
PCI_DEVICE_ID_INTEL_82915GM_HB ||
+                           agp_bridge->dev->device == 
PCI_DEVICE_ID_INTEL_82945G_HB)
                                gtt_entries = MB(48) - KB(size);
                        else
                                gtt_entries = 0;
@@ -426,7 +427,8 @@
                case I915_GMCH_GMS_STOLEN_64M:
                        /* Check it's really I915G */
                        if (agp_bridge->dev->device == 
PCI_DEVICE_ID_INTEL_82915G_HB ||
-                           agp_bridge->dev->device == 
PCI_DEVICE_ID_INTEL_82915GM_HB)
+                           agp_bridge->dev->device == 
PCI_DEVICE_ID_INTEL_82915GM_HB ||
+                           agp_bridge->dev->device == 
PCI_DEVICE_ID_INTEL_82945G_HB)
                                gtt_entries = MB(64) - KB(size);
                        else
                                gtt_entries = 0;
@@ -1662,6 +1664,14 @@
                }
                name = "915GM";
                break;
+       case PCI_DEVICE_ID_INTEL_82945G_HB:
+               if (find_i830(PCI_DEVICE_ID_INTEL_82945G_IG)) {
+                       bridge->driver = &intel_915_driver;
+               } else {
+                       bridge->driver = &intel_845_driver;
+               }
+               name = "945G";
+               break;
        case PCI_DEVICE_ID_INTEL_7505_0:
                bridge->driver = &intel_7505_driver;
                name = "E7505";
@@ -1801,6 +1811,7 @@
        ID(PCI_DEVICE_ID_INTEL_7205_0),
        ID(PCI_DEVICE_ID_INTEL_82915G_HB),
        ID(PCI_DEVICE_ID_INTEL_82915GM_HB),
+       ID(PCI_DEVICE_ID_INTEL_82945G_HB),
        { }
 };
 
diff -urN linux/drivers/char/agp/sgi-agp.c linux/drivers/char/agp/sgi-agp.c
--- linux/drivers/char/agp/sgi-agp.c    2005/03/18 17:37:12     1.1
+++ linux/drivers/char/agp/sgi-agp.c    2005/06/18 14:42:46     1.2
@@ -133,11 +133,14 @@
        off_t j;
        void *temp;
        struct agp_bridge_data *bridge;
+       u64 *table;
 
        bridge = mem->bridge;
        if (!bridge)
                return -EINVAL;
 
+       table = (u64 *)bridge->gatt_table;
+
        temp = bridge->current_size;
 
        switch (bridge->driver->size_type) {
@@ -175,7 +178,7 @@
        j = pg_start;
 
        while (j < (pg_start + mem->page_count)) {
-               if (*(bridge->gatt_table + j))
+               if (table[j])
                        return -EBUSY;
                j++;
        }
@@ -186,7 +189,7 @@
        }
 
        for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
-               *(bridge->gatt_table + j) =
+               table[j] =
                    bridge->driver->mask_memory(bridge, mem->memory[i],
                                                mem->type);
        }
@@ -200,6 +203,7 @@
 {
        size_t i;
        struct agp_bridge_data *bridge;
+       u64 *table;
 
        bridge = mem->bridge;
        if (!bridge)
@@ -209,8 +213,10 @@
                return -EINVAL;
        }
 
+       table = (u64 *)bridge->gatt_table;
+
        for (i = pg_start; i < (mem->page_count + pg_start); i++) {
-               *(bridge->gatt_table + i) = 0;
+               table[i] = 0;
        }
 
        bridge->driver->tlb_flush(mem);
diff -urN linux/drivers/char/agp/sworks-agp.c 
linux/drivers/char/agp/sworks-agp.c
--- linux/drivers/char/agp/sworks-agp.c 2005/05/19 12:08:22     1.20
+++ linux/drivers/char/agp/sworks-agp.c 2005/06/18 14:42:46     1.21
@@ -51,7 +51,7 @@
        }
        SetPageReserved(virt_to_page(page_map->real));
        global_cache_flush();
-       page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real), 
+       page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real),
                                            PAGE_SIZE);
        if (page_map->remapped == NULL) {
                ClearPageReserved(virt_to_page(page_map->real));
@@ -162,7 +162,7 @@
        /* Create a fake scratch directory */
        for(i = 0; i < 1024; i++) {
                writel(agp_bridge->scratch_page, 
serverworks_private.scratch_dir.remapped+i);
-               writel(virt_to_phys(serverworks_private.scratch_dir.real) | 1, 
page_dir.remapped+i);
+               writel(virt_to_gart(serverworks_private.scratch_dir.real) | 1, 
page_dir.remapped+i);
        }
 
        retval = serverworks_create_gatt_pages(value->num_entries / 1024);
@@ -174,7 +174,7 @@
 
        agp_bridge->gatt_table_real = (u32 *)page_dir.real;
        agp_bridge->gatt_table = (u32 __iomem *)page_dir.remapped;
-       agp_bridge->gatt_bus_addr = virt_to_phys(page_dir.real);
+       agp_bridge->gatt_bus_addr = virt_to_gart(page_dir.real);
 
        /* Get the address for the gart region.
         * This is a bus address even on the alpha, b/c its
@@ -187,7 +187,7 @@
        /* Calculate the agp offset */  
 
        for(i = 0; i < value->num_entries / 1024; i++)
-               writel(virt_to_phys(serverworks_private.gatt_pages[i]->real)|1, 
page_dir.remapped+i);
+               writel(virt_to_gart(serverworks_private.gatt_pages[i]->real)|1, 
page_dir.remapped+i);
 
        return 0;
 }
diff -urN linux/drivers/char/agp/uninorth-agp.c 
linux/drivers/char/agp/uninorth-agp.c
--- linux/drivers/char/agp/uninorth-agp.c       2005/04/29 11:15:06     1.7
+++ linux/drivers/char/agp/uninorth-agp.c       2005/06/18 14:42:46     1.8
@@ -407,7 +407,7 @@
 
        bridge->gatt_table_real = (u32 *) table;
        bridge->gatt_table = (u32 *)table;
-       bridge->gatt_bus_addr = virt_to_phys(table);
+       bridge->gatt_bus_addr = virt_to_gart(table);
 
        for (i = 0; i < num_entries; i++)
                bridge->gatt_table[i] = 0;
diff -urN linux/drivers/char/drm/drm_pciids.h 
linux/drivers/char/drm/drm_pciids.h
--- linux/drivers/char/drm/drm_pciids.h 2005/04/08 18:58:12     1.5
+++ linux/drivers/char/drm/drm_pciids.h 2005/06/18 14:42:46     1.6
@@ -220,5 +220,6 @@
        {0x8086, 0x2572, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
        {0x8086, 0x2582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
        {0x8086, 0x2592, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+       {0x8086, 0x2772, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
        {0, 0, 0}
 
diff -urN linux/drivers/char/drm/radeon_irq.c 
linux/drivers/char/drm/radeon_irq.c
--- linux/drivers/char/drm/radeon_irq.c 2005/03/18 17:37:13     1.11
+++ linux/drivers/char/drm/radeon_irq.c 2005/06/18 14:42:46     1.12
@@ -123,11 +123,6 @@
 
        dev_priv->stats.boxes |= RADEON_BOX_WAIT_IDLE;
 
-       /* This is a hack to work around mysterious freezes on certain
-        * systems:
-        */ 
-       radeon_acknowledge_irqs( dev_priv );
-
        DRM_WAIT_ON( ret, dev_priv->swi_queue, 3 * DRM_HZ, 
                     RADEON_READ( RADEON_LAST_SWI_REG ) >= swi_nr );
 
diff -urN linux/drivers/ieee1394/sbp2.c linux/drivers/ieee1394/sbp2.c
--- linux/drivers/ieee1394/sbp2.c       2005/04/08 18:58:14     1.44
+++ linux/drivers/ieee1394/sbp2.c       2005/06/18 14:42:46     1.45
@@ -745,7 +745,8 @@
        list_add_tail(&scsi_id->scsi_list, &hi->scsi_ids);
 
        /* Register our host with the SCSI stack. */
-       scsi_host = scsi_host_alloc(&scsi_driver_template, 0);
+       scsi_host = scsi_host_alloc(&scsi_driver_template,
+                                   sizeof (unsigned long));
        if (!scsi_host) {
                SBP2_ERR("failed to register scsi host");
                goto failed_alloc;
diff -urN linux/drivers/input/keyboard/atkbd.c 
linux/drivers/input/keyboard/atkbd.c
--- linux/drivers/input/keyboard/atkbd.c        2005/06/07 13:45:33     1.28
+++ linux/drivers/input/keyboard/atkbd.c        2005/06/18 14:42:47     1.29
@@ -54,7 +54,7 @@
 module_param_named(softraw, atkbd_softraw, bool, 0);
 MODULE_PARM_DESC(softraw, "Use software generated rawmode");
 
-static int atkbd_scroll = 1;
+static int atkbd_scroll = 0;
 module_param_named(scroll, atkbd_scroll, bool, 0);
 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar 
keyboards");
 
diff -urN linux/drivers/input/mouse/alps.c linux/drivers/input/mouse/alps.c
--- linux/drivers/input/mouse/alps.c    2005/05/26 09:12:41     1.4
+++ linux/drivers/input/mouse/alps.c    2005/06/18 14:42:47     1.5
@@ -352,7 +352,7 @@
        if (alps_get_status(psmouse, param))
                return -1;
 
-       if (param[0] & 0x04)
+       if (!(param[0] & 0x04))
                alps_tap_mode(psmouse, 1);
 
        if (alps_absolute_mode(psmouse)) {
diff -urN linux/drivers/macintosh/via-pmu.c linux/drivers/macintosh/via-pmu.c
--- linux/drivers/macintosh/via-pmu.c   2005/06/07 13:45:33     1.49
+++ linux/drivers/macintosh/via-pmu.c   2005/06/18 14:42:47     1.50
@@ -2593,6 +2593,9 @@
        /* Restore VIA */
        restore_via_state();
 
+       /* tweak LPJ before cpufreq is there */
+       loops_per_jiffy *= 2;
+
        /* Restore video */
        pmac_call_early_video_resume();
 
@@ -2613,6 +2616,9 @@
        pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, pmu_intr_mask);
        pmu_wait_complete(&req);
 
+       /* Restore LPJ, cpufreq will adjust the cpu frequency */
+       loops_per_jiffy /= 2;
+
        pmac_wakeup_devices();
 
        return 0;
diff -urN linux/drivers/md/dm-mpath.c linux/drivers/md/dm-mpath.c
--- linux/drivers/md/dm-mpath.c 2005/05/19 12:08:23     1.2
+++ linux/drivers/md/dm-mpath.c 2005/06/18 14:42:47     1.3
@@ -985,6 +985,9 @@
        if (!error)
                return 0;       /* I/O complete */
 
+       if ((error == -EWOULDBLOCK) && bio_rw_ahead(bio))
+               return error;
+
        spin_lock(&m->lock);
        if (!m->nr_valid_paths) {
                if (!m->queue_if_no_path || m->suspended) {
diff -urN linux/drivers/message/i2o/i2o_block.c 
linux/drivers/message/i2o/i2o_block.c
--- linux/drivers/message/i2o/i2o_block.c       2005/01/25 04:28:22     1.36
+++ linux/drivers/message/i2o/i2o_block.c       2005/06/18 14:42:47     1.37
@@ -573,6 +573,7 @@
 static void i2o_block_event(struct i2o_event *evt)
 {
        osm_info("block-osm: event received\n");
+       kfree(evt);
 };
 
 /*
diff -urN linux/drivers/net/iseries_veth.c linux/drivers/net/iseries_veth.c
--- linux/drivers/net/iseries_veth.c    2005/06/07 13:45:34     1.9
+++ linux/drivers/net/iseries_veth.c    2005/06/18 14:42:47     1.10
@@ -802,13 +802,14 @@
 
        spin_lock_irqsave(&port->pending_gate, flags);
 
+       if (!port->pending_lpmask) {
+               spin_unlock_irqrestore(&port->pending_gate, flags);
+               return;
+       }
+
        printk(KERN_WARNING "%s: Tx timeout!  Resetting lp connections: %08x\n",
               dev->name, port->pending_lpmask);
 
-       /* If we've timed out the queue must be stopped, which should
-        * only ever happen when there is a pending packet. */
-       WARN_ON(! port->pending_lpmask);
-
        for (i = 0; i < HVMAXARCHITECTEDLPS; i++) {
                struct veth_lpar_connection *cnx = veth_cnx[i];
 
diff -urN linux/drivers/net/r8169.c linux/drivers/net/r8169.c
--- linux/drivers/net/r8169.c   2005/06/07 13:45:34     1.27
+++ linux/drivers/net/r8169.c   2005/06/18 14:42:47     1.28
@@ -415,7 +415,7 @@
        struct work_struct task;
 };
 
-MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@oss.sgi.com>");
+MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
 MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
 module_param_array(media, int, &num_media, 0);
 module_param(rx_copybreak, int, 0);
diff -urN linux/drivers/net/tg3.c linux/drivers/net/tg3.c
--- linux/drivers/net/tg3.c     2005/06/07 13:45:34     1.61
+++ linux/drivers/net/tg3.c     2005/06/18 14:42:47     1.62
@@ -7,7 +7,12 @@
  * Copyright (C) 2005 Broadcom Corporation.
  *
  * Firmware is:
- *     Copyright (C) 2000-2003 Broadcom Corporation.
+ *     Derived from proprietary unpublished source code,
+ *     Copyright (C) 2000-2003 Broadcom Corporation.
+ *
+ *     Permission is hereby granted for the distribution of this firmware
+ *     data in hexadecimal or equivalent format, provided this copyright
+ *     notice is accompanying it.
  */
 
 #include <linux/config.h>
@@ -61,8 +66,8 @@
 
 #define DRV_MODULE_NAME                "tg3"
 #define PFX DRV_MODULE_NAME    ": "
-#define DRV_MODULE_VERSION     "3.29"
-#define DRV_MODULE_RELDATE     "May 23, 2005"
+#define DRV_MODULE_VERSION     "3.31"
+#define DRV_MODULE_RELDATE     "June 8, 2005"
 
 #define TG3_DEF_MAC_MODE       0
 #define TG3_DEF_RX_MODE                0
@@ -8555,6 +8560,16 @@
 
                case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
                        tp->led_ctrl = LED_CTRL_MODE_MAC;
+
+                       /* Default to PHY_1_MODE if 0 (MAC_MODE) is
+                        * read on some older 5700/5701 bootcode.
+                        */
+                       if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
+                           ASIC_REV_5700 ||
+                           GET_ASIC_REV(tp->pci_chip_rev_id) ==
+                           ASIC_REV_5701)
+                               tp->led_ctrl = LED_CTRL_MODE_PHY_1;
+
                        break;
 
                case SHASTA_EXT_LED_SHARED:
@@ -9680,10 +9695,24 @@
        }
        if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
            DMA_RWCTRL_WRITE_BNDRY_16) {
+               static struct pci_device_id dma_wait_state_chipsets[] = {
+                       { PCI_DEVICE(PCI_VENDOR_ID_APPLE,
+                                    PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
+                       { },
+               };
+
                /* DMA test passed without adjusting DMA boundary,
-                * just restore the calculated DMA boundary
+                * now look for chipsets that are known to expose the
+                * DMA bug without failing the test.
                 */
-               tp->dma_rwctrl = saved_dma_rwctrl;
+               if (pci_dev_present(dma_wait_state_chipsets)) {
+                       tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
+                       tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
+               }
+               else
+                       /* Safe to use the calculated DMA boundary. */
+                       tp->dma_rwctrl = saved_dma_rwctrl;
+
                tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
        }
 
diff -urN linux/drivers/net/irda/Kconfig linux/drivers/net/irda/Kconfig
--- linux/drivers/net/irda/Kconfig      2005/05/19 12:08:27     1.15
+++ linux/drivers/net/irda/Kconfig      2005/06/18 14:42:48     1.16
@@ -389,7 +389,7 @@
        help
          Say Y here if you want to build support for the VIA VT8231
          and VIA VT1211 IrDA controllers, found on the motherboards using
-         those those VIA chipsets. To use this controller, you will need
+         those VIA chipsets. To use this controller, you will need
          to plug a specific 5 pins FIR IrDA dongle in the specific
          motherboard connector. The driver provides support for SIR, MIR
          and FIR (4Mbps) speeds.
diff -urN linux/drivers/pci/pci-driver.c linux/drivers/pci/pci-driver.c
--- linux/drivers/pci/pci-driver.c      2005/05/19 12:08:27     1.31
+++ linux/drivers/pci/pci-driver.c      2005/06/18 14:42:48     1.32
@@ -393,7 +393,10 @@
        drv->driver.bus = &pci_bus_type;
        drv->driver.probe = pci_device_probe;
        drv->driver.remove = pci_device_remove;
-       drv->driver.shutdown = pci_device_shutdown,
+       /* FIXME, once all of the existing PCI drivers have been fixed to set
+        * the pci shutdown function, this test can go away. */
+       if (!drv->driver.shutdown)
+               drv->driver.shutdown = pci_device_shutdown,
        drv->driver.owner = drv->owner;
        drv->driver.kobj.ktype = &pci_driver_kobj_type;
        pci_init_dynids(&drv->dynids);
diff -urN linux/drivers/pci/pci.ids linux/drivers/pci/pci.ids
--- linux/drivers/pci/pci.ids   2005/06/15 13:58:30     1.81
+++ linux/drivers/pci/pci.ids   2005/06/18 14:42:48     1.82
@@ -7175,6 +7175,7 @@
        080f  Sentry5 DDR/SDR RAM Controller
        0811  Sentry5 External Interface Core
        0816  BCM3302 Sentry5 MIPS32 CPU
+       1600  NetXtreme BCM5752 Gigabit Ethernet PCI Express
        1644  NetXtreme BCM5700 Gigabit Ethernet
                1014 0277  Broadcom Vigil B5700 1000Base-T
                1028 00d1  Broadcom BCM5700
diff -urN linux/drivers/pci/probe.c linux/drivers/pci/probe.c
--- linux/drivers/pci/probe.c   2005/05/19 12:08:27     1.45
+++ linux/drivers/pci/probe.c   2005/06/18 14:42:48     1.46
@@ -125,7 +125,7 @@
 /*
  * Find the extent of a PCI decode..
  */
-static u32 pci_size(u32 base, u32 maxbase, unsigned long mask)
+static u32 pci_size(u32 base, u32 maxbase, u32 mask)
 {
        u32 size = mask & maxbase;      /* Find the significant bits */
        if (!size)
diff -urN linux/drivers/pci/quirks.c linux/drivers/pci/quirks.c
--- linux/drivers/pci/quirks.c  2005/06/07 13:45:36     1.65
+++ linux/drivers/pci/quirks.c  2005/06/18 14:42:48     1.66
@@ -456,21 +456,16 @@
 } 
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_APIC,        
 quirk_amd_8131_ioapic ); 
 
+static void __init quirk_svw_msi(struct pci_dev *dev)
+{
+       pci_msi_quirk = 1;
+       printk(KERN_WARNING "PCI: MSI quirk detected. pci_msi_quirk set.\n");
+}
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, 
PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_svw_msi );
 #endif /* CONFIG_X86_IO_APIC */
 
 
 /*
- * Via 686A/B:  The PCI_INTERRUPT_LINE register for the on-chip
- * devices, USB0/1, AC97, MC97, and ACPI, has an unusual feature:
- * when written, it makes an internal connection to the PIC.
- * For these devices, this register is defined to be 4 bits wide.
- * Normally this is fine.  However for IO-APIC motherboards, or
- * non-x86 architectures (yes Via exists on PPC among other places),
- * we must mask the PCI_INTERRUPT_LINE value versus 0xf to get
- * interrupts delivered properly.
- */
-
-/*
  * FIXME: it is questionable that quirk_via_acpi
  * is needed.  It shows up as an ISA bridge, and does not
  * support the PCI_INTERRUPT_LINE register at all.  Therefore
@@ -492,28 +487,30 @@
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C586_3,     
quirk_via_acpi );
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C686_4,     
quirk_via_acpi );
 
-static void quirk_via_irqpic(struct pci_dev *dev)
+/*
+ * Via 686A/B:  The PCI_INTERRUPT_LINE register for the on-chip
+ * devices, USB0/1, AC97, MC97, and ACPI, has an unusual feature:
+ * when written, it makes an internal connection to the PIC.
+ * For these devices, this register is defined to be 4 bits wide.
+ * Normally this is fine.  However for IO-APIC motherboards, or
+ * non-x86 architectures (yes Via exists on PPC among other places),
+ * we must mask the PCI_INTERRUPT_LINE value versus 0xf to get
+ * interrupts delivered properly.
+ */
+static void quirk_via_irq(struct pci_dev *dev)
 {
        u8 irq, new_irq;
 
-#ifdef CONFIG_X86_IO_APIC
-       if (nr_ioapics && !skip_ioapic_setup)
-               return;
-#endif
-#ifdef CONFIG_ACPI
-       if (acpi_irq_model != ACPI_IRQ_MODEL_PIC)
-               return;
-#endif
        new_irq = dev->irq & 0xf;
        pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
        if (new_irq != irq) {
-               printk(KERN_INFO "PCI: Via PIC IRQ fixup for %s, from %d to 
%d\n",
+               printk(KERN_INFO "PCI: Via IRQ fixup for %s, from %d to %d\n",
                        pci_name(dev), irq, new_irq);
                udelay(15);     /* unknown if delay really needed */
                pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
        }
 }
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_ANY_ID, quirk_via_irqpic);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_ANY_ID, quirk_via_irq);
 
 /*
  * PIIX3 USB: We have to disable USB interrupts that are
diff -urN linux/drivers/pci/hotplug/cpci_hotplug_core.c 
linux/drivers/pci/hotplug/cpci_hotplug_core.c
--- linux/drivers/pci/hotplug/cpci_hotplug_core.c       2005/06/07 13:45:36     
1.9
+++ linux/drivers/pci/hotplug/cpci_hotplug_core.c       2005/06/18 14:42:48     
1.10
@@ -217,6 +217,8 @@
        kfree(slot->hotplug_slot->info);
        kfree(slot->hotplug_slot->name);
        kfree(slot->hotplug_slot);
+       if (slot->dev)
+               pci_dev_put(slot->dev);
        kfree(slot);
 }
 
diff -urN linux/drivers/pci/hotplug/cpci_hotplug_pci.c 
linux/drivers/pci/hotplug/cpci_hotplug_pci.c
--- linux/drivers/pci/hotplug/cpci_hotplug_pci.c        2005/06/07 13:45:36     
1.8
+++ linux/drivers/pci/hotplug/cpci_hotplug_pci.c        2005/06/18 14:42:48     
1.9
@@ -315,9 +315,12 @@
                                    PCI_DEVFN(PCI_SLOT(slot->devfn), i));
                if (dev) {
                        pci_remove_bus_device(dev);
-                       slot->dev = NULL;
+                       pci_dev_put(dev);
                }
        }
+       pci_dev_put(slot->dev);
+       slot->dev = NULL;
+
        dbg("%s - exit", __FUNCTION__);
        return 0;
 }
diff -urN linux/drivers/scsi/Kconfig linux/drivers/scsi/Kconfig
--- linux/drivers/scsi/Kconfig  2005/05/19 12:08:29     1.48
+++ linux/drivers/scsi/Kconfig  2005/06/18 14:42:48     1.49
@@ -1752,7 +1752,7 @@
 
 config SUN3_SCSI
        tristate "Sun3 NCR5380 SCSI"
-       depends on SUN3 && SCSI
+       depends on SUN3 && SCSI && BROKEN
        help
          This option will enable support for the OBIO (onboard io) NCR5380
          SCSI controller found in the Sun 3/50 and 3/60, as well as for
diff -urN linux/drivers/scsi/libata-core.c linux/drivers/scsi/libata-core.c
--- linux/drivers/scsi/libata-core.c    2005/06/07 13:45:37     1.29
+++ linux/drivers/scsi/libata-core.c    2005/06/18 14:42:48     1.30
@@ -2577,7 +2577,6 @@
 next_sg:
        sg = &qc->sg[qc->cursg];
 
-next_page:
        page = sg->page;
        offset = sg->offset + qc->cursg_ofs;
 
@@ -2585,6 +2584,7 @@
        page = nth_page(page, (offset >> PAGE_SHIFT));
        offset %= PAGE_SIZE;
 
+       /* don't overrun current sg */
        count = min(sg->length - qc->cursg_ofs, bytes);
 
        /* don't cross page boundaries */
@@ -2609,8 +2609,6 @@
        kunmap(page);
 
        if (bytes) {
-               if (qc->cursg_ofs < sg->length)
-                       goto next_page;
                goto next_sg;
        }
 }
diff -urN linux/drivers/scsi/sata_sil.c linux/drivers/scsi/sata_sil.c
--- linux/drivers/scsi/sata_sil.c       2005/06/07 13:45:37     1.21
+++ linux/drivers/scsi/sata_sil.c       2005/06/18 14:42:48     1.22
@@ -432,7 +432,13 @@
                writeb(cls, mmio_base + SIL_FIFO_R0);
                writeb(cls, mmio_base + SIL_FIFO_W0);
                writeb(cls, mmio_base + SIL_FIFO_R1);
-               writeb(cls, mmio_base + SIL_FIFO_W2);
+               writeb(cls, mmio_base + SIL_FIFO_W1);
+               if (ent->driver_data == sil_3114) {
+                       writeb(cls, mmio_base + SIL_FIFO_R2);
+                       writeb(cls, mmio_base + SIL_FIFO_W2);
+                       writeb(cls, mmio_base + SIL_FIFO_R3);
+                       writeb(cls, mmio_base + SIL_FIFO_W3);
+               }
        } else
                printk(KERN_WARNING DRV_NAME "(%s): cache line size not set.  
Driver may not function\n",
                        pci_name(pdev));
diff -urN linux/drivers/serial/sa1100.c linux/drivers/serial/sa1100.c
--- linux/drivers/serial/sa1100.c       2005/05/26 09:12:46     1.21
+++ linux/drivers/serial/sa1100.c       2005/06/18 14:42:48     1.22
@@ -197,7 +197,7 @@
 sa1100_rx_chars(struct sa1100_port *sport, struct pt_regs *regs)
 {
        struct tty_struct *tty = sport->port.info->tty;
-       unsigned int status, ch, flg, ignored = 0;
+       unsigned int status, ch, flg;
 
        status = UTSR1_TO_SM(UART_GET_UTSR1(sport)) |
                 UTSR0_TO_SM(UART_GET_UTSR0(sport));
diff -urN linux/drivers/usb/host/ehci-hub.c linux/drivers/usb/host/ehci-hub.c
--- linux/drivers/usb/host/ehci-hub.c   2005/05/26 09:12:46     1.24
+++ linux/drivers/usb/host/ehci-hub.c   2005/06/18 14:42:48     1.25
@@ -439,9 +439,12 @@
                        /* force reset to complete */
                        writel (temp & ~PORT_RESET,
                                        &ehci->regs->port_status [wIndex]);
+                       /* REVISIT:  some hardware needs 550+ usec to clear
+                        * this bit; seems too long to spin routinely...
+                        */
                        retval = handshake (
                                        &ehci->regs->port_status [wIndex],
-                                       PORT_RESET, 0, 500);
+                                       PORT_RESET, 0, 750);
                        if (retval != 0) {
                                ehci_err (ehci, "port %d reset error %d\n",
                                        wIndex + 1, retval);
diff -urN linux/drivers/usb/media/pwc/pwc-if.c 
linux/drivers/usb/media/pwc/pwc-if.c
--- linux/drivers/usb/media/pwc/pwc-if.c        2005/06/07 13:45:38     1.4
+++ linux/drivers/usb/media/pwc/pwc-if.c        2005/06/18 14:42:48     1.5
@@ -332,10 +332,6 @@
 #endif  
        ;
         }
-       if (kbuf == NULL) {
-          Err("Failed to allocate decompress table.\n");
-          return -ENOMEM;
-       }
        pdev->decompress_data = kbuf;
        
        /* Allocate image buffer; double buffer for mmap() */
diff -urN linux/drivers/usb/net/kaweth.c linux/drivers/usb/net/kaweth.c
--- linux/drivers/usb/net/kaweth.c      2005/04/08 18:58:28     1.34
+++ linux/drivers/usb/net/kaweth.c      2005/06/18 14:42:49     1.35
@@ -520,7 +520,7 @@
 
        /* we check the link state to report changes */
        if (kaweth->linkstate != (act_state = ( kaweth->intbuffer[STATE_OFFSET] 
| STATE_MASK) >> STATE_SHIFT)) {
-               if (!act_state)
+               if (act_state)
                        netif_carrier_on(kaweth->net);
                else
                        netif_carrier_off(kaweth->net);
diff -urN linux/drivers/usb/serial/ftdi_sio.c 
linux/drivers/usb/serial/ftdi_sio.c
--- linux/drivers/usb/serial/ftdi_sio.c 2005/06/07 13:45:38     1.70
+++ linux/drivers/usb/serial/ftdi_sio.c 2005/06/18 14:42:49     1.71
@@ -264,7 +264,7 @@
 /*
  * Version Information
  */
-#define DRIVER_VERSION "v1.4.1"
+#define DRIVER_VERSION "v1.4.2"
 #define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Bill Ryder 
<bryder@sgi.com>, Kuba Ober <kuba@mareimbrium.org>"
 #define DRIVER_DESC "USB FTDI Serial Converters Driver"
 
@@ -687,6 +687,8 @@
        char prev_status, diff_status;        /* Used for TIOCMIWAIT */
        __u8 rx_flags;          /* receive state flags (throttling) */
        spinlock_t rx_lock;     /* spinlock for receive state */
+       struct work_struct rx_work;
+       int rx_processed;
 
        __u16 interface;        /* FT2232C port interface (0 for FT232/245) */
 
@@ -717,7 +719,7 @@
 static int  ftdi_chars_in_buffer       (struct usb_serial_port *port);
 static void ftdi_write_bulk_callback   (struct urb *urb, struct pt_regs *regs);
 static void ftdi_read_bulk_callback    (struct urb *urb, struct pt_regs *regs);
-static void ftdi_process_read          (struct usb_serial_port *port);
+static void ftdi_process_read          (void *param);
 static void ftdi_set_termios           (struct usb_serial_port *port, struct 
termios * old);
 static int  ftdi_tiocmget               (struct usb_serial_port *port, struct 
file *file);
 static int  ftdi_tiocmset              (struct usb_serial_port *port, struct 
file * file, unsigned int set, unsigned int clear);
@@ -1387,6 +1389,8 @@
                port->read_urb->transfer_buffer_length = BUFSZ;
        }
 
+       INIT_WORK(&priv->rx_work, ftdi_process_read, port);
+
        /* Free port's existing write urb and transfer buffer. */
        if (port->write_urb) {
                usb_free_urb (port->write_urb);
@@ -1617,6 +1621,7 @@
        spin_unlock_irqrestore(&priv->rx_lock, flags);
 
        /* Start reading from the device */
+       priv->rx_processed = 0;
        usb_fill_bulk_urb(port->read_urb, dev,
                      usb_rcvbulkpipe(dev, port->bulk_in_endpointAddress),
                      port->read_urb->transfer_buffer, 
port->read_urb->transfer_buffer_length,
@@ -1667,6 +1672,10 @@
                        err("Error from RTS LOW urb");
                }
        } /* Note change no line if hupcl is off */
+
+       /* cancel any scheduled reading */
+       cancel_delayed_work(&priv->rx_work);
+       flush_scheduled_work();
        
        /* shutdown our bulk read */
        if (port->read_urb)
@@ -1862,23 +1871,14 @@
                return;
        }
 
-       /* If throttled, delay receive processing until unthrottled. */
-       spin_lock(&priv->rx_lock);
-       if (priv->rx_flags & THROTTLED) {
-               dbg("Deferring read urb processing until unthrottled");
-               priv->rx_flags |= ACTUALLY_THROTTLED;
-               spin_unlock(&priv->rx_lock);
-               return;
-       }
-       spin_unlock(&priv->rx_lock);
-
        ftdi_process_read(port);
 
 } /* ftdi_read_bulk_callback */
 
 
-static void ftdi_process_read (struct usb_serial_port *port)
+static void ftdi_process_read (void *param)
 { /* ftdi_process_read */
+       struct usb_serial_port *port = (struct usb_serial_port*)param;
        struct urb *urb;
        struct tty_struct *tty;
        struct ftdi_private *priv;
@@ -1889,6 +1889,7 @@
        int result;
        int need_flip;
        int packet_offset;
+       unsigned long flags;
 
        dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -1915,12 +1916,18 @@
 
        data = urb->transfer_buffer;
 
-        /* The first two bytes of every read packet are status */
-       if (urb->actual_length > 2) {
-               usb_serial_debug_data(debug, &port->dev, __FUNCTION__, 
urb->actual_length, data);
+       if (priv->rx_processed) {
+               dbg("%s - already processed: %d bytes, %d remain", __FUNCTION__,
+                               priv->rx_processed,
+                               urb->actual_length - priv->rx_processed);
        } else {
-                dbg("Status only: %03oo %03oo",data[0],data[1]);
-        }
+               /* The first two bytes of every read packet are status */
+               if (urb->actual_length > 2) {
+                       usb_serial_debug_data(debug, &port->dev, __FUNCTION__, 
urb->actual_length, data);
+               } else {
+                       dbg("Status only: %03oo %03oo",data[0],data[1]);
+               }
+       }
 
 
        /* TO DO -- check for hung up line and handle appropriately: */
@@ -1929,8 +1936,12 @@
        /* if CD is dropped and the line is not CLOCAL then we should hangup */
 
        need_flip = 0;
-       for (packet_offset=0; packet_offset < urb->actual_length; packet_offset 
+= PKTSZ) {
+       for (packet_offset = priv->rx_processed; packet_offset < 
urb->actual_length; packet_offset += PKTSZ) {
+               int length;
+
                /* Compare new line status to the old one, signal if different 
*/
+               /* N.B. packet may be processed more than once, but differences
+                * are only processed once.  */
                if (priv != NULL) {
                        char new_status = data[packet_offset+0] & 
FTDI_STATUS_B0_MASK;
                        if (new_status != priv->prev_status) {
@@ -1940,6 +1951,35 @@
                        }
                }
 
+               length = min(PKTSZ, urb->actual_length-packet_offset)-2;
+               if (length < 0) {
+                       err("%s - bad packet length: %d", __FUNCTION__, 
length+2);
+                       length = 0;
+               }
+
+               /* have to make sure we don't overflow the buffer
+                  with tty_insert_flip_char's */
+               if (tty->flip.count+length > TTY_FLIPBUF_SIZE) {
+                       tty_flip_buffer_push(tty);
+                       need_flip = 0;
+
+                       if (tty->flip.count != 0) {
+                               /* flip didn't work, this happens when 
ftdi_process_read() is
+                                * called from ftdi_unthrottle, because 
TTY_DONT_FLIP is set */
+                               dbg("%s - flip buffer push failed", 
__FUNCTION__);
+                               break;
+                       }
+               }
+               if (priv->rx_flags & THROTTLED) {
+                       dbg("%s - throttled", __FUNCTION__);
+                       break;
+               }
+               if (tty->ldisc.receive_room(tty)-tty->flip.count < length) {
+                       /* break out & wait for throttling/unthrottling to 
happen */
+                       dbg("%s - receive room low", __FUNCTION__);
+                       break;
+               }
+
                /* Handle errors and break */
                error_flag = TTY_NORMAL;
                /* Although the device uses a bitmask and hence can have 
multiple */
@@ -1962,13 +2002,8 @@
                        error_flag = TTY_FRAME;
                        dbg("FRAMING error");
                }
-               if (urb->actual_length > packet_offset + 2) {
-                       for (i = 2; (i < PKTSZ) && ((i+packet_offset) < 
urb->actual_length); ++i) {
-                               /* have to make sure we don't overflow the 
buffer
-                                 with tty_insert_flip_char's */
-                               if(tty->flip.count >= TTY_FLIPBUF_SIZE) {
-                                       tty_flip_buffer_push(tty);
-                               }
+               if (length > 0) {
+                       for (i = 2; i < length+2; i++) {
                                /* Note that the error flag is duplicated for 
                                   every character received since we don't know
                                   which character it applied to */
@@ -2005,6 +2040,35 @@
                tty_flip_buffer_push(tty);
        }
 
+       if (packet_offset < urb->actual_length) {
+               /* not completely processed - record progress */
+               priv->rx_processed = packet_offset;
+               dbg("%s - incomplete, %d bytes processed, %d remain",
+                               __FUNCTION__, packet_offset,
+                               urb->actual_length - packet_offset);
+               /* check if we were throttled while processing */
+               spin_lock_irqsave(&priv->rx_lock, flags);
+               if (priv->rx_flags & THROTTLED) {
+                       priv->rx_flags |= ACTUALLY_THROTTLED;
+                       spin_unlock_irqrestore(&priv->rx_lock, flags);
+                       dbg("%s - deferring remainder until unthrottled",
+                                       __FUNCTION__);
+                       return;
+               }
+               spin_unlock_irqrestore(&priv->rx_lock, flags);
+               /* if the port is closed stop trying to read */
+               if (port->open_count > 0){
+                       /* delay processing of remainder */
+                       schedule_delayed_work(&priv->rx_work, 1);
+               } else {
+                       dbg("%s - port is closed", __FUNCTION__);
+               }
+               return;
+       }
+
+       /* urb is completely processed */
+       priv->rx_processed = 0;
+
        /* if the port is closed stop trying to read */
        if (port->open_count > 0){
                /* Continue trying to always read  */
@@ -2444,7 +2508,7 @@
        spin_unlock_irqrestore(&priv->rx_lock, flags);
 
        if (actually_throttled)
-               ftdi_process_read(port);
+               schedule_work(&priv->rx_work);
 }
 
 static int __init ftdi_init (void)
diff -urN linux/drivers/video/fbsysfs.c linux/drivers/video/fbsysfs.c
--- linux/drivers/video/fbsysfs.c       2005/05/19 12:08:32     1.4
+++ linux/drivers/video/fbsysfs.c       2005/06/18 14:42:49     1.5
@@ -241,7 +241,7 @@
        struct fb_info *fb_info =
                (struct fb_info *)class_get_devdata(class_device);
        return snprintf(buf, PAGE_SIZE, "%d,%d\n", fb_info->var.xres_virtual,
-                       fb_info->var.xres_virtual);
+                       fb_info->var.yres_virtual);
 }
 
 static ssize_t store_cmap(struct class_device *class_device, const char * buf,
diff -urN linux/drivers/video/macmodes.c linux/drivers/video/macmodes.c
--- linux/drivers/video/macmodes.c      2005/04/08 18:58:29     1.12
+++ linux/drivers/video/macmodes.c      2005/06/18 14:42:49     1.13
@@ -387,3 +387,4 @@
 }
 EXPORT_SYMBOL(mac_find_mode);
 
+MODULE_LICENSE("GPL");
diff -urN linux/drivers/video/aty/radeon_base.c 
linux/drivers/video/aty/radeon_base.c
--- linux/drivers/video/aty/radeon_base.c       2005/05/19 12:08:33     1.20
+++ linux/drivers/video/aty/radeon_base.c       2005/06/18 14:42:49     1.21
@@ -2374,10 +2374,9 @@
        } while (   rinfo->fb_base == 0 &&
                  ((rinfo->mapped_vram /=2) >= MIN_MAPPED_VRAM) );
 
-       if (rinfo->fb_base)
-               memset_io(rinfo->fb_base, 0, rinfo->mapped_vram);
-       else {
-               printk (KERN_ERR "radeonfb (%s): cannot map FB\n", 
pci_name(rinfo->pdev));
+       if (rinfo->fb_base == NULL) {
+               printk (KERN_ERR "radeonfb (%s): cannot map FB\n",
+                       pci_name(rinfo->pdev));
                ret = -EIO;
                goto err_unmap_rom;
        }
diff -urN linux/fs/binfmt_elf.c linux/fs/binfmt_elf.c
--- linux/fs/binfmt_elf.c       2005/05/26 09:12:47     1.112
+++ linux/fs/binfmt_elf.c       2005/06/18 14:42:49     1.113
@@ -1125,7 +1125,7 @@
        return file->f_op->write(file, addr, nr, &file->f_pos) == nr;
 }
 
-static int dump_seek(struct file *file, off_t off)
+static int dump_seek(struct file *file, loff_t off)
 {
        if (file->f_op->llseek) {
                if (file->f_op->llseek(file, off, 0) != off)
diff -urN linux/fs/binfmt_flat.c linux/fs/binfmt_flat.c
--- linux/fs/binfmt_flat.c      2005/04/08 18:58:32     1.10
+++ linux/fs/binfmt_flat.c      2005/06/18 14:42:49     1.11
@@ -520,7 +520,7 @@
                DBG_FLT("BINFMT_FLAT: ROM mapping of file (we hope)\n");
 
                down_write(&current->mm->mmap_sem);
-               textpos = do_mmap(bprm->file, 0, text_len, PROT_READ|PROT_EXEC, 
0, 0);
+               textpos = do_mmap(bprm->file, 0, text_len, PROT_READ|PROT_EXEC, 
MAP_SHARED, 0);
                up_write(&current->mm->mmap_sem);
                if (!textpos  || textpos >= (unsigned long) -4096) {
                        if (!textpos)
@@ -532,7 +532,7 @@
                down_write(&current->mm->mmap_sem);
                realdatastart = do_mmap(0, 0, data_len + extra +
                                MAX_SHARED_LIBS * sizeof(unsigned long),
-                               PROT_READ|PROT_WRITE|PROT_EXEC, 0, 0);
+                               PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 0);
                up_write(&current->mm->mmap_sem);
 
                if (realdatastart == 0 || realdatastart >= (unsigned 
long)-4096) {
@@ -574,7 +574,7 @@
                down_write(&current->mm->mmap_sem);
                textpos = do_mmap(0, 0, text_len + data_len + extra +
                                        MAX_SHARED_LIBS * sizeof(unsigned long),
-                               PROT_READ | PROT_EXEC | PROT_WRITE, 0, 0);
+                               PROT_READ | PROT_EXEC | PROT_WRITE, 
MAP_PRIVATE, 0);
                up_write(&current->mm->mmap_sem);
                if (!textpos  || textpos >= (unsigned long) -4096) {
                        if (!textpos)
diff -urN linux/fs/namei.c linux/fs/namei.c
--- linux/fs/namei.c    2005/05/26 09:12:47     1.114
+++ linux/fs/namei.c    2005/06/18 14:42:49     1.115
@@ -493,12 +493,21 @@
        return PTR_ERR(link);
 }
 
-static inline int __do_follow_link(struct dentry *dentry, struct nameidata *nd)
+struct path {
+       struct vfsmount *mnt;
+       struct dentry *dentry;
+};
+
+static inline int __do_follow_link(struct path *path, struct nameidata *nd)
 {
        int error;
+       struct dentry *dentry = path->dentry;
 
-       touch_atime(nd->mnt, dentry);
+       touch_atime(path->mnt, dentry);
        nd_set_link(nd, NULL);
+
+       if (path->mnt == nd->mnt)
+               mntget(path->mnt);
        error = dentry->d_inode->i_op->follow_link(dentry, nd);
        if (!error) {
                char *s = nd_get_link(nd);
@@ -507,6 +516,8 @@
                if (dentry->d_inode->i_op->put_link)
                        dentry->d_inode->i_op->put_link(dentry, nd);
        }
+       dput(dentry);
+       mntput(path->mnt);
 
        return error;
 }
@@ -518,7 +529,7 @@
  * Without that kind of total limit, nasty chains of consecutive
  * symlinks can cause almost arbitrarily long lookups. 
  */
-static inline int do_follow_link(struct dentry *dentry, struct nameidata *nd)
+static inline int do_follow_link(struct path *path, struct nameidata *nd)
 {
        int err = -ELOOP;
        if (current->link_count >= MAX_NESTED_LINKS)
@@ -527,17 +538,20 @@
                goto loop;
        BUG_ON(nd->depth >= MAX_NESTED_LINKS);
        cond_resched();
-       err = security_inode_follow_link(dentry, nd);
+       err = security_inode_follow_link(path->dentry, nd);
        if (err)
                goto loop;
        current->link_count++;
        current->total_link_count++;
        nd->depth++;
-       err = __do_follow_link(dentry, nd);
+       err = __do_follow_link(path, nd);
        current->link_count--;
        nd->depth--;
        return err;
 loop:
+       dput(path->dentry);
+       if (path->mnt != nd->mnt)
+               mntput(path->mnt);
        path_release(nd);
        return err;
 }
@@ -565,87 +579,91 @@
 /* no need for dcache_lock, as serialization is taken care in
  * namespace.c
  */
-static int follow_mount(struct vfsmount **mnt, struct dentry **dentry)
+static int __follow_mount(struct path *path)
 {
        int res = 0;
+       while (d_mountpoint(path->dentry)) {
+               struct vfsmount *mounted = lookup_mnt(path->mnt, path->dentry);
+               if (!mounted)
+                       break;
+               dput(path->dentry);
+               if (res)
+                       mntput(path->mnt);
+               path->mnt = mounted;
+               path->dentry = dget(mounted->mnt_root);
+               res = 1;
+       }
+       return res;
+}
+
+static void follow_mount(struct vfsmount **mnt, struct dentry **dentry)
+{
        while (d_mountpoint(*dentry)) {
                struct vfsmount *mounted = lookup_mnt(*mnt, *dentry);
                if (!mounted)
                        break;
+               dput(*dentry);
                mntput(*mnt);
                *mnt = mounted;
-               dput(*dentry);
                *dentry = dget(mounted->mnt_root);
-               res = 1;
        }
-       return res;
 }
 
 /* no need for dcache_lock, as serialization is taken care in
  * namespace.c
  */
-static inline int __follow_down(struct vfsmount **mnt, struct dentry **dentry)
+int follow_down(struct vfsmount **mnt, struct dentry **dentry)
 {
        struct vfsmount *mounted;
 
        mounted = lookup_mnt(*mnt, *dentry);
        if (mounted) {
+               dput(*dentry);
                mntput(*mnt);
                *mnt = mounted;
-               dput(*dentry);
                *dentry = dget(mounted->mnt_root);
                return 1;
        }
        return 0;
 }
 
-int follow_down(struct vfsmount **mnt, struct dentry **dentry)
-{
-       return __follow_down(mnt,dentry);
-}
- 
-static inline void follow_dotdot(struct vfsmount **mnt, struct dentry **dentry)
+static inline void follow_dotdot(struct nameidata *nd)
 {
        while(1) {
                struct vfsmount *parent;
-               struct dentry *old = *dentry;
+               struct dentry *old = nd->dentry;
 
                 read_lock(&current->fs->lock);
-               if (*dentry == current->fs->root &&
-                   *mnt == current->fs->rootmnt) {
+               if (nd->dentry == current->fs->root &&
+                   nd->mnt == current->fs->rootmnt) {
                         read_unlock(&current->fs->lock);
                        break;
                }
                 read_unlock(&current->fs->lock);
                spin_lock(&dcache_lock);
-               if (*dentry != (*mnt)->mnt_root) {
-                       *dentry = dget((*dentry)->d_parent);
+               if (nd->dentry != nd->mnt->mnt_root) {
+                       nd->dentry = dget(nd->dentry->d_parent);
                        spin_unlock(&dcache_lock);
                        dput(old);
                        break;
                }
                spin_unlock(&dcache_lock);
                spin_lock(&vfsmount_lock);
-               parent = (*mnt)->mnt_parent;
-               if (parent == *mnt) {
+               parent = nd->mnt->mnt_parent;
+               if (parent == nd->mnt) {
                        spin_unlock(&vfsmount_lock);
                        break;
                }
                mntget(parent);
-               *dentry = dget((*mnt)->mnt_mountpoint);
+               nd->dentry = dget(nd->mnt->mnt_mountpoint);
                spin_unlock(&vfsmount_lock);
                dput(old);
-               mntput(*mnt);
-               *mnt = parent;
+               mntput(nd->mnt);
+               nd->mnt = parent;
        }
-       follow_mount(mnt, dentry);
+       follow_mount(&nd->mnt, &nd->dentry);
 }
 
-struct path {
-       struct vfsmount *mnt;
-       struct dentry *dentry;
-};
-
 /*
  *  It's more convoluted than I'd like it to be, but... it's still fairly
  *  small and for now I'd prefer to have fast path as straight as possible.
@@ -664,6 +682,7 @@
 done:
        path->mnt = mnt;
        path->dentry = dentry;
+       __follow_mount(path);
        return 0;
 
 need_lookup:
@@ -751,7 +770,7 @@
                        case 2: 
                                if (this.name[1] != '.')
                                        break;
-                               follow_dotdot(&nd->mnt, &nd->dentry);
+                               follow_dotdot(nd);
                                inode = nd->dentry->d_inode;
                                /* fallthrough */
                        case 1:
@@ -771,8 +790,6 @@
                err = do_lookup(nd, &this, &next);
                if (err)
                        break;
-               /* Check mountpoints.. */
-               follow_mount(&next.mnt, &next.dentry);
 
                err = -ENOENT;
                inode = next.dentry->d_inode;
@@ -783,10 +800,7 @@
                        goto out_dput;
 
                if (inode->i_op->follow_link) {
-                       mntget(next.mnt);
-                       err = do_follow_link(next.dentry, nd);
-                       dput(next.dentry);
-                       mntput(next.mnt);
+                       err = do_follow_link(&next, nd);
                        if (err)
                                goto return_err;
                        err = -ENOENT;
@@ -798,6 +812,8 @@
                                break;
                } else {
                        dput(nd->dentry);
+                       if (nd->mnt != next.mnt)
+                               mntput(nd->mnt);
                        nd->mnt = next.mnt;
                        nd->dentry = next.dentry;
                }
@@ -819,7 +835,7 @@
                        case 2: 
                                if (this.name[1] != '.')
                                        break;
-                               follow_dotdot(&nd->mnt, &nd->dentry);
+                               follow_dotdot(nd);
                                inode = nd->dentry->d_inode;
                                /* fallthrough */
                        case 1:
@@ -833,19 +849,17 @@
                err = do_lookup(nd, &this, &next);
                if (err)
                        break;
-               follow_mount(&next.mnt, &next.dentry);
                inode = next.dentry->d_inode;
                if ((lookup_flags & LOOKUP_FOLLOW)
                    && inode && inode->i_op && inode->i_op->follow_link) {
-                       mntget(next.mnt);
-                       err = do_follow_link(next.dentry, nd);
-                       dput(next.dentry);
-                       mntput(next.mnt);
+                       err = do_follow_link(&next, nd);
                        if (err)
                                goto return_err;
                        inode = nd->dentry->d_inode;
                } else {
                        dput(nd->dentry);
+                       if (nd->mnt != next.mnt)
+                               mntput(nd->mnt);
                        nd->mnt = next.mnt;
                        nd->dentry = next.dentry;
                }
@@ -885,6 +899,8 @@
                return 0;
 out_dput:
                dput(next.dentry);
+               if (nd->mnt != next.mnt)
+                       mntput(next.mnt);
                break;
        }
        path_release(nd);
@@ -1398,7 +1414,7 @@
 int open_namei(const char * pathname, int flag, int mode, struct nameidata *nd)
 {
        int acc_mode, error = 0;
-       struct dentry *dentry;
+       struct path path;
        struct dentry *dir;
        int count = 0;
 
@@ -1442,23 +1458,24 @@
        dir = nd->dentry;
        nd->flags &= ~LOOKUP_PARENT;
        down(&dir->d_inode->i_sem);
-       dentry = __lookup_hash(&nd->last, nd->dentry, nd);
+       path.dentry = __lookup_hash(&nd->last, nd->dentry, nd);
+       path.mnt = nd->mnt;
 
 do_last:
-       error = PTR_ERR(dentry);
-       if (IS_ERR(dentry)) {
+       error = PTR_ERR(path.dentry);
+       if (IS_ERR(path.dentry)) {
                up(&dir->d_inode->i_sem);
                goto exit;
        }
 
        /* Negative dentry, just create the file */
-       if (!dentry->d_inode) {
+       if (!path.dentry->d_inode) {
                if (!IS_POSIXACL(dir->d_inode))
                        mode &= ~current->fs->umask;
-               error = vfs_create(dir->d_inode, dentry, mode, nd);
+               error = vfs_create(dir->d_inode, path.dentry, mode, nd);
                up(&dir->d_inode->i_sem);
                dput(nd->dentry);
-               nd->dentry = dentry;
+               nd->dentry = path.dentry;
                if (error)
                        goto exit;
                /* Don't check for write permission, don't truncate */
@@ -1476,22 +1493,24 @@
        if (flag & O_EXCL)
                goto exit_dput;
 
-       if (d_mountpoint(dentry)) {
+       if (__follow_mount(&path)) {
                error = -ELOOP;
                if (flag & O_NOFOLLOW)
                        goto exit_dput;
-               while (__follow_down(&nd->mnt,&dentry) && d_mountpoint(dentry));
        }
        error = -ENOENT;
-       if (!dentry->d_inode)
+       if (!path.dentry->d_inode)
                goto exit_dput;
-       if (dentry->d_inode->i_op && dentry->d_inode->i_op->follow_link)
+       if (path.dentry->d_inode->i_op && 
path.dentry->d_inode->i_op->follow_link)
                goto do_link;
 
        dput(nd->dentry);
-       nd->dentry = dentry;
+       nd->dentry = path.dentry;
+       if (nd->mnt != path.mnt)
+               mntput(nd->mnt);
+       nd->mnt = path.mnt;
        error = -EISDIR;
-       if (dentry->d_inode && S_ISDIR(dentry->d_inode->i_mode))
+       if (path.dentry->d_inode && S_ISDIR(path.dentry->d_inode->i_mode))
                goto exit;
 ok:
        error = may_open(nd, acc_mode, flag);
@@ -1500,7 +1519,9 @@
        return 0;
 
 exit_dput:
-       dput(dentry);
+       dput(path.dentry);
+       if (nd->mnt != path.mnt)
+               mntput(path.mnt);
 exit:
        path_release(nd);
        return error;
@@ -1520,18 +1541,15 @@
         * are done. Procfs-like symlinks just set LAST_BIND.
         */
        nd->flags |= LOOKUP_PARENT;
-       error = security_inode_follow_link(dentry, nd);
+       error = security_inode_follow_link(path.dentry, nd);
        if (error)
                goto exit_dput;
-       error = __do_follow_link(dentry, nd);
-       dput(dentry);
+       error = __do_follow_link(&path, nd);
        if (error)
                return error;
        nd->flags &= ~LOOKUP_PARENT;
-       if (nd->last_type == LAST_BIND) {
-               dentry = nd->dentry;
+       if (nd->last_type == LAST_BIND)
                goto ok;
-       }
        error = -EISDIR;
        if (nd->last_type != LAST_NORM)
                goto exit;
@@ -1546,7 +1564,8 @@
        }
        dir = nd->dentry;
        down(&dir->d_inode->i_sem);
-       dentry = __lookup_hash(&nd->last, nd->dentry, nd);
+       path.dentry = __lookup_hash(&nd->last, nd->dentry, nd);
+       path.mnt = nd->mnt;
        putname(nd->last.name);
        goto do_last;
 }
diff -urN linux/fs/cifs/CHANGES linux/fs/cifs/CHANGES
--- linux/fs/cifs/CHANGES       2005/05/19 12:08:35     1.30
+++ linux/fs/cifs/CHANGES       2005/06/18 14:42:49     1.31
@@ -6,7 +6,8 @@
 recommended, unmount and rmmod cifs will kill them when they are
 no longer needed).  Fix readdir to ASCII servers (ie older servers
 which do not support Unicode) and also require asterik.
-
+Fix out of memory case in which data could be written one page
+off in the page cache.
 
 Version 1.33
 ------------
diff -urN linux/fs/cifs/cifsfs.h linux/fs/cifs/cifsfs.h
--- linux/fs/cifs/cifsfs.h      2005/05/19 12:08:35     1.18
+++ linux/fs/cifs/cifsfs.h      2005/06/18 14:42:49     1.19
@@ -96,5 +96,5 @@
 extern ssize_t cifs_listxattr(struct dentry *, char *, size_t);
 extern int cifs_ioctl (struct inode * inode, struct file * filep,
                       unsigned int command, unsigned long arg);
-#define CIFS_VERSION   "1.34"
+#define CIFS_VERSION   "1.35"
 #endif                         /* _CIFSFS_H */
diff -urN linux/fs/cifs/file.c linux/fs/cifs/file.c
--- linux/fs/cifs/file.c        2005/05/19 12:08:35     1.33
+++ linux/fs/cifs/file.c        2005/06/18 14:42:49     1.34
@@ -1352,6 +1352,8 @@
                                      GFP_KERNEL)) {
                        page_cache_release(page);
                        cFYI(1, ("Add page cache failed"));
+                       data += PAGE_CACHE_SIZE;
+                       bytes_read -= PAGE_CACHE_SIZE;
                        continue;
                }
 
diff -urN linux/fs/cifs/inode.c linux/fs/cifs/inode.c
--- linux/fs/cifs/inode.c       2005/06/07 13:45:39     1.30
+++ linux/fs/cifs/inode.c       2005/06/18 14:42:49     1.31
@@ -82,12 +82,12 @@
                /* get new inode */
                if (*pinode == NULL) {
                        *pinode = new_inode(sb);
-                       if(*pinode == NULL) 
+                       if (*pinode == NULL) 
                                return -ENOMEM;
                        /* Is an i_ino of zero legal? */
                        /* Are there sanity checks we can use to ensure that
                           the server is really filling in that field? */
-                       if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
+                       if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
                                (*pinode)->i_ino =
                                        (unsigned long)findData.UniqueId;
                        } /* note ino incremented to unique num in new_inode */
@@ -134,7 +134,7 @@
                inode->i_gid = le64_to_cpu(findData.Gid);
                inode->i_nlink = le64_to_cpu(findData.Nlinks);
 
-               if(is_size_safe_to_change(cifsInfo)) {
+               if (is_size_safe_to_change(cifsInfo)) {
                /* can not safely change the file size here if the
                   client is writing to it due to potential races */
 
@@ -162,7 +162,7 @@
                if (S_ISREG(inode->i_mode)) {
                        cFYI(1, (" File inode "));
                        inode->i_op = &cifs_file_inode_ops;
-                       if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
+                       if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
                                inode->i_fop = &cifs_file_direct_ops;
                        else
                                inode->i_fop = &cifs_file_ops;
@@ -198,17 +198,17 @@
        pTcon = cifs_sb->tcon;
        cFYI(1,("Getting info on %s ", search_path));
 
-       if((pfindData == NULL) && (*pinode != NULL)) {
-               if(CIFS_I(*pinode)->clientCanCacheRead) {
+       if ((pfindData == NULL) && (*pinode != NULL)) {
+               if (CIFS_I(*pinode)->clientCanCacheRead) {
                        cFYI(1,("No need to revalidate cached inode sizes"));
                        return rc;
                }
        }
 
        /* if file info not passed in then get it from server */
-       if(pfindData == NULL) {
+       if (pfindData == NULL) {
                buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
-               if(buf == NULL)
+               if (buf == NULL)
                        return -ENOMEM;
                pfindData = (FILE_ALL_INFO *)buf;
                /* could do find first instead but this returns more info */
@@ -268,7 +268,7 @@
                           IndexNumber field is not guaranteed unique? */
 
 #ifdef CONFIG_CIFS_EXPERIMENTAL                
-                       if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM){
+                       if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM){
                                int rc1 = 0;
                                __u64 inode_num;
 
@@ -277,7 +277,7 @@
                                        cifs_sb->local_nls,
                                        cifs_sb->mnt_cifs_flags &
                                                CIFS_MOUNT_MAP_SPECIAL_CHR);
-                               if(rc1) {
+                               if (rc1) {
                                        cFYI(1,("GetSrvInodeNum rc %d", rc1));
                                        /* BB EOPNOSUPP disable SERVER_INUM? */
                                } else /* do we need cast or hash to ino? */
@@ -355,7 +355,7 @@
                if (S_ISREG(inode->i_mode)) {
                        cFYI(1, (" File inode "));
                        inode->i_op = &cifs_file_inode_ops;
-                       if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
+                       if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
                                inode->i_fop = &cifs_file_direct_ops;
                        else
                                inode->i_fop = &cifs_file_ops;
@@ -422,7 +422,7 @@
                        cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
 
        if (!rc) {
-               if(direntry->d_inode)
+               if (direntry->d_inode)
                        direntry->d_inode->i_nlink--;
        } else if (rc == -ENOENT) {
                d_drop(direntry);
@@ -441,7 +441,7 @@
                                              cifs_sb->mnt_cifs_flags & 
                                                CIFS_MOUNT_MAP_SPECIAL_CHR);
                        CIFSSMBClose(xid, pTcon, netfid);
-                       if(direntry->d_inode)
+                       if (direntry->d_inode)
                                direntry->d_inode->i_nlink--;
                }
        } else if (rc == -EACCES) {
@@ -496,7 +496,7 @@
                                            cifs_sb->mnt_cifs_flags & 
                                                CIFS_MOUNT_MAP_SPECIAL_CHR);
                        if (!rc) {
-                               if(direntry->d_inode)
+                               if (direntry->d_inode)
                                        direntry->d_inode->i_nlink--;
                        } else if (rc == -ETXTBSY) {
                                int oplock = FALSE;
@@ -517,14 +517,14 @@
                                                cifs_sb->mnt_cifs_flags &
                                                    CIFS_MOUNT_MAP_SPECIAL_CHR);
                                        CIFSSMBClose(xid, pTcon, netfid);
-                                       if(direntry->d_inode)
+                                       if (direntry->d_inode)
                                                direntry->d_inode->i_nlink--;
                                }
                        /* BB if rc = -ETXTBUSY goto the rename logic BB */
                        }
                }
        }
-       if(direntry->d_inode) {
+       if (direntry->d_inode) {
                cifsInode = CIFS_I(direntry->d_inode);
                cifsInode->time = 0;    /* will force revalidate to get info
                                           when needed */
@@ -582,7 +582,7 @@
                if (direntry->d_inode)
                        direntry->d_inode->i_nlink = 2;
                if (cifs_sb->tcon->ses->capabilities & CAP_UNIX)
-                       if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
+                       if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
                                CIFSSMBUnixSetPerms(xid, pTcon, full_path,
                                                    mode,
                                                    (__u64)current->euid,
diff -urN linux/fs/nfs/dir.c linux/fs/nfs/dir.c
--- linux/fs/nfs/dir.c  2005/04/08 18:58:35     1.78
+++ linux/fs/nfs/dir.c  2005/06/18 14:42:49     1.79
@@ -528,19 +528,39 @@
        dentry->d_time = jiffies;
 }
 
+/*
+ * Return the intent data that applies to this particular path component
+ *
+ * Note that the current set of intents only apply to the very last
+ * component of the path.
+ * We check for this using LOOKUP_CONTINUE and LOOKUP_PARENT.
+ */
+static inline unsigned int nfs_lookup_check_intent(struct nameidata *nd, 
unsigned int mask)
+{
+       if (nd->flags & (LOOKUP_CONTINUE|LOOKUP_PARENT))
+               return 0;
+       return nd->flags & mask;
+}
+
+/*
+ * Inode and filehandle revalidation for lookups.
+ *
+ * We force revalidation in the cases where the VFS sets LOOKUP_REVAL,
+ * or if the intent information indicates that we're about to open this
+ * particular file and the "nocto" mount flag is not set.
+ *
+ */
 static inline
 int nfs_lookup_verify_inode(struct inode *inode, struct nameidata *nd)
 {
        struct nfs_server *server = NFS_SERVER(inode);
 
        if (nd != NULL) {
-               int ndflags = nd->flags;
                /* VFS wants an on-the-wire revalidation */
-               if (ndflags & LOOKUP_REVAL)
+               if (nd->flags & LOOKUP_REVAL)
                        goto out_force;
                /* This is an open(2) */
-               if ((ndflags & LOOKUP_OPEN) &&
-                               !(ndflags & LOOKUP_CONTINUE) &&
+               if (nfs_lookup_check_intent(nd, LOOKUP_OPEN) != 0 &&
                                !(server->flags & NFS_MOUNT_NOCTO))
                        goto out_force;
        }
@@ -560,12 +580,8 @@
 int nfs_neg_need_reval(struct inode *dir, struct dentry *dentry,
                       struct nameidata *nd)
 {
-       int ndflags = 0;
-
-       if (nd)
-               ndflags = nd->flags;
        /* Don't revalidate a negative dentry if we're creating a new file */
-       if ((ndflags & LOOKUP_CREATE) && !(ndflags & LOOKUP_CONTINUE))
+       if (nd != NULL && nfs_lookup_check_intent(nd, LOOKUP_CREATE) != 0)
                return 0;
        return !nfs_check_verifier(dir, dentry);
 }
@@ -700,12 +716,16 @@
        .d_iput         = nfs_dentry_iput,
 };
 
+/*
+ * Use intent information to check whether or not we're going to do
+ * an O_EXCL create using this path component.
+ */
 static inline
 int nfs_is_exclusive_create(struct inode *dir, struct nameidata *nd)
 {
        if (NFS_PROTO(dir)->version == 2)
                return 0;
-       if (!nd || (nd->flags & LOOKUP_CONTINUE) || !(nd->flags & 
LOOKUP_CREATE))
+       if (nd == NULL || nfs_lookup_check_intent(nd, LOOKUP_CREATE) == 0)
                return 0;
        return (nd->intent.open.flags & O_EXCL) != 0;
 }
@@ -772,12 +792,13 @@
        .d_iput         = nfs_dentry_iput,
 };
 
+/*
+ * Use intent information to determine whether we need to substitute
+ * the NFSv4-style stateful OPEN for the LOOKUP call
+ */
 static int is_atomic_open(struct inode *dir, struct nameidata *nd)
 {
-       if (!nd)
-               return 0;
-       /* Check that we are indeed trying to open this file */
-       if ((nd->flags & LOOKUP_CONTINUE) || !(nd->flags & LOOKUP_OPEN))
+       if (nd == NULL || nfs_lookup_check_intent(nd, LOOKUP_OPEN) == 0)
                return 0;
        /* NFS does not (yet) have a stateful open for directories */
        if (nd->flags & LOOKUP_DIRECTORY)
diff -urN linux/fs/nfs/file.c linux/fs/nfs/file.c
--- linux/fs/nfs/file.c 2005/03/18 17:38:03     1.65
+++ linux/fs/nfs/file.c 2005/06/18 14:42:49     1.66
@@ -37,6 +37,7 @@
 
 static int nfs_file_open(struct inode *, struct file *);
 static int nfs_file_release(struct inode *, struct file *);
+static loff_t nfs_file_llseek(struct file *file, loff_t offset, int origin);
 static int  nfs_file_mmap(struct file *, struct vm_area_struct *);
 static ssize_t nfs_file_sendfile(struct file *, loff_t *, size_t, 
read_actor_t, void *);
 static ssize_t nfs_file_read(struct kiocb *, char __user *, size_t, loff_t);
@@ -48,7 +49,7 @@
 static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl);
 
 struct file_operations nfs_file_operations = {
-       .llseek         = remote_llseek,
+       .llseek         = nfs_file_llseek,
        .read           = do_sync_read,
        .write          = do_sync_write,
        .aio_read               = nfs_file_read,
@@ -114,6 +115,45 @@
        return NFS_PROTO(inode)->file_release(inode, filp);
 }
 
+/**
+ * nfs_revalidate_size - Revalidate the file size
+ * @inode - pointer to inode struct
+ * @file - pointer to struct file
+ *
+ * Revalidates the file length. This is basically a wrapper around
+ * nfs_revalidate_inode() that takes into account the fact that we may
+ * have cached writes (in which case we don't care about the server's
+ * idea of what the file length is), or O_DIRECT (in which case we
+ * shouldn't trust the cache).
+ */
+static int nfs_revalidate_file_size(struct inode *inode, struct file *filp)
+{
+       struct nfs_server *server = NFS_SERVER(inode);
+       struct nfs_inode *nfsi = NFS_I(inode);
+
+       if (server->flags & NFS_MOUNT_NOAC)
+               goto force_reval;
+       if (filp->f_flags & O_DIRECT)
+               goto force_reval;
+       if (nfsi->npages != 0)
+               return 0;
+       return nfs_revalidate_inode(server, inode);
+force_reval:
+       return __nfs_revalidate_inode(server, inode);
+}
+
+static loff_t nfs_file_llseek(struct file *filp, loff_t offset, int origin)
+{
+       /* origin == SEEK_END => we must revalidate the cached file length */
+       if (origin == 2) {
+               struct inode *inode = filp->f_mapping->host;
+               int retval = nfs_revalidate_file_size(inode, filp);
+               if (retval < 0)
+                       return (loff_t)retval;
+       }
+       return remote_llseek(filp, offset, origin);
+}
+
 /*
  * Flush all dirty pages, and check for write errors.
  *
diff -urN linux/include/asm-alpha/agp.h linux/include/asm-alpha/agp.h
--- linux/include/asm-alpha/agp.h       2003/06/03 17:04:14     1.2
+++ linux/include/asm-alpha/agp.h       2005/06/18 14:42:49     1.3
@@ -10,4 +10,14 @@
 #define flush_agp_mappings() 
 #define flush_agp_cache() mb()
 
+/* Convert a physical address to an address suitable for the GART. */
+#define phys_to_gart(x) (x)
+#define gart_to_phys(x) (x)
+
+/* GATT allocation. Returns/accepts GATT kernel virtual address. */
+#define alloc_gatt_pages(order)                \
+       ((char *)__get_free_pages(GFP_KERNEL, (order)))
+#define free_gatt_pages(table, order)  \
+       free_pages((unsigned long)(table), (order))
+
 #endif
diff -urN linux/include/asm-arm/elf.h linux/include/asm-arm/elf.h
--- linux/include/asm-arm/elf.h 2005/02/07 02:54:57     1.15
+++ linux/include/asm-arm/elf.h 2005/06/18 14:42:49     1.16
@@ -38,9 +38,9 @@
  */
 #define ELF_CLASS      ELFCLASS32
 #ifdef __ARMEB__
-#define ELF_DATA       ELFDATA2MSB;
+#define ELF_DATA       ELFDATA2MSB
 #else
-#define ELF_DATA       ELFDATA2LSB;
+#define ELF_DATA       ELFDATA2LSB
 #endif
 #define ELF_ARCH       EM_ARM
 
diff -urN linux/include/asm-arm/arch-integrator/platform.h 
linux/include/asm-arm/arch-integrator/platform.h
--- linux/include/asm-arm/arch-integrator/platform.h    2005/05/19 12:08:39     
1.6
+++ linux/include/asm-arm/arch-integrator/platform.h    2005/06/18 14:42:49     
1.7
@@ -293,7 +293,11 @@
 #define INTEGRATOR_DBG_SWITCH           (INTEGRATOR_DBG_BASE + 
INTEGRATOR_DBG_SWITCH_OFFSET)
 
 
+#if defined(CONFIG_ARCH_INTEGRATOR_AP)
 #define INTEGRATOR_GPIO_BASE            0x1B000000      /*  GPIO */
+#elif defined(CONFIG_ARCH_INTEGRATOR_CP)
+#define INTEGRATOR_GPIO_BASE            0xC9000000      /*  GPIO */
+#endif
 
 /* ------------------------------------------------------------------------
  *  KMI keyboard/mouse definitions
diff -urN linux/include/asm-arm/arch-ixp2000/io.h 
linux/include/asm-arm/arch-ixp2000/io.h
--- linux/include/asm-arm/arch-ixp2000/io.h     2005/04/08 18:58:39     1.6
+++ linux/include/asm-arm/arch-ixp2000/io.h     2005/06/18 14:42:50     1.7
@@ -75,8 +75,8 @@
         * Is this cycle meant for the CS8900?
         */
        if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && 
-               ((port >= IXDP2X01_CS8900_VIRT_BASE) && 
-                (port <= IXDP2X01_CS8900_VIRT_END))) {
+               (((u32)port >= (u32)IXDP2X01_CS8900_VIRT_BASE) &&
+                ((u32)port <= (u32)IXDP2X01_CS8900_VIRT_END))) {
                u8 *buf8 = (u8*)buf;
                register u32 tmp32;
 
@@ -100,8 +100,8 @@
         * Is this cycle meant for the CS8900?
         */
        if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && 
-               ((port >= IXDP2X01_CS8900_VIRT_BASE) && 
-                (port <= IXDP2X01_CS8900_VIRT_END))) {
+               (((u32)port >= (u32)IXDP2X01_CS8900_VIRT_BASE) &&
+                ((u32)port <= (u32)IXDP2X01_CS8900_VIRT_END))) {
                register u32 tmp32;
                u8 *buf8 = (u8*)buf;
                do {
@@ -124,8 +124,8 @@
         * Is this cycle meant for the CS8900?
         */
        if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && 
-               ((port >= IXDP2X01_CS8900_VIRT_BASE) && 
-                (port <= IXDP2X01_CS8900_VIRT_END))) {
+               (((u32)port >= (u32)IXDP2X01_CS8900_VIRT_BASE) &&
+                ((u32)port <= (u32)IXDP2X01_CS8900_VIRT_END))) {
                return (u16)(*port);  
        }
 
@@ -137,8 +137,8 @@
        register volatile u32 *port = (volatile u32 *)ptr;
 
        if ((machine_is_ixdp2401() || machine_is_ixdp2801()) && 
-               ((port >= IXDP2X01_CS8900_VIRT_BASE) && 
-                (port <= IXDP2X01_CS8900_VIRT_END))) {
+               (((u32)port >= (u32)IXDP2X01_CS8900_VIRT_BASE) &&
+                ((u32)port <= (u32)IXDP2X01_CS8900_VIRT_END))) {
                *port = value;  
                return;
        }
diff -urN linux/include/asm-arm/arch-pxa/pxa-regs.h 
linux/include/asm-arm/arch-pxa/pxa-regs.h
--- linux/include/asm-arm/arch-pxa/pxa-regs.h   2005/02/13 20:16:29     1.18
+++ linux/include/asm-arm/arch-pxa/pxa-regs.h   2005/06/18 14:42:50     1.19
@@ -1296,6 +1296,7 @@
 #define GPIO111_MMCDAT3                111     /* MMC DAT3 (PXA27x) */
 #define GPIO111_MMCCS1         111     /* MMC Chip Select 1 (PXA27x) */
 #define GPIO112_MMCCMD         112     /* MMC CMD (PXA27x) */
+#define GPIO113_I2S_SYSCLK     113     /* I2S System Clock (PXA27x) */
 #define GPIO113_AC97_RESET_N   113     /* AC97 NRESET on (PXA27x) */
 
 /* GPIO alternate function mode & direction */
@@ -1428,6 +1429,7 @@
 #define GPIO111_MMCDAT3_MD     (111 | GPIO_ALT_FN_1_OUT)
 #define GPIO110_MMCCS1_MD      (111 | GPIO_ALT_FN_1_OUT)
 #define GPIO112_MMCCMD_MD      (112 | GPIO_ALT_FN_1_OUT)
+#define GPIO113_I2S_SYSCLK_MD  (113 | GPIO_ALT_FN_1_OUT)
 #define GPIO113_AC97_RESET_N_MD        (113 | GPIO_ALT_FN_2_OUT)
 #define GPIO117_I2CSCL_MD      (117 | GPIO_ALT_FN_1_OUT)
 #define GPIO118_I2CSDA_MD      (118 | GPIO_ALT_FN_1_IN)
diff -urN linux/include/asm-arm/arch-versatile/platform.h 
linux/include/asm-arm/arch-versatile/platform.h
--- linux/include/asm-arm/arch-versatile/platform.h     2004/12/27 02:16:04     
1.3
+++ linux/include/asm-arm/arch-versatile/platform.h     2005/06/18 14:42:50     
1.4
@@ -498,11 +498,17 @@
 /*
  * IB2 Versatile/AB expansion board definitions
  */
-#define VERSATILE_IB2_CAMERA_BANK      0x24000000
-#define VERSATILE_IB2_KBD_DATAREG      0x25000000
-#define VERSATILE_IB2_IER              0x26000000      /* for VICINTSOURCE27 */
-#define VERSATILE_IB2_CTRL             0x27000000
-#define VERSATILE_IB2_STAT             0x27000004
+#define VERSATILE_IB2_CAMERA_BANK      VERSATILE_IB2_BASE
+#define VERSATILE_IB2_KBD_DATAREG      (VERSATILE_IB2_BASE + 0x01000000)
+
+/* VICINTSOURCE27 */
+#define VERSATILE_IB2_INT_BASE         (VERSATILE_IB2_BASE + 0x02000000)
+#define VERSATILE_IB2_IER              (VERSATILE_IB2_INT_BASE + 0)
+#define VERSATILE_IB2_ISR              (VERSATILE_IB2_INT_BASE + 4)
+
+#define VERSATILE_IB2_CTL_BASE         (VERSATILE_IB2_BASE + 0x03000000)
+#define VERSATILE_IB2_CTRL             (VERSATILE_IB2_CTL_BASE + 0)
+#define VERSATILE_IB2_STAT             (VERSATILE_IB2_CTL_BASE + 4)
 #endif
 
 #endif
diff -urN linux/include/asm-arm26/elf.h linux/include/asm-arm26/elf.h
--- linux/include/asm-arm26/elf.h       2003/06/22 23:09:58     1.1
+++ linux/include/asm-arm26/elf.h       2005/06/18 14:42:50     1.2
@@ -36,7 +36,7 @@
  * These are used to set parameters in the core dumps.
  */
 #define ELF_CLASS      ELFCLASS32
-#define ELF_DATA       ELFDATA2LSB;
+#define ELF_DATA       ELFDATA2LSB
 #define ELF_ARCH       EM_ARM
 
 #define USE_ELF_CORE_DUMP
diff -urN linux/include/asm-arm26/signal.h linux/include/asm-arm26/signal.h
--- linux/include/asm-arm26/signal.h    2005/05/19 12:08:40     1.3
+++ linux/include/asm-arm26/signal.h    2005/06/18 14:42:50     1.4
@@ -166,9 +166,6 @@
 #include <asm/sigcontext.h>
 
 #define sigmask(sig)   (1UL << ((sig) - 1))
-//FIXME!!!
-//#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
-
 #endif
 
 
diff -urN linux/include/asm-h8300/kmap_types.h 
linux/include/asm-h8300/kmap_types.h
--- linux/include/asm-h8300/kmap_types.h        2003/06/05 14:43:36     1.1
+++ linux/include/asm-h8300/kmap_types.h        2005/06/18 14:42:50     1.2
@@ -1,5 +1,5 @@
-#ifndef _ASM_KMAP_TYPES_H
-#define _ASM_KMAP_TYPES_H
+#ifndef _ASM_H8300_KMAP_TYPES_H
+#define _ASM_H8300_KMAP_TYPES_H
 
 enum km_type {
        KM_BOUNCE_READ,
@@ -13,6 +13,8 @@
        KM_PTE1,
        KM_IRQ0,
        KM_IRQ1,
+       KM_SOFTIRQ0,
+       KM_SOFTIRQ1,
        KM_TYPE_NR
 };
 
diff -urN linux/include/asm-h8300/mman.h linux/include/asm-h8300/mman.h
--- linux/include/asm-h8300/mman.h      2003/09/30 14:27:29     1.2
+++ linux/include/asm-h8300/mman.h      2005/06/18 14:42:50     1.3
@@ -4,6 +4,7 @@
 #define PROT_READ      0x1             /* page can be read */
 #define PROT_WRITE     0x2             /* page can be written */
 #define PROT_EXEC      0x4             /* page can be executed */
+#define PROT_SEM       0x8             /* page may be used for atomic ops */
 #define PROT_NONE      0x0             /* page can not be accessed */
 #define PROT_GROWSDOWN 0x01000000      /* mprotect flag: extend change to 
start of growsdown vma */
 #define PROT_GROWSUP   0x02000000      /* mprotect flag: extend change to end 
of growsup vma */
@@ -19,6 +20,8 @@
 #define MAP_EXECUTABLE 0x1000          /* mark it as an executable */
 #define MAP_LOCKED     0x2000          /* pages are locked */
 #define MAP_NORESERVE  0x4000          /* don't check for reservations */
+#define MAP_POPULATE   0x8000          /* populate (prefault) pagetables */
+#define MAP_NONBLOCK   0x10000         /* do not block on IO */
 
 #define MS_ASYNC       1               /* sync memory asynchronously */
 #define MS_INVALIDATE  2               /* invalidate the caches */
diff -urN linux/include/asm-i386/agp.h linux/include/asm-i386/agp.h
--- linux/include/asm-i386/agp.h        2005/01/13 14:06:46     1.3
+++ linux/include/asm-i386/agp.h        2005/06/18 14:42:50     1.4
@@ -21,4 +21,14 @@
    worth it. Would need a page for it. */
 #define flush_agp_cache() asm volatile("wbinvd":::"memory")
 
+/* Convert a physical address to an address suitable for the GART. */
+#define phys_to_gart(x) (x)
+#define gart_to_phys(x) (x)
+
+/* GATT allocation. Returns/accepts GATT kernel virtual address. */
+#define alloc_gatt_pages(order)                \
+       ((char *)__get_free_pages(GFP_KERNEL, (order)))
+#define free_gatt_pages(table, order)  \
+       free_pages((unsigned long)(table), (order))
+
 #endif
diff -urN linux/include/asm-i386/mach-numaq/mach_ipi.h 
linux/include/asm-i386/mach-numaq/mach_ipi.h
--- linux/include/asm-i386/mach-numaq/mach_ipi.h        2004/08/24 15:10:15     
1.3
+++ linux/include/asm-i386/mach-numaq/mach_ipi.h        2005/06/18 14:42:50     
1.4
@@ -1,7 +1,7 @@
 #ifndef __ASM_MACH_IPI_H
 #define __ASM_MACH_IPI_H
 
-inline void send_IPI_mask_sequence(cpumask_t, int vector);
+void send_IPI_mask_sequence(cpumask_t, int vector);
 
 static inline void send_IPI_mask(cpumask_t mask, int vector)
 {
diff -urN linux/include/asm-ia64/agp.h linux/include/asm-ia64/agp.h
--- linux/include/asm-ia64/agp.h        2003/07/03 03:41:12     1.4
+++ linux/include/asm-ia64/agp.h        2005/06/18 14:42:50     1.5
@@ -18,4 +18,14 @@
 #define flush_agp_mappings()           /* nothing */
 #define flush_agp_cache()              mb()
 
+/* Convert a physical address to an address suitable for the GART. */
+#define phys_to_gart(x) (x)
+#define gart_to_phys(x) (x)
+
+/* GATT allocation. Returns/accepts GATT kernel virtual address. */
+#define alloc_gatt_pages(order)                \
+       ((char *)__get_free_pages(GFP_KERNEL, (order)))
+#define free_gatt_pages(table, order)  \
+       free_pages((unsigned long)(table), (order))
+
 #endif /* _ASM_IA64_AGP_H */
diff -urN linux/include/asm-ia64/pgtable.h linux/include/asm-ia64/pgtable.h
--- linux/include/asm-ia64/pgtable.h    2005/04/29 11:15:19     1.47
+++ linux/include/asm-ia64/pgtable.h    2005/06/18 14:42:50     1.48
@@ -8,7 +8,7 @@
  * This hopefully works with any (fixed) IA-64 page-size, as defined
  * in <asm/page.h>.
  *
- * Copyright (C) 1998-2004 Hewlett-Packard Co
+ * Copyright (C) 1998-2005 Hewlett-Packard Co
  *     David Mosberger-Tang <davidm@hpl.hp.com>
  */
 
@@ -551,7 +551,11 @@
 
 /* These tell get_user_pages() that the first gate page is accessible from 
user-level.  */
 #define FIXADDR_USER_START     GATE_ADDR
-#define FIXADDR_USER_END       (GATE_ADDR + 2*PERCPU_PAGE_SIZE)
+#ifdef HAVE_BUGGY_SEGREL
+# define FIXADDR_USER_END      (GATE_ADDR + 2*PAGE_SIZE)
+#else
+# define FIXADDR_USER_END      (GATE_ADDR + 2*PERCPU_PAGE_SIZE)
+#endif
 
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
diff -urN linux/include/asm-ia64/processor.h linux/include/asm-ia64/processor.h
--- linux/include/asm-ia64/processor.h  2005/05/19 12:08:41     1.54
+++ linux/include/asm-ia64/processor.h  2005/06/18 14:42:50     1.55
@@ -403,7 +403,10 @@
  * task_struct at this point.
  */
 
-/* Return TRUE if task T owns the fph partition of the CPU we're running on. */
+/*
+ * Return TRUE if task T owns the fph partition of the CPU we're running on.
+ * Must be called from code that has preemption disabled.
+ */
 #define ia64_is_local_fpu_owner(t)                                             
                \
 ({                                                                             
                \
        struct task_struct *__ia64_islfo_task = (t);                            
                \
@@ -411,7 +414,10 @@
         && __ia64_islfo_task == (struct task_struct *) 
ia64_get_kr(IA64_KR_FPU_OWNER));        \
 })
 
-/* Mark task T as owning the fph partition of the CPU we're running on. */
+/*
+ * Mark task T as owning the fph partition of the CPU we're running on.
+ * Must be called from code that has preemption disabled.
+ */
 #define ia64_set_local_fpu_owner(t) do {                                       
        \
        struct task_struct *__ia64_slfo_task = (t);                             
        \
        __ia64_slfo_task->thread.last_fph_cpu = smp_processor_id();             
        \
diff -urN linux/include/asm-ppc/agp.h linux/include/asm-ppc/agp.h
--- linux/include/asm-ppc/agp.h 2003/09/30 14:27:29     1.2
+++ linux/include/asm-ppc/agp.h 2005/06/18 14:42:50     1.3
@@ -10,4 +10,14 @@
 #define flush_agp_mappings()
 #define flush_agp_cache() mb()
 
+/* Convert a physical address to an address suitable for the GART. */
+#define phys_to_gart(x) (x)
+#define gart_to_phys(x) (x)
+
+/* GATT allocation. Returns/accepts GATT kernel virtual address. */
+#define alloc_gatt_pages(order)                \
+       ((char *)__get_free_pages(GFP_KERNEL, (order)))
+#define free_gatt_pages(table, order)  \
+       free_pages((unsigned long)(table), (order))
+
 #endif
diff -urN linux/include/asm-ppc/sigcontext.h linux/include/asm-ppc/sigcontext.h
--- linux/include/asm-ppc/sigcontext.h  2005/05/19 12:08:43     1.5
+++ linux/include/asm-ppc/sigcontext.h  2005/06/18 14:42:50     1.6
@@ -2,7 +2,7 @@
 #define _ASM_PPC_SIGCONTEXT_H
 
 #include <asm/ptrace.h>
-
+#include <linux/compiler.h>
 
 struct sigcontext {
        unsigned long   _unused[4];
diff -urN linux/include/asm-ppc64/agp.h linux/include/asm-ppc64/agp.h
--- linux/include/asm-ppc64/agp.h       2005/03/18 17:38:10     1.1
+++ linux/include/asm-ppc64/agp.h       2005/06/18 14:42:50     1.2
@@ -10,4 +10,14 @@
 #define flush_agp_mappings()
 #define flush_agp_cache() mb()
 
+/* Convert a physical address to an address suitable for the GART. */
+#define phys_to_gart(x) (x)
+#define gart_to_phys(x) (x)
+
+/* GATT allocation. Returns/accepts GATT kernel virtual address. */
+#define alloc_gatt_pages(order)                \
+       ((char *)__get_free_pages(GFP_KERNEL, (order)))
+#define free_gatt_pages(table, order)  \
+       free_pages((unsigned long)(table), (order))
+
 #endif
diff -urN linux/include/asm-ppc64/elf.h linux/include/asm-ppc64/elf.h
--- linux/include/asm-ppc64/elf.h       2005/05/19 12:08:43     1.14
+++ linux/include/asm-ppc64/elf.h       2005/06/18 14:42:50     1.15
@@ -221,9 +221,7 @@
                set_thread_flag(TIF_ABI_PENDING);               \
        else                                                    \
                clear_thread_flag(TIF_ABI_PENDING);             \
-       if (ibcs2)                                              \
-               set_personality(PER_SVR4);                      \
-       else if (current->personality != PER_LINUX32)           \
+       if (personality(current->personality) != PER_LINUX32)   \
                set_personality(PER_LINUX);                     \
 } while (0)
 
diff -urN linux/include/asm-sparc/uaccess.h linux/include/asm-sparc/uaccess.h
--- linux/include/asm-sparc/uaccess.h   2005/05/19 12:08:44     1.22
+++ linux/include/asm-sparc/uaccess.h   2005/06/18 14:42:50     1.23
@@ -41,10 +41,11 @@
  * No one can read/write anything from userland in the kernel space by setting
  * large size and address near to PAGE_OFFSET - a fault will break his 
intentions.
  */
-#define __user_ok(addr,size) ((addr) < STACK_TOP)
+#define __user_ok(addr, size) ({ (void)(size); (addr) < STACK_TOP; })
 #define __kernel_ok (segment_eq(get_fs(), KERNEL_DS))
 #define __access_ok(addr,size) (__user_ok((addr) & get_fs().seg,(size)))
-#define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size))
+#define access_ok(type, addr, size)                                    \
+       ({ (void)(type); __access_ok((unsigned long)(addr), size); })
 
 /* this function will go away soon - use access_ok() instead */
 static inline int __deprecated verify_area(int type, const void __user * addr, 
unsigned long size)
diff -urN linux/include/asm-sparc64/agp.h linux/include/asm-sparc64/agp.h
--- linux/include/asm-sparc64/agp.h     2002/10/29 04:20:08     1.1
+++ linux/include/asm-sparc64/agp.h     2005/06/18 14:42:50     1.2
@@ -8,4 +8,14 @@
 #define flush_agp_mappings() 
 #define flush_agp_cache() mb()
 
+/* Convert a physical address to an address suitable for the GART. */
+#define phys_to_gart(x) (x)
+#define gart_to_phys(x) (x)
+
+/* GATT allocation. Returns/accepts GATT kernel virtual address. */
+#define alloc_gatt_pages(order)                \
+       ((char *)__get_free_pages(GFP_KERNEL, (order)))
+#define free_gatt_pages(table, order)  \
+       free_pages((unsigned long)(table), (order))
+
 #endif
diff -urN linux/include/asm-x86_64/agp.h linux/include/asm-x86_64/agp.h
--- linux/include/asm-x86_64/agp.h      2005/01/13 14:06:52     1.3
+++ linux/include/asm-x86_64/agp.h      2005/06/18 14:42:51     1.4
@@ -19,4 +19,14 @@
    worth it. Would need a page for it. */
 #define flush_agp_cache() asm volatile("wbinvd":::"memory")
 
+/* Convert a physical address to an address suitable for the GART. */
+#define phys_to_gart(x) (x)
+#define gart_to_phys(x) (x)
+
+/* GATT allocation. Returns/accepts GATT kernel virtual address. */
+#define alloc_gatt_pages(order)                \
+       ((char *)__get_free_pages(GFP_KERNEL, (order)))
+#define free_gatt_pages(table, order)  \
+       free_pages((unsigned long)(table), (order))
+
 #endif
diff -urN linux/include/linux/acpi.h linux/include/linux/acpi.h
--- linux/include/linux/acpi.h  2005/06/07 13:45:41     1.47
+++ linux/include/linux/acpi.h  2005/06/18 14:42:51     1.48
@@ -25,6 +25,8 @@
 #ifndef _LINUX_ACPI_H
 #define _LINUX_ACPI_H
 
+#include <linux/config.h>
+
 #ifdef CONFIG_ACPI
 
 #ifndef _LINUX
diff -urN linux/include/linux/if_tr.h linux/include/linux/if_tr.h
--- linux/include/linux/if_tr.h 2005/06/07 13:45:41     1.6
+++ linux/include/linux/if_tr.h 2005/06/18 14:42:51     1.7
@@ -19,6 +19,8 @@
 #ifndef _LINUX_IF_TR_H
 #define _LINUX_IF_TR_H
 
+#include <asm/byteorder.h>     /* For __be16 */
+
 /* IEEE 802.5 Token-Ring magic constants.  The frame sizes omit the preamble
    and FCS/CRC (frame check sequence). */
 #define TR_ALEN                6               /* Octets in one token-ring 
addr */
diff -urN linux/include/linux/pci_ids.h linux/include/linux/pci_ids.h
--- linux/include/linux/pci_ids.h       2005/06/15 13:26:16     1.146
+++ linux/include/linux/pci_ids.h       2005/06/18 14:42:51     1.147
@@ -874,6 +874,7 @@
 #define PCI_DEVICE_ID_APPLE_KL_USB_P   0x0026
 #define PCI_DEVICE_ID_APPLE_UNI_N_AGP_P        0x0027
 #define PCI_DEVICE_ID_APPLE_UNI_N_AGP15        0x002d
+#define PCI_DEVICE_ID_APPLE_UNI_N_PCI15        0x002e
 #define PCI_DEVICE_ID_APPLE_UNI_N_FW2  0x0030
 #define PCI_DEVICE_ID_APPLE_UNI_N_GMAC2        0x0032
 #define PCI_DEVIEC_ID_APPLE_UNI_N_ATA  0x0033
@@ -2385,6 +2386,8 @@
 #define PCI_DEVICE_ID_INTEL_82915G_IG  0x2582
 #define PCI_DEVICE_ID_INTEL_82915GM_HB 0x2590
 #define PCI_DEVICE_ID_INTEL_82915GM_IG 0x2592
+#define PCI_DEVICE_ID_INTEL_82945G_HB  0x2770
+#define PCI_DEVICE_ID_INTEL_82945G_IG  0x2772
 #define PCI_DEVICE_ID_INTEL_ICH6_0     0x2640
 #define PCI_DEVICE_ID_INTEL_ICH6_1     0x2641
 #define PCI_DEVICE_ID_INTEL_ICH6_2     0x2642
diff -urN linux/include/linux/signal.h linux/include/linux/signal.h
--- linux/include/linux/signal.h        2005/05/19 12:08:45     1.23
+++ linux/include/linux/signal.h        2005/06/18 14:42:51     1.24
@@ -231,10 +231,8 @@
 extern long do_sigpending(void __user *, unsigned long);
 extern int sigprocmask(int, sigset_t *, sigset_t *);
 
-#ifndef HAVE_ARCH_GET_SIGNAL_TO_DELIVER
 struct pt_regs;
 extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction 
*return_ka, struct pt_regs *regs, void *cookie);
-#endif
 
 #endif /* __KERNEL__ */
 
diff -urN linux/include/linux/sysctl.h linux/include/linux/sysctl.h
--- linux/include/linux/sysctl.h        2005/06/07 13:45:41     1.97
+++ linux/include/linux/sysctl.h        2005/06/18 14:42:51     1.98
@@ -346,6 +346,7 @@
        NET_TCP_MODERATE_RCVBUF=106,
        NET_TCP_TSO_WIN_DIVISOR=107,
        NET_TCP_BIC_BETA=108,
+       NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109,
 };
 
 enum {
diff -urN linux/include/linux/tc_ematch/tc_em_meta.h 
linux/include/linux/tc_ematch/tc_em_meta.h
--- linux/include/linux/tc_ematch/tc_em_meta.h  2005/03/18 17:38:17     1.1
+++ linux/include/linux/tc_ematch/tc_em_meta.h  2005/06/18 14:42:51     1.2
@@ -56,6 +56,36 @@
        TCF_META_ID_TCCLASSID,
        TCF_META_ID_RTCLASSID,
        TCF_META_ID_RTIIF,
+       TCF_META_ID_SK_FAMILY,
+       TCF_META_ID_SK_STATE,
+       TCF_META_ID_SK_REUSE,
+       TCF_META_ID_SK_BOUND_IF,
+       TCF_META_ID_SK_REFCNT,
+       TCF_META_ID_SK_SHUTDOWN,
+       TCF_META_ID_SK_PROTO,
+       TCF_META_ID_SK_TYPE,
+       TCF_META_ID_SK_RCVBUF,
+       TCF_META_ID_SK_RMEM_ALLOC,
+       TCF_META_ID_SK_WMEM_ALLOC,
+       TCF_META_ID_SK_OMEM_ALLOC,
+       TCF_META_ID_SK_WMEM_QUEUED,
+       TCF_META_ID_SK_RCV_QLEN,
+       TCF_META_ID_SK_SND_QLEN,
+       TCF_META_ID_SK_ERR_QLEN,
+       TCF_META_ID_SK_FORWARD_ALLOCS,
+       TCF_META_ID_SK_SNDBUF,
+       TCF_META_ID_SK_ALLOCS,
+       TCF_META_ID_SK_ROUTE_CAPS,
+       TCF_META_ID_SK_HASHENT,
+       TCF_META_ID_SK_LINGERTIME,
+       TCF_META_ID_SK_ACK_BACKLOG,
+       TCF_META_ID_SK_MAX_ACK_BACKLOG,
+       TCF_META_ID_SK_PRIO,
+       TCF_META_ID_SK_RCVLOWAT,
+       TCF_META_ID_SK_RCVTIMEO,
+       TCF_META_ID_SK_SNDTIMEO,
+       TCF_META_ID_SK_SENDMSG_OFF,
+       TCF_META_ID_SK_WRITE_PENDING,
        __TCF_META_ID_MAX
 };
 #define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1)
diff -urN linux/include/net/ip.h linux/include/net/ip.h
--- linux/include/net/ip.h      2005/05/19 12:08:46     1.45
+++ linux/include/net/ip.h      2005/06/18 14:42:51     1.46
@@ -163,6 +163,7 @@
 
 extern int sysctl_local_port_range[2];
 extern int sysctl_ip_default_ttl;
+extern int sysctl_ip_nonlocal_bind;
 
 #ifdef CONFIG_INET
 /* The function in 2.2 was invalid, producing wrong result for
diff -urN linux/kernel/exit.c linux/kernel/exit.c
--- linux/kernel/exit.c 2005/05/19 12:08:47     1.121
+++ linux/kernel/exit.c 2005/06/18 14:42:51     1.122
@@ -811,10 +811,8 @@
        acct_update_integrals(tsk);
        update_mem_hiwater(tsk);
        group_dead = atomic_dec_and_test(&tsk->signal->live);
-       if (group_dead) {
-               del_timer_sync(&tsk->signal->real_timer);
+       if (group_dead)
                acct_process(code);
-       }
        exit_mm(tsk);
 
        exit_sem(tsk);
diff -urN linux/kernel/posix-timers.c linux/kernel/posix-timers.c
--- linux/kernel/posix-timers.c 2005/04/08 18:58:47     1.29
+++ linux/kernel/posix-timers.c 2005/06/18 14:42:51     1.30
@@ -1197,6 +1197,7 @@
                tmr = list_entry(sig->posix_timers.next, struct k_itimer, list);
                itimer_delete(tmr);
        }
+       del_timer_sync(&sig->real_timer);
 }
 
 /*
diff -urN linux/kernel/sched.c linux/kernel/sched.c
--- linux/kernel/sched.c        2005/05/26 09:12:48     1.161
+++ linux/kernel/sched.c        2005/06/18 14:42:51     1.162
@@ -3755,19 +3755,22 @@
  */
 int cond_resched_lock(spinlock_t * lock)
 {
+       int ret = 0;
+
        if (need_lockbreak(lock)) {
                spin_unlock(lock);
                cpu_relax();
+               ret = 1;
                spin_lock(lock);
        }
        if (need_resched()) {
                _raw_spin_unlock(lock);
                preempt_enable_no_resched();
                __cond_resched();
+               ret = 1;
                spin_lock(lock);
-               return 1;
        }
-       return 0;
+       return ret;
 }
 
 EXPORT_SYMBOL(cond_resched_lock);
diff -urN linux/mm/filemap.c linux/mm/filemap.c
--- linux/mm/filemap.c  2005/05/26 09:12:49     1.166
+++ linux/mm/filemap.c  2005/06/18 14:42:51     1.167
@@ -1968,6 +1968,7 @@
        do {
                unsigned long index;
                unsigned long offset;
+               unsigned long maxlen;
                size_t copied;
 
                offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */
@@ -1982,7 +1983,10 @@
                 * same page as we're writing to, without it being marked
                 * up-to-date.
                 */
-               fault_in_pages_readable(buf, bytes);
+               maxlen = cur_iov->iov_len - iov_base;
+               if (maxlen > bytes)
+                       maxlen = bytes;
+               fault_in_pages_readable(buf, maxlen);
 
                page = __grab_cache_page(mapping,index,&cached_page,&lru_pvec);
                if (!page) {
@@ -2024,6 +2028,8 @@
                                        filemap_set_next_iovec(&cur_iov,
                                                        &iov_base, status);
                                        buf = cur_iov->iov_base + iov_base;
+                               } else {
+                                       iov_base += status;
                                }
                        }
                }
diff -urN linux/net/core/dev.c linux/net/core/dev.c
--- linux/net/core/dev.c        2005/06/07 13:45:42     1.114
+++ linux/net/core/dev.c        2005/06/18 14:42:51     1.115
@@ -1744,6 +1744,7 @@
        struct softnet_data *queue = &__get_cpu_var(softnet_data);
        unsigned long start_time = jiffies;
 
+       backlog_dev->weight = weight_p;
        for (;;) {
                struct sk_buff *skb;
                struct net_device *dev;
diff -urN linux/net/core/ethtool.c linux/net/core/ethtool.c
--- linux/net/core/ethtool.c    2005/06/07 13:45:42     1.11
+++ linux/net/core/ethtool.c    2005/06/18 14:42:51     1.12
@@ -356,7 +356,7 @@
 {
        struct ethtool_coalesce coalesce;
 
-       if (!dev->ethtool_ops->get_coalesce)
+       if (!dev->ethtool_ops->set_coalesce)
                return -EOPNOTSUPP;
 
        if (copy_from_user(&coalesce, useraddr, sizeof(coalesce)))
diff -urN linux/net/core/net-sysfs.c linux/net/core/net-sysfs.c
--- linux/net/core/net-sysfs.c  2005/06/07 13:45:42     1.16
+++ linux/net/core/net-sysfs.c  2005/06/18 14:42:51     1.17
@@ -185,6 +185,22 @@
 static CLASS_DEVICE_ATTR(tx_queue_len, S_IRUGO | S_IWUSR, show_tx_queue_len, 
                         store_tx_queue_len);
 
+NETDEVICE_SHOW(weight, fmt_dec);
+
+static int change_weight(struct net_device *net, unsigned long new_weight)
+{
+       net->weight = new_weight;
+       return 0;
+}
+
+static ssize_t store_weight(struct class_device *dev, const char *buf, size_t 
len)
+{
+       return netdev_store(dev, buf, len, change_weight);
+}
+
+static CLASS_DEVICE_ATTR(weight, S_IRUGO | S_IWUSR, show_weight, 
+                        store_weight);
+
 
 static struct class_device_attribute *net_class_attributes[] = {
        &class_device_attr_ifindex,
@@ -194,6 +210,7 @@
        &class_device_attr_features,
        &class_device_attr_mtu,
        &class_device_attr_flags,
+       &class_device_attr_weight,
        &class_device_attr_type,
        &class_device_attr_address,
        &class_device_attr_broadcast,
diff -urN linux/net/ipv4/af_inet.c linux/net/ipv4/af_inet.c
--- linux/net/ipv4/af_inet.c    2005/05/19 12:08:50     1.86
+++ linux/net/ipv4/af_inet.c    2005/06/18 14:42:51     1.87
@@ -1181,6 +1181,7 @@
 EXPORT_SYMBOL(inet_stream_ops);
 EXPORT_SYMBOL(inet_unregister_protosw);
 EXPORT_SYMBOL(net_statistics);
+EXPORT_SYMBOL(sysctl_ip_nonlocal_bind);
 
 #ifdef INET_REFCNT_DEBUG
 EXPORT_SYMBOL(inet_sock_nr);
diff -urN linux/net/ipv4/icmp.c linux/net/ipv4/icmp.c
--- linux/net/ipv4/icmp.c       2005/03/18 17:38:24     1.60
+++ linux/net/ipv4/icmp.c       2005/06/18 14:42:51     1.61
@@ -207,6 +207,7 @@
 
 int sysctl_icmp_ratelimit = 1 * HZ;
 int sysctl_icmp_ratemask = 0x1818;
+int sysctl_icmp_errors_use_inbound_ifaddr;
 
 /*
  *     ICMP control array. This specifies what to do with each ICMP.
@@ -511,8 +512,12 @@
         */
 
        saddr = iph->daddr;
-       if (!(rt->rt_flags & RTCF_LOCAL))
-               saddr = 0;
+       if (!(rt->rt_flags & RTCF_LOCAL)) {
+               if (sysctl_icmp_errors_use_inbound_ifaddr)
+                       saddr = inet_select_addr(skb_in->dev, 0, RT_SCOPE_LINK);
+               else
+                       saddr = 0;
+       }
 
        tos = icmp_pointers[type].error ? ((iph->tos & IPTOS_TOS_MASK) |
                                           IPTOS_PREC_INTERNETCONTROL) :
diff -urN linux/net/ipv4/multipath_drr.c linux/net/ipv4/multipath_drr.c
--- linux/net/ipv4/multipath_drr.c      2005/06/07 13:45:42     1.2
+++ linux/net/ipv4/multipath_drr.c      2005/06/18 14:42:51     1.3
@@ -31,6 +31,7 @@
 #include <linux/igmp.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/module.h>
 #include <linux/mroute.h>
 #include <linux/init.h>
 #include <net/ip.h>
@@ -247,3 +248,4 @@
 
 module_init(drr_init);
 module_exit(drr_exit);
+MODULE_LICENSE("GPL");
diff -urN linux/net/ipv4/multipath_random.c linux/net/ipv4/multipath_random.c
--- linux/net/ipv4/multipath_random.c   2005/04/08 18:58:50     1.1
+++ linux/net/ipv4/multipath_random.c   2005/06/18 14:42:51     1.2
@@ -31,6 +31,7 @@
 #include <linux/igmp.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/module.h>
 #include <linux/mroute.h>
 #include <linux/init.h>
 #include <net/ip.h>
@@ -126,3 +127,4 @@
 
 module_init(random_init);
 module_exit(random_exit);
+MODULE_LICENSE("GPL");
diff -urN linux/net/ipv4/multipath_rr.c linux/net/ipv4/multipath_rr.c
--- linux/net/ipv4/multipath_rr.c       2005/06/07 13:45:42     1.2
+++ linux/net/ipv4/multipath_rr.c       2005/06/18 14:42:51     1.3
@@ -31,6 +31,7 @@
 #include <linux/igmp.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/module.h>
 #include <linux/mroute.h>
 #include <linux/init.h>
 #include <net/ip.h>
@@ -93,3 +94,4 @@
 
 module_init(rr_init);
 module_exit(rr_exit);
+MODULE_LICENSE("GPL");
diff -urN linux/net/ipv4/multipath_wrandom.c linux/net/ipv4/multipath_wrandom.c
--- linux/net/ipv4/multipath_wrandom.c  2005/05/19 12:08:50     1.2
+++ linux/net/ipv4/multipath_wrandom.c  2005/06/18 14:42:51     1.3
@@ -31,6 +31,7 @@
 #include <linux/igmp.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/module.h>
 #include <linux/mroute.h>
 #include <linux/init.h>
 #include <net/ip.h>
@@ -342,3 +343,4 @@
 
 module_init(wrandom_init);
 module_exit(wrandom_exit);
+MODULE_LICENSE("GPL");
diff -urN linux/net/ipv4/sysctl_net_ipv4.c linux/net/ipv4/sysctl_net_ipv4.c
--- linux/net/ipv4/sysctl_net_ipv4.c    2005/02/28 15:45:19     1.42
+++ linux/net/ipv4/sysctl_net_ipv4.c    2005/06/18 14:42:51     1.43
@@ -23,6 +23,7 @@
 extern int sysctl_icmp_echo_ignore_all;
 extern int sysctl_icmp_echo_ignore_broadcasts;
 extern int sysctl_icmp_ignore_bogus_error_responses;
+extern int sysctl_icmp_errors_use_inbound_ifaddr;
 
 /* From ip_fragment.c */
 extern int sysctl_ipfrag_low_thresh;
@@ -396,6 +397,14 @@
                .proc_handler   = &proc_dointvec
        },
        {
+               .ctl_name       = NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,
+               .procname       = "icmp_errors_use_inbound_ifaddr",
+               .data           = &sysctl_icmp_errors_use_inbound_ifaddr,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = &proc_dointvec
+       },
+       {
                .ctl_name       = NET_IPV4_ROUTE,
                .procname       = "route",
                .maxlen         = 0,
diff -urN linux/net/ipv4/tcp.c linux/net/ipv4/tcp.c
--- linux/net/ipv4/tcp.c        2005/05/19 12:08:50     1.92
+++ linux/net/ipv4/tcp.c        2005/06/18 14:42:51     1.93
@@ -2338,7 +2338,7 @@
                        (tcp_bhash_size * sizeof(struct tcp_bind_hashbucket));
                        order++)
                ;
-       if (order > 4) {
+       if (order >= 4) {
                sysctl_local_port_range[0] = 32768;
                sysctl_local_port_range[1] = 61000;
                sysctl_tcp_max_tw_buckets = 180000;
diff -urN linux/net/ipv4/netfilter/ip_conntrack_standalone.c 
linux/net/ipv4/netfilter/ip_conntrack_standalone.c
--- linux/net/ipv4/netfilter/ip_conntrack_standalone.c  2005/05/19 12:08:51     
1.40
+++ linux/net/ipv4/netfilter/ip_conntrack_standalone.c  2005/06/18 14:42:52     
1.41
@@ -256,6 +256,7 @@
 {
        struct list_head *e = v;
 
+       ++*pos;
        e = e->next;
 
        if (e == &ip_conntrack_expect_list)
diff -urN linux/net/ipv4/netfilter/ipt_recent.c 
linux/net/ipv4/netfilter/ipt_recent.c
--- linux/net/ipv4/netfilter/ipt_recent.c       2005/01/25 04:29:05     1.7
+++ linux/net/ipv4/netfilter/ipt_recent.c       2005/06/18 14:42:52     1.8
@@ -223,7 +223,7 @@
                        curr_table->table[count].last_seen = 0;
                        curr_table->table[count].addr = 0;
                        curr_table->table[count].ttl = 0;
-                       
memset(curr_table->table[count].last_pkts,0,ip_pkt_list_tot*sizeof(u_int32_t));
+                       
memset(curr_table->table[count].last_pkts,0,ip_pkt_list_tot*sizeof(unsigned 
long));
                        curr_table->table[count].oldest_pkt = 0;
                        curr_table->table[count].time_pos = 0;
                        curr_table->time_info[count].position = count;
@@ -502,7 +502,7 @@
                location = time_info[curr_table->time_pos].position;
                hash_table[r_list[location].hash_entry] = -1;
                hash_table[hash_result] = location;
-               
memset(r_list[location].last_pkts,0,ip_pkt_list_tot*sizeof(u_int32_t));
+               
memset(r_list[location].last_pkts,0,ip_pkt_list_tot*sizeof(unsigned long));
                r_list[location].time_pos = curr_table->time_pos;
                r_list[location].addr = addr;
                r_list[location].ttl = ttl;
@@ -631,7 +631,7 @@
                        r_list[location].last_seen = 0;
                        r_list[location].addr = 0;
                        r_list[location].ttl = 0;
-                       
memset(r_list[location].last_pkts,0,ip_pkt_list_tot*sizeof(u_int32_t));
+                       
memset(r_list[location].last_pkts,0,ip_pkt_list_tot*sizeof(unsigned long));
                        r_list[location].oldest_pkt = 0;
                        ans = !info->invert;
                }
@@ -734,10 +734,10 @@
        memset(curr_table->table,0,sizeof(struct recent_ip_list)*ip_list_tot);
 #ifdef DEBUG
        if(debug) printk(KERN_INFO RECENT_NAME ": checkentry: Allocating %d for 
pkt_list.\n",
-                       sizeof(u_int32_t)*ip_pkt_list_tot*ip_list_tot);
+                       sizeof(unsigned long)*ip_pkt_list_tot*ip_list_tot);
 #endif
 
-       hold = vmalloc(sizeof(u_int32_t)*ip_pkt_list_tot*ip_list_tot);
+       hold = vmalloc(sizeof(unsigned long)*ip_pkt_list_tot*ip_list_tot);
 #ifdef DEBUG
        if(debug) printk(KERN_INFO RECENT_NAME ": checkentry: After pkt_list 
allocation.\n");
 #endif
diff -urN linux/net/ipv6/addrconf.c linux/net/ipv6/addrconf.c
--- linux/net/ipv6/addrconf.c   2005/05/19 12:08:51     1.78
+++ linux/net/ipv6/addrconf.c   2005/06/18 14:42:52     1.79
@@ -372,6 +372,7 @@
                ndev->regen_timer.data = (unsigned long) ndev;
                if ((dev->flags&IFF_LOOPBACK) ||
                    dev->type == ARPHRD_TUNNEL ||
+                   dev->type == ARPHRD_NONE ||
                    dev->type == ARPHRD_SIT) {
                        printk(KERN_INFO
                                "Disabled Privacy Extensions on device 
%p(%s)\n",
diff -urN linux/net/ipv6/icmp.c linux/net/ipv6/icmp.c
--- linux/net/ipv6/icmp.c       2005/05/19 12:08:51     1.56
+++ linux/net/ipv6/icmp.c       2005/06/18 14:42:52     1.57
@@ -277,8 +277,8 @@
 {
        struct inet6_dev *idev = NULL;
        struct ipv6hdr *hdr = skb->nh.ipv6h;
-       struct sock *sk = icmpv6_socket->sk;
-       struct ipv6_pinfo *np = inet6_sk(sk);
+       struct sock *sk;
+       struct ipv6_pinfo *np;
        struct in6_addr *saddr = NULL;
        struct dst_entry *dst;
        struct icmp6hdr tmp_hdr;
@@ -358,6 +358,9 @@
        if (icmpv6_xmit_lock())
                return;
 
+       sk = icmpv6_socket->sk;
+       np = inet6_sk(sk);
+
        if (!icmpv6_xrlim_allow(sk, type, &fl))
                goto out;
 
@@ -423,9 +426,9 @@
 
 static void icmpv6_echo_reply(struct sk_buff *skb)
 {
-       struct sock *sk = icmpv6_socket->sk;
+       struct sock *sk;
        struct inet6_dev *idev;
-       struct ipv6_pinfo *np = inet6_sk(sk);
+       struct ipv6_pinfo *np;
        struct in6_addr *saddr = NULL;
        struct icmp6hdr *icmph = (struct icmp6hdr *) skb->h.raw;
        struct icmp6hdr tmp_hdr;
@@ -454,6 +457,9 @@
        if (icmpv6_xmit_lock())
                return;
 
+       sk = icmpv6_socket->sk;
+       np = inet6_sk(sk);
+
        if (!fl.oif && ipv6_addr_is_multicast(&fl.fl6_dst))
                fl.oif = np->mcast_oif;
 
diff -urN linux/net/ipv6/ip6_tunnel.c linux/net/ipv6/ip6_tunnel.c
--- linux/net/ipv6/ip6_tunnel.c 2005/03/18 17:38:25     1.18
+++ linux/net/ipv6/ip6_tunnel.c 2005/06/18 14:42:52     1.19
@@ -882,6 +882,7 @@
        t->parms.hop_limit = p->hop_limit;
        t->parms.encap_limit = p->encap_limit;
        t->parms.flowinfo = p->flowinfo;
+       t->parms.link = p->link;
        ip6ip6_tnl_link_config(t);
        return 0;
 }
diff -urN linux/net/sched/Kconfig linux/net/sched/Kconfig
--- linux/net/sched/Kconfig     2005/05/19 12:08:51     1.19
+++ linux/net/sched/Kconfig     2005/06/18 14:42:52     1.20
@@ -405,7 +405,7 @@
        ---help---
          Size of the local stack variable used while evaluating the tree of
          ematches. Limits the depth of the tree, i.e. the number of
-         encapsulated precedences. Every level requires 4 bytes of addtional
+         encapsulated precedences. Every level requires 4 bytes of additional
          stack space.
 
 config NET_EMATCH_CMP
diff -urN linux/net/sched/act_api.c linux/net/sched/act_api.c
--- linux/net/sched/act_api.c   2005/05/19 12:08:51     1.11
+++ linux/net/sched/act_api.c   2005/06/18 14:42:52     1.12
@@ -881,7 +881,7 @@
                link_p[RTM_GETACTION-RTM_BASE].dumpit = tc_dump_action;
        }
 
-       printk("TC classifier action (bugs to netdev@oss.sgi.com cc "
+       printk("TC classifier action (bugs to netdev@vger.kernel.org cc "
               "hadi@cyberus.ca)\n");
        return 0;
 }
diff -urN linux/net/sched/cls_basic.c linux/net/sched/cls_basic.c
--- linux/net/sched/cls_basic.c 2005/03/18 17:38:27     1.1
+++ linux/net/sched/cls_basic.c 2005/06/18 14:42:52     1.2
@@ -261,6 +261,9 @@
        rta = (struct rtattr *) b;
        RTA_PUT(skb, TCA_OPTIONS, 0, NULL);
 
+       if (f->res.classid)
+               RTA_PUT(skb, TCA_BASIC_CLASSID, sizeof(u32), &f->res.classid);
+
        if (tcf_exts_dump(skb, &f->exts, &basic_ext_map) < 0 ||
            tcf_em_tree_dump(skb, &f->ematches, TCA_BASIC_EMATCHES) < 0)
                goto rtattr_failure;
diff -urN linux/net/sched/em_meta.c linux/net/sched/em_meta.c
--- linux/net/sched/em_meta.c   2005/03/18 17:38:27     1.1
+++ linux/net/sched/em_meta.c   2005/06/18 14:42:52     1.2
@@ -32,7 +32,7 @@
  *           +-----------+                           +-----------+
  *                 |                                       |
  *                 ---> meta_ops[INT][INDEV](...)          |
- *                            |                            |
+ *                           |                             |
  *                 -----------                             |
  *                 V                                       V
  *           +-----------+                           +-----------+
@@ -70,6 +70,7 @@
 #include <net/dst.h>
 #include <net/route.h>
 #include <net/pkt_cls.h>
+#include <net/sock.h>
 
 struct meta_obj
 {
@@ -284,6 +285,214 @@
 }
 
 /**************************************************************************
+ * Socket Attributes
+ **************************************************************************/
+
+#define SKIP_NONLOCAL(skb)                     \
+       if (unlikely(skb->sk == NULL)) {        \
+               *err = -1;                      \
+               return;                         \
+       }
+
+META_COLLECTOR(int_sk_family)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_family;
+}
+
+META_COLLECTOR(int_sk_state)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_state;
+}
+
+META_COLLECTOR(int_sk_reuse)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_reuse;
+}
+
+META_COLLECTOR(int_sk_bound_if)
+{
+       SKIP_NONLOCAL(skb);
+       /* No error if bound_dev_if is 0, legal userspace check */
+       dst->value = skb->sk->sk_bound_dev_if;
+}
+
+META_COLLECTOR(var_sk_bound_if)
+{
+       SKIP_NONLOCAL(skb);
+
+        if (skb->sk->sk_bound_dev_if == 0) {
+               dst->value = (unsigned long) "any";
+               dst->len = 3;
+        } else  {
+               struct net_device *dev;
+               
+               dev = dev_get_by_index(skb->sk->sk_bound_dev_if);
+               *err = var_dev(dev, dst);
+               if (dev)
+                       dev_put(dev);
+        }
+}
+
+META_COLLECTOR(int_sk_refcnt)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = atomic_read(&skb->sk->sk_refcnt);
+}
+
+META_COLLECTOR(int_sk_rcvbuf)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_rcvbuf;
+}
+
+META_COLLECTOR(int_sk_shutdown)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_shutdown;
+}
+
+META_COLLECTOR(int_sk_proto)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_protocol;
+}
+
+META_COLLECTOR(int_sk_type)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_type;
+}
+
+META_COLLECTOR(int_sk_rmem_alloc)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = atomic_read(&skb->sk->sk_rmem_alloc);
+}
+
+META_COLLECTOR(int_sk_wmem_alloc)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = atomic_read(&skb->sk->sk_wmem_alloc);
+}
+
+META_COLLECTOR(int_sk_omem_alloc)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = atomic_read(&skb->sk->sk_omem_alloc);
+}
+
+META_COLLECTOR(int_sk_rcv_qlen)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_receive_queue.qlen;
+}
+
+META_COLLECTOR(int_sk_snd_qlen)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_write_queue.qlen;
+}
+
+META_COLLECTOR(int_sk_wmem_queued)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_wmem_queued;
+}
+
+META_COLLECTOR(int_sk_fwd_alloc)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_forward_alloc;
+}
+
+META_COLLECTOR(int_sk_sndbuf)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_sndbuf;
+}
+
+META_COLLECTOR(int_sk_alloc)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_allocation;
+}
+
+META_COLLECTOR(int_sk_route_caps)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_route_caps;
+}
+
+META_COLLECTOR(int_sk_hashent)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_hashent;
+}
+
+META_COLLECTOR(int_sk_lingertime)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_lingertime / HZ;
+}
+
+META_COLLECTOR(int_sk_err_qlen)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_error_queue.qlen;
+}
+
+META_COLLECTOR(int_sk_ack_bl)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_ack_backlog;
+}
+
+META_COLLECTOR(int_sk_max_ack_bl)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_max_ack_backlog;
+}
+
+META_COLLECTOR(int_sk_prio)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_priority;
+}
+
+META_COLLECTOR(int_sk_rcvlowat)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_rcvlowat;
+}
+
+META_COLLECTOR(int_sk_rcvtimeo)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_rcvtimeo / HZ;
+}
+
+META_COLLECTOR(int_sk_sndtimeo)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_sndtimeo / HZ;
+}
+
+META_COLLECTOR(int_sk_sendmsg_off)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_sndmsg_off;
+}
+
+META_COLLECTOR(int_sk_write_pend)
+{
+       SKIP_NONLOCAL(skb);
+       dst->value = skb->sk->sk_write_pending;
+}
+
+/**************************************************************************
  * Meta value collectors assignment table
  **************************************************************************/
 
@@ -293,41 +502,75 @@
                               struct meta_value *, struct meta_obj *, int *);
 };
 
+#define META_ID(name) TCF_META_ID_##name
+#define META_FUNC(name) { .get = meta_##name }
+
 /* Meta value operations table listing all meta value collectors and
  * assigns them to a type and meta id. */
 static struct meta_ops __meta_ops[TCF_META_TYPE_MAX+1][TCF_META_ID_MAX+1] = {
        [TCF_META_TYPE_VAR] = {
-               [TCF_META_ID_DEV]       = { .get = meta_var_dev },
-               [TCF_META_ID_INDEV]     = { .get = meta_var_indev },
-               [TCF_META_ID_REALDEV]   = { .get = meta_var_realdev }
+               [META_ID(DEV)]                  = META_FUNC(var_dev),
+               [META_ID(INDEV)]                = META_FUNC(var_indev),
+               [META_ID(REALDEV)]              = META_FUNC(var_realdev),
+               [META_ID(SK_BOUND_IF)]          = META_FUNC(var_sk_bound_if),
        },
        [TCF_META_TYPE_INT] = {
-               [TCF_META_ID_RANDOM]    = { .get = meta_int_random },
-               [TCF_META_ID_LOADAVG_0] = { .get = meta_int_loadavg_0 },
-               [TCF_META_ID_LOADAVG_1] = { .get = meta_int_loadavg_1 },
-               [TCF_META_ID_LOADAVG_2] = { .get = meta_int_loadavg_2 },
-               [TCF_META_ID_DEV]       = { .get = meta_int_dev },
-               [TCF_META_ID_INDEV]     = { .get = meta_int_indev },
-               [TCF_META_ID_REALDEV]   = { .get = meta_int_realdev },
-               [TCF_META_ID_PRIORITY]  = { .get = meta_int_priority },
-               [TCF_META_ID_PROTOCOL]  = { .get = meta_int_protocol },
-               [TCF_META_ID_SECURITY]  = { .get = meta_int_security },
-               [TCF_META_ID_PKTTYPE]   = { .get = meta_int_pkttype },
-               [TCF_META_ID_PKTLEN]    = { .get = meta_int_pktlen },
-               [TCF_META_ID_DATALEN]   = { .get = meta_int_datalen },
-               [TCF_META_ID_MACLEN]    = { .get = meta_int_maclen },
+               [META_ID(RANDOM)]               = META_FUNC(int_random),
+               [META_ID(LOADAVG_0)]            = META_FUNC(int_loadavg_0),
+               [META_ID(LOADAVG_1)]            = META_FUNC(int_loadavg_1),
+               [META_ID(LOADAVG_2)]            = META_FUNC(int_loadavg_2),
+               [META_ID(DEV)]                  = META_FUNC(int_dev),
+               [META_ID(INDEV)]                = META_FUNC(int_indev),
+               [META_ID(REALDEV)]              = META_FUNC(int_realdev),
+               [META_ID(PRIORITY)]             = META_FUNC(int_priority),
+               [META_ID(PROTOCOL)]             = META_FUNC(int_protocol),
+               [META_ID(SECURITY)]             = META_FUNC(int_security),
+               [META_ID(PKTTYPE)]              = META_FUNC(int_pkttype),
+               [META_ID(PKTLEN)]               = META_FUNC(int_pktlen),
+               [META_ID(DATALEN)]              = META_FUNC(int_datalen),
+               [META_ID(MACLEN)]               = META_FUNC(int_maclen),
 #ifdef CONFIG_NETFILTER
-               [TCF_META_ID_NFMARK]    = { .get = meta_int_nfmark },
+               [META_ID(NFMARK)]               = META_FUNC(int_nfmark),
 #endif
-               [TCF_META_ID_TCINDEX]   = { .get = meta_int_tcindex },
+               [META_ID(TCINDEX)]              = META_FUNC(int_tcindex),
 #ifdef CONFIG_NET_CLS_ACT
-               [TCF_META_ID_TCVERDICT] = { .get = meta_int_tcverd },
-               [TCF_META_ID_TCCLASSID] = { .get = meta_int_tcclassid },
+               [META_ID(TCVERDICT)]            = META_FUNC(int_tcverd),
+               [META_ID(TCCLASSID)]            = META_FUNC(int_tcclassid),
 #endif
 #ifdef CONFIG_NET_CLS_ROUTE
-               [TCF_META_ID_RTCLASSID] = { .get = meta_int_rtclassid },
+               [META_ID(RTCLASSID)]            = META_FUNC(int_rtclassid),
 #endif
-               [TCF_META_ID_RTIIF]     = { .get = meta_int_rtiif }
+               [META_ID(RTIIF)]                = META_FUNC(int_rtiif),
+               [META_ID(SK_FAMILY)]            = META_FUNC(int_sk_family),
+               [META_ID(SK_STATE)]             = META_FUNC(int_sk_state),
+               [META_ID(SK_REUSE)]             = META_FUNC(int_sk_reuse),
+               [META_ID(SK_BOUND_IF)]          = META_FUNC(int_sk_bound_if),
+               [META_ID(SK_REFCNT)]            = META_FUNC(int_sk_refcnt),
+               [META_ID(SK_RCVBUF)]            = META_FUNC(int_sk_rcvbuf),
+               [META_ID(SK_SNDBUF)]            = META_FUNC(int_sk_sndbuf),
+               [META_ID(SK_SHUTDOWN)]          = META_FUNC(int_sk_shutdown),
+               [META_ID(SK_PROTO)]             = META_FUNC(int_sk_proto),
+               [META_ID(SK_TYPE)]              = META_FUNC(int_sk_type),
+               [META_ID(SK_RMEM_ALLOC)]        = META_FUNC(int_sk_rmem_alloc),
+               [META_ID(SK_WMEM_ALLOC)]        = META_FUNC(int_sk_wmem_alloc),
+               [META_ID(SK_OMEM_ALLOC)]        = META_FUNC(int_sk_omem_alloc),
+               [META_ID(SK_WMEM_QUEUED)]       = META_FUNC(int_sk_wmem_queued),
+               [META_ID(SK_RCV_QLEN)]          = META_FUNC(int_sk_rcv_qlen),
+               [META_ID(SK_SND_QLEN)]          = META_FUNC(int_sk_snd_qlen),
+               [META_ID(SK_ERR_QLEN)]          = META_FUNC(int_sk_err_qlen),
+               [META_ID(SK_FORWARD_ALLOCS)]    = META_FUNC(int_sk_fwd_alloc),
+               [META_ID(SK_ALLOCS)]            = META_FUNC(int_sk_alloc),
+               [META_ID(SK_ROUTE_CAPS)]        = META_FUNC(int_sk_route_caps),
+               [META_ID(SK_HASHENT)]           = META_FUNC(int_sk_hashent),
+               [META_ID(SK_LINGERTIME)]        = META_FUNC(int_sk_lingertime),
+               [META_ID(SK_ACK_BACKLOG)]       = META_FUNC(int_sk_ack_bl),
+               [META_ID(SK_MAX_ACK_BACKLOG)]   = META_FUNC(int_sk_max_ack_bl),
+               [META_ID(SK_PRIO)]              = META_FUNC(int_sk_prio),
+               [META_ID(SK_RCVLOWAT)]          = META_FUNC(int_sk_rcvlowat),
+               [META_ID(SK_RCVTIMEO)]          = META_FUNC(int_sk_rcvtimeo),
+               [META_ID(SK_SNDTIMEO)]          = META_FUNC(int_sk_sndtimeo),
+               [META_ID(SK_SENDMSG_OFF)]       = META_FUNC(int_sk_sendmsg_off),
+               [META_ID(SK_WRITE_PENDING)]     = META_FUNC(int_sk_write_pend),
        }
 };
 
@@ -396,9 +639,9 @@
        /* Let gcc optimize it, the unlikely is not really based on
         * some numbers but jump free code for mismatches seems
         * more logical. */
-       if (unlikely(a == b))
+       if (unlikely(a->value == b->value))
                return 0;
-       else if (a < b)
+       else if (a->value < b->value)
                return -1;
        else
                return 1;
diff -urN linux/net/sctp/input.c linux/net/sctp/input.c
--- linux/net/sctp/input.c      2005/03/18 17:38:28     1.23
+++ linux/net/sctp/input.c      2005/06/18 14:42:52     1.24
@@ -178,6 +178,37 @@
 
        asoc = __sctp_rcv_lookup(skb, &src, &dest, &transport);
 
+       if (!asoc)
+               ep = __sctp_rcv_lookup_endpoint(&dest);
+
+       /* Retrieve the common input handling substructure. */
+       rcvr = asoc ? &asoc->base : &ep->base;
+       sk = rcvr->sk;
+
+       /*
+        * If a frame arrives on an interface and the receiving socket is
+        * bound to another interface, via SO_BINDTODEVICE, treat it as OOTB
+        */
+       if (sk->sk_bound_dev_if && (sk->sk_bound_dev_if != af->skb_iif(skb)))
+       {
+               sock_put(sk);
+               if (asoc) {
+                       sctp_association_put(asoc);
+                       asoc = NULL;
+               } else {
+                       sctp_endpoint_put(ep);
+                       ep = NULL;
+               }
+               sk = sctp_get_ctl_sock();
+               ep = sctp_sk(sk)->ep;
+               sctp_endpoint_hold(ep);
+               sock_hold(sk);
+               rcvr = &ep->base;
+       }
+
+       if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
+               goto discard_release;
+
        /*
         * RFC 2960, 8.4 - Handle "Out of the blue" Packets.
         * An SCTP packet is called an "out of the blue" (OOTB)
@@ -187,22 +218,12 @@
         * packet belongs.
         */
        if (!asoc) {
-               ep = __sctp_rcv_lookup_endpoint(&dest);
                if (sctp_rcv_ootb(skb)) {
                        SCTP_INC_STATS_BH(SCTP_MIB_OUTOFBLUES);
                        goto discard_release;
                }
        }
 
-       /* Retrieve the common input handling substructure. */
-       rcvr = asoc ? &asoc->base : &ep->base;
-       sk = rcvr->sk;
-
-       if ((sk) && (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)) {
-               goto discard_release;
-       }
-
-
        /* SCTP seems to always need a timestamp right now (FIXME) */
        if (skb->stamp.tv_sec == 0) {
                do_gettimeofday(&skb->stamp);
@@ -265,13 +286,11 @@
 
 discard_release:
        /* Release any structures we may be holding. */
-       if (asoc) {
-               sock_put(asoc->base.sk);
+       sock_put(sk);
+       if (asoc)
                sctp_association_put(asoc);
-       } else {
-               sock_put(ep->base.sk);
+       else
                sctp_endpoint_put(ep);
-       }
 
        goto discard_it;
 }
diff -urN linux/net/sctp/ipv6.c linux/net/sctp/ipv6.c
--- linux/net/sctp/ipv6.c       2005/05/19 12:08:52     1.31
+++ linux/net/sctp/ipv6.c       2005/06/18 14:42:52     1.32
@@ -812,26 +812,23 @@
        if (addr->sa.sa_family != AF_INET6)
                af = sctp_get_af_specific(addr->sa.sa_family);
        else {
-               struct sock *sk;
                int type = ipv6_addr_type(&addr->v6.sin6_addr);
-               sk = sctp_opt2sk(opt);
+               struct net_device *dev;
+
                if (type & IPV6_ADDR_LINKLOCAL) {
-                       /* Note: Behavior similar to af_inet6.c:
-                        *  1) Overrides previous bound_dev_if
-                        *  2) Destructive even if bind isn't successful.
-                        */
-
-                       if (addr->v6.sin6_scope_id)
-                               sk->sk_bound_dev_if = addr->v6.sin6_scope_id;
-                       if (!sk->sk_bound_dev_if)
+                       if (!addr->v6.sin6_scope_id)
+                               return 0;
+                       dev = dev_get_by_index(addr->v6.sin6_scope_id);
+                       if (!dev)
                                return 0;
+                       dev_put(dev);
                }
                af = opt->pf->af;
        }
        return af->available(addr, opt);
 }
 
-/* Verify that the provided sockaddr looks bindable.   Common verification,
+/* Verify that the provided sockaddr looks sendable.   Common verification,
  * has already been taken care of.
  */
 static int sctp_inet6_send_verify(struct sctp_sock *opt, union sctp_addr *addr)
@@ -842,19 +839,16 @@
        if (addr->sa.sa_family != AF_INET6)
                af = sctp_get_af_specific(addr->sa.sa_family);
        else {
-               struct sock *sk;
                int type = ipv6_addr_type(&addr->v6.sin6_addr);
-               sk = sctp_opt2sk(opt);
+               struct net_device *dev;
+
                if (type & IPV6_ADDR_LINKLOCAL) {
-                       /* Note: Behavior similar to af_inet6.c:
-                        *  1) Overrides previous bound_dev_if
-                        *  2) Destructive even if bind isn't successful.
-                        */
-
-                       if (addr->v6.sin6_scope_id)
-                               sk->sk_bound_dev_if = addr->v6.sin6_scope_id;
-                       if (!sk->sk_bound_dev_if)
+                       if (!addr->v6.sin6_scope_id)
+                               return 0;
+                       dev = dev_get_by_index(addr->v6.sin6_scope_id);
+                       if (!dev)
                                return 0;
+                       dev_put(dev);
                }
                af = opt->pf->af;
        }
diff -urN linux/net/sctp/proc.c linux/net/sctp/proc.c
--- linux/net/sctp/proc.c       2005/01/25 04:29:08     1.7
+++ linux/net/sctp/proc.c       2005/06/18 14:42:52     1.8
@@ -132,14 +132,25 @@
 static void sctp_seq_dump_local_addrs(struct seq_file *seq, struct 
sctp_ep_common *epb)
 {
        struct list_head *pos;
+       struct sctp_association *asoc;
        struct sctp_sockaddr_entry *laddr;
-       union sctp_addr *addr;
+       struct sctp_transport *peer;
+       union sctp_addr *addr, *primary = NULL;
        struct sctp_af *af;
 
+       if (epb->type == SCTP_EP_TYPE_ASSOCIATION) {
+           asoc = sctp_assoc(epb);
+           peer = asoc->peer.primary_path;
+           primary = &peer->saddr;
+       }
+
        list_for_each(pos, &epb->bind_addr.address_list) {
                laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
                addr = (union sctp_addr *)&laddr->a;
                af = sctp_get_af_specific(addr->sa.sa_family);
+               if (primary && af->cmp_addr(addr, primary)) {
+                       seq_printf(seq, "*");
+               }
                af->seq_dump_addr(seq, addr);
        }
 }
@@ -149,17 +160,54 @@
 {
        struct list_head *pos;
        struct sctp_transport *transport;
-       union sctp_addr *addr;
+       union sctp_addr *addr, *primary;
        struct sctp_af *af;
 
+       primary = &(assoc->peer.primary_addr);
        list_for_each(pos, &assoc->peer.transport_addr_list) {
                transport = list_entry(pos, struct sctp_transport, transports);
                addr = (union sctp_addr *)&transport->ipaddr;
                af = sctp_get_af_specific(addr->sa.sa_family);
+               if (af->cmp_addr(addr, primary)) {
+                       seq_printf(seq, "*");
+               }
                af->seq_dump_addr(seq, addr);
        }
 }
 
+static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos)
+{
+       if (*pos > sctp_ep_hashsize)
+               return NULL;
+
+       if (*pos < 0)
+               *pos = 0;
+
+       if (*pos == 0)
+               seq_printf(seq, " ENDPT     SOCK   STY SST HBKT LPORT   UID 
INODE LADDRS\n");
+
+       ++*pos;
+
+       return (void *)pos;
+}
+
+static void sctp_eps_seq_stop(struct seq_file *seq, void *v)
+{
+       return;
+}
+
+
+static void * sctp_eps_seq_next(struct seq_file *seq, void *v, loff_t *pos)
+{
+       if (*pos > sctp_ep_hashsize)
+               return NULL;
+
+       ++*pos;
+
+       return pos;
+}
+
+
 /* Display sctp endpoints (/proc/net/sctp/eps). */
 static int sctp_eps_seq_show(struct seq_file *seq, void *v)
 {
@@ -167,38 +215,50 @@
        struct sctp_ep_common *epb;
        struct sctp_endpoint *ep;
        struct sock *sk;
-       int hash;
+       int    hash = *(int *)v;
 
-       seq_printf(seq, " ENDPT     SOCK   STY SST HBKT LPORT LADDRS\n");
-       for (hash = 0; hash < sctp_ep_hashsize; hash++) {
-               head = &sctp_ep_hashtable[hash];
-               read_lock(&head->lock);
-               for (epb = head->chain; epb; epb = epb->next) {
-                       ep = sctp_ep(epb);
-                       sk = epb->sk;
-                       seq_printf(seq, "%8p %8p %-3d %-3d %-4d %-5d ", ep, sk,
-                                  sctp_sk(sk)->type, sk->sk_state, hash,
-                                  epb->bind_addr.port);
-                       sctp_seq_dump_local_addrs(seq, epb);
-                       seq_printf(seq, "\n");
-               }
-               read_unlock(&head->lock);
+       if (hash > sctp_ep_hashsize)
+               return -ENOMEM;
+
+       head = &sctp_ep_hashtable[hash-1];
+       sctp_local_bh_disable();
+       read_lock(&head->lock);
+       for (epb = head->chain; epb; epb = epb->next) {
+               ep = sctp_ep(epb);
+               sk = epb->sk;
+               seq_printf(seq, "%8p %8p %-3d %-3d %-4d %-5d %5d %5lu ", ep, sk,
+                          sctp_sk(sk)->type, sk->sk_state, hash-1,
+                          epb->bind_addr.port,
+                          sock_i_uid(sk), sock_i_ino(sk));
+
+               sctp_seq_dump_local_addrs(seq, epb);
+               seq_printf(seq, "\n");
        }
+       read_unlock(&head->lock);
+       sctp_local_bh_enable();
 
        return 0;
 }
 
+static struct seq_operations sctp_eps_ops = {
+       .start = sctp_eps_seq_start,
+       .next  = sctp_eps_seq_next,
+       .stop  = sctp_eps_seq_stop,
+       .show  = sctp_eps_seq_show,
+};
+
+
 /* Initialize the seq file operations for 'eps' object. */
 static int sctp_eps_seq_open(struct inode *inode, struct file *file)
 {
-       return single_open(file, sctp_eps_seq_show, NULL);
+       return seq_open(file, &sctp_eps_ops);
 }
 
 static struct file_operations sctp_eps_seq_fops = {
        .open    = sctp_eps_seq_open,
        .read    = seq_read,
        .llseek  = seq_lseek,
-       .release = single_release,
+       .release = seq_release,
 };
 
 /* Set up the proc fs entry for 'eps' object. */
@@ -221,6 +281,40 @@
        remove_proc_entry("eps", proc_net_sctp);
 }
 
+
+static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos)
+{
+       if (*pos > sctp_assoc_hashsize)
+               return NULL;
+
+       if (*pos < 0)
+               *pos = 0;
+
+       if (*pos == 0)
+               seq_printf(seq, " ASSOC     SOCK   STY SST ST HBKT ASSOC-ID 
TX_QUEUE RX_QUEUE UID INODE LPORT "
+                               "RPORT LADDRS <-> RADDRS\n");
+
+       ++*pos;
+
+       return (void *)pos;
+}
+
+static void sctp_assocs_seq_stop(struct seq_file *seq, void *v)
+{
+       return;
+}
+
+
+static void * sctp_assocs_seq_next(struct seq_file *seq, void *v, loff_t *pos)
+{
+       if (*pos > sctp_assoc_hashsize)
+               return NULL;
+
+       ++*pos;
+
+       return pos;
+}
+
 /* Display sctp associations (/proc/net/sctp/assocs). */
 static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
 {
@@ -228,43 +322,57 @@
        struct sctp_ep_common *epb;
        struct sctp_association *assoc;
        struct sock *sk;
-       int hash;
+       int    hash = *(int *)v;
 
-       seq_printf(seq, " ASSOC     SOCK   STY SST ST HBKT LPORT RPORT "
-                       "LADDRS <-> RADDRS\n");
-       for (hash = 0; hash < sctp_assoc_hashsize; hash++) {
-               head = &sctp_assoc_hashtable[hash];
-               read_lock(&head->lock);
-               for (epb = head->chain; epb; epb = epb->next) {
-                       assoc = sctp_assoc(epb);
-                       sk = epb->sk;
-                       seq_printf(seq,
-                                  "%8p %8p %-3d %-3d %-2d %-4d %-5d %-5d ",
-                                  assoc, sk, sctp_sk(sk)->type, sk->sk_state,
-                                  assoc->state, hash, epb->bind_addr.port,
-                                  assoc->peer.port);
-                       sctp_seq_dump_local_addrs(seq, epb);
-                       seq_printf(seq, "<-> ");
-                       sctp_seq_dump_remote_addrs(seq, assoc);
-                       seq_printf(seq, "\n");
-               }
-               read_unlock(&head->lock);
+       if (hash > sctp_assoc_hashsize)
+               return -ENOMEM;
+
+       head = &sctp_assoc_hashtable[hash-1];
+       sctp_local_bh_disable();
+       read_lock(&head->lock);
+       for (epb = head->chain; epb; epb = epb->next) {
+               assoc = sctp_assoc(epb);
+               sk = epb->sk;
+               seq_printf(seq,
+                          "%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu 
%-5d %5d ",
+                          assoc, sk, sctp_sk(sk)->type, sk->sk_state,
+                          assoc->state, hash-1, assoc->assoc_id,
+                          (sk->sk_rcvbuf - assoc->rwnd),
+                          assoc->sndbuf_used,
+                          sock_i_uid(sk), sock_i_ino(sk),
+                          epb->bind_addr.port,
+                          assoc->peer.port);
+
+               seq_printf(seq, " ");
+               sctp_seq_dump_local_addrs(seq, epb);
+               seq_printf(seq, "<-> ");
+               sctp_seq_dump_remote_addrs(seq, assoc);
+               seq_printf(seq, "\n");
        }
+       read_unlock(&head->lock);
+       sctp_local_bh_enable();
 
        return 0;
 }
 
+static struct seq_operations sctp_assoc_ops = {
+       .start = sctp_assocs_seq_start,
+       .next  = sctp_assocs_seq_next,
+       .stop  = sctp_assocs_seq_stop,
+       .show  = sctp_assocs_seq_show,
+};
+
 /* Initialize the seq file operations for 'assocs' object. */
 static int sctp_assocs_seq_open(struct inode *inode, struct file *file)
 {
-       return single_open(file, sctp_assocs_seq_show, NULL);
+       return seq_open(file, &sctp_assoc_ops);
 }
 
 static struct file_operations sctp_assocs_seq_fops = {
        .open    = sctp_assocs_seq_open,
        .read    = seq_read,
        .llseek  = seq_lseek,
-       .release = single_release,
+       .release = seq_release,
 };
 
 /* Set up the proc fs entry for 'assocs' object. */
diff -urN linux/net/sctp/protocol.c linux/net/sctp/protocol.c
--- linux/net/sctp/protocol.c   2005/05/19 12:08:52     1.41
+++ linux/net/sctp/protocol.c   2005/06/18 14:42:52     1.42
@@ -378,10 +378,13 @@
 {
        int ret = inet_addr_type(addr->v4.sin_addr.s_addr);
 
-       /* FIXME: ip_nonlocal_bind sysctl support. */
 
-       if (addr->v4.sin_addr.s_addr != INADDR_ANY && ret != RTN_LOCAL)
+       if (addr->v4.sin_addr.s_addr != INADDR_ANY &&
+          ret != RTN_LOCAL &&
+          !sp->inet.freebind &&
+          !sysctl_ip_nonlocal_bind)
                return 0;
+
        return 1;
 }
 
diff -urN linux/net/sctp/socket.c linux/net/sctp/socket.c
--- linux/net/sctp/socket.c     2005/05/19 12:08:52     1.43
+++ linux/net/sctp/socket.c     2005/06/18 14:42:52     1.44
@@ -4686,6 +4686,7 @@
        struct sctp_endpoint *newep = newsp->ep;
        struct sk_buff *skb, *tmp;
        struct sctp_ulpevent *event;
+       int flags = 0;
 
        /* Migrate socket buffer sizes and all the socket level options to the
         * new socket.
@@ -4707,6 +4708,17 @@
        sctp_sk(newsk)->bind_hash = pp;
        inet_sk(newsk)->num = inet_sk(oldsk)->num;
 
+       /* Copy the bind_addr list from the original endpoint to the new
+        * endpoint so that we can handle restarts properly
+        */
+       if (assoc->peer.ipv4_address)
+               flags |= SCTP_ADDR4_PEERSUPP;
+       if (assoc->peer.ipv6_address)
+               flags |= SCTP_ADDR6_PEERSUPP;
+       sctp_bind_addr_copy(&newsp->ep->base.bind_addr,
+                            &oldsp->ep->base.bind_addr,
+                            SCTP_SCOPE_GLOBAL, GFP_KERNEL, flags);
+
        /* Move any messages in the old socket's receive queue that are for the
         * peeled off association to the new socket's receive queue.
         */
diff -urN linux/sound/usb/usbaudio.c linux/sound/usb/usbaudio.c
--- linux/sound/usb/usbaudio.c  2005/04/08 18:59:00     1.28
+++ linux/sound/usb/usbaudio.c  2005/06/18 14:42:52     1.29
@@ -3289,7 +3289,7 @@
                }
                usb_chip[chip->index] = NULL;
                up(&register_mutex);
-               snd_card_free_in_thread(card);
+               snd_card_free(card);
        } else {
                up(&register_mutex);
        }
diff -urN linux/sound/usb/usx2y/usbusx2y.c linux/sound/usb/usx2y/usbusx2y.c
--- linux/sound/usb/usx2y/usbusx2y.c    2005/01/13 14:07:19     1.4
+++ linux/sound/usb/usx2y/usbusx2y.c    2005/06/18 14:42:52     1.5
@@ -1,6 +1,11 @@
 /*
  * usbusy2y.c - ALSA USB US-428 Driver
  *
+2005-04-14 Karsten Wiese
+       Version 0.8.7.2:
+       Call snd_card_free() instead of snd_card_free_in_thread() to prevent 
oops with dead keyboard symptom.
+       Tested ok with kernel 2.6.12-rc2.
+
 2004-12-14 Karsten Wiese
        Version 0.8.7.1:
        snd_pcm_open for rawusb pcm-devices now returns -EBUSY if called 
without rawusb's hwdep device being open.
@@ -143,7 +148,7 @@
 
 
 MODULE_AUTHOR("Karsten Wiese <annabellesgarden@yahoo.de>");
-MODULE_DESCRIPTION("TASCAM "NAME_ALLCAPS" Version 0.8.7.1");
+MODULE_DESCRIPTION("TASCAM "NAME_ALLCAPS" Version 0.8.7.2");
 MODULE_LICENSE("GPL");
 MODULE_SUPPORTED_DEVICE("{{TASCAM(0x1604), 
"NAME_ALLCAPS"(0x8001)(0x8005)(0x8007) }}");
 
@@ -430,8 +435,6 @@
        if (ptr) {
                usX2Ydev_t* usX2Y = usX2Y((snd_card_t*)ptr);
                struct list_head* p;
-               if (usX2Y->chip_status == USX2Y_STAT_CHIP_HUP)  // on 2.6.1 
kernel snd_usbmidi_disconnect()
-                       return;                                 // calls us 
back. better leave :-) .
                usX2Y->chip.shutdown = 1;
                usX2Y->chip_status = USX2Y_STAT_CHIP_HUP;
                usX2Y_unlinkSeq(&usX2Y->AS04);
@@ -443,7 +446,7 @@
                }
                if (usX2Y->us428ctls_sharedmem) 
                        wake_up(&usX2Y->us428ctls_wait_queue_head);
-               snd_card_free_in_thread((snd_card_t*)ptr);
+               snd_card_free((snd_card_t*)ptr);
        }
 }
 

<Prev in Thread] Current Thread [Next in Thread>