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: Fri, 18 Mar 2005 17:38:57 +0000
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/03/18 17:38:37

Modified files:
        .              : CREDITS MAINTAINERS Makefile REPORTING-BUGS 
        Documentation  : Changes IPMI.txt cachetlb.txt cciss.txt 
                         devices.txt feature-removal-schedule.txt 
                         kernel-parameters.txt keys.txt parport.txt 
                         pci.txt pm.txt sysrq.txt tty.txt 
        Documentation/BK-usage: bksend 
        Documentation/DocBook: Makefile deviceiobook.tmpl gadget.tmpl 
                               journal-api.tmpl kernel-api.tmpl 
                               kernel-hacking.tmpl kernel-locking.tmpl 
                               libata.tmpl librs.tmpl lsm.tmpl 
                               mcabook.tmpl mtdnand.tmpl 
                               procfs-guide.tmpl scsidrivers.tmpl 
                               sis900.tmpl tulip-user.tmpl usb.tmpl 
                               via-audio.tmpl videobook.tmpl 
                               wanbook.tmpl writing_usb_driver.tmpl 
                               z8530book.tmpl 
        Documentation/aoe: aoe.txt status.sh 
        Documentation/arm: IXP2000 
        Documentation/arm/Samsung-S3C24XX: Overview.txt 
        Documentation/crypto: api-intro.txt 
        Documentation/dvb: faq.txt 
        Documentation/filesystems: Locking jfs.txt proc.txt 
        Documentation/i2c: porting-clients writing-clients 
        Documentation/networking: bonding.txt e100.txt ixgb.txt 
        Documentation/parisc: 00-INDEX 
        Documentation/power: video.txt 
        Documentation/scsi: st.txt sym53c8xx_2.txt 
        Documentation/sound/alsa: ALSA-Configuration.txt 
                                  serial-u16550.txt 
        Documentation/sound/alsa/DocBook: writing-an-alsa-driver.tmpl 
        Documentation/usb: error-codes.txt sn9c102.txt 
        Documentation/video4linux: CARDLIST.saa7134 README.cx88 
        Documentation/video4linux/bttv: Cards README 
        arch/alpha/kernel: alpha_ksyms.c osf_sys.c setup.c signal.c 
                           smp.c 
        arch/arm       : Kconfig Kconfig.debug 
        arch/arm/common: locomo.c rtctime.c scoop.c 
        arch/arm/configs: s3c2410_defconfig 
        arch/arm/kernel: calls.S ecard.c fiq.c irq.c module.c setup.c 
                         signal.c sys_arm.c 
        arch/arm/mach-clps7500: core.c 
        arch/arm/mach-ebsa110: io.c 
        arch/arm/mach-ixp2000: core.c enp2611.c ixdp2x01.c 
        arch/arm/mach-ixp4xx: Makefile coyote-setup.c ixdp425-setup.c 
        arch/arm/mach-lh7a40x: arch-lpd7a40x.c common.h irq-lpd7a40x.c 
        arch/arm/mach-omap: Kconfig time.c 
        arch/arm/mach-pxa: Kconfig Makefile corgi.c idp.c irq.c 
                           leds-idp.c lubbock.c mainstone.c pm.c 
        arch/arm/mach-s3c2410: Kconfig Makefile clock.c clock.h cpu.c 
                               cpu.h devs.c devs.h dma.c gpio.c irq.c 
                               mach-bast.c mach-h1940.c mach-rx3715.c 
                               mach-smdk2410.c mach-vr1000.c pm.c pm.h 
                               s3c2410.c s3c2440-dsc.c s3c2440.c time.c 
        arch/arm/mach-sa1100: assabet.c collie.c neponset.c 
        arch/arm/mm    : consistent.c fault-armv.c flush.c init.c 
                         mm-armv.c 
        arch/arm/tools : mach-types 
        arch/arm26     : Kconfig.debug 
        arch/arm26/kernel: setup.c signal.c 
        arch/arm26/mm  : init.c 
        arch/cris/arch-v10/drivers: eeprom.c gpio.c 
        arch/cris/arch-v10/kernel: signal.c 
        arch/cris/arch-v10/mm: init.c 
        arch/cris/kernel: setup.c 
        arch/frv/kernel: signal.c 
        arch/frv/mb93090-mb00: pci-frv.c pci-vdk.c 
        arch/h8300/kernel: signal.c 
        arch/i386      : Kconfig Kconfig.debug Makefile defconfig 
        arch/i386/kernel: Makefile apic.c apm.c asm-offsets.c cpuid.c 
                          dmi_scan.c efi.c entry.S i386_ksyms.c i387.c 
                          i8259.c io_apic.c mpparse.c msr.c numaq.c 
                          process.c ptrace.c quirks.c scx200.c 
                          semaphore.c setup.c signal.c smpboot.c srat.c 
                          time.c time_hpet.c traps.c vm86.c 
        arch/i386/kernel/acpi: sleep.c 
        arch/i386/kernel/cpu: common.c cpu.h cyrix.c 
        arch/i386/kernel/cpu/cpufreq: Kconfig 
        arch/i386/kernel/cpu/mtrr: centaur.c cyrix.c generic.c main.c 
                                   mtrr.h 
        arch/i386/kernel/timers: timer_hpet.c 
        arch/i386/lib  : Makefile 
        arch/i386/mach-default: topology.c 
        arch/i386/mach-visws: mpparse.c 
        arch/i386/mach-voyager: voyager_smp.c 
        arch/i386/math-emu: errors.c fpu_aux.c fpu_proto.h fpu_system.h 
                            load_store.c reg_constant.c reg_constant.h 
        arch/i386/mm   : boot_ioremap.c discontig.c highmem.c 
                         hugetlbpage.c init.c ioremap.c mmap.c 
                         pageattr.c 
        arch/i386/oprofile: backtrace.c 
        arch/i386/pci  : acpi.c direct.c irq.c mmconfig.c numa.c 
                         pcbios.c 
        arch/i386/power: cpu.c swsusp.S 
        arch/ia64/configs: sn2_defconfig 
        arch/ia64/hp/common: sba_iommu.c 
        arch/ia64/ia32 : ia32_entry.S ia32_signal.c ia32priv.h 
                         sys_ia32.c 
        arch/ia64/kernel: ptrace.c setup.c smp.c smpboot.c 
        arch/ia64/mm   : contig.c extable.c hugetlbpage.c tlb.c 
        arch/ia64/pci  : pci.c 
        arch/m32r/kernel: m32r_ksyms.c semaphore.c signal.c smpboot.c 
                          sys_m32r.c 
        arch/m32r/mm   : init.c 
        arch/m68k/kernel: signal.c 
        arch/m68knommu/kernel: signal.c 
        arch/mips      : Kconfig defconfig 
        arch/mips/configs: atlas_defconfig capcella_defconfig 
                           cobalt_defconfig db1000_defconfig 
                           db1100_defconfig db1500_defconfig 
                           db1550_defconfig ddb5476_defconfig 
                           ddb5477_defconfig decstation_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 osprey_defconfig 
                           pb1100_defconfig pb1500_defconfig 
                           pb1550_defconfig rm200_defconfig 
                           sb1250-swarm_defconfig sead_defconfig 
                           tb0226_defconfig tb0229_defconfig 
                           workpad_defconfig yosemite_defconfig 
        arch/mips/kernel: ptrace.c setup.c signal32.c smp.c 
        arch/mips/math-emu: dsemul.c 
        arch/mips/mm   : c-r3k.c c-r4k.c c-sb1.c c-tx39.c cache.c 
                         highmem.c init.c 
        arch/mips/pci  : fixup-mpc30x.c 
        arch/mips/pmc-sierra/yosemite: ht.c 
        arch/mips/vr4181: Kconfig 
        arch/mips/vr41xx: Kconfig 
        arch/parisc    : Kconfig Makefile 
        arch/parisc/configs: a500_defconfig 
        arch/parisc/kernel: Makefile binfmt_elf32.c drivers.c entry.S 
                            firmware.c hardware.c head.S hpmc.S 
                            init_task.c ioctl32.c irq.c module.c 
                            pacache.S pci-dma.c pdc_chassis.c perf.c 
                            perf_asm.S process.c real2.S setup.c 
                            signal.c signal32.c signal32.h smp.c 
                            sys_parisc.c sys_parisc32.c traps.c 
                            unaligned.c unwind.c vmlinux.lds.S 
        arch/parisc/lib: checksum.c debuglocks.c memcpy.c 
        arch/parisc/math-emu: driver.c 
        arch/parisc/mm : fault.c init.c kmap.c 
        arch/ppc       : Kconfig Makefile 
        arch/ppc/8xx_io: enet.c fec.c 
        arch/ppc/boot/common: util.S 
        arch/ppc/boot/simple: Makefile clear.S embed_config.c head.S 
                              misc-ev64260.S misc-mv64x60.S 
        arch/ppc/configs: chestnut_defconfig katana_defconfig 
                          pmac_defconfig 
        arch/ppc/kernel: Makefile align.c asm-offsets.c cpu_setup_6xx.S 
                         cputable.c dma-mapping.c entry.S head.S 
                         head_44x.S head_4xx.S head_8xx.S head_booke.h 
                         head_e500.S l2cr.S misc.S pci.c ppc_htab.c 
                         ppc_ksyms.c setup.c signal.c smp.c syscalls.c 
                         temp.c traps.c vmlinux.lds.S 
        arch/ppc/mm    : hashtable.S init.c mmu_decl.h pgtable.c 
                         ppc_mmu.c tlb.c 
        arch/ppc/oprofile: op_model_fsl_booke.c 
        arch/ppc/platforms: Makefile adir_setup.c chestnut.c chestnut.h 
                            cpci690.c ev64260.c gemini_prom.S 
                            gemini_setup.c k2.c katana.c katana.h 
                            lopec.c mcpn765.c mvme5100.c pcore.c 
                            pmac_cache.S pmac_cpufreq.c pmac_feature.c 
                            pmac_setup.c pmac_sleep.S pmac_smp.c pplus.c 
                            prep_setup.c prpmc750.c prpmc800.c 
                            sandpoint.c spruce.c 
        arch/ppc/platforms/4xx: ebony.c ebony.h luan.h ocotea.h 
                                xilinx_ml300.c 
        arch/ppc/platforms/85xx: mpc8540_ads.c mpc8560_ads.c 
                                 mpc85xx_ads_common.c 
                                 mpc85xx_cds_common.c 
                                 mpc85xx_cds_common.h mpc85xx_sys.c 
                                 sbc8560.c sbc85xx.c stx_gp3.c 
        arch/ppc/syslib: Makefile btext.c ibm440gx_common.c 
                         mpc52xx_setup.c mv64360_pic.c mv64x60.c 
                         ppc4xx_pic.c todc_time.c xilinx_pic.c 
        arch/ppc64     : Kconfig Makefile defconfig 
        arch/ppc64/boot: Makefile install.sh main.c zImage.lds 
        arch/ppc64/configs: g5_defconfig iSeries_defconfig 
                            maple_defconfig pSeries_defconfig 
        arch/ppc64/kernel: LparData.c Makefile align.c asm-offsets.c 
                           cputable.c dma.c eeh.c head.S i8259.c 
                           iSeries_htab.c iSeries_pci.c iSeries_setup.c 
                           idle.c ioctl32.c iommu.c irq.c kprobes.c 
                           lparcfg.c misc.S module.c nvram.c 
                           pSeries_lpar.c pSeries_nvram.c pSeries_pci.c 
                           pSeries_setup.c pSeries_smp.c pacaData.c 
                           pci.c pci.h pci_direct_iommu.c pci_dn.c 
                           pci_iommu.c pmac_feature.c pmac_pci.c 
                           pmac_setup.c pmac_smp.c pmac_time.c 
                           ppc_ksyms.c proc_ppc64.c process.c prom.c 
                           prom_init.c rtas.c rtas_flash.c rtasd.c 
                           scanlog.c semaphore.c setup.c signal.c 
                           signal32.c smp.c sys_ppc32.c sysfs.c time.c 
                           traps.c vio.c viopath.c xics.c 
        arch/ppc64/mm  : fault.c hash_low.S hash_native.c hash_utils.c 
                         hugetlbpage.c init.c slb.c stab.c tlb.c 
        arch/ppc64/oprofile: common.c op_model_power4.c op_model_rs64.c 
        arch/ppc64/xmon: xmon.c 
        arch/s390      : Kconfig Makefile defconfig 
        arch/s390/kernel: compat_ioctl.c compat_linux.c compat_linux.h 
                          compat_signal.c compat_wrapper.S irq.c 
                          ptrace.c signal.c smp.c syscalls.S 
        arch/s390/mm   : init.c 
        arch/sh        : Kconfig Makefile 
        arch/sh/boards/hp6xx/hp620: Makefile 
        arch/sh/boards/se/7300: io.c 
        arch/sh/boards/sh03: rtc.c 
        arch/sh/boards/snapgear: setup.c 
        arch/sh/configs: adx_defconfig cqreek_defconfig 
                         dreamcast_defconfig hp680_defconfig 
                         microdev_defconfig rts7751r2d_defconfig 
                         se7300_defconfig se73180_defconfig 
                         se7705_defconfig se7751_defconfig 
                         sh03_defconfig snapgear_defconfig 
                         systemh_defconfig 
        arch/sh/drivers/pci: fixups-sh03.c pci-sh7751.c pci-st40.c 
        arch/sh/kernel : cpufreq.c irq.c ptrace.c setup.c sh_ksyms.c 
                         signal.c smp.c time.c 
        arch/sh/mm     : cache-sh4.c cache-sh7705.c hugetlbpage.c init.c 
                         pg-sh4.c pg-sh7705.c 
        arch/sh64      : Kconfig Kconfig.debug Makefile 
        arch/sh64/configs: cayman_defconfig 
        arch/sh64/kernel: Makefile dma.c early_printk.c entry.S head.S 
                          irq.c pci_sh5.c pcibios.c process.c ptrace.c 
                          setup.c sh_ksyms.c signal.c switchto.S 
                          sys_sh64.c syscalls.S time.c traps.c 
        arch/sh64/lib  : Makefile copy_user_memcpy.S dbg.c io.c 
                         page_clear.S page_copy.S 
        arch/sh64/mach-cayman: Makefile irq.c setup.c 
        arch/sh64/mm   : cache.c extable.c fault.c hugetlbpage.c init.c 
                         ioremap.c tlbmiss.c 
        arch/sh64/oprofile: op_model_null.c 
        arch/sparc/kernel: ioport.c ptrace.c signal.c smp.c sun4d_smp.c 
                           sun4m_smp.c sys_sparc.c sys_sunos.c 
                           unaligned.c 
        arch/sparc/mm  : generic.c highmem.c init.c srmmu.c sun4c.c 
        arch/sparc64   : defconfig 
        arch/sparc64/kernel: binfmt_aout32.c central.c ioctl32.c irq.c 
                             module.c pci.c pci_schizo.c signal.c 
                             signal32.c smp.c sys_sparc32.c time.c 
        arch/sparc64/mm: generic.c hugetlbpage.c init.c tlb.c 
        arch/um        : Kconfig.debug Kconfig_char Makefile defconfig 
        arch/um/drivers: Makefile chan_kern.c cow_user.c fd.c net_kern.c 
                         null.c port_kern.c port_user.c pty.c 
                         slirp_kern.c tty.c ubd_kern.c xterm.c 
                         xterm_kern.c 
        arch/um/include: kern.h registers.h tlb.h um_mmu.h um_uaccess.h 
        arch/um/include/sysdep-i386: checksum.h ptrace.h ptrace_user.h 
        arch/um/include/sysdep-x86_64: checksum.h ptrace.h ptrace_user.h 
        arch/um/kernel : Makefile checksum.c gmon_syms.c mem.c physmem.c 
                         process.c process_kern.c ptrace.c smp.c 
                         sys_call_table.c syscall_kern.c syscall_user.c 
                         tlb.c trap_user.c user_util.c 
        arch/um/kernel/skas: mem_user.c process.c syscall_user.c tlb.c 
        arch/um/kernel/skas/include: skas.h 
        arch/um/kernel/tt: exec_user.c gdb.c mem.c process_kern.c 
                           syscall_kern.c syscall_user.c tlb.c tracer.c 
                           trap_user.c 
        arch/um/kernel/tt/include: tt.h 
        arch/um/kernel/tt/ptproxy: proxy.c ptrace.c sysdep.c wait.c 
        arch/um/os-Linux: process.c 
        arch/um/os-Linux/sys-i386: registers.c 
        arch/um/os-Linux/sys-x86_64: registers.c 
        arch/um/sys-i386: ldt.c ptrace.c ptrace_user.c signal.c 
                          syscalls.c 
        arch/um/sys-ppc: ptrace_user.c 
        arch/um/sys-x86_64: ptrace_user.c signal.c syscalls.c 
        arch/v850/kernel: setup.c signal.c syscalls.c 
        arch/x86_64    : Kconfig defconfig 
        arch/x86_64/ia32: ia32_aout.c ia32_signal.c ia32entry.S 
                          sys_ia32.c 
        arch/x86_64/kernel: apic.c asm-offsets.c entry.S i8259.c 
                            io_apic.c module.c mpparse.c msr.c 
                            pci-gart.c process.c ptrace.c semaphore.c 
                            setup.c signal.c smpboot.c suspend_asm.S 
                            time.c x8664_ksyms.c 
        arch/x86_64/kernel/acpi: sleep.c 
        arch/x86_64/mm : extable.c ioremap.c 
        arch/x86_64/pci: mmconfig.c 
        crypto         : Kconfig Makefile aes.c cast5.c cast6.c 
                         michael_mic.c serpent.c sha1.c sha256.c 
                         tcrypt.c tcrypt.h 
        drivers        : Makefile 
        drivers/acorn/char: i2c.c pcf8583.c 
        drivers/acpi   : Kconfig 
        drivers/atm    : ambassador.c atmtcp.c firestream.c fore200e.c 
                         fore200e.h he.c horizon.c idt77252.c iphase.c 
                         lanai.c nicstar.c zatm.c 
        drivers/base   : bus.c class.c class_simple.c driver.c map.c 
                         platform.c sys.c transport_class.c 
        drivers/block  : Kconfig as-iosched.c cciss.c cciss.h 
                         cciss_scsi.c cciss_scsi.h cfq-iosched.c 
                         cpqarray.c deadline-iosched.c elevator.c 
                         floppy.c genhd.c ll_rw_blk.c loop.c nbd.c 
                         pktcdvd.c rd.c umem.c viodasd.c xd.c 
        drivers/block/aoe: aoe.h aoeblk.c aoechr.c aoecmd.c 
        drivers/block/paride: pcd.c pd.c pf.c pg.c pt.c 
        drivers/bluetooth: bfusb.c bluecard_cs.c hci_usb.c hci_vhci.c 
        drivers/cdrom  : cdu31a.c mcd.c sbpcd.c sjcd.c 
        drivers/char   : Kconfig Makefile consolemap.c esp.c 
                         generic_nvram.c hvsi.c isicom.c istallion.c 
                         keyboard.c lp.c mem.c mmtimer.c moxa.c mxser.c 
                         n_hdlc.c nwflash.c random.c rtc.c s3c2410-rtc.c 
                         selection.c snsc.c specialix.c stallion.c sx.c 
                         synclinkmp.c sysrq.c tty_io.c vc_screen.c vt.c 
                         vt_ioctl.c 
        drivers/char/agp: Kconfig Makefile agp.h ali-agp.c alpha-agp.c 
                          amd-k7-agp.c amd64-agp.c ati-agp.c backend.c 
                          efficeon-agp.c frontend.c generic.c hp-agp.c 
                          i460-agp.c intel-agp.c nvidia-agp.c sis-agp.c 
                          sworks-agp.c uninorth-agp.c via-agp.c 
        drivers/char/drm: drmP.h drm_agpsupport.c drm_auth.c drm_bufs.c 
                          drm_context.c drm_drv.c drm_fops.c drm_ioctl.c 
                          drm_irq.c drm_lock.c drm_memory.c 
                          drm_os_linux.h drm_pciids.h drm_proc.c 
                          drm_scatter.c drm_stub.c drm_vm.c i810_dma.c 
                          i810_drv.c i810_drv.h i830_dma.c i830_drv.c 
                          i830_drv.h i830_irq.c i915_drv.c mga_dma.c 
                          mga_drv.c mga_drv.h mga_state.c r128_cce.c 
                          r128_drv.c r128_drv.h r128_state.c radeon_cp.c 
                          radeon_drm.h radeon_drv.c radeon_drv.h 
                          radeon_irq.c radeon_state.c sis_drv.c 
                          sis_drv.h sis_ds.c sis_ds.h sis_mm.c 
                          tdfx_drv.c 
        drivers/char/ftape/lowlevel: fdc-io.c 
        drivers/char/ipmi: ipmi_msghandler.c ipmi_si_intf.c 
        drivers/char/mwave: smapi.c 
        drivers/char/rio: rio_linux.c 
        drivers/char/watchdog: Kconfig Makefile machzwd.c pcwd_pci.c 
                               pcwd_usb.c s3c2410_wdt.c sa1100_wdt.c 
                               sc1200wdt.c scx200_wdt.c 
        drivers/cpufreq: Kconfig 
        drivers/eisa   : pci_eisa.c 
        drivers/firmware: efivars.c 
        drivers/i2c    : i2c-core.c i2c-dev.c i2c-sensor-detect.c 
        drivers/i2c/algos: i2c-algo-ite.c i2c-algo-pca.c i2c-algo-pcf.c 
                           i2c-algo-sgi.c 
        drivers/i2c/busses: Kconfig Makefile i2c-au1550.c i2c-elektor.c 
                            i2c-ibm_iic.c i2c-iop3xx.c i2c-ixp4xx.c 
                            i2c-keywest.c i2c-mpc.c i2c-nforce2.c 
                            i2c-s3c2410.c 
        drivers/i2c/chips: Kconfig Makefile adm1021.c adm1025.c 
                           adm1026.c adm1031.c asb100.c ds1621.c 
                           eeprom.c fscher.c gl518sm.c isp1301_omap.c 
                           it87.c lm63.c lm75.c lm77.c lm78.c lm80.c 
                           lm83.c lm85.c lm87.c lm90.c max1619.c 
                           pc87360.c pcf8574.c pcf8591.c rtc8564.c 
                           smsc47b397.c smsc47m1.c via686a.c w83627hf.c 
                           w83781d.c w83l785ts.c 
        drivers/ide    : Kconfig ide-cd.c ide-default.c ide-disk.c 
                         ide-floppy.c ide-io.c ide-iops.c ide-probe.c 
                         ide-proc.c ide-tape.c ide-taskfile.c ide.c 
        drivers/ide/arm: icside.c rapide.c 
        drivers/ide/pci: sgiioc4.c 
        drivers/ide/ppc: pmac.c 
        drivers/ieee1394: Kconfig amdtp.c config_roms.c csr1212.c dma.c 
                          dv1394.c eth1394.c highlevel.c ieee1394.h 
                          ieee1394_core.c ieee1394_core.h 
                          ieee1394_transactions.c nodemgr.c nodemgr.h 
                          ohci1394.c pcilynx.c raw1394.c sbp2.c sbp2.h 
                          video1394.c 
        drivers/infiniband/core: agent.c agent_priv.h cache.c mad.c 
                                 mad_priv.h smi.c 
        drivers/infiniband/hw/mthca: Makefile mthca_av.c mthca_cmd.c 
                                     mthca_cmd.h mthca_config_reg.h 
                                     mthca_cq.c mthca_dev.h 
                                     mthca_doorbell.h mthca_eq.c 
                                     mthca_main.c mthca_memfree.c 
                                     mthca_memfree.h mthca_mr.c 
                                     mthca_profile.c mthca_provider.c 
                                     mthca_provider.h mthca_qp.c 
                                     mthca_reset.c 
        drivers/infiniband/include: ib_verbs.h 
        drivers/infiniband/ulp/ipoib: ipoib.h ipoib_ib.c ipoib_main.c 
                                      ipoib_multicast.c ipoib_verbs.c 
        drivers/input  : Kconfig evbug.c evdev.c input.c joydev.c 
                         mousedev.c power.c tsdev.c 
        drivers/input/gameport: Kconfig cs461x.c emu10k1-gp.c fm801-gp.c 
                                gameport.c lightning.c ns558.c vortex.c 
        drivers/input/joystick: Kconfig a3d.c adi.c analog.c cobra.c 
                                db9.c gamecon.c gf2k.c grip.c grip_mp.c 
                                guillemot.c interact.c joydump.c 
                                magellan.c sidewinder.c spaceball.c 
                                spaceorb.c stinger.c tmdc.c turbografx.c 
                                twidjoy.c warrior.c 
        drivers/input/joystick/iforce: iforce-serio.c 
        drivers/input/keyboard: Kconfig Makefile atkbd.c hpps2atkbd.h 
                                lkkbd.c newtonkbd.c sunkbd.c xtkbd.c 
        drivers/input/misc: Kconfig Makefile pcspkr.c uinput.c 
        drivers/input/mouse: Kconfig Makefile alps.c alps.h logips2pp.c 
                             psmouse-base.c psmouse.h sermouse.c 
                             synaptics.c synaptics.h vsxxxaa.c 
        drivers/input/serio: Kconfig Makefile ambakmi.c ct82c710.c 
                             gscps2.c i8042-x86ia64io.h i8042.c i8042.h 
                             maceps2.c parkbd.c pcips2.c q40kbd.c 
                             rpckbd.c sa1111ps2.c serio.c serio_raw.c 
                             serport.c 
        drivers/input/touchscreen: Kconfig Makefile gunze.c 
                                   h3600_ts_input.c 
        drivers/isdn   : Makefile 
        drivers/isdn/act2000: act2000_isa.c 
        drivers/isdn/hardware/avm: b1pci.c c4.c t1pci.c 
        drivers/isdn/hisax: Kconfig Makefile hfc_usb.c hisax_fcpcipnp.c 
        drivers/isdn/i4l: Kconfig isdn_common.c isdn_net.c isdn_ppp.c 
        drivers/isdn/icn: icn.c 
        drivers/isdn/isdnloop: isdnloop.c 
        drivers/macintosh: Kconfig Makefile adb.c ans-lcd.c macio_asic.c 
                           macserial.c mediabay.c nvram.c 
                           therm_adt746x.c therm_windtunnel.c via-pmu.c 
        drivers/md     : Kconfig Makefile dm-crypt.c dm-io.c dm-linear.c 
                         dm-raid1.c dm-snap.c dm-stripe.c dm-table.c 
                         dm-zero.c dm.c dm.h md.c raid1.c raid5.c 
                         raid6altivec.uc raid6main.c 
        drivers/media/common: ir-common.c saa7146_core.c saa7146_fops.c 
                              saa7146_hlp.c saa7146_i2c.c saa7146_vbi.c 
                              saa7146_video.c saa7146_vv_ksyms.c 
        drivers/media/dvb: Kconfig 
        drivers/media/dvb/b2c2: b2c2-usb-core.c skystar2.c 
        drivers/media/dvb/bt8xx: bt878.h dst.c dvb-bt8xx.c dvb-bt8xx.h 
        drivers/media/dvb/cinergyT2: cinergyT2.c 
        drivers/media/dvb/dibusb: dvb-dibusb-fe-i2c.c 
                                  dvb-dibusb-firmware.c dvb-dibusb.h 
        drivers/media/dvb/dvb-core: demux.h dmxdev.c dmxdev.h 
                                    dvb_ca_en50221.c dvb_demux.c 
                                    dvb_demux.h dvb_filter.c 
                                    dvb_filter.h dvb_frontend.c 
                                    dvb_frontend.h dvb_net.c dvb_net.h 
                                    dvb_ringbuffer.c dvb_ringbuffer.h 
                                    dvbdev.c dvbdev.h 
        drivers/media/dvb/frontends: Kconfig Makefile at76c651.c 
                                     cx22700.c cx22702.c cx24110.c 
                                     dib3000mb.c dib3000mc.c 
                                     dib3000mc_priv.h dvb_dummy_fe.c 
                                     l64781.c mt312.c mt312.h mt352.c 
                                     mt352.h nxt2002.c nxt2002.h 
                                     nxt6000.c sp8870.c sp887x.c 
                                     stv0297.c stv0299.c tda10021.c 
                                     tda10021.h tda1004x.c tda8083.c 
                                     tda80xx.c ves1820.c ves1820.h 
                                     ves1x93.c 
        drivers/media/dvb/ttpci: av7110.c av7110.h av7110_hw.c 
                                 av7110_ipack.c av7110_ipack.h 
                                 av7110_ir.c av7110_v4l.c budget-av.c 
                                 budget-ci.c budget-core.c 
                                 budget-patch.c budget.c budget.h 
                                 ttpci-eeprom.c 
        drivers/media/dvb/ttusb-budget: Kconfig dvb-ttusb-budget.c 
        drivers/media/dvb/ttusb-dec: Kconfig ttusb_dec.c 
        drivers/media/radio: miropcm20-radio.c radio-sf16fmi.c 
                             radio-zoltrix.c 
        drivers/media/video: Kconfig Makefile adv7170.c adv7175.c 
                             bt819.c bt856.c btcx-risc.c bttv-cards.c 
                             bttv-driver.c bttv-gpio.c bttv-i2c.c bttv.h 
                             bttvp.h c-qcam.c cpia_usb.c ir-kbd-gpio.c 
                             meye.c planb.c saa5246a.c saa5249.c 
                             saa7110.c saa7111.c saa7114.c saa7185.c 
                             stradis.c tda7432.c tda9840.c tda9875.c 
                             tda9887.c tea6415c.c tea6420.c tuner-3036.c 
                             tveeprom.c video-buf.c videodev.c vpx3220.c 
                             zoran_card.c zoran_device.c zoran_driver.c 
                             zr36120.c 
        drivers/media/video/cx88: Makefile cx88-blackbird.c cx88-cards.c 
                                  cx88-core.c cx88-dvb.c cx88-i2c.c 
                                  cx88-mpeg.c cx88-tvaudio.c cx88-vbi.c 
                                  cx88-video.c cx88.h 
        drivers/media/video/ovcamchip: ovcamchip_core.c 
        drivers/media/video/saa7134: Makefile saa6752hs.c 
                                     saa7134-cards.c saa7134-core.c 
                                     saa7134-dvb.c saa7134-empress.c 
                                     saa7134-i2c.c saa7134-input.c 
                                     saa7134-oss.c saa7134-ts.c 
                                     saa7134-tvaudio.c saa7134-vbi.c 
                                     saa7134-video.c saa7134.h 
        drivers/message/fusion: mptbase.c mptbase.h mptctl.c mptscsih.c 
        drivers/message/i2o: pci.c 
        drivers/misc/ibmasm: module.c 
        drivers/mmc    : mmc_sysfs.c 
        drivers/mtd    : Kconfig mtdchar.c 
        drivers/mtd/devices: block2mtd.c 
        drivers/mtd/maps: Kconfig Makefile scx200_docflash.c 
        drivers/net    : 3c503.c 3c505.c 3c509.c 3c515.c 3c527.c 3c59x.c 
                         8139too.c 8390.c Kconfig Makefile amd8111e.c 
                         au1000_eth.c b44.c b44.h cs89x0.c defxx.c 
                         depca.c dgrs.c dl2k.c e100.c eepro100.c 
                         eexpress.c epic100.c es3210.c ethertap.c 
                         ewrk3.c fealnx.c gianfar.c ibmlana.c ibmlana.h 
                         ioc3-eth.c lance.c loopback.c lp486e.c mii.c 
                         mv643xx_eth.c mv643xx_eth.h natsemi.c 
                         ne2k-pci.c ne3210.c ni65.c ns83820.c pcnet32.c 
                         ppp_async.c ppp_deflate.c ppp_generic.c pppoe.c 
                         pppox.c r8169.c s2io.c s2io.h sb1000.c 
                         sb1250-mac.c shaper.c sis900.c sk_mca.c 
                         sk_mca.h slhc.c smc-mca.c smc-ultra.c 
                         smc-ultra32.c smc91x.c smc91x.h sundance.c 
                         sungem.c sungem.h sungem_phy.c sungem_phy.h 
                         sunhme.c tg3.c tg3.h tun.c typhoon-firmware.h 
                         typhoon.c via-rhine.c via-velocity.c wd.c 
        drivers/net/arcnet: arc-rawmode.c arc-rimi.c arcnet.c com20020.c 
                            com90io.c com90xx.c rfc1051.c rfc1201.c 
        drivers/net/arm: ether1.c ether1.h ether3.c ether3.h 
        drivers/net/bonding: bond_3ad.c bond_3ad.h bond_alb.c 
                             bond_main.c 
        drivers/net/e1000: e1000.h e1000_ethtool.c e1000_hw.c e1000_hw.h 
                           e1000_main.c 
        drivers/net/hamradio: 6pack.c baycom_epp.c baycom_par.c 
                              baycom_ser_fdx.c baycom_ser_hdx.c 
                              bpqether.c dmascc.c hdlcdrv.c mkiss.c 
                              yam.c 
        drivers/net/ibm_emac: ibm_emac.h ibm_emac_core.c ibm_emac_core.h 
        drivers/net/irda: act200l-sir.c donauboe.c irda-usb.c irport.c 
                          irport.h irtty-sir.c ma600-sir.c nsc-ircc.c 
                          sir_dev.c smsc-ircc2.c stir4200.c tekram-sir.c 
                          via-ircc.c 
        drivers/net/ixgb: ixgb.h ixgb_ee.c ixgb_ee.h ixgb_ethtool.c 
                          ixgb_hw.c ixgb_hw.h ixgb_ids.h ixgb_main.c 
                          ixgb_osdep.h ixgb_param.c 
        drivers/net/pcmcia: ibmtr_cs.c xirc2ps_cs.c 
        drivers/net/sk98lin: skethtool.c skge.c 
        drivers/net/sk98lin/h: skdrv1st.h 
        drivers/net/tokenring: ibmtr.c 
        drivers/net/tulip: de2104x.c de4x5.c interrupt.c media.c tulip.h 
                           tulip_core.c 
        drivers/net/wan: Kconfig cosa.c hd6457x.c sbni.c wanxl.c 
                         z85230.c 
        drivers/net/wireless: airo.c airport.c arlan.h atmel.c 
                              atmel_cs.c atmel_pci.c hermes.c hermes.h 
                              orinoco.c orinoco.h orinoco_cs.c 
                              orinoco_pci.c orinoco_plx.c orinoco_tmd.c 
                              ray_cs.c strip.c 
        drivers/net/wireless/prism54: Makefile isl_38xx.c isl_ioctl.c 
                                      isl_ioctl.h islpci_dev.c 
                                      islpci_dev.h islpci_mgt.c 
                                      oid_mgt.c oid_mgt.h 
        drivers/oprofile: buffer_sync.c cpu_buffer.c event_buffer.c 
        drivers/parisc : Kconfig Makefile asp.c ccio-dma.c dino.c eisa.c 
                         eisa_eeprom.c gsc.c hppb.c iosapic.c lasi.c 
                         lba_pci.c led.c power.c sba_iommu.c superio.c 
                         wax.c 
        drivers/parport: Kconfig ieee1284.c parport_arc.c parport_gsc.c 
                         parport_pc.c parport_sunbpp.c probe.c 
        drivers/pci    : Kconfig msi.c pci-driver.c pci-sysfs.c pci.c 
                         pci.h pci.ids probe.c proc.c quirks.c 
                         setup-res.c 
        drivers/pci/hotplug: ibmphp_pci.c pciehp_ctrl.c pciehprm_acpi.c 
                             rpadlpar_core.c rpaphp.h rpaphp_core.c 
                             rpaphp_pci.c rpaphp_slot.c rpaphp_vio.c 
                             shpchprm_acpi.c 
        drivers/pci/pcie: Kconfig portdrv_pci.c 
        drivers/pcmcia : Kconfig cs.c cs_internal.h ds.c pd6729.c 
                         pxa2xx_sharpsl.c rsrc_mgr.c rsrc_nonstatic.c 
                         socket_sysfs.c ti113x.h yenta_socket.c 
        drivers/pnp    : core.c interface.c manager.c resource.c 
        drivers/pnp/isapnp: core.c 
        drivers/pnp/pnpbios: core.c proc.c 
        drivers/s390/char: keyboard.c sclp_quiesce.c 
        drivers/s390/cio: chsc.c chsc.h css.c css.h device.c 
                          device_fsm.c device_id.c device_ops.c 
                          device_pgid.c 
        drivers/s390/crypto: z90main.c 
        drivers/s390/net: ctcmain.c ctctty.c iucv.c qeth_main.c 
        drivers/sbus/char: aurora.c openprom.c 
        drivers/scsi   : 3w-xxxx.h 53c700.c 53c700.h Kconfig NCR5380.c 
                         NCR_D700.c advansys.c ahci.c ata_piix.c 
                         atp870u.c atp870u.h cpqfcTSinit.c dc395x.c 
                         dpt_i2o.c hosts.c ide-scsi.c ipr.c ipr.h ips.c 
                         ips.h libata-core.c osst.c psi240i.c psi240i.h 
                         qla1280.c qlogicfc.c qlogicisp.c sata_nv.c 
                         sata_promise.c sata_qstor.c sata_sil.c 
                         sata_sis.c sata_svw.c sata_sx4.c sata_uli.c 
                         sata_via.c sata_vsc.c scsi.c scsi_devinfo.c 
                         scsi_error.c scsi_ioctl.c scsi_lib.c 
                         scsi_scan.c scsi_sysfs.c scsi_transport_fc.c 
                         scsi_transport_iscsi.c scsi_transport_spi.c 
                         sd.c sg.c sim710.c sr.c st.c st.h sym53c416.c 
                         ultrastor.c 
        drivers/scsi/aacraid: linit.c 
        drivers/scsi/arm: arxescsi.c cumana_2.c eesox.c fas216.c 
                          fas216.h powertec.c 
        drivers/scsi/megaraid: megaraid_mm.c 
        drivers/scsi/qla2xxx: qla_os.c 
        drivers/scsi/sym53c8xx_2: Makefile sym53c8xx.h sym_defs.h 
                                  sym_fw.c sym_glue.c sym_glue.h 
                                  sym_hipd.c sym_hipd.h sym_malloc.c 
                                  sym_nvram.c sym_nvram.h 
        drivers/serial : 21285.c 68328serial.c 8250.c 8250_pci.c Kconfig 
                         Makefile crisv10.c mcfserial.c mux.c s3c2410.c 
                         sa1100.c sn_console.c sunsu.c sunzilog.c 
        drivers/serial/cpm_uart: cpm_uart_core.c 
        drivers/tc     : zs.c 
        drivers/usb    : Kconfig Makefile usb-skeleton.c 
        drivers/usb/atm: speedtch.c 
        drivers/usb/class: audio.c cdc-acm.c cdc-acm.h usblp.c 
        drivers/usb/core: config.c devices.c devio.c file.c hcd-pci.c 
                          hcd.c hcd.h hub.c hub.h message.c sysfs.c 
                          usb.c 
        drivers/usb/gadget: Kconfig dummy_hcd.c ether.c gadget_chips.h 
                            net2280.c omap_udc.c pxa2xx_udc.c rndis.c 
                            serial.c zero.c 
        drivers/usb/host: Kconfig ehci-hcd.c ehci-hub.c ehci-q.c 
                          ehci-sched.c ehci.h ohci-au1xxx.c ohci-dbg.c 
                          ohci-hcd.c ohci-lh7a404.c ohci-omap.c 
                          ohci-pxa27x.c ohci-q.c ohci-sa1111.c ohci.h 
                          sl811-hcd.c uhci-debug.c uhci-hcd.c 
        drivers/usb/image: mdc800.c 
        drivers/usb/input: aiptek.c ati_remote.c hid-core.c hid-debug.h 
                           hid-ff.c hid-input.c hid-lgff.c hid.h 
                           hiddev.c mtouchusb.c pid.c pid.h powermate.c 
                           touchkitusb.c usbkbd.c usbmouse.c wacom.c 
        drivers/usb/media: Kconfig Makefile ibmcam.c konicawc.c ov511.c 
                           se401.c sn9c102.h sn9c102_core.c ultracam.c 
                           vicam.c w9968cf.h 
        drivers/usb/misc: Kconfig Makefile auerswald.c cytherm.c 
                          idmouse.c legousbtower.c phidgetkit.c 
                          phidgetservo.c rio500.c usblcd.c usbled.c 
                          usbtest.c uss720.c 
        drivers/usb/net: Kconfig Makefile catc.c kaweth.c pegasus.c 
                         pegasus.h rtl8150.c usbnet.c 
        drivers/usb/serial: belkin_sa.c cyberjack.c cypress_m8.c ezusb.c 
                            ftdi_sio.c ftdi_sio.h io_edgeport.c io_ti.c 
                            ipaq.c ipw.c ir-usb.c keyspan_pda.c 
                            kl5kusb105.c kobil_sct.c mct_u232.c 
                            ti_usb_3410_5052.c visor.c whiteheat.c 
        drivers/usb/storage: Kconfig Makefile protocol.c scsiglue.c 
                             shuttle_usbat.c shuttle_usbat.h transport.c 
                             transport.h unusual_devs.h usb.c usb.h 
        drivers/video  : Kconfig Makefile amifb.c asiliantfb.c 
                         cfbcopyarea.c cfbfillrect.c cirrusfb.c 
                         cyber2000fb.c fbmem.c fbmon.c fbsysfs.c hgafb.c 
                         hitfb.c imsttfb.c modedb.c neofb.c offb.c 
                         pm2fb.c pm3fb.c pvr2fb.c radeonfb.c 
                         skeletonfb.c sstfb.c stifb.c sun3fb.c tdfxfb.c 
                         tridentfb.c vesafb.c vfb.c w100fb.c 
        drivers/video/aty: aty128fb.c atyfb.h atyfb_base.c mach64_ct.c 
                           mach64_cursor.c radeon_base.c 
                           radeon_monitor.c radeon_pm.c radeonfb.h 
        drivers/video/backlight: backlight.c corgi_bl.c lcd.c 
        drivers/video/console: Kconfig Makefile bitblit.c dummycon.c 
                               fbcon.c fbcon.h mdacon.c promcon.c 
                               sticon.c sticore.c tileblit.c vgacon.c 
        drivers/video/i810: i810_gtf.c i810_main.c 
        drivers/video/intelfb: intelfb.h intelfbdrv.c intelfbdrv.h 
                               intelfbhw.c intelfbhw.h 
        drivers/video/kyro: STG4000InitDevice.c STG4000OverlayDevice.c 
                            STG4000Ramdac.c fbdev.c 
        drivers/video/logo: Kconfig Makefile logo.c 
        drivers/video/matrox: matroxfb_base.c matroxfb_base.h 
        drivers/video/riva: fbdev.c rivafb-i2c.c 
        drivers/video/savage: Makefile savagefb-i2c.c savagefb_accel.c 
        drivers/video/sis: sis_main.c 
        drivers/w1     : dscore.c dscore.h matrox_w1.c w1.c w1.h 
                         w1_family.c w1_int.c w1_therm.c 
        fs             : aio.c binfmt_aout.c binfmt_elf.c bio.c buffer.c 
                         char_dev.c compat.c compat_ioctl.c dcache.c 
                         direct-io.c dquot.c eventpoll.c exec.c inode.c 
                         locks.c mpage.c namei.c namespace.c quota.c 
                         select.c seq_file.c super.c 
        fs/adfs        : dir_f.c 
        fs/afs         : main.c 
        fs/autofs4     : root.c waitq.c 
        fs/cifs        : AUTHORS CHANGES Makefile README asn1.c 
                         cifs_debug.c cifs_fs_sb.h cifsencrypt.c 
                         cifsfs.c cifsfs.h cifspdu.h cifsproto.h 
                         cifssmb.c connect.c fcntl.c file.c inode.c 
                         md4.c misc.c netmisc.c readdir.c smbdes.c 
                         smbencrypt.c transport.c xattr.c 
        fs/cramfs      : inode.c 
        fs/debugfs     : file.c 
        fs/exportfs    : expfs.c 
        fs/ext2        : inode.c 
        fs/ext3        : balloc.c hash.c ialloc.c 
        fs/fat         : Makefile cache.c dir.c file.c inode.c misc.c 
        fs/hfs         : brec.c btree.h catalog.c dir.c extent.c 
                         hfs_fs.h inode.c super.c 
        fs/hfsplus     : bnode.c brec.c dir.c extents.c hfsplus_fs.h 
                         inode.c super.c 
        fs/hostfs      : Makefile hostfs_kern.c hostfs_user.c 
        fs/hpfs        : alloc.c dentry.c dnode.c hpfs_fn.h inode.c 
                         name.c super.c 
        fs/isofs       : inode.c rock.c 
        fs/jbd         : commit.c journal.c transaction.c 
        fs/jffs        : inode-v23.c intrep.c intrep.h jffs_fm.c 
                         jffs_fm.h 
        fs/jffs2       : compr.c compr.h compr_rtime.c erase.c file.c 
                         fs.c nodelist.h os-linux.h wbuf.c 
        fs/jfs         : inode.c jfs_logmgr.c jfs_metapage.c 
                         jfs_txnmgr.c super.c 
        fs/lockd       : clntproc.c host.c svc.c 
        fs/msdos       : namei.c 
        fs/ncpfs       : ncplib_kernel.c ncpsign_kernel.c 
        fs/nfs         : callback.c dir.c file.c inode.c mount_clnt.c 
                         nfs3proc.c nfs4proc.c nfs4state.c nfs4xdr.c 
                         nfsroot.c proc.c read.c unlink.c write.c 
        fs/nfsd        : export.c lockd.c nfs3proc.c nfs3xdr.c 
                         nfs4callback.c nfs4proc.c nfs4state.c nfs4xdr.c 
                         nfscache.c nfsfh.c nfsproc.c nfssvc.c vfs.c 
        fs/partitions  : msdos.c 
        fs/proc        : array.c base.c inode.c kcore.c proc_misc.c 
                         task_mmu.c 
        fs/qnx4        : bitmap.c inode.c 
        fs/reiserfs    : inode.c journal.c namei.c xattr.c xattr_acl.c 
        fs/sysfs       : inode.c mount.c 
        fs/ufs         : super.c 
        fs/vfat        : namei.c 
        fs/xfs         : xfs_da_btree.c 
        fs/xfs/linux-2.6: xfs_linux.h 
        include/asm-alpha: bitops.h cacheflush.h io.h pci.h pgtable.h 
                           resource.h system.h timex.h uaccess.h 
                           unistd.h 
        include/asm-arm: cacheflush.h ecard.h io.h ipc.h pgtable.h rtc.h 
                         system.h timex.h uaccess.h unistd.h 
        include/asm-arm/arch-ixp2000: entry-macro.S io.h ixdp2x00.h 
                                      ixdp2x01.h ixp2000-regs.h 
                                      platform.h system.h vmalloc.h 
        include/asm-arm/arch-ixp4xx: platform.h 
        include/asm-arm/arch-pxa: corgi.h idp.h irqs.h 
        include/asm-arm/arch-rpc: hardware.h 
        include/asm-arm/arch-s3c2410: debug-macro.S entry-macro.S 
                                      hardware.h io.h irqs.h map.h 
                                      regs-clock.h regs-gpio.h 
                                      regs-iis.h regs-irq.h regs-lcd.h 
                                      regs-mem.h regs-rtc.h 
                                      regs-serial.h regs-timer.h 
                                      regs-udc.h regs-watchdog.h 
                                      system.h uncompress.h 
        include/asm-arm/hardware: locomo.h scoop.h 
        include/asm-arm26: cacheflush.h io.h pgtable.h system.h timex.h 
                           uaccess.h unistd.h 
        include/asm-cris: cacheflush.h io.h pgtable.h system.h uaccess.h 
                          unistd.h 
        include/asm-frv: cacheflush.h highmem.h io.h pgtable.h system.h 
                         uaccess.h unistd.h 
        include/asm-generic: 4level-fixup.h pgtable-nopmd.h 
                             pgtable-nopud.h pgtable.h resource.h 
                             siginfo.h 
        include/asm-h8300: cacheflush.h io.h system.h uaccess.h 
        include/asm-i386: acpi.h cacheflush.h cpu.h highmem.h hpet.h 
                          i387.h io.h mc146818rtc.h module.h mpspec.h 
                          pgtable-2level.h pgtable-3level.h pgtable.h 
                          processor.h semaphore.h signal.h smp.h 
                          suspend.h system.h thread_info.h timex.h 
                          topology.h uaccess.h unistd.h 
        include/asm-i386/mach-default: mach_traps.h 
        include/asm-ia64: bitops.h cacheflush.h pci.h pgtable.h system.h 
                          uaccess.h unistd.h 
        include/asm-m32r: bug.h cacheflush.h io.h pgtable-2level.h 
                          pgtable.h system.h timex.h uaccess.h unistd.h 
        include/asm-m68k: cacheflush.h io.h motorola_pgtable.h pgtable.h 
                          sun3_pgtable.h system.h uaccess.h unistd.h 
        include/asm-m68knommu: cacheflush.h io.h system.h uaccess.h 
                               unistd.h 
        include/asm-mips: cacheflush.h io.h pci.h pgtable.h resource.h 
                          system.h thread_info.h timex.h uaccess.h 
                          unistd.h 
        include/asm-parisc: assembly.h bitops.h cacheflush.h checksum.h 
                            compat.h dma-mapping.h dma.h eisa_eeprom.h 
                            hardirq.h hardware.h ide.h io.h irq.h led.h 
                            module.h numnodes.h parisc-device.h pci.h 
                            pdc_chassis.h pdcpat.h pgtable.h serial.h 
                            signal.h spinlock.h system.h thread_info.h 
                            timex.h uaccess.h unistd.h unwind.h 
        include/asm-ppc: cache.h cacheflush.h cpm2.h cputable.h 
                         highmem.h io.h irq.h machdep.h mmu.h 
                         mv64x60_defs.h pci.h pgtable.h pmac_feature.h 
                         ppc4xx_pic.h ppc_sys.h ppcboot.h reg.h 
                         reg_booke.h serial.h system.h timex.h todc.h 
                         uaccess.h uninorth.h unistd.h 
        include/asm-ppc64: a.out.h cacheflush.h cputable.h dma-mapping.h 
                           eeh.h elf.h io.h iommu.h kprobes.h lmb.h 
                           machdep.h mmu_context.h page.h pci.h 
                           pgalloc.h pgtable.h processor.h prom.h rtas.h 
                           sections.h smp.h system.h systemcfg.h time.h 
                           uaccess.h unistd.h vio.h 
        include/asm-s390: cacheflush.h io.h pgalloc.h pgtable.h 
                          posix_types.h smp.h system.h timex.h uaccess.h 
                          unistd.h 
        include/asm-sh : bitops.h bug.h cacheflush.h dma-mapping.h 
                         hardirq.h io.h irq.h mc146818rtc.h 
                         pgtable-2level.h pgtable.h system.h timex.h 
                         uaccess.h unistd.h 
        include/asm-sh/cpu-sh2: cacheflush.h 
        include/asm-sh/cpu-sh3: cacheflush.h freq.h 
        include/asm-sh/cpu-sh4: cacheflush.h 
        include/asm-sh64: bug.h cacheflush.h elf.h hardirq.h hardware.h 
                          ide.h io.h ioctls.h irq.h module.h pgtable.h 
                          system.h thread_info.h timex.h uaccess.h 
                          unistd.h 
        include/asm-sparc: cacheflush.h io.h mostek.h pgtable.h 
                           resource.h system.h timex.h uaccess.h 
                           unistd.h 
        include/asm-sparc64: bugs.h cacheflush.h io.h mostek.h pci.h 
                             pgalloc.h pgtable.h resource.h siginfo.h 
                             smp.h system.h uaccess.h unistd.h 
        include/asm-um : io.h pgtable-2level.h pgtable-3level.h 
                         pgtable.h timex.h 
        include/asm-v850: cacheflush.h io.h system.h uaccess.h unistd.h 
        include/asm-x86_64: acpi.h cacheflush.h io.h mpspec.h pgtable.h 
                            processor.h suspend.h system.h thread_info.h 
                            timex.h uaccess.h unistd.h 
        include/linux  : ac97_codec.h acct.h agp_backend.h aio_abi.h 
                         atalk.h atmdev.h audit.h bio.h bitmap.h 
                         bitops.h blkdev.h buffer_head.h capability.h 
                         compat.h compat_ioctl.h compiler-gcc3.h 
                         compiler.h console_struct.h consolemap.h 
                         cpumask.h dcache.h device.h dqblk_xfs.h efi.h 
                         elevator.h etherdevice.h ext3_jbd.h fb.h 
                         fcdevice.h fs.h gameport.h generic_serial.h 
                         hayesesp.h hiddev.h i2c-id.h i2c.h ibmtr.h 
                         ide.h if_ec.h if_pppox.h inetdevice.h 
                         init_task.h input.h ioport.h ip.h ipmi_smi.h 
                         ipv6.h isapnp.h jbd.h jffs.h journal-head.h 
                         joystick.h kernel.h key.h keyboard.h kfifo.h 
                         kobj_map.h kobject.h kref.h loop.h major.h 
                         mii.h mm.h mmzone.h mod_devicetable.h module.h 
                         moduleparam.h mpage.h msdos_fs.h mtio.h 
                         mv643xx.h namei.h net.h netdevice.h netfilter.h 
                         nfs_fs.h nfs_fs_sb.h nfs_xdr.h nodemask.h 
                         page-flags.h parport.h pci.h pci_ids.h 
                         personality.h pkt_cls.h pm.h pnp.h poll.h 
                         posix-timers.h qnx4_fs.h random.h 
                         reiserfs_fs_i.h reiserfs_xattr.h rtnetlink.h 
                         sched.h scx200.h scx200_gpio.h security.h 
                         seq_file.h serial_core.h serio.h signal.h 
                         skbuff.h slab.h smp.h stallion.h stop_machine.h 
                         suspend.h sysctl.h sysrq.h tcp.h threads.h 
                         timex.h topology.h transport_class.h uinput.h 
                         usb.h usbdevice_fs.h videodev2.h vmalloc.h 
                         vt_kern.h wait.h workqueue.h writeback.h 
        include/linux/dvb: audio.h ca.h dmx.h frontend.h net.h osd.h 
                           version.h video.h 
        include/linux/lockd: lockd.h 
        include/linux/netfilter_arp: arp_tables.h 
        include/linux/netfilter_ipv4: ip_conntrack_tcp.h ip_tables.h 
        include/linux/netfilter_ipv6: ip6_tables.h 
        include/linux/nfsd: cache.h nfsd.h state.h xdr4.h 
        include/linux/sunrpc: auth.h auth_gss.h cache.h clnt.h gss_api.h 
                              sched.h svc.h svcauth.h xprt.h 
        include/media  : ir-common.h saa6752hs.h saa7146.h saa7146_vv.h 
                         tuner.h 
        include/net    : addrconf.h checksum.h dn.h dst.h ipv6.h 
                         llc_conn.h ndisc.h neighbour.h netrom.h 
                         pkt_cls.h route.h scm.h slhc_vj.h sock.h tcp.h 
                         tcp_ecn.h x25.h xfrm.h 
        include/net/bluetooth: hci_core.h 
        include/net/irda: af_irda.h 
        include/pcmcia : ds.h ss.h 
        include/scsi   : scsi.h scsi_cmnd.h scsi_device.h scsi_devinfo.h 
                         scsi_driver.h scsi_host.h scsi_transport.h 
                         scsi_transport_fc.h scsi_transport_spi.h 
        include/sound  : ac97_codec.h ak4117.h ak4xxx-adda.h control.h 
                         core.h cs46xx.h emu10k1.h gus.h hwdep.h 
                         mixer_oss.h mpu401.h rawmidi.h seq_virmidi.h 
                         trident.h ymfpci.h 
        include/video  : kyro.h pm3fb.h 
        init           : Kconfig do_mounts.c main.c 
        ipc            : compat_mq.c msg.c sem.c shm.c 
        kernel         : Makefile acct.c audit.c auditsc.c capability.c 
                         compat.c exit.c fork.c futex.c intermodule.c 
                         itimer.c kallsyms.c kfifo.c module.c panic.c 
                         posix-timers.c printk.c resource.c sched.c 
                         signal.c softirq.c sys.c sys_ni.c sysctl.c 
                         timer.c user.c workqueue.c 
        kernel/power   : disk.c main.c pm.c poweroff.c smp.c swsusp.c 
        lib            : Kconfig.debug Makefile bitmap.c extable.c 
                         kernel_lock.c kobject.c kref.c rwsem-spinlock.c 
                         rwsem.c vsprintf.c 
        mm             : filemap.c fremap.c highmem.c memory.c 
                         mempolicy.c mempool.c mincore.c mlock.c mmap.c 
                         mprotect.c mremap.c msync.c nommu.c 
                         page-writeback.c page_alloc.c readahead.c 
                         rmap.c shmem.c slab.c swap_state.c swapfile.c 
                         thrash.c truncate.c vmalloc.c vmscan.c 
        net            : Kconfig socket.c 
        net/802        : fc.c 
        net/appletalk  : ddp.c 
        net/atm        : atm_misc.c br2684.c clip.c common.c ioctl.c 
                         lec.c mpc.c pppoatm.c proc.c raw.c signaling.c 
                         svc.c 
        net/ax25       : af_ax25.c ax25_in.c ax25_route.c 
        net/bluetooth  : af_bluetooth.c hci_conn.c hci_event.c 
                         hci_sysfs.c l2cap.c sco.c 
        net/bluetooth/rfcomm: sock.c 
        net/bridge     : br.c br_device.c br_fdb.c br_if.c br_input.c 
                         br_ioctl.c br_netfilter.c br_private.h 
                         br_stp_if.c 
        net/bridge/netfilter: ebtables.c 
        net/core       : dev.c neighbour.c netfilter.c pktgen.c skbuff.c 
                         sock.c 
        net/decnet     : af_decnet.c dn_route.c 
        net/econet     : af_econet.c 
        net/ipv4       : ah4.c arp.c devinet.c esp4.c fib_hash.c icmp.c 
                         ip_gre.c ip_input.c ip_output.c ip_sockglue.c 
                         ipcomp.c ipip.c raw.c route.c syncookies.c 
                         tcp.c tcp_input.c tcp_ipv4.c tcp_minisocks.c 
                         tcp_output.c tcp_timer.c udp.c xfrm4_output.c 
                         xfrm4_policy.c xfrm4_state.c xfrm4_tunnel.c 
        net/ipv4/ipvs  : ip_vs_core.c ip_vs_ctl.c ip_vs_wrr.c 
                         ip_vs_xmit.c 
        net/ipv4/netfilter: arp_tables.c ip_conntrack_proto_sctp.c 
                            ip_conntrack_proto_tcp.c 
                            ip_conntrack_standalone.c ip_queue.c 
                            ip_tables.c ipt_LOG.c ipt_REJECT.c 
                            ipt_hashlimit.c 
        net/ipv6       : addrconf.c af_inet6.c ah6.c anycast.c esp6.c 
                         icmp.c ip6_fib.c ip6_input.c ip6_output.c 
                         ip6_tunnel.c ipcomp6.c ipv6_sockglue.c ndisc.c 
                         raw.c route.c sit.c tcp_ipv6.c udp.c 
                         xfrm6_output.c xfrm6_policy.c xfrm6_state.c 
                         xfrm6_tunnel.c 
        net/ipv6/netfilter: Kconfig ip6_queue.c ip6_tables.c 
        net/ipx        : af_ipx.c 
        net/irda       : af_irda.c 
        net/irda/ircomm: ircomm_tty.c 
        net/irda/irnet : irnet_irda.c irnet_ppp.c 
        net/key        : af_key.c 
        net/llc        : af_llc.c llc_c_ac.c llc_c_ev.c llc_conn.c 
                         llc_if.c llc_proc.c llc_sap.c 
        net/netlink    : af_netlink.c 
        net/netrom     : af_netrom.c nr_in.c 
        net/packet     : af_packet.c 
        net/rose       : af_rose.c rose_route.c 
        net/rxrpc      : main.c 
        net/sched      : Kconfig Makefile cls_u32.c sch_atm.c 
        net/sctp       : endpointola.c input.c ipv6.c protocol.c 
                         transport.c 
        net/sunrpc     : auth.c auth_null.c auth_unix.c cache.c clnt.c 
                         pmap_clnt.c sched.c sunrpc_syms.c svc.c 
                         svcauth.c svcauth_unix.c xprt.c 
        net/sunrpc/auth_gss: auth_gss.c gss_krb5_mech.c 
                             gss_mech_switch.c gss_spkm3_mech.c 
                             svcauth_gss.c 
        net/unix       : af_unix.c 
        net/wanrouter  : af_wanpipe.c 
        net/x25        : af_x25.c x25_facilities.c x25_in.c x25_out.c 
                         x25_proc.c x25_subr.c x25_timer.c 
        net/xfrm       : xfrm_policy.c xfrm_state.c 
        scripts        : Makefile.lib Makefile.modinst checkstack.pl 
                         kernel-doc namespace.pl 
        scripts/genksyms: genksyms.h 
        scripts/kconfig: Makefile gconf.c 
        scripts/lxdialog: checklist.c colors.h lxdialog.c menubox.c 
        scripts/mod    : file2alias.c modpost.c modpost.h sumversion.c 
        security       : dummy.c seclvl.c 
        security/keys  : key.c process_keys.c request_key.c 
        security/selinux: Kconfig hooks.c selinuxfs.c 
        security/selinux/include: av_perm_to_string.h av_permissions.h 
                                  objsec.h security.h 
        security/selinux/ss: Makefile constraint.h context.h mls.c mls.h 
                             mls_types.h policydb.c policydb.h 
                             services.c 
        sound/arm      : sa11xx-uda1341.c 
        sound/core     : Kconfig Makefile control.c hwdep.c init.c 
                         memory.c pcm.c pcm_lib.c pcm_memory.c 
                         pcm_native.c rawmidi.c rtctimer.c sound.c 
                         timer.c 
        sound/core/oss : mixer_oss.c pcm_oss.c 
        sound/core/seq : seq_clientmgr.c seq_dummy.c seq_instr.c 
                         seq_memory.c seq_midi_event.c seq_queue.c 
                         seq_queue.h 
        sound/core/seq/oss: seq_oss.c seq_oss_midi.c seq_oss_readq.c 
                            seq_oss_synth.c seq_oss_writeq.c 
        sound/drivers  : mtpav.c serial-u16550.c 
        sound/drivers/mpu401: mpu401.c mpu401_uart.c 
        sound/drivers/vx: vx_core.c vx_hwdep.c 
        sound/i2c/other: Makefile ak4xxx-adda.c tea575x-tuner.c 
        sound/isa      : Kconfig als100.c es18xx.c opl3sa2.c 
        sound/isa/ad1848: ad1848_lib.c 
        sound/isa/cs423x: cs4231_lib.c 
        sound/isa/gus  : gus_pcm.c gus_reset.c interwave.c 
        sound/isa/sb   : emu8000.c emu8000_patch.c sb8_midi.c 
        sound/isa/wavefront: wavefront_midi.c wavefront_synth.c 
        sound/oss      : ac97_codec.c btaudio.c cmpci.c es1370.c 
                         es1371.c esssolo1.c gus_wave.c harmony.c 
                         mad16.c nm256_audio.c pss.c sb_card.c 
                         sonicvibes.c soundcard.c sscape.c trident.c 
                         wavfront.c 
        sound/oss/cs4281: cs4281m.c 
        sound/oss/dmasound: dac3550a.c 
        sound/parisc   : Kconfig harmony.c 
        sound/pci      : Kconfig Makefile als4000.c atiixp.c 
                         atiixp_modem.c azt3328.c bt87x.c cmipci.c 
                         cs4281.c ens1370.c es1938.c es1968.c fm801.c 
                         intel8x0.c intel8x0m.c maestro3.c sonicvibes.c 
                         via82xx.c via82xx_modem.c 
        sound/pci/ac97 : ac97_codec.c ac97_local.h ac97_patch.c 
                         ac97_patch.h ac97_pcm.c 
        sound/pci/ali5451: ali5451.c 
        sound/pci/au88x0: au88x0.c au88x0.h au88x0_core.c au88x0_game.c 
                          au88x0_pcm.c 
        sound/pci/ca0106: ca0106_main.c 
        sound/pci/cs46xx: cs46xx_lib.c 
        sound/pci/emu10k1: emu10k1.c emu10k1_callback.c emu10k1_main.c 
                           emu10k1x.c emufx.c emumixer.c emumpu401.c 
                           emupcm.c emuproc.c io.c irq.c voice.c 
        sound/pci/ice1712: Makefile ak4xxx.c envy24ht.h ice1712.c 
                           ice1712.h ice1724.c prodigy192.c revo.c 
                           vt1720_mobo.c vt1720_mobo.h 
        sound/pci/korg1212: korg1212.c 
        sound/pci/nm256: nm256.c 
        sound/pci/rme9652: hdsp.c 
        sound/pci/trident: trident.c trident_main.c trident_synth.c 
        sound/pci/vx222: vx222_ops.c 
        sound/pci/ymfpci: ymfpci.c ymfpci_main.c 
        sound/pcmcia/pdaudiocf: pdaudiocf.c pdaudiocf.h pdaudiocf_core.c 
        sound/pcmcia/vx: vx_entry.c vxp_ops.c 
        sound/ppc      : keywest.c pmac.c 
        sound/usb      : usbaudio.c usbaudio.h usbmidi.c usbmixer.c 
                         usbquirks.h 
        sound/usb/usx2y: usX2Yhwdep.c usbusx2yaudio.c 
Added files:
        Documentation  : SecurityBugs cpusets.txt 
        Documentation/aoe: udev-install.sh udev.txt 
        Documentation/arm/Samsung-S3C24XX: H1940.txt SMDK2440.txt 
        Documentation/sound/alsa: VIA82xx-mixer.txt hda_codec.txt 
        arch/arm/configs: pxa255-idp_defconfig 
        arch/arm/mach-pxa: poodle.c 
        arch/arm/mach-s3c2410: mach-n30.c mach-nexcoder.c mach-otom.c 
                               mach-smdk2440.c 
        arch/i386/lib  : putuser.S 
        arch/ppc/boot/simple: misc-radstone_ppc7d.c openbios.c 
        arch/ppc/configs: mpc834x_sys_defconfig radstone_ppc7d_defconfig 
        arch/ppc/kernel: swsusp.S 
        arch/ppc/platforms: radstone_ppc7d.c radstone_ppc7d.h 
        arch/ppc/platforms/83xx: Makefile mpc834x_sys.c mpc834x_sys.h 
                                 mpc83xx_devices.c mpc83xx_sys.c 
        arch/ppc/syslib: ipic.c ipic.h ppc83xx_setup.c ppc83xx_setup.h 
        arch/ppc64/kernel: pmc.c vdso.c 
        arch/ppc64/kernel/vdso32: Makefile cacheflush.S datapage.S 
                                  gettimeofday.S sigtramp.S vdso32.lds.S 
                                  vdso32_wrapper.S 
        arch/ppc64/kernel/vdso64: Makefile cacheflush.S datapage.S 
                                  gettimeofday.S sigtramp.S vdso64.lds.S 
                                  vdso64_wrapper.S 
        arch/sh/boards/hp6xx/hp620: setup.c 
        arch/sh/configs: se7750_defconfig 
        arch/sh64/kernel: module.c 
        arch/sh64/lib  : iomap.c 
        arch/sh64/mach-cayman: iomap.c 
        arch/um/drivers: random.c 
        arch/um/os-Linux/util: Makefile mk_user_constants.c 
        crypto         : tgr192.c 
        drivers/char/agp: sgi-agp.c 
        drivers/char/tpm: Kconfig Makefile tpm.c tpm.h tpm_atmel.c 
                          tpm_nsc.c 
        drivers/i2c/busses: i2c-mv64xxx.c 
        drivers/i2c/chips: fscpos.c gl520sm.c m41t00.c sis5595.c 
        drivers/infiniband/hw/mthca: mthca_uar.c 
        drivers/input/keyboard: corgikbd.c hil_kbd.c hilkbd.c 
                                locomokbd.c 
        drivers/input/misc: hp_sdc_rtc.c 
        drivers/input/mouse: hil_ptr.c 
        drivers/input/serio: hil_mlc.c hp_sdc.c hp_sdc_mlc.c 
        drivers/input/touchscreen: corgi_ts.c elo.c hp680_ts_input.c 
                                   mk712.c mtouch.c 
        drivers/isdn/hisax: hfc4s8s_l1.c hfc4s8s_l1.h hfc_usb.h 
        drivers/macintosh: smu.c 
        drivers/md     : dm-bio-record.h dm-emc.c dm-hw-handler.c 
                         dm-hw-handler.h dm-mpath.c dm-mpath.h 
                         dm-path-selector.c dm-path-selector.h 
                         dm-round-robin.c 
        drivers/media/dvb/frontends: dvb-pll.c dvb-pll.h or51132.c 
                                     or51132.h 
        drivers/media/video: mt20xx.c tda8290.c tuner-core.c 
                             tuner-simple.c 
        drivers/media/video/cx88: cx88-input.c 
        drivers/net/wireless: atmel.h 
        drivers/parisc : pdc_stable.c 
        drivers/parport: parport_gsc.h 
        drivers/serial : ioc4_serial.c 
        drivers/sh     : Makefile 
        drivers/sh/superhyway: Makefile superhyway-sysfs.c superhyway.c 
        drivers/sn     : Makefile ioc4.c 
        drivers/usb/host: ohci-ppc-soc.c uhci-q.c 
        drivers/usb/media/pwc: ChangeLog Makefile philips.txt pwc-ctrl.c 
                               pwc-dec1.c pwc-dec1.h pwc-dec23.c 
                               pwc-dec23.h pwc-if.c pwc-ioctl.h 
                               pwc-kiara.c pwc-kiara.h pwc-misc.c 
                               pwc-nala.h pwc-timon.c pwc-timon.h 
                               pwc-uncompress.c pwc-uncompress.h pwc.h 
        drivers/usb/misc/sisusbvga: Kconfig Makefile sisusb.c sisusb.h 
        drivers/usb/mon: Kconfig Makefile mon_main.c mon_stat.c 
                         mon_text.c usb_mon.h 
        drivers/usb/net: zd1201.c zd1201.h 
        drivers/video/geode: Kconfig Makefile display_gx1.c 
                             display_gx1.h geodefb.h gx1fb_core.c 
                             video_cs5530.c video_cs5530.h 
        drivers/video/nvidia: Makefile nv_accel.c nv_dma.h nv_hw.c 
                              nv_i2c.c nv_local.h nv_of.c nv_proto.h 
                              nv_setup.c nv_type.h nvidia.c 
        drivers/video/savage: savagefb_driver.c 
        fs/cifs        : cifsencrypt.h ioctl.c 
        fs/fat         : fatent.c 
        include/asm-arm/arch-pxa: poodle.h 
        include/asm-arm/arch-s3c2410: otom-map.h regs-adc.h 
        include/asm-ppc: ipic.h mpc83xx.h suspend.h 
        include/asm-ppc64: agp.h pmc.h smu.h vdso.h 
        include/asm-sh/cpu-sh3: timer.h 
        include/asm-sh/cpu-sh4: timer.h 
        include/asm-sh/sh03: ide.h 
        include/linux  : compiler-gcc4.h cpuset.h cryptohash.h 
                         ioc4_common.h seccomp.h sort.h superhyway.h 
                         usb_cdc.h 
        include/linux/tc_ematch: tc_em_cmp.h tc_em_meta.h tc_em_nbyte.h 
        include/sound  : ak4114.h 
        kernel         : cpuset.c posix-cpu-timers.c seccomp.c 
        lib            : halfmd4.c sha1.c sort.c 
        net/sched      : cls_basic.c em_cmp.c em_meta.c em_nbyte.c 
                         em_u32.c ematch.c 
        scripts        : show_delta 
        sound/core     : control_compat.c hwdep_compat.c pcm_compat.c 
                         rawmidi_compat.c timer_compat.c 
        sound/core/seq : seq_compat.c 
        sound/i2c/other: ak4114.c 
        sound/parisc   : harmony.h 
        sound/pci/hda  : Makefile hda_codec.c hda_codec.h hda_generic.c 
                         hda_intel.c hda_local.h hda_patch.h hda_proc.c 
                         patch_cmedia.c patch_realtek.c 
        sound/pci/ice1712: juli.c juli.h phase.c phase.h 
Removed files:
        arch/arm/mach-ixp4xx: prpmc1100-pci.c prpmc1100-setup.c 
        arch/parisc/configs: n4000_defconfig 
        arch/sh        : defconfig 
        arch/sh64      : defconfig 
        arch/sh64/lib  : old-checksum.c 
        drivers/block/paride: setup.h 
        drivers/char   : console_macros.h digi_bios.h digi_fep.h fep.h 
                         hp600_keyb.c pcxx.c pcxx.h tpqic02.c 
        drivers/char/agp: intel-mch-agp.c 
        drivers/isdn/tpam: Kconfig Makefile tpam.h tpam_commands.c 
                           tpam_crcpc.c tpam_hdlc.c tpam_main.c 
                           tpam_memory.c tpam_nco.c tpam_queues.c 
        drivers/media/video: tuner.c 
        drivers/mtd/maps: chestnut.c ich2rom.c 
        drivers/net/fc : Makefile iph5526.c iph5526_ip.h 
                         iph5526_novram.c iph5526_scsi.h tach.h 
                         tach_structs.h 
        drivers/scsi   : qlogicfc.h qlogicisp.h 
        drivers/scsi/sym53c8xx_2: sym_conf.h sym_misc.c 
        drivers/video/savage: savagefb.c 
        include/asm-parisc: parport_gsc.h 
        include/linux  : compiler-gcc+.h dp83840.h tpqic02.h 
        include/sound  : yss225.h 
        net/ipv6       : README 
        sound/core/ioctl32: Makefile hwdep32.c ioctl32.c ioctl32.h 
                            pcm32.c rawmidi32.c seq32.c timer32.c 
        sound/isa/gus  : gus_lfo.c 
        sound/oss      : maestro_tables.h 

Log message:
        Merge with Linux 2.6.12-rc1.

diff -urN linux/CREDITS linux/CREDITS
--- linux/CREDITS       2005/03/02 19:58:00     1.140
+++ linux/CREDITS       2005/03/18 17:36:42     1.141
@@ -34,8 +34,9 @@
 E: airlied@linux.ie
 W: http://www.csn.ul.ie/~airlied
 D: NFS over TCP patches
-S: University of Limerick
-S: Ireland
+D: in-kernel DRM Maintainer
+S: Longford, Ireland
+S: Sydney, Australia
 
 N: Tigran A. Aivazian
 E: tigran@veritas.com
@@ -328,8 +329,6 @@
 S: USA
 
 N: Hennus Bergman
-E: hennus@cybercomm.nl
-W: http://www.cybercomm.nl/~hennus/
 P: 1024/77D50909 76 99 FD 31 91 E1 96 1C  90 BB 22 80 62 F6 BD 63
 D: Author and maintainer of the QIC-02 tape driver
 S: The Netherlands
@@ -841,6 +840,11 @@
 W: http://www.fsmlabs.com/linuxppcbk.html
 D: PowerPC
 
+N: Daniel Drake
+E: dsd@gentoo.org
+D: USBAT02 CompactFlash support in usb-storage
+S: UK
+
 N: Oleg Drokin
 E: green@ccssu.crimea.ua
 W: http://www.ccssu.crimea.ua/~green
@@ -1095,7 +1099,7 @@
 
 N: Kumar Gala
 E: kumar.gala@freescale.com
-D: Embedded PowerPC 6xx/7xx/74xx/82xx/85xx support
+D: Embedded PowerPC 6xx/7xx/74xx/82xx/83xx/85xx support
 S: Austin, Texas 78729
 S: USA
 
@@ -3351,10 +3355,11 @@
 S: USA
 
 N: Matthias Urlichs
-E: urlichs@noris.de
-E: urlichs@smurf.sub.org
+E: smurf@smurf.noris.de
+E: smurf@debian.org
+E: matthias@urlichs.de
 D: Consultant, developer, kernel hacker
-D: Playing with Streams, ISDN, and BSD networking code for Linux
+D: In a previous life, worked on Streams/ISDN/BSD networking code for Linux
 S: Schleiermacherstrasse 12
 S: 90491 Nuernberg
 S: Germany
@@ -3426,6 +3431,7 @@
 E: pe1rxq@amsat.org
 W: http://www.chello.nl/~j.vreeken/
 D: SE401 usb webcam driver
+D: ZD1201 usb wireless lan driver
 S: Maastrichterweg 63
 S: 5554 GG Valkenswaard
 S: The Netherlands
diff -urN linux/MAINTAINERS linux/MAINTAINERS
--- linux/MAINTAINERS   2005/02/13 20:16:13     1.176
+++ linux/MAINTAINERS   2005/03/18 17:36:42     1.177
@@ -80,7 +80,7 @@
 
 3C505 NETWORK DRIVER
 P:     Philip Blundell
-M:     Philip.Blundell@pobox.com
+M:     philb@gnu.org
 L:     linux-net@vger.kernel.org
 S:     Maintained
 
@@ -155,7 +155,7 @@
 
 AIO
 P:     Benjamin LaHaise
-M:     bcrl@redhat.com
+M:     bcrl@kvack.org
 L:     linux-aio@kvack.org
 S:     Supported
 
@@ -457,6 +457,11 @@
 M:     marcel@holtmann.org
 S:     Maintained
 
+BLUETOOTH HCI BPA10X DRIVER
+P:     Marcel Holtmann
+M:     marcel@holtmann.org
+S:     Maintained
+
 BLUETOOTH HCI BFUSB DRIVER
 P:     Marcel Holtmann
 M:     marcel@holtmann.org
@@ -501,7 +506,7 @@
 M:     kraxel@bytesex.org
 L:     video4linux-list@redhat.com
 W:     http://bytesex.org/bttv/
-S:     Maintained
+S:     Orphan
 
 BUSLOGIC SCSI DRIVER
 P:     Leonard N. Zubkoff
@@ -596,11 +601,10 @@
 S:     Maintained
 
 CRYPTO API
-P:     James Morris
-M:     jmorris@redhat.com
+P:     Herbert Xu
+M:     herbert@gondor.apana.org.au
 P:     David S. Miller
 M:     davem@davemloft.net
-W      http://samba.org/~jamesm/crypto/
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
@@ -708,13 +712,6 @@
 W:     http://www.digi.com
 S:     Orphaned
 
-DIGIBOARD PC/XE AND PC/XI DRIVER
-P:     Christoph Lameter
-M:     christoph@lameter.com
-W:     http://www.digi.com
-L:     digilnux@digi.com
-S:     Obsolete
-
 DIRECTORY NOTIFICATION
 P:     Stephen Rothwell
 M:     sfr@canb.auug.org.au
@@ -754,8 +751,10 @@
 S:     Supported
 
 DRM DRIVERS
+P:     David Airlie
+M:     airlied@linux.ie
 L:     dri-devel@lists.sourceforge.net
-S:     Supported
+S:     Maintained
 
 DSCC4 DRIVER
 P:     François Romieu
@@ -814,7 +813,7 @@
 
 ETHEREXPRESS-16 NETWORK DRIVER
 P:     Philip Blundell
-M:     Philip.Blundell@pobox.com
+M:     philb@gnu.org
 L:     linux-net@vger.kernel.org
 S:     Maintained
 
@@ -910,10 +909,17 @@
 W:     http://www.icp-vortex.com/
 S:     Supported
 
-GENERIC HDLC DRIVER, N2 AND C101 DRIVERS
+GENERIC HDLC DRIVER, N2, C101, PCI200SYN and WANXL DRIVERS
 P:     Krzysztof Halasa
 M:     khc@pm.waw.pl
-W:     http://hq.pm.waw.pl/hdlc/
+W:     http://www.kernel.org/pub/linux/utils/net/hdlc/
+S:     Maintained
+
+HARMONY SOUND DRIVER
+P:     Kyle McMartin
+M:     kyle@parisc-linux.org
+W:     http://www.parisc-linux.org/~kyle/harmony/
+L:     parisc-linux@lists.parisc-linux.org
 S:     Maintained
 
 HAYES ESP SERIAL DRIVER
@@ -991,8 +997,8 @@
 I2C AND SENSORS DRIVERS
 P:     Greg Kroah-Hartman
 M:     greg@kroah.com
-P:     Philip Edelbrock
-M:     phil@netroedge.com
+P:     Jean Delvare
+M:     khali@linux-fr.org
 L:     sensors@stimpy.netroedge.com
 W:     http://www.lm-sensors.nu/
 S:     Maintained
@@ -1082,9 +1088,21 @@
 L:     linux-kernel@vger.kernel.org
 S:     Maintained
 
+IEEE 1394 ETHERNET (eth1394)
+L:     linux1394-devel@lists.sourceforge.net
+W:     http://www.linux1394.org/
+S:     Orphan
+
+IEEE 1394 SBP2
+L:     linux1394-devel@lists.sourceforge.net
+W:     http://www.linux1394.org/
+S:     Orphan
+
 IEEE 1394 SUBSYSTEM
 P:     Ben Collins
 M:     bcollins@debian.org
+P:     Jody McIntyre
+M:     scjody@steamballoon.com
 L:     linux1394-devel@lists.sourceforge.net
 W:     http://www.linux1394.org/
 S:     Maintained
@@ -1092,13 +1110,15 @@
 IEEE 1394 OHCI DRIVER
 P:     Ben Collins
 M:     bcollins@debian.org
+P:     Jody McIntyre
+M:     scjody@steamballoon.com
 L:     linux1394-devel@lists.sourceforge.net
 W:     http://www.linux1394.org/
 S:     Maintained
 
 IEEE 1394 PCILYNX DRIVER
-P:     Andreas Bombe
-M:     andreas.bombe@munich.netsurf.de
+P:     Jody McIntyre
+M:     scjody@steamballoon.com
 L:     linux1394-devel@lists.sourceforge.net
 W:     http://www.linux1394.org/
 S:     Maintained
@@ -1106,6 +1126,8 @@
 IEEE 1394 RAW I/O DRIVER
 P:     Ben Collins
 M:     bcollins@debian.org
+P:     Dan Dennedy
+M:     dan@dennedy.org
 L:     linux1394-devel@lists.sourceforge.net
 W:     http://www.linux1394.org/
 S:     Maintained
@@ -1247,8 +1269,8 @@
 JFS FILESYSTEM
 P:     Dave Kleikamp
 M:     shaggy@austin.ibm.com
-L:     jfs-discussion@oss.software.ibm.com
-W:     http://oss.software.ibm.com/jfs/
+L:     jfs-discussion@lists.sourceforge.net
+W:     http://jfs.sourceforge.net/
 S:     Supported
 
 KCONFIG
@@ -1372,7 +1394,7 @@
 L:     linuxppc-embedded@ozlabs.org
 S:     Maintained
 
-LINUX FOR POWERPC EMBEDDED PPC85XX
+LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
 P:     Kumar Gala
 M:     kumar.gala@freescale.com
 W:     http://www.penguinppc.org/
@@ -1695,13 +1717,13 @@
 
 PARALLEL PORT SUPPORT
 P:     Phil Blundell
-M:     Philip.Blundell@pobox.com
+M:     philb@gnu.org
 P:     Tim Waugh
 M:     tim@cyberelk.net
 P:     David Campbell
 M:     campbell@torque.net
 P:     Andrea Arcangeli
-M:     andrea@e-mind.com
+M:     andrea@suse.de
 L:     linux-parport@lists.infradead.org
 W:     http://people.redhat.com/twaugh/parport/
 S:     Maintained
@@ -1966,6 +1988,11 @@
 W:     http://www.weinigel.se
 S:     Supported
 
+SECURITY CONTACT
+P:     Security Officers
+M:     security@kernel.org
+S:     Supported
+
 SELINUX SECURITY MODULE
 P:     Stephen Smalley
 M:     sds@epoch.ncsc.mil
@@ -2028,6 +2055,12 @@
 W:     http://www.winischhofer.net/linuxsisvga.shtml
 S:     Maintained      
 
+SIS USB2VGA DRIVER
+P:     Thomas Winischhofer
+M:     thomas@winischhofer.net
+W:     http://www.winischhofer.at/linuxsisusbvga.shtml
+S:     Maintained
+
 SMSC47M1 HARDWARE MONITOR DRIVER
 P:     Jean Delvare
 M:     khali@linux-fr.org
@@ -2162,9 +2195,10 @@
 P:     Paul Mundt
 M:     lethal@linux-sh.org
 P:     Richard Curnow
-M:     richard.curnow@superh.com
+M:     rc@rc0.org.uk
 L:     linuxsh-shmedia-dev@lists.sourceforge.net
 W:     http://www.linux-sh.org
+W:     http://www.rc0.org.uk/sh64
 S:     Maintained
 
 SUN3/3X
@@ -2376,6 +2410,12 @@
 W:     http://www.chello.nl/~j.vreeken/se401/
 S:     Maintained
 
+USB SERIAL CYBERJACK DRIVER
+P:     Matthias Bruestle and Harald Welte
+M:     support@reiner-sct.com
+W:     http://www.reiner-sct.de/support/treiber_cyberjack.php
+S:     Maintained
+
 USB SERIAL DIGI ACCELEPORT DRIVER
 P:     Peter Berger and Al Borchers
 M:     pberger@brimson.com
@@ -2477,6 +2517,14 @@
 W:     http://www.linux-projects.org
 S:     Maintained
 
+USB ZD1201 DRIVER
+P:     Jeroen Vreeken
+M:     pe1rxq@amsat.org
+L:     linux-usb-users@lists.sourceforge.net
+L:     linux-usb-devel@lists.sourceforge.net
+W:     http://linux-lc100020.sourceforge.net
+S:     Maintained
+
 USER-MODE LINUX
 P:     Jeff Dike
 M:     jdike@karaya.com
@@ -2534,7 +2582,8 @@
 VIDEO FOR LINUX
 P:     Gerd Knorr
 M:     kraxel@bytesex.org
-S:     Maintained
+L:     video4linux-list@redhat.com
+S:     Orphan
 
 W1 DALLAS'S 1-WIRE BUS
 P:     Evgeniy Polyakov
diff -urN linux/Makefile linux/Makefile
--- linux/Makefile      2005/03/02 19:58:00     1.247
+++ linux/Makefile      2005/03/18 17:36:42     1.248
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
-SUBLEVEL = 11
-EXTRAVERSION =
+SUBLEVEL = 12
+EXTRAVERSION =-rc1
 NAME=Woozy Numbat
 
 # *DOCUMENTATION*
@@ -18,7 +18,7 @@
 #
 # Most importantly: sub-Makefiles should only ever modify files in
 # their own directory. If in some directory we have a dependency on
-# a file in another dir (which doesn't happen often, but it's of
+# a file in another dir (which doesn't happen often, but it's often
 # unavoidable when linking the built-in.o targets which finally
 # turn into vmlinux), we will call a sub make in that other dir, and
 # after that we are sure that everything which is in that other dir
@@ -67,7 +67,7 @@
 
 
 # kbuild supports saving output files in a separate directory.
-# To locate output files in a separate directory two syntax'es are supported.
+# To locate output files in a separate directory two syntaxes are supported.
 # In both cases the working directory must be the root of the kernel src.
 # 1) O=
 # Use "make O=dir/to/store/output/files/"
@@ -78,7 +78,8 @@
 # export KBUILD_OUTPUT=dir/to/store/output/files/
 # make
 #
-# The O= assigment takes precedence over the KBUILD_OUTPUT environment 
variable.
+# The O= assignment takes precedence over the KBUILD_OUTPUT environment
+# variable.
 
 
 # KBUILD_SRC is set on invocation of make in OBJ directory
@@ -537,16 +538,14 @@
 # Default kernel image to build when no specific target is given.
 # KBUILD_IMAGE may be overruled on the commandline or
 # set in the environment
-# Also any assingments in arch/$(ARCH)/Makefiel take precedence over
+# Also any assignments in arch/$(ARCH)/Makefile take precedence over
 # this default value
 export KBUILD_IMAGE ?= vmlinux
 
 #
 # INSTALL_PATH specifies where to place the updated kernel and system map
-# images.  Uncomment if you want to place them anywhere other than root.
-#
-
-#export        INSTALL_PATH=/boot
+# images. Default is /boot, but you can set it to other values
+export INSTALL_PATH ?= /boot
 
 #
 # INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
@@ -896,7 +895,7 @@
 endif
 .PHONY: _modinst_post
 _modinst_post: _modinst_
-       if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) 
$(KERNELRELEASE); fi
+       if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map 
$(depmod_opts) $(KERNELRELEASE); fi
 
 else # CONFIG_MODULES
 
@@ -1094,9 +1093,17 @@
 crmodverdir:
        $(Q)mkdir -p $(MODVERDIR)
 
+.PHONY: $(objtree)/Module.symvers
+$(objtree)/Module.symvers:
+       @test -e $(objtree)/Module.symvers || ( \
+       echo; \
+       echo "  WARNING: Symbol version dump $(objtree)/Module.symvers"; \
+       echo "           is missing; modules will have no dependencies and 
modversions."; \
+       echo )
+
 module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
 .PHONY: $(module-dirs) modules
-$(module-dirs): crmodverdir
+$(module-dirs): crmodverdir $(objtree)/Module.symvers
        $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
 
 modules: $(module-dirs)
@@ -1134,20 +1141,30 @@
 # Generate tags for editors
 # ---------------------------------------------------------------------------
 
+#We want __srctree to totally vanish out when KBUILD_OUTPUT is not set
+#(which is the most common case IMHO) to avoid unneeded clutter in the big 
tags file.
+#Adding $(srctree) adds about 20M on i386 to the size of the output file!
+
+ifeq ($(KBUILD_OUTPUT),)
+__srctree =
+else
+__srctree = $(srctree)/
+endif
+
 define all-sources
-       ( find $(srctree) $(RCS_FIND_IGNORE) \
+       ( find $(__srctree) $(RCS_FIND_IGNORE) \
               \( -name include -o -name arch \) -prune -o \
               -name '*.[chS]' -print; \
-         find $(srctree)/arch/$(ARCH) $(RCS_FIND_IGNORE) \
+         find $(__srctree)arch/$(ARCH) $(RCS_FIND_IGNORE) \
               -name '*.[chS]' -print; \
-         find $(srctree)/security/selinux/include $(RCS_FIND_IGNORE) \
+         find $(__srctree)security/selinux/include $(RCS_FIND_IGNORE) \
               -name '*.[chS]' -print; \
-         find $(srctree)/include $(RCS_FIND_IGNORE) \
+         find $(__srctree)include $(RCS_FIND_IGNORE) \
               \( -name config -o -name 'asm-*' \) -prune \
               -o -name '*.[chS]' -print; \
-         find $(srctree)/include/asm-$(ARCH) $(RCS_FIND_IGNORE) \
+         find $(__srctree)include/asm-$(ARCH) $(RCS_FIND_IGNORE) \
               -name '*.[chS]' -print; \
-         find $(srctree)/include/asm-generic $(RCS_FIND_IGNORE) \
+         find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
               -name '*.[chS]' -print )
 endef
 
@@ -1170,7 +1187,7 @@
 define cmd_tags
        rm -f $@; \
        CTAGSF=`ctags --version | grep -i exuberant >/dev/null && echo "-I 
__initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_GPL"`; \
-       $(all-sources) | xargs ctags $$CTAGSF -a
+       $(all-sources) | xargs ctags $$CTAGSF -a --extra=+f
 endef
 
 TAGS: FORCE
diff -urN linux/REPORTING-BUGS linux/REPORTING-BUGS
--- linux/REPORTING-BUGS        2001/06/13 17:27:35     1.5
+++ linux/REPORTING-BUGS        2005/03/18 17:36:42     1.6
@@ -16,6 +16,10 @@
 describe how to recreate it. That is worth even more than the oops itself.
 The list of maintainers is in the MAINTAINERS file in this directory.
 
+      If it is a security bug, please copy the Security Contact listed
+in the MAINTAINERS file.  They can help coordinate bugfix and disclosure.
+See Documentation/SecurityBugs for more infomation.
+
       If you are totally stumped as to whom to send the report, send it to
 linux-kernel@vger.kernel.org. (For more information on the linux-kernel
 mailing list see http://www.tux.org/lkml/).
diff -urN linux/Documentation/SecurityBugs linux/Documentation/SecurityBugs
--- linux/Documentation/SecurityBugs    1970/01/01 00:00:00
+++ linux/Documentation/SecurityBugs    Fri Mar 18 17:36:43 2005        1.1
@@ -0,0 +1,38 @@
+Linux kernel developers take security very seriously.  As such, we'd
+like to know when a security bug is found so that it can be fixed and
+disclosed as quickly as possible.  Please report security bugs to the
+Linux kernel security team.
+
+1) Contact
+
+The Linux kernel security team can be contacted by email at
+<security@kernel.org>.  This is a private list of security officers
+who will help verify the bug report and develop and release a fix.
+It is possible that the security team will bring in extra help from
+area maintainers to understand and fix the security vulnerability.
+
+As it is with any bug, the more information provided the easier it
+will be to diagnose and fix.  Please review the procedure outlined in
+REPORTING-BUGS if you are unclear about what information is helpful.
+Any exploit code is very helpful and will not be released without
+consent from the reporter unless it has already been made public.
+
+2) Disclosure
+
+The goal of the Linux kernel security team is to work with the
+bug submitter to bug resolution as well as disclosure.  We prefer
+to fully disclose the bug as soon as possible.  It is reasonable to
+delay disclosure when the bug or the fix is not yet fully understood,
+the solution is not well-tested or for vendor coordination.  However, we
+expect these delays to be short, measurable in days, not weeks or months.
+A disclosure date is negotiated by the security team working with the
+bug submitter as well as vendors.  However, the kernel security team
+holds the final say when setting a disclosure date.  The timeframe for
+disclosure is from immediate (esp. if it's already publically known)
+to a few weeks.  As a basic default policy, we expect report date to
+disclosure date to be on the order of 7 days.
+
+3) Non-disclosure agreements
+
+The Linux kernel security team is not a formal body and therefore unable
+to enter any non-disclosure agreements.
diff -urN linux/Documentation/cpusets.txt linux/Documentation/cpusets.txt
--- linux/Documentation/cpusets.txt     1970/01/01 00:00:00
+++ linux/Documentation/cpusets.txt     Fri Mar 18 17:36:43 2005        1.1
@@ -0,0 +1,407 @@
+                               CPUSETS
+                               -------
+
+Copyright (C) 2004 BULL SA.
+Written by Simon.Derr@bull.net
+
+Portions Copyright (c) 2004 Silicon Graphics, Inc.
+Modified by Paul Jackson <pj@sgi.com>
+
+CONTENTS:
+=========
+
+1. Cpusets
+  1.1 What are cpusets ?
+  1.2 Why are cpusets needed ?
+  1.3 How are cpusets implemented ?
+  1.4 How do I use cpusets ?
+2. Usage Examples and Syntax
+  2.1 Basic Usage
+  2.2 Adding/removing cpus
+  2.3 Setting flags
+  2.4 Attaching processes
+3. Questions
+4. Contact
+
+1. Cpusets
+==========
+
+1.1 What are cpusets ?
+----------------------
+
+Cpusets provide a mechanism for assigning a set of CPUs and Memory
+Nodes to a set of tasks.
+
+Cpusets constrain the CPU and Memory placement of tasks to only
+the resources within a tasks current cpuset.  They form a nested
+hierarchy visible in a virtual file system.  These are the essential
+hooks, beyond what is already present, required to manage dynamic
+job placement on large systems.
+
+Each task has a pointer to a cpuset.  Multiple tasks may reference
+the same cpuset.  Requests by a task, using the sched_setaffinity(2)
+system call to include CPUs in its CPU affinity mask, and using the
+mbind(2) and set_mempolicy(2) system calls to include Memory Nodes
+in its memory policy, are both filtered through that tasks cpuset,
+filtering out any CPUs or Memory Nodes not in that cpuset.  The
+scheduler will not schedule a task on a CPU that is not allowed in
+its cpus_allowed vector, and the kernel page allocator will not
+allocate a page on a node that is not allowed in the requesting tasks
+mems_allowed vector.
+
+If a cpuset is cpu or mem exclusive, no other cpuset, other than a direct
+ancestor or descendent, may share any of the same CPUs or Memory Nodes.
+
+User level code may create and destroy cpusets by name in the cpuset
+virtual file system, manage the attributes and permissions of these
+cpusets and which CPUs and Memory Nodes are assigned to each cpuset,
+specify and query to which cpuset a task is assigned, and list the
+task pids assigned to a cpuset.
+
+
+1.2 Why are cpusets needed ?
+----------------------------
+
+The management of large computer systems, with many processors (CPUs),
+complex memory cache hierarchies and multiple Memory Nodes having
+non-uniform access times (NUMA) presents additional challenges for
+the efficient scheduling and memory placement of processes.
+
+Frequently more modest sized systems can be operated with adequate
+efficiency just by letting the operating system automatically share
+the available CPU and Memory resources amongst the requesting tasks.
+
+But larger systems, which benefit more from careful processor and
+memory placement to reduce memory access times and contention,
+and which typically represent a larger investment for the customer,
+can benefit from explictly placing jobs on properly sized subsets of
+the system.
+
+This can be especially valuable on:
+
+    * Web Servers running multiple instances of the same web application,
+    * Servers running different applications (for instance, a web server
+      and a database), or
+    * NUMA systems running large HPC applications with demanding
+      performance characteristics.
+
+These subsets, or "soft partitions" must be able to be dynamically
+adjusted, as the job mix changes, without impacting other concurrently
+executing jobs.
+
+The kernel cpuset patch provides the minimum essential kernel
+mechanisms required to efficiently implement such subsets.  It
+leverages existing CPU and Memory Placement facilities in the Linux
+kernel to avoid any additional impact on the critical scheduler or
+memory allocator code.
+
+
+1.3 How are cpusets implemented ?
+---------------------------------
+
+Cpusets provide a Linux kernel (2.6.7 and above) mechanism to constrain
+which CPUs and Memory Nodes are used by a process or set of processes.
+
+The Linux kernel already has a pair of mechanisms to specify on which
+CPUs a task may be scheduled (sched_setaffinity) and on which Memory
+Nodes it may obtain memory (mbind, set_mempolicy).
+
+Cpusets extends these two mechanisms as follows:
+
+ - Cpusets are sets of allowed CPUs and Memory Nodes, known to the
+   kernel.
+ - Each task in the system is attached to a cpuset, via a pointer
+   in the task structure to a reference counted cpuset structure.
+ - Calls to sched_setaffinity are filtered to just those CPUs
+   allowed in that tasks cpuset.
+ - Calls to mbind and set_mempolicy are filtered to just
+   those Memory Nodes allowed in that tasks cpuset.
+ - The root cpuset contains all the systems CPUs and Memory
+   Nodes.
+ - For any cpuset, one can define child cpusets containing a subset
+   of the parents CPU and Memory Node resources.
+ - The hierarchy of cpusets can be mounted at /dev/cpuset, for
+   browsing and manipulation from user space.
+ - A cpuset may be marked exclusive, which ensures that no other
+   cpuset (except direct ancestors and descendents) may contain
+   any overlapping CPUs or Memory Nodes.
+ - You can list all the tasks (by pid) attached to any cpuset.
+
+The implementation of cpusets requires a few, simple hooks
+into the rest of the kernel, none in performance critical paths:
+
+ - in main/init.c, to initialize the root cpuset at system boot.
+ - in fork and exit, to attach and detach a task from its cpuset.
+ - in sched_setaffinity, to mask the requested CPUs by what's
+   allowed in that tasks cpuset.
+ - in sched.c migrate_all_tasks(), to keep migrating tasks within
+   the CPUs allowed by their cpuset, if possible.
+ - in the mbind and set_mempolicy system calls, to mask the requested
+   Memory Nodes by what's allowed in that tasks cpuset.
+ - in page_alloc, to restrict memory to allowed nodes.
+ - in vmscan.c, to restrict page recovery to the current cpuset.
+
+In addition a new file system, of type "cpuset" may be mounted,
+typically at /dev/cpuset, to enable browsing and modifying the cpusets
+presently known to the kernel.  No new system calls are added for
+cpusets - all support for querying and modifying cpusets is via
+this cpuset file system.
+
+Each task under /proc has an added file named 'cpuset', displaying
+the cpuset name, as the path relative to the root of the cpuset file
+system.
+
+The /proc/<pid>/status file for each task has two added lines,
+displaying the tasks cpus_allowed (on which CPUs it may be scheduled)
+and mems_allowed (on which Memory Nodes it may obtain memory),
+in the format seen in the following example:
+
+  Cpus_allowed:   ffffffff,ffffffff,ffffffff,ffffffff
+  Mems_allowed:   ffffffff,ffffffff
+
+Each cpuset is represented by a directory in the cpuset file system
+containing the following files describing that cpuset:
+
+ - cpus: list of CPUs in that cpuset
+ - mems: list of Memory Nodes in that cpuset
+ - cpu_exclusive flag: is cpu placement exclusive?
+ - mem_exclusive flag: is memory placement exclusive?
+ - tasks: list of tasks (by pid) attached to that cpuset
+
+New cpusets are created using the mkdir system call or shell
+command.  The properties of a cpuset, such as its flags, allowed
+CPUs and Memory Nodes, and attached tasks, are modified by writing
+to the appropriate file in that cpusets directory, as listed above.
+
+The named hierarchical structure of nested cpusets allows partitioning
+a large system into nested, dynamically changeable, "soft-partitions".
+
+The attachment of each task, automatically inherited at fork by any
+children of that task, to a cpuset allows organizing the work load
+on a system into related sets of tasks such that each set is constrained
+to using the CPUs and Memory Nodes of a particular cpuset.  A task
+may be re-attached to any other cpuset, if allowed by the permissions
+on the necessary cpuset file system directories.
+
+Such management of a system "in the large" integrates smoothly with
+the detailed placement done on individual tasks and memory regions
+using the sched_setaffinity, mbind and set_mempolicy system calls.
+
+The following rules apply to each cpuset:
+
+ - Its CPUs and Memory Nodes must be a subset of its parents.
+ - It can only be marked exclusive if its parent is.
+ - If its cpu or memory is exclusive, they may not overlap any sibling.
+
+These rules, and the natural hierarchy of cpusets, enable efficient
+enforcement of the exclusive guarantee, without having to scan all
+cpusets every time any of them change to ensure nothing overlaps a
+exclusive cpuset.  Also, the use of a Linux virtual file system (vfs)
+to represent the cpuset hierarchy provides for a familiar permission
+and name space for cpusets, with a minimum of additional kernel code.
+
+1.4 How do I use cpusets ?
+--------------------------
+
+In order to minimize the impact of cpusets on critical kernel
+code, such as the scheduler, and due to the fact that the kernel
+does not support one task updating the memory placement of another
+task directly, the impact on a task of changing its cpuset CPU
+or Memory Node placement, or of changing to which cpuset a task
+is attached, is subtle.
+
+If a cpuset has its Memory Nodes modified, then for each task attached
+to that cpuset, the next time that the kernel attempts to allocate
+a page of memory for that task, the kernel will notice the change
+in the tasks cpuset, and update its per-task memory placement to
+remain within the new cpusets memory placement.  If the task was using
+mempolicy MPOL_BIND, and the nodes to which it was bound overlap with
+its new cpuset, then the task will continue to use whatever subset
+of MPOL_BIND nodes are still allowed in the new cpuset.  If the task
+was using MPOL_BIND and now none of its MPOL_BIND nodes are allowed
+in the new cpuset, then the task will be essentially treated as if it
+was MPOL_BIND bound to the new cpuset (even though its numa placement,
+as queried by get_mempolicy(), doesn't change).  If a task is moved
+from one cpuset to another, then the kernel will adjust the tasks
+memory placement, as above, the next time that the kernel attempts
+to allocate a page of memory for that task.
+
+If a cpuset has its CPUs modified, then each task using that
+cpuset does _not_ change its behavior automatically.  In order to
+minimize the impact on the critical scheduling code in the kernel,
+tasks will continue to use their prior CPU placement until they
+are rebound to their cpuset, by rewriting their pid to the 'tasks'
+file of their cpuset.  If a task had been bound to some subset of its
+cpuset using the sched_setaffinity() call, and if any of that subset
+is still allowed in its new cpuset settings, then the task will be
+restricted to the intersection of the CPUs it was allowed on before,
+and its new cpuset CPU placement.  If, on the other hand, there is
+no overlap between a tasks prior placement and its new cpuset CPU
+placement, then the task will be allowed to run on any CPU allowed
+in its new cpuset.  If a task is moved from one cpuset to another,
+its CPU placement is updated in the same way as if the tasks pid is
+rewritten to the 'tasks' file of its current cpuset.
+
+In summary, the memory placement of a task whose cpuset is changed is
+updated by the kernel, on the next allocation of a page for that task,
+but the processor placement is not updated, until that tasks pid is
+rewritten to the 'tasks' file of its cpuset.  This is done to avoid
+impacting the scheduler code in the kernel with a check for changes
+in a tasks processor placement.
+
+There is an exception to the above.  If hotplug funtionality is used
+to remove all the CPUs that are currently assigned to a cpuset,
+then the kernel will automatically update the cpus_allowed of all
+tasks attached to CPUs in that cpuset with the online CPUs of the
+nearest parent cpuset that still has some CPUs online.  When memory
+hotplug functionality for removing Memory Nodes is available, a
+similar exception is expected to apply there as well.  In general,
+the kernel prefers to violate cpuset placement, over starving a task
+that has had all its allowed CPUs or Memory Nodes taken offline.  User
+code should reconfigure cpusets to only refer to online CPUs and Memory
+Nodes when using hotplug to add or remove such resources.
+
+To start a new job that is to be contained within a cpuset, the steps are:
+
+ 1) mkdir /dev/cpuset
+ 2) mount -t cpuset none /dev/cpuset
+ 3) Create the new cpuset by doing mkdir's and write's (or echo's) in
+    the /dev/cpuset virtual file system.
+ 4) Start a task that will be the "founding father" of the new job.
+ 5) Attach that task to the new cpuset by writing its pid to the
+    /dev/cpuset tasks file for that cpuset.
+ 6) fork, exec or clone the job tasks from this founding father task.
+
+For example, the following sequence of commands will setup a cpuset
+named "Charlie", containing just CPUs 2 and 3, and Memory Node 1,
+and then start a subshell 'sh' in that cpuset:
+
+  mount -t cpuset none /dev/cpuset
+  cd /dev/cpuset
+  mkdir Charlie
+  cd Charlie
+  /bin/echo 2-3 > cpus
+  /bin/echo 1 > mems
+  /bin/echo $$ > tasks
+  sh
+  # The subshell 'sh' is now running in cpuset Charlie
+  # The next line should display '/Charlie'
+  cat /proc/self/cpuset
+
+In the case that a change of cpuset includes wanting to move already
+allocated memory pages, consider further the work of IWAMOTO
+Toshihiro <iwamoto@valinux.co.jp> for page remapping and memory
+hotremoval, which can be found at:
+
+  http://people.valinux.co.jp/~iwamoto/mh.html
+
+The integration of cpusets with such memory migration is not yet
+available.
+
+In the future, a C library interface to cpusets will likely be
+available.  For now, the only way to query or modify cpusets is
+via the cpuset file system, using the various cd, mkdir, echo, cat,
+rmdir commands from the shell, or their equivalent from C.
+
+The sched_setaffinity calls can also be done at the shell prompt using
+SGI's runon or Robert Love's taskset.  The mbind and set_mempolicy
+calls can be done at the shell prompt using the numactl command
+(part of Andi Kleen's numa package).
+
+2. Usage Examples and Syntax
+============================
+
+2.1 Basic Usage
+---------------
+
+Creating, modifying, using the cpusets can be done through the cpuset
+virtual filesystem.
+
+To mount it, type:
+# mount -t cpuset none /dev/cpuset
+
+Then under /dev/cpuset you can find a tree that corresponds to the
+tree of the cpusets in the system. For instance, /dev/cpuset
+is the cpuset that holds the whole system.
+
+If you want to create a new cpuset under /dev/cpuset:
+# cd /dev/cpuset
+# mkdir my_cpuset
+
+Now you want to do something with this cpuset.
+# cd my_cpuset
+
+In this directory you can find several files:
+# ls
+cpus  cpu_exclusive  mems  mem_exclusive  tasks
+
+Reading them will give you information about the state of this cpuset:
+the CPUs and Memory Nodes it can use, the processes that are using
+it, its properties.  By writing to these files you can manipulate
+the cpuset.
+
+Set some flags:
+# /bin/echo 1 > cpu_exclusive
+
+Add some cpus:
+# /bin/echo 0-7 > cpus
+
+Now attach your shell to this cpuset:
+# /bin/echo $$ > tasks
+
+You can also create cpusets inside your cpuset by using mkdir in this
+directory.
+# mkdir my_sub_cs
+
+To remove a cpuset, just use rmdir:
+# rmdir my_sub_cs
+This will fail if the cpuset is in use (has cpusets inside, or has
+processes attached).
+
+2.2 Adding/removing cpus
+------------------------
+
+This is the syntax to use when writing in the cpus or mems files
+in cpuset directories:
+
+# /bin/echo 1-4 > cpus         -> set cpus list to cpus 1,2,3,4
+# /bin/echo 1,2,3,4 > cpus     -> set cpus list to cpus 1,2,3,4
+
+2.3 Setting flags
+-----------------
+
+The syntax is very simple:
+
+# /bin/echo 1 > cpu_exclusive  -> set flag 'cpu_exclusive'
+# /bin/echo 0 > cpu_exclusive  -> unset flag 'cpu_exclusive'
+
+2.4 Attaching processes
+-----------------------
+
+# /bin/echo PID > tasks
+
+Note that it is PID, not PIDs. You can only attach ONE task at a time.
+If you have several tasks to attach, you have to do it one after another:
+
+# /bin/echo PID1 > tasks
+# /bin/echo PID2 > tasks
+       ...
+# /bin/echo PIDn > tasks
+
+
+3. Questions
+============
+
+Q: what's up with this '/bin/echo' ?
+A: bash's builtin 'echo' command does not check calls to write() against
+   errors. If you use it in the cpuset file system, you won't be
+   able to tell whether a command succeeded or failed.
+
+Q: When I attach processes, only the first of the line gets really attached !
+A: We can only return one error code per call to write(). So you should also
+   put only ONE pid.
+
+4. Contact
+==========
+
+Web: http://www.bullopensource.org/cpuset
diff -urN linux/Documentation/Changes linux/Documentation/Changes
--- linux/Documentation/Changes 2005/01/13 14:05:14     1.81
+++ linux/Documentation/Changes 2005/03/18 17:36:42     1.82
@@ -339,7 +339,7 @@
 
 JFSutils
 --------
-o  <http://oss.software.ibm.com/jfs>
+o  <http://jfs.sourceforge.net/>
 
 Reiserfsprogs
 -------------
diff -urN linux/Documentation/IPMI.txt linux/Documentation/IPMI.txt
--- linux/Documentation/IPMI.txt        2004/08/24 15:10:03     1.6
+++ linux/Documentation/IPMI.txt        2005/03/18 17:36:42     1.7
@@ -342,6 +342,7 @@
        irqs=<irq1>,<irq2>... trydefaults=[0|1]
        regspacings=<sp1>,<sp2>,... regsizes=<size1>,<size2>,...
        regshifts=<shift1>,<shift2>,...
+       slave_addrs=<addr1>,<addr2>,...
 
 Each of these except si_trydefaults is a list, the first item for the
 first interface, second item for the second interface, etc.
@@ -383,6 +384,10 @@
 be in the lower 8 bits.  The regshifts parameter give the amount to shift
 the data to get to the actual IPMI data.
 
+The slave_addrs specifies the IPMI address of the local BMC.  This is
+usually 0x20 and the driver defaults to that, but in case it's not, it
+can be specified when the driver starts up.
+
 When compiled into the kernel, the addresses can be specified on the
 kernel command line as:
 
@@ -392,6 +397,7 @@
        ipmi_si.regspacings=<sp1>,<sp2>,...
        ipmi_si.regsizes=<size1>,<size2>,...
        ipmi_si.regshifts=<shift1>,<shift2>,...
+       ipmi_si.slave_addrs=<addr1>,<addr2>,...
 
 It works the same as the module parameters of the same names.
 
diff -urN linux/Documentation/cachetlb.txt linux/Documentation/cachetlb.txt
--- linux/Documentation/cachetlb.txt    2004/10/12 01:45:39     1.16
+++ linux/Documentation/cachetlb.txt    2005/03/18 17:36:42     1.17
@@ -155,7 +155,7 @@
           change_range_of_page_tables(mm, start, end);
           flush_tlb_range(vma, start, end);
 
-       3) flush_cache_page(vma, addr);
+       3) flush_cache_page(vma, addr, pfn);
           set_pte(pte_pointer, new_pte_val);
           flush_tlb_page(vma, addr);
 
@@ -203,7 +203,7 @@
        call flush_cache_page (see below) for each entry which may be
        modified.
 
-3) void flush_cache_page(struct vm_area_struct *vma, unsigned long addr)
+3) void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, 
unsigned long pfn)
 
        This time we need to remove a PAGE_SIZE sized range
        from the cache.  The 'vma' is the backing structure used by
@@ -213,8 +213,14 @@
        executable (and thus could be in the 'instruction cache' in
        "Harvard" type cache layouts).
 
+       The 'pfn' indicates the physical page frame (shift this value
+       left by PAGE_SHIFT to get the physical address) that 'addr'
+       translates to.  It is this mapping which should be removed from
+       the cache.
+
        After running, there will be no entries in the cache for
-       'vma->vm_mm' for virtual address 'addr'.
+       'vma->vm_mm' for virtual address 'addr' which translates
+       to 'pfn'.
 
        This is used primarily during fault processing.
 
diff -urN linux/Documentation/cciss.txt linux/Documentation/cciss.txt
--- linux/Documentation/cciss.txt       2005/01/13 14:05:14     1.10
+++ linux/Documentation/cciss.txt       2005/03/18 17:36:42     1.11
@@ -15,6 +15,8 @@
        * SA 6400 U320 Expansion Module
        * SA 6i
        * SA P600
+       * SA P800
+       * SA E400
 
 If nodes are not already created in the /dev/cciss directory, run as root:
 
diff -urN linux/Documentation/devices.txt linux/Documentation/devices.txt
--- linux/Documentation/devices.txt     2005/02/07 02:54:29     1.32
+++ linux/Documentation/devices.txt     2005/03/18 17:36:42     1.33
@@ -2754,6 +2754,8 @@
                 50 = /dev/ttyIOC40             Altix serial card
                    ...
                 81 = /dev/ttyIOC431            Altix serial card
+                82 = /dev/ttyVR0               NEC VR4100 series SIU
+                83 = /dev/ttyVR1               NEC VR4100 series DSIU
 
 205 char       Low-density serial ports (alternate device)
                  0 = /dev/culu0                Callout device for ttyLU0
@@ -2788,6 +2790,8 @@
                 50 = /dev/cuioc40              Callout device for ttyIOC40
                    ...
                 81 = /dev/cuioc431             Callout device for ttyIOC431
+                82 = /dev/cuvr0                Callout device for ttyVR0
+                83 = /dev/cuvr1                Callout device for ttyVR1
 
 
 206 char       OnStream SC-x0 tape devices
diff -urN linux/Documentation/feature-removal-schedule.txt 
linux/Documentation/feature-removal-schedule.txt
--- linux/Documentation/feature-removal-schedule.txt    2005/01/25 04:27:51     
1.2
+++ linux/Documentation/feature-removal-schedule.txt    2005/03/18 17:36:42     
1.3
@@ -15,3 +15,25 @@
        against the LSB, and can be replaced by using udev.
 Who:   Greg Kroah-Hartman <greg@kroah.com>
 
+---------------------------
+
+What:  /proc/sys/cpu/*, sysctl and /proc/cpufreq interfaces to cpufreq (2.4.x 
interfaces)
+When:  January 2005
+Files: drivers/cpufreq/: cpufreq_userspace.c, proc_intf.c
+Why:   /proc/sys/cpu/* has been deprecated since inclusion of cpufreq into
+       the main kernel tree. It bloats /proc/ unnecessarily and doesn't work
+       well with the "governor"-based design of cpufreq.
+       /proc/cpufreq/* has also been deprecated for a long time and was only
+       meant for usage during 2.5. until the new sysfs-based interface became
+       ready. It has an inconsistent interface which doesn't work well with
+       userspace setting the frequency. The output from /proc/cpufreq/* can
+       be emulated using "cpufreq-info --proc" (cpufrequtils).
+       Both interfaces are superseded by the cpufreq interface in
+       /sys/devices/system/cpu/cpu%n/cpufreq/.
+Who:   Dominik Brodowski <linux@brodo.de>
+
+What:  ACPI S4bios support
+When:  May 2005
+Why:   Noone uses it, and it probably does not work, anyway. swsusp is
+       faster, more reliable, and people are actually using it.
+Who:   Pavel Machek <pavel@suse.cz>
diff -urN linux/Documentation/kernel-parameters.txt 
linux/Documentation/kernel-parameters.txt
--- linux/Documentation/kernel-parameters.txt   2005/02/13 20:16:13     1.57
+++ linux/Documentation/kernel-parameters.txt   2005/03/18 17:36:42     1.58
@@ -67,12 +67,14 @@
        SCSI    Appropriate SCSI support is enabled.
                        A lot of drivers has their options described inside of
                        Documentation/scsi/.
+       SELINUX SELinux support is enabled.
        SERIAL  Serial support is enabled.
        SMP     The kernel is an SMP kernel.
        SPARC   Sparc architecture is enabled.
        SWSUSP  Software suspension is enabled.
        TS      Appropriate touchscreen support is enabled.
        USB     USB support is enabled.
+       USBHID  USB Human Interface Device support is enabled.
        V4L     Video For Linux support is enabled.
        VGA     The VGA console has been enabled.
        VT      Virtual terminal support is enabled.
@@ -295,6 +297,14 @@
                        See header of drivers/cdrom/cdu31a.c.
 
        chandev=        [HW,NET] Generic channel device initialisation
+
+       checkreqprot    [SELINUX] Set initial checkreqprot flag value.
+                       Format: { "0" | "1" }
+                       See security/selinux/Kconfig help text.
+                       0 -- check protection applied by kernel (includes any 
implied execute protection).
+                       1 -- check protection requested by application.
+                       Default value is set via a kernel config option.
+                       Value can be changed at runtime via 
/selinux/checkreqprot.
  
        clock=          [BUGS=IA-32, HW] gettimeofday timesource override. 
                        Forces specified timesource (if avaliable) to be used
@@ -435,6 +445,14 @@
                        See Documentation/block/as-iosched.txt
                        and Documentation/block/deadline-iosched.txt for 
details.
 
+       enforcing       [SELINUX] Set initial enforcing status.
+                       Format: {"0" | "1"}
+                       See security/selinux/Kconfig help text.
+                       0 -- permissive (log only, no denials).
+                       1 -- enforcing (deny and log).
+                       Default value is 0.
+                       Value can be changed at runtime via /selinux/enforce.
+
        es1370=         [HW,OSS]
                        Format: <lineout>[,<micbias>]
                        See also header of sound/oss/es1370.c.
@@ -514,11 +532,14 @@
        i8042.dumbkbd   [HW] Pretend that controlled can only read data from
                             keyboard and can not control its state
                             (Don't attempt to blink the leds)
-       i8042.noacpi    [HW] Don't use ACPI to discover KBD/AUX controller
-                            settings
        i8042.noaux     [HW] Don't check for auxiliary (== mouse) port
        i8042.nomux     [HW] Don't check presence of an active multiplexing
                             controller
+       i8042.nopnp     [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
+                            controllers
+       i8042.panicblink=
+                       [HW] Frequency with which keyboard LEDs should blink
+                            when kernel panics (default is 0.5 sec)
        i8042.reset     [HW] Reset the controller during init and cleanup
        i8042.unlock    [HW] Unlock (ignore) the keylock
 
@@ -634,6 +655,20 @@
        logibm.irq=     [HW,MOUSE] Logitech Bus Mouse Driver
                        Format: <irq>
 
+       loglevel=       All Kernel Messages with a loglevel smaller than the
+                       console loglevel will be printed to the console. It can
+                       also be changed with klogd or other programs. The
+                       loglevels are defined as follows:
+
+                       0 (KERN_EMERG)          system is unusable
+                       1 (KERN_ALERT)          action must be taken immediately
+                       2 (KERN_CRIT)           critical conditions
+                       3 (KERN_ERR)            error conditions
+                       4 (KERN_WARNING)        warning conditions
+                       5 (KERN_NOTICE)         normal but significant condition
+                       6 (KERN_INFO)           informational
+                       7 (KERN_DEBUG)          debug-level messages
+
        log_buf_len=n   Sets the size of the printk ring buffer, in bytes.
                        Format is n, nk, nM.  n must be a power of two.  The
                        default is set in kernel config.
@@ -776,6 +811,10 @@
        mtdparts=       [MTD]
                        See drivers/mtd/cmdline.c.
 
+       mtouchusb.raw_coordinates=
+                       [HW] Make the MicroTouch USB driver use raw coordinates 
('y', default)
+                       or cooked coordinates ('n')
+
        n2=             [NET] SDL Inc. RISCom/N2 synchronous serial card
 
        NCR_D700=       [HW,SCSI]
@@ -837,6 +876,13 @@
                        instruction doesn't work correctly and not to
                        use it.
 
+       nohalt          [IA-64] Tells the kernel not to use the power saving
+                       function PAL_HALT_LIGHT when idle. This increases
+                       power-consumption. On the positive side, it reduces
+                       interrupt wake-up latency, which may improve performance
+                       in certain environments such as networked servers or
+                       real-time systems.
+
        noirqdebug      [IA-32] Disables the code which attempts to detect and
                        disable unhandled interrupt sources.
 
@@ -1146,10 +1192,16 @@
 
        scsi_logging=   [SCSI]
 
-       serialnumber    [BUGS=IA-32]
+       selinux         [SELINUX] Disable or enable SELinux at boot time.
+                       Format: { "0" | "1" }
+                       See security/selinux/Kconfig help text.
+                       0 -- disable.
+                       1 -- enable.
+                       Default value is set via kernel config option.
+                       If enabled at boot time, /selinux/disable can be used
+                       later to disable prior to initial policy load.
 
-       sf16fm=         [HW] SF16FMI radio driver for Linux
-                       Format: <io>
+       serialnumber    [BUGS=IA-32]
 
        sg_def_reserved_size=
                        [SCSI]
@@ -1345,9 +1397,6 @@
        sym53c416=      [HW,SCSI]
                        See header of drivers/scsi/sym53c416.c.
 
-       sym53c8xx=      [HW,SCSI]
-                       See Documentation/scsi/ncr53c8xx.txt.
-
        t128=           [HW,SCSI]
                        See header of drivers/scsi/t128.c.
 
@@ -1356,6 +1405,8 @@
        thash_entries=  [KNL,NET]
                        Set number of hash buckets for TCP connection
 
+       time            Show timing data prefixed to each printk message line
+
        tipar.timeout=  [HW,PPT]
                        Set communications timeout in tenths of a second
                        (default 15).
@@ -1393,6 +1444,9 @@
                        Format: <io>,<irq>
 
        usb-handoff     [HW] Enable early USB BIOS -> OS handoff
+
+       usbhid.mousepoll=
+                       [USBHID] The interval which mice are to be polled at.
  
        video=          [FB] Frame buffer configuration
                        See Documentation/fb/modedb.txt.
diff -urN linux/Documentation/keys.txt linux/Documentation/keys.txt
--- linux/Documentation/keys.txt        2004/10/25 20:44:08     1.1
+++ linux/Documentation/keys.txt        2005/03/18 17:36:42     1.2
@@ -151,8 +151,8 @@
      by using PR_JOIN_SESSION_KEYRING. It is permitted to request an anonymous
      new one, or to attempt to create or join one of a specific name.
 
-     The ownership of the thread and process-specific keyrings changes when
-     the real UID and GID of the thread changes.
+     The ownership of the thread keyring changes when the real UID and GID of
+     the thread changes.
 
  (*) Each user ID resident in the system holds two special keyrings: a user
      specific keyring and a default user session keyring. The default session
@@ -606,8 +606,12 @@
 due to two different users opening the same file is left to the filesystem
 author to solve.
 
-When accessing a key's payload data, the key->lock should be at least read
-locked, or else the data may be changed by update during the access.
+When accessing a key's payload data, key->lock should be at least read locked,
+or else the data may be changed by an update being performed from userspace
+whilst the driver or filesystem is trying to access it. If no update method is
+supplied, then the key's payload may be accessed without holding a lock as
+there is no way to change it, provided it can be guaranteed that the key's
+type definition won't go away.
 
 (*) To search for a key, call:
 
@@ -719,13 +723,19 @@
 
  (*) int (*instantiate)(struct key *key, const void *data, size_t datalen);
 
-     This method is called to attach a payload to a key during
-     construction. The payload attached need not bear any relation to the data
-     passed to this function.
+     This method is called to attach a payload to a key during construction.
+     The payload attached need not bear any relation to the data passed to
+     this function.
 
      If the amount of data attached to the key differs from the size in
      keytype->def_datalen, then key_payload_reserve() should be called.
 
+     This method does not have to lock the key in order to attach a payload.
+     The fact that KEY_FLAG_INSTANTIATED is not set in key->flags prevents
+     anything else from gaining access to the key.
+
+     This method may sleep if it wishes.
+
 
  (*) int (*duplicate)(struct key *key, const struct key *source);
 
@@ -734,8 +744,8 @@
      the new key. The data length on the new key will have been updated and
      the quota adjusted already.
 
-     The source key will be locked against change on the source->sem, so it is
-     safe to sleep here.
+     This method will be called with the source key's semaphore read-locked to
+     prevent its payload from being changed. It is safe to sleep here.
 
 
  (*) int (*update)(struct key *key, const void *data, size_t datalen);
@@ -749,30 +759,47 @@
      type is committed to changing the key because it's already been altered,
      so all memory allocation must be done first.
 
-     The key will be locked against other changers on key->sem, so it is safe
-     to sleep here.
-
      key_payload_reserve() should be called with the key->lock write locked,
      and the changes to the key's attached payload should be made before the
      key is locked.
 
+     The key will have its semaphore write-locked before this method is
+     called. Any changes to the key should be made with the key's rwlock
+     write-locked also. It is safe to sleep here.
+
 
  (*) int (*match)(const struct key *key, const void *desc);
 
      This method is called to match a key against a description. It should
      return non-zero if the two match, zero if they don't.
 
+     This method should not need to lock the key in any way. The type and
+     description can be considered invariant, and the payload should not be
+     accessed (the key may not yet be instantiated).
+
+     It is not safe to sleep in this method; the caller may hold spinlocks.
+
 
  (*) void (*destroy)(struct key *key);
 
      This method is optional. It is called to discard the payload data on a
      key when it is being destroyed.
 
+     This method does not need to lock the key; it can consider the key as
+     being inaccessible. Note that the key's type may have changed before this
+     function is called.
+
+     It is not safe to sleep in this method; the caller may hold spinlocks.
+
 
  (*) void (*describe)(const struct key *key, struct seq_file *p);
 
      This method is optional. It is called during /proc/keys reading to
-     summarise a key in text form.
+     summarise a key's description and payload in text form.
+
+     This method will be called with the key's rwlock read-locked. This will
+     prevent the key's payload and state changing; also the description should
+     not change. This also means it is not safe to sleep in this method.
 
 
  (*) long (*read)(const struct key *key, char __user *buffer, size_t buflen);
@@ -785,6 +812,12 @@
      If successful, the blob size that could be produced should be returned
      rather than the size copied.
 
+     This method will be called with the key's semaphore read-locked. This
+     will prevent the key's payload changing. It is not necessary to also
+     read-lock key->lock when accessing the key's payload. It is safe to sleep
+     in this method, such as might happen when the userspace buffer is
+     accessed.
+
 
 ============================
 REQUEST-KEY CALLBACK SERVICE
diff -urN linux/Documentation/parport.txt linux/Documentation/parport.txt
--- linux/Documentation/parport.txt     2004/03/11 16:46:39     1.19
+++ linux/Documentation/parport.txt     2005/03/18 17:36:42     1.20
@@ -264,5 +264,5 @@
     io=0x378 irq=7 dma=none (for PIO)
     io=0x378 irq=7 dma=3 (for DMA)
 --
-Philip.Blundell@pobox.com
+philb@gnu.org
 tim@cyberelk.net
diff -urN linux/Documentation/pci.txt linux/Documentation/pci.txt
--- linux/Documentation/pci.txt 2004/12/04 18:15:57     1.25
+++ linux/Documentation/pci.txt 2005/03/18 17:36:43     1.26
@@ -99,10 +99,10 @@
 Users need pass only as many fields as necessary; vendor, device,
 subvendor, and subdevice fields default to PCI_ANY_ID (FFFFFFFF),
 class and classmask fields default to 0, and driver_data defaults to
-0UL.  Device drivers must call
-   pci_dynids_set_use_driver_data(pci_driver *, 1)
-in order for the driver_data field to get passed to the driver.
-Otherwise, only a 0 is passed in that field.
+0UL.  Device drivers must initialize use_driver_data in the dynids struct
+in their pci_driver struct prior to calling pci_register_driver in order
+for the driver_data field to get passed to the driver. Otherwise, only a
+0 is passed in that field.
 
 When the driver exits, it just calls pci_unregister_driver() and the PCI layer
 automatically calls the remove hook for all devices handled by the driver.
diff -urN linux/Documentation/pm.txt linux/Documentation/pm.txt
--- linux/Documentation/pm.txt  2005/01/13 14:05:14     1.7
+++ linux/Documentation/pm.txt  2005/03/18 17:36:43     1.8
@@ -222,23 +222,6 @@
 management interface.
 
 /*
- * Send a request to a single device
- *
- * Parameters:
- *   dev - PM device previously returned from pm_register or pm_find
- *   rqst - request type
- *   data - data, if any, associated with the request
- *
- * Returns: 0 if the request is successful
- *          See "pm_callback" return for errors
- *
- * Details: Forward request to device callback and, if a suspend
- *          or resume request, update the pm_dev "state" field
- *          appropriately
- */
-int pm_send(struct pm_dev *dev, pm_request_t rqst, void *data);
-
-/*
  * Send a request to all devices
  *
  * Parameters:
diff -urN linux/Documentation/sysrq.txt linux/Documentation/sysrq.txt
--- linux/Documentation/sysrq.txt       2003/10/09 13:09:26     1.16
+++ linux/Documentation/sysrq.txt       2005/03/18 17:36:43     1.17
@@ -10,13 +10,32 @@
 *  How do I enable the magic SysRq key?
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 You need to say "yes" to 'Magic SysRq key (CONFIG_MAGIC_SYSRQ)' when
-configuring the kernel. When running on a kernel with SysRq compiled in, it
-may be DISABLED at run-time using following command:
+configuring the kernel. When running a kernel with SysRq compiled in,
+/proc/sys/kernel/sysrq controls the functions allowed to be invoked via
+the SysRq key. By default the file contains 1 which means that every
+possible SysRq request is allowed (in older versions SysRq was disabled
+by default, and you were required to specifically enable it at run-time
+but this is not the case any more). Here is the list of possible values
+in /proc/sys/kernel/sysrq:
+   0 - disable sysrq completely
+   1 - enable all functions of sysrq
+  >1 - bitmask of allowed sysrq functions (see below for detailed function
+       description):
+          2 - enable control of console logging level
+          4 - enable control of keyboard (SAK, unraw)
+          8 - enable debugging dumps of processes etc.
+         16 - enable sync command
+         32 - enable remount read-only
+         64 - enable signalling of processes (term, kill, oom-kill)
+        128 - allow reboot/poweroff
+        256 - allow nicing of all RT tasks
 
-        echo "0" > /proc/sys/kernel/sysrq
+You can set the value in the file by the following command:
+    echo "number" >/proc/sys/kernel/sysrq
 
-Note that previous versions disabled sysrq by default, and you were required
-to specifically enable it at run-time. That is not the case any longer.
+Note that the value of /proc/sys/kernel/sysrq influences only the invocation
+via a keyboard. Invocation of any operation via /proc/sysrq-trigger is always
+allowed.
 
 *  How do I use the magic SysRq key?
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -urN linux/Documentation/tty.txt linux/Documentation/tty.txt
--- linux/Documentation/tty.txt 2004/10/25 20:44:08     1.3
+++ linux/Documentation/tty.txt 2005/03/18 17:36:43     1.4
@@ -93,6 +93,11 @@
                        ldisc must be careful about setting order and to
                        handle unexpected calls. Must not sleep.
 
+                       The driver is forbidden from calling this directly
+                       from the ->write call from the ldisc as the ldisc
+                       is permitted to call the driver write method from
+                       this function. In such a situation defer it.
+
 
 Locking
 
diff -urN linux/Documentation/BK-usage/bksend 
linux/Documentation/BK-usage/bksend
--- linux/Documentation/BK-usage/bksend 2002/08/19 23:23:05     1.1
+++ linux/Documentation/BK-usage/bksend 2005/03/18 17:36:43     1.2
@@ -27,7 +27,7 @@
 
 SEP="\n===================================================================\n\n"
 echo -e $SEP
-bk changes -r$REV
+env PAGER=/bin/cat bk changes -r$REV
 echo
 bk export -tpatch -du -h -r$REV | diffstat
 echo; echo
diff -urN linux/Documentation/DocBook/Makefile 
linux/Documentation/DocBook/Makefile
--- linux/Documentation/DocBook/Makefile        2004/11/15 11:49:12     1.47
+++ linux/Documentation/DocBook/Makefile        2005/03/18 17:36:43     1.48
@@ -6,38 +6,39 @@
 # To add a new book the only step required is to add the book to the
 # list of DOCBOOKS.
 
-DOCBOOKS := wanbook.sgml z8530book.sgml mcabook.sgml videobook.sgml \
-           kernel-hacking.sgml kernel-locking.sgml via-audio.sgml \
-           deviceiobook.sgml procfs-guide.sgml tulip-user.sgml \
-           writing_usb_driver.sgml scsidrivers.sgml sis900.sgml \
-           kernel-api.sgml journal-api.sgml lsm.sgml usb.sgml \
-           gadget.sgml libata.sgml mtdnand.sgml librs.sgml
+DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
+           kernel-hacking.xml kernel-locking.xml via-audio.xml \
+           deviceiobook.xml procfs-guide.xml tulip-user.xml \
+           writing_usb_driver.xml scsidrivers.xml sis900.xml \
+           kernel-api.xml journal-api.xml lsm.xml usb.xml \
+           gadget.xml libata.xml mtdnand.xml librs.xml
 
 ###
 # The build process is as follows (targets):
-#              (sgmldocs)
-# file.tmpl --> file.sgml +--> file.ps  (psdocs)
-#                         +--> file.pdf  (pdfdocs)
-#                         +--> DIR=file  (htmldocs)
-#                         +--> man/      (mandocs)
+#              (xmldocs)
+# file.tmpl --> file.xml +--> file.ps   (psdocs)
+#                        +--> file.pdf  (pdfdocs)
+#                        +--> DIR=file  (htmldocs)
+#                        +--> man/      (mandocs)
 
 ###
 # The targets that may be used.
-.PHONY:        sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
+.PHONY:        xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
 
 BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
-sgmldocs: $(BOOKS)
+xmldocs: $(BOOKS)
+sgmldocs: xmldocs
 
-PS := $(patsubst %.sgml, %.ps, $(BOOKS))
+PS := $(patsubst %.xml, %.ps, $(BOOKS))
 psdocs: $(PS)
 
-PDF := $(patsubst %.sgml, %.pdf, $(BOOKS))
+PDF := $(patsubst %.xml, %.pdf, $(BOOKS))
 pdfdocs: $(PDF)
 
-HTML := $(patsubst %.sgml, %.html, $(BOOKS))
+HTML := $(patsubst %.xml, %.html, $(BOOKS))
 htmldocs: $(HTML)
 
-MAN := $(patsubst %.sgml, %.9, $(BOOKS))
+MAN := $(patsubst %.xml, %.9, $(BOOKS))
 mandocs: $(MAN)
 
 installmandocs: mandocs
@@ -55,7 +56,7 @@
 # 1) To generate a dependency list for a .tmpl file
 # 2) To preprocess a .tmpl file and call kernel-doc with
 #     appropriate parameters.
-# The following rules are used to generate the .sgml documentation
+# The following rules are used to generate the .xml documentation
 # required to generate the final targets. (ps, pdf, html).
 quiet_cmd_docproc = DOCPROC $@
       cmd_docproc = SRCTREE=$(srctree)/ $(DOCPROC) doc $< >$@
@@ -69,7 +70,7 @@
         ) > $(dir $@).$(notdir $@).cmd
 endef
 
-%.sgml: %.tmpl FORCE
+%.xml: %.tmpl FORCE
        $(call if_changed_rule,docproc)
 
 ###
@@ -87,9 +88,9 @@
 ###
 # procfs guide uses a .c file as example code.
 # This requires an explicit dependency
-C-procfs-example = procfs_example.sgml
+C-procfs-example = procfs_example.xml
 C-procfs-example2 = $(addprefix $(obj)/,$(C-procfs-example))
-$(obj)/procfs-guide.sgml: $(C-procfs-example2)
+$(obj)/procfs-guide.xml: $(C-procfs-example2)
 
 ###
 # Rules to generate postscript, PDF and HTML
@@ -97,7 +98,7 @@
 
 quiet_cmd_db2ps = DB2PS   $@
       cmd_db2ps = db2ps -o $(dir $@) $<
-%.ps : %.sgml
+%.ps : %.xml
        @(which db2ps > /dev/null 2>&1) || \
         (echo "*** You need to install DocBook stylesheets ***"; \
          exit 1)
@@ -105,7 +106,7 @@
 
 quiet_cmd_db2pdf = DB2PDF  $@
       cmd_db2pdf = db2pdf -o $(dir $@) $<
-%.pdf : %.sgml
+%.pdf : %.xml
        @(which db2pdf > /dev/null 2>&1) || \
         (echo "*** You need to install DocBook stylesheets ***"; \
          exit 1)
@@ -116,7 +117,7 @@
                echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/book1.html"> \
          Goto $(patsubst %.html,%,$(notdir $@))</a><p>' > $@
 
-%.html:        %.sgml
+%.html:        %.xml
        @(which db2html > /dev/null 2>&1) || \
         (echo "*** You need to install DocBook stylesheets ***"; \
          exit 1)
@@ -128,7 +129,7 @@
 ###
 # Rule to generate man files - output is placed in the man subdirectory
 
-%.9:   %.sgml
+%.9:   %.xml
 ifneq ($(KBUILD_SRC),)
        $(Q)mkdir -p $(objtree)/Documentation/DocBook/man
 endif
@@ -156,8 +157,8 @@
        $(call cmd,fig2png)
 
 ###
-# Rule to convert a .c file to inline SGML documentation
-%.sgml: %.c
+# Rule to convert a .c file to inline XML documentation
+%.xml: %.c
        @echo '  GEN     $@'
        @(                            \
           echo "<programlisting>";   \
@@ -171,24 +172,24 @@
 # Help targets as used by the top-level makefile
 dochelp:
        @echo  '  Linux kernel internal documentation in different formats:'
-       @echo  '  sgmldocs (SGML), psdocs (Postscript), pdfdocs (PDF)'
+       @echo  '  xmldocs (XML DocBook), psdocs (Postscript), pdfdocs (PDF)'
        @echo  '  htmldocs (HTML), mandocs (man pages, use installmandocs to 
install)'
 
 ###
 # Temporary files left by various tools
 clean-files := $(DOCBOOKS) \
-       $(patsubst %.sgml, %.dvi,  $(DOCBOOKS)) \
-       $(patsubst %.sgml, %.aux,  $(DOCBOOKS)) \
-       $(patsubst %.sgml, %.tex,  $(DOCBOOKS)) \
-       $(patsubst %.sgml, %.log,  $(DOCBOOKS)) \
-       $(patsubst %.sgml, %.out,  $(DOCBOOKS)) \
-       $(patsubst %.sgml, %.ps,   $(DOCBOOKS)) \
-       $(patsubst %.sgml, %.pdf,  $(DOCBOOKS)) \
-       $(patsubst %.sgml, %.html, $(DOCBOOKS)) \
-       $(patsubst %.sgml, %.9,    $(DOCBOOKS)) \
+       $(patsubst %.xml, %.dvi,  $(DOCBOOKS)) \
+       $(patsubst %.xml, %.aux,  $(DOCBOOKS)) \
+       $(patsubst %.xml, %.tex,  $(DOCBOOKS)) \
+       $(patsubst %.xml, %.log,  $(DOCBOOKS)) \
+       $(patsubst %.xml, %.out,  $(DOCBOOKS)) \
+       $(patsubst %.xml, %.ps,   $(DOCBOOKS)) \
+       $(patsubst %.xml, %.pdf,  $(DOCBOOKS)) \
+       $(patsubst %.xml, %.html, $(DOCBOOKS)) \
+       $(patsubst %.xml, %.9,    $(DOCBOOKS)) \
        $(C-procfs-example)
 
-clean-dirs := $(patsubst %.sgml,%,$(DOCBOOKS))
+clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS))
 
 #man put files in man subdir - traverse down
 subdir- := man/
diff -urN linux/Documentation/DocBook/deviceiobook.tmpl 
linux/Documentation/DocBook/deviceiobook.tmpl
--- linux/Documentation/DocBook/deviceiobook.tmpl       2004/11/15 11:49:12     
1.5
+++ linux/Documentation/DocBook/deviceiobook.tmpl       2005/03/18 17:36:43     
1.6
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="DoingIO">
  <bookinfo>
diff -urN linux/Documentation/DocBook/gadget.tmpl 
linux/Documentation/DocBook/gadget.tmpl
--- linux/Documentation/DocBook/gadget.tmpl     2004/09/19 12:30:00     1.5
+++ linux/Documentation/DocBook/gadget.tmpl     2005/03/18 17:36:43     1.6
@@ -1,4 +1,7 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
+
 <book id="USB-Gadget-API">
   <bookinfo>
     <title>USB Gadget API for Linux</title>
diff -urN linux/Documentation/DocBook/journal-api.tmpl 
linux/Documentation/DocBook/journal-api.tmpl
--- linux/Documentation/DocBook/journal-api.tmpl        2003/06/05 00:04:28     
1.7
+++ linux/Documentation/DocBook/journal-api.tmpl        2005/03/18 17:36:43     
1.8
@@ -1,4 +1,7 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
+
 <book id="LinuxJBDAPI">
  <bookinfo>
   <title>The Linux Journalling API</title>
diff -urN linux/Documentation/DocBook/kernel-api.tmpl 
linux/Documentation/DocBook/kernel-api.tmpl
--- linux/Documentation/DocBook/kernel-api.tmpl 2005/02/07 02:54:30     1.37
+++ linux/Documentation/DocBook/kernel-api.tmpl 2005/03/18 17:36:43     1.38
@@ -1,4 +1,7 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
+
 <book id="LinuxKernelAPI">
  <bookinfo>
   <title>The Linux Kernel API</title>
@@ -97,6 +100,14 @@
      </sect1>
   </chapter>
 
+  <chapter id="kfifo">
+     <title>FIFO Buffer</title>
+     <sect1><title>kfifo interface</title>
+!Iinclude/linux/kfifo.h
+!Ekernel/kfifo.c
+     </sect1>
+  </chapter>
+
   <chapter id="proc">
      <title>The proc filesystem</title>
  
diff -urN linux/Documentation/DocBook/kernel-hacking.tmpl 
linux/Documentation/DocBook/kernel-hacking.tmpl
--- linux/Documentation/DocBook/kernel-hacking.tmpl     2004/10/25 20:44:08     
1.19
+++ linux/Documentation/DocBook/kernel-hacking.tmpl     2005/03/18 17:36:43     
1.20
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="lk-hacking-guide">
  <bookinfo>
diff -urN linux/Documentation/DocBook/kernel-locking.tmpl 
linux/Documentation/DocBook/kernel-locking.tmpl
--- linux/Documentation/DocBook/kernel-locking.tmpl     2004/04/23 15:54:05     
1.15
+++ linux/Documentation/DocBook/kernel-locking.tmpl     2005/03/18 17:36:43     
1.16
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="LKLockingGuide">
  <bookinfo>
@@ -236,12 +238,12 @@
      your task will put itself on the queue, and be woken up when the
      semaphore is released.  This means the CPU will do something
      else while you are waiting, but there are many cases when you
-     simply can't sleep (see <xref linkend="sleeping-things">), and so
+     simply can't sleep (see <xref linkend="sleeping-things"/>), and so
      have to use a spinlock instead.
    </para>
    <para>
      Neither type of lock is recursive: see
-     <xref linkend="deadlock">.
+     <xref linkend="deadlock"/>.
    </para>
    </sect1>
  
@@ -326,7 +328,7 @@
     <para>
       Note that you can also use <function>spin_lock_irq()</function>
       or <function>spin_lock_irqsave()</function> here, which stop
-      hardware interrupts as well: see <xref linkend="hardirq-context">.
+      hardware interrupts as well: see <xref linkend="hardirq-context"/>.
     </para>
 
     <para>
@@ -403,7 +405,7 @@
 
      <para>
        The same softirq can run on the other CPUs: you can use a
-       per-CPU array (see <xref linkend="per-cpu">) for better
+       per-CPU array (see <xref linkend="per-cpu"/>) for better
        performance.  If you're going so far as to use a softirq,
        you probably care about scalable performance enough
        to justify the extra complexity.
@@ -545,120 +547,120 @@
    </para>
    <table>
 <title>Table of Locking Requirements</title>
-<TGROUP COLS="11">
-<TBODY>
-<ROW>
-<ENTRY></ENTRY>
-<ENTRY>IRQ Handler A</ENTRY>
-<ENTRY>IRQ Handler B</ENTRY>
-<ENTRY>Softirq A</ENTRY>
-<ENTRY>Softirq B</ENTRY>
-<ENTRY>Tasklet A</ENTRY>
-<ENTRY>Tasklet B</ENTRY>
-<ENTRY>Timer A</ENTRY>
-<ENTRY>Timer B</ENTRY>
-<ENTRY>User Context A</ENTRY>
-<ENTRY>User Context B</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>IRQ Handler A</ENTRY>
-<ENTRY>None</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>IRQ Handler B</ENTRY>
-<ENTRY>spin_lock_irqsave</ENTRY>
-<ENTRY>None</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>Softirq A</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>Softirq B</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>Tasklet A</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>None</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>Tasklet B</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>None</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>Timer A</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>None</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>Timer B</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>spin_lock</ENTRY>
-<ENTRY>None</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>User Context A</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>None</ENTRY>
-</ROW>
-
-<ROW>
-<ENTRY>User Context B</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_irq</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>spin_lock_bh</ENTRY>
-<ENTRY>down_interruptible</ENTRY>
-<ENTRY>None</ENTRY>
-</ROW>
-
-</TBODY>
-</TGROUP>
-</TABLE>
+<tgroup cols="11">
+<tbody>
+<row>
+<entry></entry>
+<entry>IRQ Handler A</entry>
+<entry>IRQ Handler B</entry>
+<entry>Softirq A</entry>
+<entry>Softirq B</entry>
+<entry>Tasklet A</entry>
+<entry>Tasklet B</entry>
+<entry>Timer A</entry>
+<entry>Timer B</entry>
+<entry>User Context A</entry>
+<entry>User Context B</entry>
+</row>
+
+<row>
+<entry>IRQ Handler A</entry>
+<entry>None</entry>
+</row>
+
+<row>
+<entry>IRQ Handler B</entry>
+<entry>spin_lock_irqsave</entry>
+<entry>None</entry>
+</row>
+
+<row>
+<entry>Softirq A</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock</entry>
+</row>
+
+<row>
+<entry>Softirq B</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+</row>
+
+<row>
+<entry>Tasklet A</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>None</entry>
+</row>
+
+<row>
+<entry>Tasklet B</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>None</entry>
+</row>
+
+<row>
+<entry>Timer A</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>None</entry>
+</row>
+
+<row>
+<entry>Timer B</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>spin_lock</entry>
+<entry>None</entry>
+</row>
+
+<row>
+<entry>User Context A</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>None</entry>
+</row>
+
+<row>
+<entry>User Context B</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_irq</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>spin_lock_bh</entry>
+<entry>down_interruptible</entry>
+<entry>None</entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
 </sect1>
 </chapter>
 
diff -urN linux/Documentation/DocBook/libata.tmpl 
linux/Documentation/DocBook/libata.tmpl
--- linux/Documentation/DocBook/libata.tmpl     2004/12/04 18:15:57     1.3
+++ linux/Documentation/DocBook/libata.tmpl     2005/03/18 17:36:43     1.4
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="libataDevGuide">
  <bookinfo>
diff -urN linux/Documentation/DocBook/librs.tmpl 
linux/Documentation/DocBook/librs.tmpl
--- linux/Documentation/DocBook/librs.tmpl      2004/12/04 18:15:57     1.2
+++ linux/Documentation/DocBook/librs.tmpl      2005/03/18 17:36:43     1.3
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="Reed-Solomon-Library-Guide">
  <bookinfo>
@@ -223,7 +225,7 @@
 .....
 /* Decode 512 byte in data8.*/
 numerr = decode_rs8 (rs_decoder, NULL, NULL, 512, syn, 0, errpos, 0, corr);
-for (i = 0; i < numerr; i++) {
+for (i = 0; i &lt; numerr; i++) {
        do_error_correction_in_your_buffer(errpos[i], corr[i]);
 }
                </programlisting>
diff -urN linux/Documentation/DocBook/lsm.tmpl 
linux/Documentation/DocBook/lsm.tmpl
--- linux/Documentation/DocBook/lsm.tmpl        2004/04/23 15:54:05     1.3
+++ linux/Documentation/DocBook/lsm.tmpl        2005/03/18 17:36:43     1.4
@@ -1,6 +1,9 @@
-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
+
 <article class="whitepaper" id="LinuxSecurityModule" lang="en">
- <artheader>
+ <articleinfo>
  <title>Linux Security Modules:  General Security Hooks for Linux</title>
  <authorgroup>
  <author>
@@ -28,7 +31,7 @@
  </affiliation>
  </author>
  </authorgroup>
- </artheader>
+ </articleinfo>
 
 <sect1><title>Introduction</title>
 
@@ -84,7 +87,7 @@
 modules.  The LSM kernel patch also moves most of the capabilities
 logic into an optional security module, with the system defaulting
 to the traditional superuser logic.  This capabilities module
-is discussed further in <XRef LinkEnd="cap">.
+is discussed further in <xref linkend="cap"/>.
 </para>
 
 <para>
diff -urN linux/Documentation/DocBook/mcabook.tmpl 
linux/Documentation/DocBook/mcabook.tmpl
--- linux/Documentation/DocBook/mcabook.tmpl    2000/03/19 01:28:42     1.1
+++ linux/Documentation/DocBook/mcabook.tmpl    2005/03/18 17:36:43     1.2
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="MCAGuide">
  <bookinfo>
diff -urN linux/Documentation/DocBook/mtdnand.tmpl 
linux/Documentation/DocBook/mtdnand.tmpl
--- linux/Documentation/DocBook/mtdnand.tmpl    2004/10/25 20:44:08     1.1
+++ linux/Documentation/DocBook/mtdnand.tmpl    2005/03/18 17:36:43     1.2
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="MTD-NAND-Guide">
  <bookinfo>
@@ -238,9 +240,9 @@
        struct nand_chip *this = (struct nand_chip *) mtd->priv;
        switch(cmd){
                case NAND_CTL_SETCLE: this->IO_ADDR_W |= CLE_ADRR_BIT;  break;
-               case NAND_CTL_CLRCLE: this->IO_ADDR_W &= ~CLE_ADRR_BIT; break;
+               case NAND_CTL_CLRCLE: this->IO_ADDR_W &amp;= ~CLE_ADRR_BIT; 
break;
                case NAND_CTL_SETALE: this->IO_ADDR_W |= ALE_ADRR_BIT;  break;
-               case NAND_CTL_CLRALE: this->IO_ADDR_W &= ~ALE_ADRR_BIT; break;
+               case NAND_CTL_CLRALE: this->IO_ADDR_W &amp;= ~ALE_ADRR_BIT; 
break;
        }
 }
                </programlisting>
@@ -391,7 +393,7 @@
        /* Deselect all chips, set all nCE pins high */
        GPIO(BOARD_NAND_NCE) |= 0xff;   
        if (chip >= 0)
-               GPIO(BOARD_NAND_NCE) &= ~ (1 << chip);  
+               GPIO(BOARD_NAND_NCE) &amp;= ~ (1 &lt;&lt; chip);
 }
                </programlisting>
                <para>
@@ -405,8 +407,8 @@
        struct nand_chip *this = (struct nand_chip *) mtd->priv;
        
        /* Deselect all chips */
-       this->IO_ADDR_R &= ~BOARD_NAND_ADDR_MASK;
-       this->IO_ADDR_W &= ~BOARD_NAND_ADDR_MASK;
+       this->IO_ADDR_R &amp;= ~BOARD_NAND_ADDR_MASK;
+       this->IO_ADDR_W &amp;= ~BOARD_NAND_ADDR_MASK;
        switch (chip) {
        case 0:
                this->IO_ADDR_R |= BOARD_NAND_ADDR_CHIP0;
diff -urN linux/Documentation/DocBook/procfs-guide.tmpl 
linux/Documentation/DocBook/procfs-guide.tmpl
--- linux/Documentation/DocBook/procfs-guide.tmpl       2004/11/15 11:49:12     
1.5
+++ linux/Documentation/DocBook/procfs-guide.tmpl       2005/03/18 17:36:43     
1.6
@@ -1,6 +1,7 @@
-<!-- -*- sgml -*- -->
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[
-<!ENTITY procfsexample SYSTEM "procfs_example.sgml">
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; [
+<!ENTITY procfsexample SYSTEM "procfs_example.xml">
 ]>
 
 <book id="LKProcfsGuide">
@@ -205,7 +206,7 @@
         function will return a pointer to the freshly created
         <structname>struct proc_dir_entry</structname>; otherwise it
         will return <constant>NULL</constant>. <xref
-        linkend="userland"> describes how to do something useful with
+        linkend="userland"/> describes how to do something useful with
         regular files.
       </para>
 
@@ -221,7 +222,7 @@
     <para>
       If you only want to be able to read the file, the function
       <function>create_proc_read_entry</function> described in <xref
-      linkend="convenience"> may be used to create and initialise
+      linkend="convenience"/> may be used to create and initialise
       the procfs entry in one single call.
     </para>
     </sect1>
@@ -298,7 +299,7 @@
         the <structname>struct proc_dir_entry</structname> before
         <function>remove_proc_entry</function> is called (that is: if
         there was some <structfield>data</structfield> allocated, of
-        course). See <xref linkend="usingdata"> for more information
+        course). See <xref linkend="usingdata"/> for more information
         on using the <structfield>data</structfield> entry.
       </para>
     </sect1>
@@ -333,7 +334,7 @@
       If you only want to use a the
       <structfield>read_proc</structfield>, the function
       <function>create_proc_read_entry</function> described in <xref
-      linkend="convenience"> may be used to create and initialise the
+      linkend="convenience"/> may be used to create and initialise the
       procfs entry in one single call.
     </para>
 
@@ -386,7 +387,7 @@
         The parameter <parameter>start</parameter> doesn't seem to be
         used anywhere in the kernel. The <parameter>data</parameter>
         parameter can be used to create a single call back function for
-        several files, see <xref linkend="usingdata">.
+        several files, see <xref linkend="usingdata"/>.
       </para>
 
       <para>
@@ -395,7 +396,7 @@
       </para>
 
       <para>
-        <xref linkend="example"> shows how to use a read call back
+        <xref linkend="example"/> shows how to use a read call back
         function.
       </para>
     </sect1>
@@ -429,12 +430,12 @@
         kernel's memory space, so it should first be copied to kernel
         space with <function>copy_from_user</function>. The
         <parameter>file</parameter> parameter is usually
-        ignored. <xref linkend="usingdata"> shows how to use the
+        ignored. <xref linkend="usingdata"/> shows how to use the
         <parameter>data</parameter> parameter.
       </para>
 
       <para>
-        Again, <xref linkend="example"> shows how to use this call back
+        Again, <xref linkend="example"/> shows how to use this call back
         function.
       </para>
     </sect1>
@@ -525,10 +526,10 @@
       <para>
         This function creates a regular file in exactly the same way
         as <function>create_proc_entry</function> from <xref
-        linkend="regularfile"> does, but also allows to set the read
+        linkend="regularfile"/> does, but also allows to set the read
         function <parameter>read_proc</parameter> in one call. This
         function can set the <parameter>data</parameter> as well, like
-        explained in <xref linkend="usingdata">.
+        explained in <xref linkend="usingdata"/>.
       </para>
     </sect1>
 
diff -urN linux/Documentation/DocBook/scsidrivers.tmpl 
linux/Documentation/DocBook/scsidrivers.tmpl
--- linux/Documentation/DocBook/scsidrivers.tmpl        2003/09/09 16:40:54     
1.4
+++ linux/Documentation/DocBook/scsidrivers.tmpl        2005/03/18 17:36:43     
1.5
@@ -1,5 +1,6 @@
-<!-- -*- sgml -*- -->
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="scsidrivers">
  <bookinfo>
diff -urN linux/Documentation/DocBook/sis900.tmpl 
linux/Documentation/DocBook/sis900.tmpl
--- linux/Documentation/DocBook/sis900.tmpl     2004/04/23 15:54:05     1.5
+++ linux/Documentation/DocBook/sis900.tmpl     2005/03/18 17:36:43     1.6
@@ -1,25 +1,27 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="SiS900Guide">
 
 <bookinfo>
 
-<title>SiS 900/7016 Fast Ethernet Device Driver</Title>
+<title>SiS 900/7016 Fast Ethernet Device Driver</title>
 
 <authorgroup>
 <author>
-<FirstName>Ollie</FirstName>
+<firstname>Ollie</firstname>
 <surname>Lho</surname>
 </author>
 
 <author>
-<FirstName>Lei Chun</FirstName>
+<firstname>Lei Chun</firstname>
 <surname>Chang</surname>
 </author>
 </authorgroup>
 
-<edition>Document Revision: 0.3 for SiS900 driver v1.06 & v1.07</edition>
-<PubDate>November 16, 2000</PubDate>
+<edition>Document Revision: 0.3 for SiS900 driver v1.06 &amp; v1.07</edition>
+<pubdate>November 16, 2000</pubdate>
 
 <copyright>
  <year>1999</year>
@@ -48,21 +50,21 @@
  </para>
 </legalnotice>
 
-<Abstract>
-<Para>
+<abstract>
+<para>
 This document gives some information on installation and usage of SiS 900/7016
 device driver under Linux.
-</Para>
-</Abstract>
+</para>
+</abstract>
 
 </bookinfo>
 
 <toc></toc>
 
 <chapter id="intro">
- <Title>Introduction</Title>
+ <title>Introduction</title>
 
-<Para>
+<para>
 This document describes the revision 1.06 and 1.07 of SiS 900/7016 Fast 
Ethernet 
 device driver under Linux. The driver is developed by Silicon Integrated
 System Corp. and distributed freely under the GNU General Public License (GPL).
@@ -70,265 +72,265 @@
 version 2.2.x. (rev. 1.06)
 With minimal changes, the driver can also be used under 2.3.x and 2.4.x kernel 
 (rev. 1.07), please see 
-<XRef LinkEnd="install">. If you are intended to 
+<xref linkend="install"/>. If you are intended to
 use the driver for earlier kernels, you are on your own.
-</Para>
+</para>
 
-<Para>
+<para>
 The driver is tested with usual TCP/IP applications including
 FTP, Telnet, Netscape etc. and is used constantly by the developers.
-</Para>
+</para>
 
-<Para>
+<para>
 Please send all comments/fixes/questions to
-<ULink URL="mailto:lcchang@sis.com.tw";>Lei-Chun Chang</ULink>.
-</Para>
+<ulink url="mailto:lcchang@sis.com.tw";>Lei-Chun Chang</ulink>.
+</para>
 </chapter>
 
 <chapter id="changes">
- <Title>Changes</Title>
+ <title>Changes</title>
 
-<Para>
+<para>
 Changes made in Revision 1.07
 
-<OrderedList>
-<ListItem>
-<Para>
+<orderedlist>
+<listitem>
+<para>
 Separation of sis900.c and sis900.h in order to move most 
 constant definition to sis900.h (many of those constants were
 corrected)
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Clean up PCI detection, the pci-scan from Donald Becker were not used,
 just simple pci&lowbar;find&lowbar;*.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 MII detection is modified to support multiple mii transceiver.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Bugs in read&lowbar;eeprom, mdio&lowbar;* were removed.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Lot of sis900 irrelevant comments were removed/changed and
 more comments were added to reflect the real situation.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Clean up of physical/virtual address space mess in buffer 
 descriptors.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Better transmit/receive error handling.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 The driver now uses zero-copy single buffer management
 scheme to improve performance.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Names of variables were changed to be more consistent.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Clean up of auo-negotiation and timer code.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Automatic detection and change of PHY on the fly.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Bug in mac probing fixed.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Fix 630E equalier problem by modifying the equalizer workaround rule.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Support for ICS1893 10/100 Interated PHYceiver.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Support for media select by ifconfig.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 Added kernel-doc extratable documentation.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-</OrderedList>
-</Para>
+</orderedlist>
+</para>
 </chapter>
 
 <chapter id="tested">
- <Title>Tested Environment</Title>
+ <title>Tested Environment</title>
 
-<Para>
+<para>
 This driver is developed on the following hardware
 
-<ItemizedList>
-<ListItem>
+<itemizedlist>
+<listitem>
 
-<Para>
+<para>
 Intel Celeron 500 with SiS 630 (rev 02) chipset
-</Para>
-</ListItem>
-<ListItem>
+</para>
+</listitem>
+<listitem>
 
-<Para>
+<para>
 SiS 900 (rev 01) and SiS 7016/7014 Fast Ethernet Card
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-</ItemizedList>
+</itemizedlist>
 
 and tested with these software environments
 
-<ItemizedList>
-<ListItem>
+<itemizedlist>
+<listitem>
 
-<Para>
+<para>
 Red Hat Linux version 6.2
-</Para>
-</ListItem>
-<ListItem>
+</para>
+</listitem>
+<listitem>
 
-<Para>
+<para>
 Linux kernel version 2.4.0
-</Para>
-</ListItem>
-<ListItem>
+</para>
+</listitem>
+<listitem>
 
-<Para>
+<para>
 Netscape version 4.6
-</Para>
-</ListItem>
-<ListItem>
+</para>
+</listitem>
+<listitem>
 
-<Para>
+<para>
 NcFTP 3.0.0 beta 18
-</Para>
-</ListItem>
-<ListItem>
+</para>
+</listitem>
+<listitem>
 
-<Para>
+<para>
 Samba version 2.0.3
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-</ItemizedList>
+</itemizedlist>
 
-</Para>
+</para>
 
 </chapter>
 
 <chapter id="files">
-<Title>Files in This Package</Title>
+<title>Files in This Package</title>
 
-<Para>
+<para>
 In the package you can find these files:
-</Para>
+</para>
 
-<Para>
-<VariableList>
+<para>
+<variablelist>
 
-<VarListEntry>
-<Term>sis900.c</Term>
-<ListItem>
-<Para>
+<varlistentry>
+<term>sis900.c</term>
+<listitem>
+<para>
 Driver source file in C 
-</Para>
-</ListItem>
-</VarListEntry>
-
-<VarListEntry>
-<Term>sis900.h</Term>
-<ListItem>
-<Para>
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>sis900.h</term>
+<listitem>
+<para>
 Header file for sis900.c
-</Para>
-</ListItem>
-</VarListEntry>
-
-<VarListEntry>
-<Term>sis900.sgml</Term>
-<ListItem>
-<Para>
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>sis900.sgml</term>
+<listitem>
+<para>
 DocBook SGML source of the document
-</Para>
-</ListItem>
-</VarListEntry>
-
-<VarListEntry>
-<Term>sis900.txt</Term>
-<ListItem>
-<Para>
+</para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>sis900.txt</term>
+<listitem>
+<para>
 Driver document in plain text
-</Para>
-</ListItem>
-</VarListEntry>
+</para>
+</listitem>
+</varlistentry>
 
-</VariableList>
-</Para>
+</variablelist>
+</para>
 </chapter>
 
 <chapter id="install">
- <Title>Installation</Title>
+ <title>Installation</title>
 
-<Para>
+<para>
 Silicon Integrated System Corp. is cooperating closely with core Linux Kernel
 developers. The revisions of SiS 900 driver are distributed by the usuall 
channels
 for kernel tar files and patches. Those kernel tar files for official kernel 
and
 patches for kernel pre-release can be download at 
-<ULink URL="http://ftp.kernel.org/pub/linux/kernel/";>official kernel ftp 
site</ULink> 
+<ulink url="http://ftp.kernel.org/pub/linux/kernel/";>official kernel ftp 
site</ulink>
 and its mirrors.
 The 1.06 revision can be found in kernel version later than 2.3.15 and 
pre-2.2.14, 
 and 1.07 revision can be found in kernel version 2.4.0.
 If you have no prior experience in networking under Linux, please read
-<ULink URL="http://www.tldp.org/";>Ethernet HOWTO</ULink> and
-<ULink URL="http://www.tldp.org/";>Networking HOWTO</ULink> available from
+<ulink url="http://www.tldp.org/";>Ethernet HOWTO</ulink> and
+<ulink url="http://www.tldp.org/";>Networking HOWTO</ulink> available from
 Linux Documentation Project (LDP).
-</Para>
+</para>
 
-<Para>
+<para>
 The driver is bundled in release later than 2.2.11 and 2.3.15 so this 
 is the most easy case. 
 Be sure you have the appropriate packages for compiling kernel source.
@@ -338,63 +340,63 @@
 <filename>sis900.c</filename> and <filename>sis900.h</filename> 
 copied into <filename class="directory">/usr/src/linux/drivers/net/</filename> 
first.
 There are two alternative ways to install the driver
-</Para>
+</para>
 
-<Sect1>
-<Title>Building the driver as loadable module</Title>
+<sect1>
+<title>Building the driver as loadable module</title>
 
-<Para>
+<para>
 To build the driver as a loadable kernel module you have to reconfigure
 the kernel to activate network support by
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 make menuconfig
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 Choose <quote>Loadable module support  ---></quote>, 
 then select <quote>Enable loadable module support</quote>.
-</Para>
+</para>
 
-<Para>
+<para>
 Choose <quote>Network Device Support  ---></quote>, select 
 <quote>Ethernet (10 or 100Mbit)</quote>.
 Then select <quote>EISA, VLB, PCI and on board controllers</quote>, 
 and choose <quote>SiS 900/7016 PCI Fast Ethernet Adapter support</quote> 
 to <quote>M</quote>.
-</Para>
+</para>
 
-<Para>
+<para>
 After reconfiguring the kernel, you can make the driver module by
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 make modules
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 The driver should be compiled with no errors. After compiling the driver,
 the driver can be installed to proper place by
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 make modules_install
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 Load the driver into kernel by
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 insmod sis900
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 When loading the driver into memory, some information message can be view by
-</Para>
+</para>
 
-<Para>
+<para>
 <screen>
 dmesg
 </screen>
@@ -404,103 +406,103 @@
 <screen>
 cat /var/log/message
 </screen>
-</Para>
+</para>
 
-<Para>
+<para>
 If the driver is loaded properly you will have messages similar to this:
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 sis900.c: v1.07.06  11/07/2000
 eth0: SiS 900 PCI Fast Ethernet at 0xd000, IRQ 10, 00:00:e8:83:7f:a4.
 eth0: SiS 900 Internal MII PHY transceiver found at address 1.
 eth0: Using SiS 900 Internal MII PHY as default
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 showing the version of the driver and the results of probing routine.
-</Para>
+</para>
 
-<Para>
+<para>
 Once the driver is loaded, network can be brought up by
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 /sbin/ifconfig eth0 IPADDR broadcast BROADCAST netmask NETMASK media TYPE
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 where IPADDR, BROADCAST, NETMASK are your IP address, broadcast address and
 netmask respectively. TYPE is used to set medium type used by the device. 
 Typical values are "10baseT"(twisted-pair 10Mbps Ethernet) or "100baseT"
 (twisted-pair 100Mbps Ethernet). For more information on how to configure 
 network interface, please refer to  
-<ULink URL="http://www.tldp.org/";>Networking HOWTO</ULink>.
-</Para>
+<ulink url="http://www.tldp.org/";>Networking HOWTO</ulink>.
+</para>
 
-<Para>
+<para>
 The link status is also shown by kernel messages. For example, after the
 network interface is activated, you may have the message:
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 eth0: Media Link On 100mbps full-duplex
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 If you try to unplug the twist pair (TP) cable you will get
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 eth0: Media Link Off
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 indicating that the link is failed.
-</Para>
-</Sect1>
+</para>
+</sect1>
 
-<Sect1>
-<Title>Building the driver into kernel</Title>
+<sect1>
+<title>Building the driver into kernel</title>
 
-<Para>
+<para>
 If you want to make the driver into kernel, choose <quote>Y</quote> 
 rather than <quote>M</quote> on 
 <quote>SiS 900/7016 PCI Fast Ethernet Adapter support</quote> 
 when configuring the kernel. Build the kernel image in the usual way
-</Para>
+</para>
 
-<Para><screen>
+<para><screen>
 make clean
 
 make bzlilo
-</screen></Para>
+</screen></para>
 
-<Para>
+<para>
 Next time the system reboot, you have the driver in memory.
-</Para>
+</para>
 
-</Sect1>
+</sect1>
 </chapter>
 
 <chapter id="problems">
- <Title>Known Problems and Bugs</Title>
+ <title>Known Problems and Bugs</title>
 
-<Para>
+<para>
 There are some known problems and bugs. If you find any other bugs please 
-mail to <ULink URL="mailto:lcchang@sis.com.tw";>lcchang@sis.com.tw</ULink>
+mail to <ulink url="mailto:lcchang@sis.com.tw";>lcchang@sis.com.tw</ulink>
 
-<OrderedList>
+<orderedlist>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 AM79C901 HomePNA PHY is not thoroughly tested, there may be some 
 bugs in the <quote>on the fly</quote> change of transceiver. 
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 A bug is hidden somewhere in the receive buffer management code, 
 the bug causes NULL pointer reference in the kernel. This fault is 
 caught before bad things happen and reported with the message:
@@ -509,70 +511,70 @@
 eth0: NULL pointer encountered in Rx ring, skipping 
 </computeroutput>
 
-which can be viewed with <Literal remap="tt">dmesg</Literal> or 
-<Literal remap="tt">cat /var/log/message</Literal>.
-</Para>
-</ListItem>
+which can be viewed with <literal remap="tt">dmesg</literal> or
+<literal remap="tt">cat /var/log/message</literal>.
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 The media type change from 10Mbps to 100Mbps twisted-pair ethernet 
 by ifconfig causes the media link down.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-</OrderedList>
-</Para>
+</orderedlist>
+</para>
 </chapter>
 
 <chapter id="RHistory">
- <Title>Revision History</Title>
+ <title>Revision History</title>
 
-<Para>
-<ItemizedList>
+<para>
+<itemizedlist>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 November 13, 2000, Revision 1.07, seventh release, 630E problem fixed 
 and further clean up.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 November 4, 1999, Revision 1.06, Second release, lots of clean up
 and optimization.
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-<ListItem>
-<Para>
+<listitem>
+<para>
 August 8, 1999, Revision 1.05, Initial Public Release
-</Para>
-</ListItem>
+</para>
+</listitem>
 
-</ItemizedList>
-</Para>
+</itemizedlist>
+</para>
 </chapter>
 
 <chapter id="acknowledgements">
- <Title>Acknowledgements</Title>
+ <title>Acknowledgements</title>
 
-<Para>
+<para>
 This driver was originally derived form 
-<ULink URL="mailto:becker@cesdis1.gsfc.nasa.gov";>Donald Becker</ULink>'s
-<ULink 
URL="ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/kern-2.3/pci-skeleton.c";
->pci-skeleton</ULink> and
-<ULink URL="ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/kern-2.3/rtl8139.c";
->rtl8139</ULink> drivers. Donald also provided various suggestion
+<ulink url="mailto:becker@cesdis1.gsfc.nasa.gov";>Donald Becker</ulink>'s
+<ulink 
url="ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/kern-2.3/pci-skeleton.c";
+>pci-skeleton</ulink> and
+<ulink url="ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/kern-2.3/rtl8139.c";
+>rtl8139</ulink> drivers. Donald also provided various suggestion
 regarded with improvements made in revision 1.06.
-</Para>
+</para>
 
-<Para>
+<para>
 The 1.05 revision was created by 
-<ULink URL="mailto:cmhuang@sis.com.tw";>Jim Huang</ULink>, AMD 79c901 
-support was added by <ULink URL="mailto:lcs@sis.com.tw";>Chin-Shan Li</ULink>.
-</Para>
+<ulink url="mailto:cmhuang@sis.com.tw";>Jim Huang</ulink>, AMD 79c901
+support was added by <ulink url="mailto:lcs@sis.com.tw";>Chin-Shan Li</ulink>.
+</para>
 </chapter>
 
 <chapter id="functions">
diff -urN linux/Documentation/DocBook/tulip-user.tmpl 
linux/Documentation/DocBook/tulip-user.tmpl
--- linux/Documentation/DocBook/tulip-user.tmpl 2002/11/02 20:01:53     1.3
+++ linux/Documentation/DocBook/tulip-user.tmpl 2005/03/18 17:36:43     1.4
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="TulipUserGuide">
  <bookinfo>
@@ -67,7 +69,7 @@
 
 <para>
 For 2.4.x and later kernels, the Linux Tulip driver is available at
-<ULink 
URL="http://sourceforge.net/projects/tulip/";>http://sourceforge.net/projects/tulip/</ULink>
+<ulink 
url="http://sourceforge.net/projects/tulip/";>http://sourceforge.net/projects/tulip/</ulink>
 </para>
 
 <para>
@@ -85,7 +87,7 @@
 
 <para>
        Additional information on Donald Becker's tulip.c
-       is available at <ULink 
URL="http://www.scyld.com/network/tulip.html";>http://www.scyld.com/network/tulip.html</ULink>
+       is available at <ulink 
url="http://www.scyld.com/network/tulip.html";>http://www.scyld.com/network/tulip.html</ulink>
 </para>
 
   </chapter>
diff -urN linux/Documentation/DocBook/usb.tmpl 
linux/Documentation/DocBook/usb.tmpl
--- linux/Documentation/DocBook/usb.tmpl        2004/08/24 15:10:03     1.3
+++ linux/Documentation/DocBook/usb.tmpl        2005/03/18 17:36:43     1.4
@@ -1,4 +1,7 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
+
 <book id="Linux-USB-API">
  <bookinfo>
   <title>The Linux-USB Host Side API</title>
diff -urN linux/Documentation/DocBook/via-audio.tmpl 
linux/Documentation/DocBook/via-audio.tmpl
--- linux/Documentation/DocBook/via-audio.tmpl  2004/04/23 15:54:05     1.7
+++ linux/Documentation/DocBook/via-audio.tmpl  2005/03/18 17:36:43     1.8
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="ViaAudioGuide">
  <bookinfo>
@@ -262,7 +264,7 @@
 
    <listitem>
     <para>
-    Fixes for the SPEED, STEREO, CHANNELS, FMT ioctls when in read &
+    Fixes for the SPEED, STEREO, CHANNELS, FMT ioctls when in read &amp;
     write mode (Rui Sousa)
     </para>
    </listitem>
diff -urN linux/Documentation/DocBook/videobook.tmpl 
linux/Documentation/DocBook/videobook.tmpl
--- linux/Documentation/DocBook/videobook.tmpl  2004/11/15 11:49:12     1.11
+++ linux/Documentation/DocBook/videobook.tmpl  2005/03/18 17:36:43     1.12
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="V4LGuide">
  <bookinfo>
@@ -180,23 +182,23 @@
    <tgroup cols="3" align="left">
    <tbody>
    <row>
-        <entry>VFL_TYPE_RADIO</><entry>/dev/radio{n}</><entry>
+        <entry>VFL_TYPE_RADIO</entry><entry>/dev/radio{n}</entry><entry>
 
         Radio devices are assigned in this block. As with all of these
         selections the actual number assignment is done by the video layer
         accordijng to what is free.</entry>
        </row><row>
-        <entry>VFL_TYPE_GRABBER</><entry>/dev/video{n}</><entry>
+        <entry>VFL_TYPE_GRABBER</entry><entry>/dev/video{n}</entry><entry>
         Video capture devices and also -- counter-intuitively for the name --
         hardware video playback devices such as MPEG2 cards.</entry>
        </row><row>
-        <entry>VFL_TYPE_VBI</><entry>/dev/vbi{n}</><entry>
+        <entry>VFL_TYPE_VBI</entry><entry>/dev/vbi{n}</entry><entry>
         The VBI devices capture the hidden lines on a television picture
         that carry further information like closed caption data, teletext
         (primarily in Europe) and now Intercast and the ATVEC internet
         television encodings.</entry>
        </row><row>
-        <entry>VFL_TYPE_VTX</><entry>/dev/vtx[n}</><entry>
+        <entry>VFL_TYPE_VTX</entry><entry>/dev/vtx[n}</entry><entry>
         VTX is 'Videotext' also known as 'Teletext'. This is a system for
         sending numbered, 40x25, mostly textual page images over the hidden
         lines. Unlike the /dev/vbi interfaces, this is for 'smart' decoder 
@@ -301,25 +303,25 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-        <entry>name</><entry>The device text name. This is intended for the 
user.</>
+        <entry>name</entry><entry>The device text name. This is intended for 
the user.</entry>
        </row><row>
-        <entry>channels</><entry>The number of different channels you can tune 
on
+        <entry>channels</entry><entry>The number of different channels you can 
tune on
                         this card. It could even by zero for a card that has
                         no tuning capability. For our simple FM radio it is 1. 
                         An AM/FM radio would report 2.</entry>
        </row><row>
-        <entry>audios</><entry>The number of audio inputs on this device. For 
our
+        <entry>audios</entry><entry>The number of audio inputs on this device. 
For our
                         radio there is only one audio input.</entry>
        </row><row>
-        <entry>minwidth,minheight</><entry>The smallest size the card is 
capable of capturing
+        <entry>minwidth,minheight</entry><entry>The smallest size the card is 
capable of capturing
                        images in. We set these to zero. Radios do not
                         capture pictures</entry>
        </row><row>
-        <entry>maxwidth,maxheight</><entry>The largest image size the card is 
capable of
+        <entry>maxwidth,maxheight</entry><entry>The largest image size the 
card is capable of
                                       capturing. For our radio we report 0.
                                </entry>
        </row><row>
-        <entry>type</><entry>This reports the capabilities of the device, and
+        <entry>type</entry><entry>This reports the capabilities of the device, 
and
                         matches the field we filled in in the struct
                         video_device when registering.</entry>
     </row>
@@ -375,26 +377,26 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-        <entry>int tuner</><entry>The number of the tuner in question</entry>
+        <entry>int tuner</entry><entry>The number of the tuner in 
question</entry>
    </row><row>
-        <entry>char name[32]</><entry>A text description of this tuner. "FM" 
will do fine.
+        <entry>char name[32]</entry><entry>A text description of this tuner. 
"FM" will do fine.
                         This is intended for the application.</entry>
    </row><row>
-        <entry>u32 flags</>
+        <entry>u32 flags</entry>
         <entry>Tuner capability flags</entry>
    </row>
    <row>
-        <entry>u16 mode</><entry>The current reception mode</entry>
+        <entry>u16 mode</entry><entry>The current reception mode</entry>
 
    </row><row>
-        <entry>u16 signal</><entry>The signal strength scaled between 0 and 
65535. If
+        <entry>u16 signal</entry><entry>The signal strength scaled between 0 
and 65535. If
                         a device cannot tell the signal strength it should
                         report 65535. Many simple cards contain only a 
                         signal/no signal bit. Such cards will report either
                         0 or 65535.</entry>
 
    </row><row>
-        <entry>u32 rangelow, rangehigh</><entry>
+        <entry>u32 rangelow, rangehigh</entry><entry>
                         The range of frequencies supported by the radio
                         or TV. It is scaled according to the VIDEO_TUNER_LOW
                         flag.</entry>
@@ -408,20 +410,20 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-       <entry>VIDEO_TUNER_PAL</><entry>A PAL TV tuner</entry>
+       <entry>VIDEO_TUNER_PAL</entry><entry>A PAL TV tuner</entry>
        </row><row>
-        <entry>VIDEO_TUNER_NTSC</><entry>An NTSC (US) TV tuner</entry>
+        <entry>VIDEO_TUNER_NTSC</entry><entry>An NTSC (US) TV tuner</entry>
        </row><row>
-        <entry>VIDEO_TUNER_SECAM</><entry>A SECAM (French) TV tuner</entry>
+        <entry>VIDEO_TUNER_SECAM</entry><entry>A SECAM (French) TV 
tuner</entry>
        </row><row>
-        <entry>VIDEO_TUNER_LOW</><entry>
+        <entry>VIDEO_TUNER_LOW</entry><entry>
              The tuner frequency is scaled in 1/16th of a KHz
              steps. If not it is in 1/16th of a MHz steps
        </entry>
        </row><row>
-        <entry>VIDEO_TUNER_NORM</><entry>The tuner can set its format</entry>
+        <entry>VIDEO_TUNER_NORM</entry><entry>The tuner can set its 
format</entry>
        </row><row>
-        <entry>VIDEO_TUNER_STEREO_ON</><entry>The tuner is currently receiving 
a stereo signal</entry>
+        <entry>VIDEO_TUNER_STEREO_ON</entry><entry>The tuner is currently 
receiving a stereo signal</entry>
         </row>
     </tbody>
     </tgroup>
@@ -431,13 +433,13 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-                <entry>VIDEO_MODE_PAL</><entry>PAL Format</entry>
+                <entry>VIDEO_MODE_PAL</entry><entry>PAL Format</entry>
    </row><row>
-                <entry>VIDEO_MODE_NTSC</><entry>NTSC Format (USA)</entry>
+                <entry>VIDEO_MODE_NTSC</entry><entry>NTSC Format (USA)</entry>
    </row><row>
-                <entry>VIDEO_MODE_SECAM</><entry>French Format</entry>
+                <entry>VIDEO_MODE_SECAM</entry><entry>French Format</entry>
    </row><row>
-                <entry>VIDEO_MODE_AUTO</><entry>A device that does not need to 
do
+                <entry>VIDEO_MODE_AUTO</entry><entry>A device that does not 
need to do
                                         TV format switching</entry>
    </row>
     </tbody>
@@ -521,7 +523,7 @@
                         if(copy_from_user(arg, &amp;freq, 
                                 sizeof(unsigned long))!=0)
                                 return -EFAULT;
-                        if(hardware_set_freq(freq)<0)
+                        if(hardware_set_freq(freq)&lt;0)
                                 return -EINVAL;
                         current_freq = freq;
                         return 0;
@@ -582,32 +584,32 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-   <entry>audio</><entry>The input the user wishes to query</>
+   <entry>audio</entry><entry>The input the user wishes to query</entry>
    </row><row>
-   <entry>volume</><entry>The volume setting on a scale of 0-65535</>
+   <entry>volume</entry><entry>The volume setting on a scale of 0-65535</entry>
    </row><row>
-   <entry>base</><entry>The base level on a scale of 0-65535</>
+   <entry>base</entry><entry>The base level on a scale of 0-65535</entry>
    </row><row>
-   <entry>treble</><entry>The treble level on a scale of 0-65535</>
+   <entry>treble</entry><entry>The treble level on a scale of 0-65535</entry>
    </row><row>
-   <entry>flags</><entry>The features this audio device supports
+   <entry>flags</entry><entry>The features this audio device supports
    </entry>
    </row><row>
-   <entry>name</><entry>A text name to display to the user. We picked 
-                        "Radio" as it explains things quite nicely.</>
+   <entry>name</entry><entry>A text name to display to the user. We picked
+                        "Radio" as it explains things quite nicely.</entry>
    </row><row>
-   <entry>mode</><entry>The current reception mode for the audio
+   <entry>mode</entry><entry>The current reception mode for the audio
 
                 We report MONO because our card is too stupid to know if it is 
in
                 mono or stereo. 
    </entry>
    </row><row>
-   <entry>balance</><entry>The stereo balance on a scale of 0-65535, 32768 is
-                        middle.</>
+   <entry>balance</entry><entry>The stereo balance on a scale of 0-65535, 
32768 is
+                        middle.</entry>
    </row><row>
-   <entry>step</><entry>The step by which the volume control jumps. This is
+   <entry>step</entry><entry>The step by which the volume control jumps. This 
is
                         used to help make it easy for applications to set 
-                        slider behaviour.</>   
+                        slider behaviour.</entry>
    </row>
    </tbody>
    </tgroup>
@@ -617,15 +619,15 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-                <entry>VIDEO_AUDIO_MUTE</><entry>The audio is currently muted. 
We
+                <entry>VIDEO_AUDIO_MUTE</entry><entry>The audio is currently 
muted. We
                                         could fake this in our driver but we
                                         choose not to bother.</entry>
    </row><row>
-                <entry>VIDEO_AUDIO_MUTABLE</><entry>The input has a mute 
option</entry>
+                <entry>VIDEO_AUDIO_MUTABLE</entry><entry>The input has a mute 
option</entry>
    </row><row>
-                <entry>VIDEO_AUDIO_TREBLE</><entry>The  input has a treble 
control</entry>
+                <entry>VIDEO_AUDIO_TREBLE</entry><entry>The  input has a 
treble control</entry>
    </row><row>
-                <entry>VIDEO_AUDIO_BASS</><entry>The input has a base 
control</entry>
+                <entry>VIDEO_AUDIO_BASS</entry><entry>The input has a base 
control</entry>
    </row>
    </tbody>
    </tgroup>
@@ -635,13 +637,13 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-                <entry>VIDEO_SOUND_MONO</><entry>Mono sound</entry>
+                <entry>VIDEO_SOUND_MONO</entry><entry>Mono sound</entry>
    </row><row>
-                <entry>VIDEO_SOUND_STEREO</><entry>Stereo sound</entry>
+                <entry>VIDEO_SOUND_STEREO</entry><entry>Stereo sound</entry>
    </row><row>
-                <entry>VIDEO_SOUND_LANG1</><entry>Alternative language 1 (TV 
specific)</entry>
+                <entry>VIDEO_SOUND_LANG1</entry><entry>Alternative language 1 
(TV specific)</entry>
    </row><row>
-                <entry>VIDEO_SOUND_LANG2</><entry>Alternative language 2 (TV 
specific)</entry>
+                <entry>VIDEO_SOUND_LANG2</entry><entry>Alternative language 2 
(TV specific)</entry>
    </row>
    </tbody>
    </tgroup>
@@ -866,37 +868,37 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-<entry>VID_TYPE_CAPTURE</><entry>We support image capture</>
+<entry>VID_TYPE_CAPTURE</entry><entry>We support image capture</entry>
 </row><row>
-<entry>VID_TYPE_TELETEXT</><entry>A teletext capture device (vbi{n])</>
+<entry>VID_TYPE_TELETEXT</entry><entry>A teletext capture device 
(vbi{n])</entry>
 </row><row>
-<entry>VID_TYPE_OVERLAY</><entry>The image can be directly overlaid onto the
-                                frame buffer</>
+<entry>VID_TYPE_OVERLAY</entry><entry>The image can be directly overlaid onto 
the
+                                frame buffer</entry>
 </row><row>
-<entry>VID_TYPE_CHROMAKEY</><entry>Chromakey can be used to select which parts
-                                of the image to display</>
+<entry>VID_TYPE_CHROMAKEY</entry><entry>Chromakey can be used to select which 
parts
+                                of the image to display</entry>
 </row><row>
-<entry>VID_TYPE_CLIPPING</><entry>It is possible to give the board a list of
-                                rectangles to draw around. </>
+<entry>VID_TYPE_CLIPPING</entry><entry>It is possible to give the board a list 
of
+                                rectangles to draw around. </entry>
 </row><row>
-<entry>VID_TYPE_FRAMERAM</><entry>The video capture goes into the video memory
+<entry>VID_TYPE_FRAMERAM</entry><entry>The video capture goes into the video 
memory
                                 and actually changes it. Applications need
                                 to know this so they can clean up after the
-                                card</>
+                                card</entry>
 </row><row>
-<entry>VID_TYPE_SCALES</><entry>The image can be scaled to various sizes,
-                                rather than being a single fixed size.</>
+<entry>VID_TYPE_SCALES</entry><entry>The image can be scaled to various sizes,
+                                rather than being a single fixed size.</entry>
 </row><row>
-<entry>VID_TYPE_MONOCHROME</><entry>The capture will be monochrome. This isn't 
a 
+<entry>VID_TYPE_MONOCHROME</entry><entry>The capture will be monochrome. This 
isn't a
                                 complete answer to the question since a mono
                                 camera on a colour capture card will still
-                                produce mono output.</>
+                                produce mono output.</entry>
 </row><row>
-<entry>VID_TYPE_SUBCAPTURE</><entry>The card allows only part of its field of
+<entry>VID_TYPE_SUBCAPTURE</entry><entry>The card allows only part of its 
field of
                                 view to be captured. This enables
                                 applications to avoid copying all of a large
                                 image into memory when only some section is
-                                relevant.</>
+                                relevant.</entry>
     </row>
     </tbody>
     </tgroup>
@@ -1207,18 +1209,18 @@
    <tbody>
    <row>
 
-   <entry>channel</><entry>The channel number we are selecting</entry>
+   <entry>channel</entry><entry>The channel number we are selecting</entry>
    </row><row>
-   <entry>name</><entry>The name for this channel. This is intended
+   <entry>name</entry><entry>The name for this channel. This is intended
                    to describe the port to the user.
                    Appropriate names are therefore things like
                    "Camera" "SCART input"</entry>
    </row><row>
-   <entry>flags</><entry>Channel properties</entry>
+   <entry>flags</entry><entry>Channel properties</entry>
    </row><row>
-   <entry>type</><entry>Input type</entry>
+   <entry>type</entry><entry>Input type</entry>
    </row><row>
-   <entry>norm</><entry>The current television encoding being used
+   <entry>norm</entry><entry>The current television encoding being used
                    if relevant for this channel.
     </entry>
     </row>
@@ -1229,9 +1231,9 @@
     <tgroup cols="2" align="left">
     <tbody>
     <row>
-        <entry>VIDEO_VC_TUNER</><entry>Channel has a tuner.</entry>
+        <entry>VIDEO_VC_TUNER</entry><entry>Channel has a tuner.</entry>
    </row><row>
-        <entry>VIDEO_VC_AUDIO</><entry>Channel has audio.</entry>
+        <entry>VIDEO_VC_AUDIO</entry><entry>Channel has audio.</entry>
     </row>
     </tbody>
     </tgroup>
@@ -1240,11 +1242,11 @@
     <tgroup cols="2" align="left">
     <tbody>
     <row>
-        <entry>VIDEO_TYPE_TV</><entry>Television input.</entry>
+        <entry>VIDEO_TYPE_TV</entry><entry>Television input.</entry>
    </row><row>
-        <entry>VIDEO_TYPE_CAMERA</><entry>Fixed camera input.</entry>
+        <entry>VIDEO_TYPE_CAMERA</entry><entry>Fixed camera input.</entry>
    </row><row>
-       <entry>0</><entry>Type is unknown.</entry>
+       <entry>0</entry><entry>Type is unknown.</entry>
     </row>
     </tbody>
     </tgroup>
@@ -1253,13 +1255,13 @@
     <tgroup cols="2" align="left">
     <tbody>
     <row>
-        <entry>VIDEO_MODE_PAL</><entry>PAL encoded Television</entry>
+        <entry>VIDEO_MODE_PAL</entry><entry>PAL encoded Television</entry>
    </row><row>
-        <entry>VIDEO_MODE_NTSC</><entry>NTSC (US) encoded Television</entry>
+        <entry>VIDEO_MODE_NTSC</entry><entry>NTSC (US) encoded 
Television</entry>
    </row><row>
-        <entry>VIDEO_MODE_SECAM</><entry>SECAM (French) Television </entry>
+        <entry>VIDEO_MODE_SECAM</entry><entry>SECAM (French) Television 
</entry>
    </row><row>
-        <entry>VIDEO_MODE_AUTO</><entry>Automatic switching, or format does not
+        <entry>VIDEO_MODE_AUTO</entry><entry>Automatic switching, or format 
does not
                                 matter</entry>
     </row>
     </tbody>
@@ -1339,14 +1341,14 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-   <entry>GREY</><entry>Linear greyscale. This is for simple cameras and the
-                        like</>
+   <entry>GREY</entry><entry>Linear greyscale. This is for simple cameras and 
the
+                        like</entry>
    </row><row>
-   <entry>RGB565</><entry>The top 5 bits hold 32 red levels, the next six bits 
-                        hold green and the low 5 bits hold blue. </>
+   <entry>RGB565</entry><entry>The top 5 bits hold 32 red levels, the next six 
bits
+                        hold green and the low 5 bits hold blue. </entry>
    </row><row>
-   <entry>RGB555</><entry>The top bit is clear. The red green and blue levels
-                        each occupy five bits.</>
+   <entry>RGB555</entry><entry>The top bit is clear. The red green and blue 
levels
+                        each occupy five bits.</entry>
     </row>
     </tbody>
     </tgroup>
@@ -1477,32 +1479,32 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-        <entry>width</><entry>The width in pixels of the desired image. The 
card
-                        may use a smaller size if this size is not available</>
+        <entry>width</entry><entry>The width in pixels of the desired image. 
The card
+                        may use a smaller size if this size is not 
available</entry>
        </row><row>
-        <entry>height</><entry>The height of the image. The card may use a 
smaller
-                        size if this size is not available.</>
+        <entry>height</entry><entry>The height of the image. The card may use 
a smaller
+                        size if this size is not available.</entry>
        </row><row>
-        <entry>x</><entry>   The X position of the top left of the window. This
+        <entry>x</entry><entry>   The X position of the top left of the 
window. This
                         is in pixels relative to the left hand edge of the
                         picture. Not all cards can display images aligned on
                         any pixel boundary. If the position is unsuitable
                         the card adjusts the image right and reduces the
-                        width.</>
+                        width.</entry>
        </row><row>
-        <entry>y</><entry>   The Y position of the top left of the window. This
+        <entry>y</entry><entry>   The Y position of the top left of the 
window. This
                         is counted in pixels relative to the top edge of the
                         picture. As with the width if the card cannot
                         display  starting on this line it will adjust the
-                        values.</>
+                        values.</entry>
        </row><row>
-        <entry>chromakey</><entry>The colour (expressed in RGB32 format) for 
the
-                        chromakey colour if chroma keying is being used. </>
+        <entry>chromakey</entry><entry>The colour (expressed in RGB32 format) 
for the
+                        chromakey colour if chroma keying is being used. 
</entry>
        </row><row>
-        <entry>clips</><entry>An array of rectangles that must not be drawn
-                       over.</>
+        <entry>clips</entry><entry>An array of rectangles that must not be 
drawn
+                       over.</entry>
        </row><row>
-        <entry>clipcount</><entry>The number of clips in this array.</>
+        <entry>clipcount</entry><entry>The number of clips in this 
array.</entry>
     </row>
     </tbody>
     </tgroup>
@@ -1514,11 +1516,11 @@
    <tgroup cols="2" align="left">
    <tbody>
    <row>
-        <entry>x, y</><entry>Co-ordinates relative to the display</>
+        <entry>x, y</entry><entry>Co-ordinates relative to the display</entry>
        </row><row>
-        <entry>width, height</><entry>Width and height in pixels</>
+        <entry>width, height</entry><entry>Width and height in pixels</entry>
        </row><row>
-        <entry>next</><entry>A spare field for the application to use</>
+        <entry>next</entry><entry>A spare field for the application to 
use</entry>
     </row>
     </tbody>
     </tgroup>
@@ -1550,9 +1552,9 @@
                         struct video_window v;
                         if(copy_from_user(&amp;v, arg, sizeof(v)))
                                 return -EFAULT;
-                        if(v.width > 640 || v.height > 480)
+                        if(v.width &gt; 640 || v.height &gt; 480)
                                 return -EINVAL;
-                        if(v.width < 16 || v.height < 16)
+                        if(v.width &lt; 16 || v.height &lt; 16)
                                 return -EINVAL;
                         hardware_set_key(v.chromakey);
                         hardware_set_window(v);
diff -urN linux/Documentation/DocBook/wanbook.tmpl 
linux/Documentation/DocBook/wanbook.tmpl
--- linux/Documentation/DocBook/wanbook.tmpl    2000/03/19 01:28:42     1.1
+++ linux/Documentation/DocBook/wanbook.tmpl    2005/03/18 17:36:43     1.2
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="WANGuide">
  <bookinfo>
diff -urN linux/Documentation/DocBook/writing_usb_driver.tmpl 
linux/Documentation/DocBook/writing_usb_driver.tmpl
--- linux/Documentation/DocBook/writing_usb_driver.tmpl 2003/09/30 14:27:15     
1.4
+++ linux/Documentation/DocBook/writing_usb_driver.tmpl 2005/03/18 17:36:43     
1.5
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="USBDeviceDriver">
  <bookinfo>
diff -urN linux/Documentation/DocBook/z8530book.tmpl 
linux/Documentation/DocBook/z8530book.tmpl
--- linux/Documentation/DocBook/z8530book.tmpl  2001/01/11 04:02:41     1.2
+++ linux/Documentation/DocBook/z8530book.tmpl  2005/03/18 17:36:43     1.3
@@ -1,4 +1,6 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"; []>
 
 <book id="Z85230Guide">
  <bookinfo>
diff -urN linux/Documentation/aoe/udev-install.sh 
linux/Documentation/aoe/udev-install.sh
--- linux/Documentation/aoe/udev-install.sh     1970/01/01 00:00:00
+++ linux/Documentation/aoe/udev-install.sh     Fri Mar 18 17:36:44 2005        
1.1
@@ -0,0 +1,26 @@
+# install the aoe-specific udev rules from udev.txt into 
+# the system's udev configuration
+# 
+
+me="`basename $0`"
+
+# find udev.conf, often /etc/udev/udev.conf
+# (or environment can specify where to find udev.conf)
+#
+if test -z "$conf"; then
+       if test -r /etc/udev/udev.conf; then
+               conf=/etc/udev/udev.conf
+       else
+               conf="`find /etc -type f -name udev.conf 2> /dev/null`"
+               if test -z "$conf" || test ! -r "$conf"; then
+                       echo "$me Error: no udev.conf found" 1>&2
+                       exit 1
+               fi
+       fi
+fi
+
+# find the directory where udev rules are stored, often
+# /etc/udev/rules.d
+#
+rules_d="`sed -n '/^udev_rules=/{ s!udev_rules=!!; s!\"!!g; p; }' $conf`"
+test "$rules_d" && sh -xc "cp `dirname $0`/udev.txt $rules_d/60-aoe.rules"
diff -urN linux/Documentation/aoe/udev.txt linux/Documentation/aoe/udev.txt
--- linux/Documentation/aoe/udev.txt    1970/01/01 00:00:00
+++ linux/Documentation/aoe/udev.txt    Fri Mar 18 17:36:44 2005        1.1
@@ -0,0 +1,23 @@
+# These rules tell udev what device nodes to create for aoe support.
+# They may be installed along the following lines (adjusted to what
+# you see on your system).
+# 
+#   ecashin@makki ~$ su
+#   Password:
+#   bash# find /etc -type f -name udev.conf
+#   /etc/udev/udev.conf
+#   bash# grep udev_rules= /etc/udev/udev.conf
+#   udev_rules="/etc/udev/rules.d/"
+#   bash# ls /etc/udev/rules.d/
+#   10-wacom.rules  50-udev.rules
+#   bash# cp /path/to/linux-2.6.xx/Documentation/aoe/udev.txt \
+#           /etc/udev/rules.d/60-aoe.rules
+#  
+
+# aoe char devices
+SUBSYSTEM="aoe", KERNEL="discover",    NAME="etherd/%k", GROUP="disk", 
MODE="0220"
+SUBSYSTEM="aoe", KERNEL="err",         NAME="etherd/%k", GROUP="disk", 
MODE="0440"
+SUBSYSTEM="aoe", KERNEL="interfaces",  NAME="etherd/%k", GROUP="disk", 
MODE="0220"
+
+# aoe block devices     
+KERNEL="etherd*",       NAME="%k", GROUP="disk"
diff -urN linux/Documentation/aoe/aoe.txt linux/Documentation/aoe/aoe.txt
--- linux/Documentation/aoe/aoe.txt     2005/01/25 04:27:51     1.2
+++ linux/Documentation/aoe/aoe.txt     2005/03/18 17:36:43     1.3
@@ -6,9 +6,16 @@
 
 CREATING DEVICE NODES
 
-  Users of udev should find device nodes created automatically.  Two
-  scripts are provided in Documentation/aoe as examples of static
-  device node creation for using the aoe driver.
+  Users of udev should find the block device nodes created
+  automatically, but to create all the necessary device nodes, use the
+  udev configuration rules provided in udev.txt (in this directory).
+
+  There is a udev-install.sh script that shows how to install these
+  rules on your system.
+
+  If you are not using udev, two scripts are provided in
+  Documentation/aoe as examples of static device node creation for
+  using the aoe driver.
 
     rm -rf /dev/etherd
     sh Documentation/aoe/mkdevs.sh /dev/etherd
diff -urN linux/Documentation/aoe/status.sh linux/Documentation/aoe/status.sh
--- linux/Documentation/aoe/status.sh   2005/01/25 04:27:51     1.2
+++ linux/Documentation/aoe/status.sh   2005/03/18 17:36:43     1.3
@@ -4,10 +4,13 @@
 set -e
 format="%8s\t%8s\t%8s\n"
 me=`basename $0`
+sysd=${sysfs_dir:-/sys}
 
 # printf "$format" device mac netif state
 
-test -z "`mount | grep sysfs`" && {
+# Suse 9.1 Pro doesn't put /sys in /etc/mtab
+#test -z "`mount | grep sysfs`" && {
+test ! -d "$sysd/block" && {
        echo "$me Error: sysfs is not mounted" 1>&2
        exit 1
 }
@@ -16,7 +19,7 @@
        exit 1
 }
 
-for d in `ls -d /sys/block/etherd* 2>/dev/null | grep -v p` end; do
+for d in `ls -d $sysd/block/etherd* 2>/dev/null | grep -v p` end; do
        # maybe ls comes up empty, so we use "end"
        test $d = end && continue
 
diff -urN linux/Documentation/arm/IXP2000 linux/Documentation/arm/IXP2000
--- linux/Documentation/arm/IXP2000     2004/12/04 18:15:57     1.2
+++ linux/Documentation/arm/IXP2000     2005/03/18 17:36:44     1.3
@@ -45,7 +45,7 @@
 
 4. Usage Notes
 
-- The IXP2000 platforms ususally have rather complex PCI bus topologies
+- The IXP2000 platforms usually have rather complex PCI bus topologies
   with large memory space requirements. In addition, b/c of the way the
   Intel SDK is designed, devices are enumerated in a very specific
   way. B/c of this this, we use "pci=firmware" option in the kernel
diff -urN linux/Documentation/arm/Samsung-S3C24XX/H1940.txt 
linux/Documentation/arm/Samsung-S3C24XX/H1940.txt
--- linux/Documentation/arm/Samsung-S3C24XX/H1940.txt   1970/01/01 00:00:00
+++ linux/Documentation/arm/Samsung-S3C24XX/H1940.txt   Fri Mar 18 17:36:44 
2005        1.1
@@ -0,0 +1,40 @@
+               HP IPAQ H1940
+               =============
+
+http://www.handhelds.org/projects/h1940.html
+
+Introduction
+------------
+
+  The HP H1940 is a S3C2410 based handheld device, with
+  bluetooth connectivity.
+
+
+Support
+-------
+
+  A variety of information is available
+
+  handhelds.org project page:
+
+    http://www.handhelds.org/projects/h1940.html
+
+  handhelds.org wiki page:
+
+    http://handhelds.org/moin/moin.cgi/HpIpaqH1940
+
+  Herbert Pötzl pages:
+
+    http://vserver.13thfloor.at/H1940/
+
+
+Maintainers
+-----------
+
+  This project is being maintained and developed by a variety
+  of people, including Ben Dooks, Arnaud Patard, and Herbert Pötzl.
+
+  Thanks to the many others who have also provided support.
+
+
+(c) 2005 Ben Dooks
\ No newline at end of file
diff -urN linux/Documentation/arm/Samsung-S3C24XX/SMDK2440.txt 
linux/Documentation/arm/Samsung-S3C24XX/SMDK2440.txt
--- linux/Documentation/arm/Samsung-S3C24XX/SMDK2440.txt        1970/01/01 
00:00:00
+++ linux/Documentation/arm/Samsung-S3C24XX/SMDK2440.txt        Fri Mar 18 
17:36:44 2005        1.1
@@ -0,0 +1,56 @@
+               Samsung/Meritech SMDK2440
+               =========================
+
+Introduction
+------------
+
+  The SMDK2440 is a two part evaluation board for the Samsung S3C2440
+  processor. It includes support for LCD, SmartMedia, Audio, SD and
+  10MBit Ethernet, and expansion headers for various signals, including
+  the camera and unused GPIO.
+
+
+Configuration
+-------------
+
+  To set the default configuration, use `make smdk2440_defconfig` which
+  will configure the common features of this board, or use
+  `make s3c2410_config` to include support for all s3c2410/s3c2440 machines
+
+
+Support
+-------
+
+  Ben Dooks' SMDK2440 site at http://www.fluff.org/ben/smdk2440/ which
+  includes linux based USB download tools.
+
+  Some of the h1940 patches that can be found from the H1940 project
+  site at http://www.handhelds.org/projects/h1940.html can also be
+  applied to this board.
+
+
+Peripherals
+-----------
+
+  There is no current support for any of the extra peripherals on the
+  base-board itself.
+
+
+MTD
+---
+
+  The NAND flash should be supported by the in kernel MTD NAND support,
+  NOR flash will be added later.
+
+
+Maintainers
+-----------
+
+  This board is being maintained by Ben Dooks, for more info, see
+  http://www.fluff.org/ben/smdk2440/
+
+  Many thanks to Dimitry Andric of TomTom for the loan of the SMDK2440,
+  and to Simtec Electronics for allowing me time to work on this.
+
+
+(c) 2004 Ben Dooks
\ No newline at end of file
diff -urN linux/Documentation/arm/Samsung-S3C24XX/Overview.txt 
linux/Documentation/arm/Samsung-S3C24XX/Overview.txt
--- linux/Documentation/arm/Samsung-S3C24XX/Overview.txt        2005/01/25 
04:27:51     1.4
+++ linux/Documentation/arm/Samsung-S3C24XX/Overview.txt        2005/03/18 
17:36:44     1.5
@@ -7,8 +7,8 @@
 ------------
 
   The Samsung S3C24XX range of ARM9 System-on-Chip CPUs are supported
-  by the 's3c2410' architecture of ARM Linux. Currently the S3C2410 is
-  the only supported CPU in this range.
+  by the 's3c2410' architecture of ARM Linux. Currently the S3C2410 and
+  the S3C2440 are supported CPUs.
 
 
 Configuration
@@ -36,6 +36,10 @@
 
     Samsung's own development board, geared for PDA work.
 
+  Samsung/Meritech SMDK2440
+
+    The S3C2440 compatible version of the SMDK2440
+
   Thorcom VR1000
 
     Custom embedded board
@@ -44,12 +48,41 @@
 
     Handheld (IPAQ), available in several varieties
 
-
   HP iPAQ rx3715
 
     S3C2440 based IPAQ, with a number of variations depending on
     features shipped.
 
+  Acer N30
+
+    A S3C2410 based PDA from Acer.  There is a Wiki page at
+    http://handhelds.org/moin/moin.cgi/AcerN30Documentation .
+
+
+Adding New Machines
+-------------------
+
+  The archicture has been designed to support as many machines as can
+  be configured for it in one kernel build, and any future additions
+  should keep this in mind before altering items outside of their own
+  machine files.
+
+  Machine definitions should be kept in linux/arch/arm/mach-s3c2410,
+  and there are a number of examples that can be looked at.
+
+  Read the kernel patch submission policies as well as the
+  Documentation/arm directory before submitting patches. The
+  ARM kernel series is managed by Russell King, and has a patch system
+  located at http://www.arm.linux.org.uk/developer/patches/
+  as well as mailing lists that can be found from the same site.
+
+  As a courtesy, please notify <ben-linux@fluff.org> of any new
+  machines or other modifications.
+
+  Any large scale modifications, or new drivers should be discussed
+  on the ARM kernel mailing list (linux-arm-kernel) before being
+  attempted.
+
 
 NAND
 ----
@@ -98,6 +131,9 @@
   Klaus Fetscher
   Dimitry Andric
   Shannon Holland
+  Guillaume Gourat (NexVision)
+  Christer Weinigel (wingel) (Acer N30)
+  Lucas Correia Villa Real (S3C2400 port)
 
 
 Document Changes
@@ -108,6 +144,11 @@
   25 Oct 2004 - BJD - Added Dimitry Andric to list of contributors
   25 Oct 2004 - BJD - Updated the MTD from the 2.6.9 merge
   21 Jan 2005 - BJD - Added rx3715, added Shannon to contributors
+  10 Feb 2005 - BJD - Added Guillaume Gourat to contributors
+  02 Mar 2005 - BJD - Added SMDK2440 to list of machines
+  06 Mar 2005 - BJD - Added Christer Weinigel
+  08 Mar 2005 - BJD - Added LCVR to list of people, updated introduction
+  08 Mar 2005 - BJD - Added section on adding machines
 
 Document Author
 ---------------
diff -urN linux/Documentation/crypto/api-intro.txt 
linux/Documentation/crypto/api-intro.txt
--- linux/Documentation/crypto/api-intro.txt    2004/11/15 11:49:12     1.17
+++ linux/Documentation/crypto/api-intro.txt    2005/03/18 17:36:44     1.18
@@ -234,6 +234,9 @@
 Anubis algorithm contributors:
   Aaron Grothe
 
+Tiger algorithm contributors:
+  Aaron Grothe
+
 Generic scatterwalk code by Adam J. Richter <adam@yggdrasil.com>
 
 Please send any credits updates or corrections to:
diff -urN linux/Documentation/dvb/faq.txt linux/Documentation/dvb/faq.txt
--- linux/Documentation/dvb/faq.txt     2004/04/28 13:54:52     1.3
+++ linux/Documentation/dvb/faq.txt     2005/03/18 17:36:44     1.4
@@ -35,7 +35,7 @@
        Note: Only very recent versions of Mplayer and xine can decode.
        MPEG2 transport streams (TS) directly. Then, run
        '[sct]zap channelname -r' in one xterm, and keep it running,
-       and start 'mplayer - < /dev/dvb/adapter0/dvr0' or 
+       and start 'mplayer - < /dev/dvb/adapter0/dvr0' or
        'xine stdin://mpeg2 < /dev/dvb/adapter0/dvr0' in a second xterm.
        That's all far from perfect, but it seems no one has written
        a nice DVB application which includes a builtin software MPEG
diff -urN linux/Documentation/filesystems/Locking 
linux/Documentation/filesystems/Locking
--- linux/Documentation/filesystems/Locking     2005/01/25 04:27:51     1.36
+++ linux/Documentation/filesystems/Locking     2005/03/18 17:36:44     1.37
@@ -104,6 +104,8 @@
        void (*clear_inode) (struct inode *);
        void (*umount_begin) (struct super_block *);
        int (*show_options)(struct seq_file *, struct vfsmount *);
+       ssize_t (*quota_read)(struct super_block *, int, char *, size_t, 
loff_t);
+       ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, 
loff_t);
 
 locking rules:
        All may block.
@@ -126,10 +128,17 @@
 clear_inode:           no
 umount_begin:          yes     no      no
 show_options:          no                              (vfsmount->sem)
+quota_read:            no      no      no              (see below)
+quota_write:           no      no      no              (see below)
 
 ->read_inode() is not a method - it's a callback used in iget().
 ->remount_fs() will have the s_umount lock if it's already mounted.
 When called from get_sb_single, it does NOT have the s_umount lock.
+->quota_read() and ->quota_write() functions are both guaranteed to
+be the only ones operating on the quota file by the quota code (via
+dqio_sem) (unless an admin really wants to screw up something and
+writes to quota files with quotas on). For other details about locking
+see also dquot_operations section.
 
 --------------------------- file_system_type ---------------------------
 prototypes:
@@ -442,23 +451,46 @@
 
 --------------------------- dquot_operations -------------------------------
 prototypes:
-       void (*initialize) (struct inode *, short);
-       void (*drop) (struct inode *);
-       int (*alloc_block) (const struct inode *, unsigned long, char);
+       int (*initialize) (struct inode *, int);
+       int (*drop) (struct inode *);
+       int (*alloc_space) (struct inode *, qsize_t, int);
        int (*alloc_inode) (const struct inode *, unsigned long);
-       void (*free_block) (const struct inode *, unsigned long);
-       void (*free_inode) (const struct inode *, unsigned long);
-       int (*transfer) (struct dentry *, struct iattr *);
+       int (*free_space) (struct inode *, qsize_t);
+       int (*free_inode) (const struct inode *, unsigned long);
+       int (*transfer) (struct inode *, struct iattr *);
+       int (*write_dquot) (struct dquot *);
+       int (*acquire_dquot) (struct dquot *);
+       int (*release_dquot) (struct dquot *);
+       int (*mark_dirty) (struct dquot *);
+       int (*write_info) (struct super_block *, int);
+
+These operations are intended to be more or less wrapping functions that ensure
+a proper locking wrt the filesystem and call the generic quota operations.
+
+What filesystem should expect from the generic quota functions:
+
+               FS recursion    Held locks when called
+initialize:    yes             maybe dqonoff_sem
+drop:          yes             -
+alloc_space:   ->mark_dirty()  -
+alloc_inode:   ->mark_dirty()  -
+free_space:    ->mark_dirty()  -
+free_inode:    ->mark_dirty()  -
+transfer:      yes             -
+write_dquot:   yes             dqonoff_sem or dqptr_sem
+acquire_dquot: yes             dqonoff_sem or dqptr_sem
+release_dquot: yes             dqonoff_sem or dqptr_sem
+mark_dirty:    no              -
+write_info:    yes             dqonoff_sem
+
+FS recursion means calling ->quota_read() and ->quota_write() from superblock
+operations.
+
+->alloc_space(), ->alloc_inode(), ->free_space(), ->free_inode() are called
+only directly by the filesystem and do not call any fs functions only
+the ->mark_dirty() operation.
 
-locking rules:
-               BKL
-initialize:    no
-drop:          no
-alloc_block:   yes
-alloc_inode:   yes
-free_block:    yes
-free_inode:    yes
-transfer:      no
+More details about quota locking can be found in fs/dquot.c.
 
 --------------------------- vm_operations_struct -----------------------------
 prototypes:
diff -urN linux/Documentation/filesystems/jfs.txt 
linux/Documentation/filesystems/jfs.txt
--- linux/Documentation/filesystems/jfs.txt     2004/03/11 16:46:39     1.8
+++ linux/Documentation/filesystems/jfs.txt     2005/03/18 17:36:44     1.9
@@ -1,13 +1,6 @@
 IBM's Journaled File System (JFS) for Linux
 
-JFS Homepage:  http://oss.software.ibm.com/jfs/
-
-Team members
-------------
-Dave Kleikamp      shaggy@austin.ibm.com  
-Dave Blaschke      blaschke@us.ibm.com
-Steve Best         sbest@us.ibm.com
-Barry Arndt        barndt@us.ibm.com
+JFS Homepage:  http://jfs.sourceforge.net/
 
 The following mount options are supported:
 
@@ -15,6 +8,7 @@
                ASCII.  The default is to do no conversion.  Use
                iocharset=utf8 for UTF8 translations.  This requires
                CONFIG_NLS_UTF8 to be set in the kernel .config file.
+               iocharset=none specifies the default behavior explicitly.
 
 resize=value   Resize the volume to <value> blocks.  JFS only supports
                growing a volume, not shrinking it.  This option is only
@@ -38,4 +32,4 @@
 Please send bugs, comments, cards and letters to shaggy@austin.ibm.com.
 
 The JFS mailing list can be subscribed to by using the link labeled
-"Mail list Subscribe" at our web page http://oss.software.ibm.com/jfs/.
+"Mail list Subscribe" at our web page http://jfs.sourceforge.net/
diff -urN linux/Documentation/filesystems/proc.txt 
linux/Documentation/filesystems/proc.txt
--- linux/Documentation/filesystems/proc.txt    2005/02/13 20:16:13     1.32
+++ linux/Documentation/filesystems/proc.txt    2005/03/18 17:36:44     1.33
@@ -1754,18 +1754,25 @@
 
 In the interface directories you'll find the following entries:
 
-base_reachable_time
--------------------
+base_reachable_time, base_reachable_time_ms
+-------------------------------------------
 
 A base  value  used for computing the random reachable time value as specified
 in RFC2461.
 
-retrans_time
-------------
+Expression of base_reachable_time, which is deprecated, is in seconds.
+Expression of base_reachable_time_ms is in milliseconds.
 
-The time,  expressed  in  jiffies  (1/100 sec), between retransmitted Neighbor
-Solicitation messages.  Used  for  address  resolution  and  to determine if a
-neighbor is unreachable.
+retrans_time, retrans_time_ms
+-----------------------------
+
+The time between retransmitted Neighbor Solicitation messages.
+Used for address resolution and to determine if a neighbor is
+unreachable.
+
+Expression of retrans_time, which is deprecated, is in 1/100 seconds (for
+IPv4) or in jiffies (for IPv6).
+Expression of retrans_time_ms is in milliseconds.
 
 unres_qlen
 ----------
diff -urN linux/Documentation/i2c/porting-clients 
linux/Documentation/i2c/porting-clients
--- linux/Documentation/i2c/porting-clients     2004/06/06 02:12:33     1.3
+++ linux/Documentation/i2c/porting-clients     2005/03/18 17:36:44     1.4
@@ -49,9 +49,8 @@
   static void lm75_update_client(struct i2c_client *client);
 
 * [Sysctl] All sysctl stuff is of course gone (defines, ctl_table
-  and functions). Instead, right after the static id definition
-  line, you have to define show and set functions for each sysfs
-  file. Only define set for writable values. Take a look at an
+  and functions). Instead, you have to define show and set functions for
+  each sysfs file. Only define set for writable values. Take a look at an
   existing 2.6 driver for details (lm78 for example). Don't forget
   to define the attributes for each file (this is that step that
   links callback functions). Use the file names specified in
@@ -86,6 +85,7 @@
   Replace the sysctl directory registration by calls to
   device_create_file. Move the driver initialization before any
   sysfs file creation.
+  Drop client->id.
 
 * [Init] Limits must not be set by the driver (can be done later in
   user-space). Chip should not be reset default (although a module
diff -urN linux/Documentation/i2c/writing-clients 
linux/Documentation/i2c/writing-clients
--- linux/Documentation/i2c/writing-clients     2004/12/04 18:15:57     1.10
+++ linux/Documentation/i2c/writing-clients     2005/03/18 17:36:44     1.11
@@ -344,9 +344,6 @@
 
 For now, you can ignore the `flags' parameter. It is there for future use.
 
-  /* Unique ID allocation */
-  static int foo_id = 0;
-
   int foo_detect_client(struct i2c_adapter *adapter, int address, 
                         unsigned short flags, int kind)
   {
@@ -482,7 +479,6 @@
     data->type = kind;
     /* SENSORS ONLY END */
 
-    new_client->id = foo_id++; /* Automatically unique */
     data->valid = 0; /* Only if you use this field */
     init_MUTEX(&data->update_lock); /* Only if you use this field */
 
@@ -642,7 +638,7 @@
 parameter contains the bytes the read/write, the third the length of the
 buffer. Returned is the actual number of bytes read/written.
   
-  extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],
+  extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msg,
                           int num);
 
 This sends a series of messages. Each message can be a read or write,
diff -urN linux/Documentation/networking/bonding.txt 
linux/Documentation/networking/bonding.txt
--- linux/Documentation/networking/bonding.txt  2004/04/12 20:23:21     1.14
+++ linux/Documentation/networking/bonding.txt  2005/03/18 17:36:44     1.15
@@ -1,5 +1,5 @@
 
-                   Linux Ethernet Bonding Driver mini-howto
+                   Linux Ethernet Bonding Driver HOWTO
 
 Initial release : Thomas Davis <tadavis at lbl.gov>
 Corrections, HA extensions : 2000/10/03-15 :
@@ -9,8 +9,11 @@
   - Janice Girouard <girouard at us dot ibm dot com>
   - Jay Vosburgh <fubar at us dot ibm dot com>
 
+Reorganized and updated Feb 2005 by Jay Vosburgh
+
 Note :
 ------
+       
 The bonding driver originally came from Donald Becker's beowulf patches for
 kernel 2.0. It has changed quite a bit since, and the original tools from
 extreme-linux and beowulf sites will not work with this version of the driver.
@@ -18,218 +21,190 @@
 For new versions of the driver, patches for older kernels and the updated
 userspace tools, please follow the links at the end of this file.
 
-
 Table of Contents
 =================
 
-Installation
-Bond Configuration
-Module Parameters
-Configuring Multiple Bonds
-Switch Configuration
-Verifying Bond Configuration
-Frequently Asked Questions
-High Availability
-Promiscuous Sniffing notes
-8021q VLAN support
-Limitations
-Resources and Links
-
-
-Installation
-============
-
-1) Build kernel with the bonding driver
----------------------------------------
-For the latest version of the bonding driver, use kernel 2.4.12 or above
-(otherwise you will need to apply a patch).
-
-Configure kernel with `make menuconfig/xconfig/config', and select "Bonding
-driver support" in the "Network device support" section. It is recommended
-to configure the driver as module since it is currently the only way to
-pass parameters to the driver and configure more than one bonding device.
-
-Build and install the new kernel and modules.
-
-2) Get and install the userspace tools
---------------------------------------
-This version of the bonding driver requires updated ifenslave program. The
-original one from extreme-linux and beowulf will not work. Kernels 2.4.12
-and above include the updated version of ifenslave.c in
-Documentation/networking directory. For older kernels, please follow the
-links at the end of this file.
-
-IMPORTANT!!!  If you are running on Redhat 7.1 or greater, you need
-to be careful because /usr/include/linux is no longer a symbolic link
-to /usr/src/linux/include/linux.  If you build ifenslave while this is
-true, ifenslave will appear to succeed but your bond won't work.  The purpose
-of the -I option on the ifenslave compile line is to make sure it uses
-/usr/src/linux/include/linux/if_bonding.h instead of the version from
-/usr/include/linux.
-
-To install ifenslave.c, do:
-    # gcc -Wall -Wstrict-prototypes -O -I/usr/src/linux/include ifenslave.c -o 
ifenslave
-    # cp ifenslave /sbin/ifenslave
+1. Bonding Driver Installation
 
+2. Bonding Driver Options
 
-Bond Configuration
-==================
+3. Configuring Bonding Devices
+3.1    Configuration with sysconfig support
+3.2    Configuration with initscripts support
+3.3    Configuring Bonding Manually
+3.4    Configuring Multiple Bonds
 
-You will need to add at least the following line to /etc/modprobe.conf
-so the bonding driver will automatically load when the bond0 interface is
-configured. Refer to the modprobe.conf manual page for specific modprobe.conf
-syntax details. The Module Parameters section of this document describes each
-bonding driver parameter.
-
-       alias bond0 bonding
-
-Use standard distribution techniques to define the bond0 network interface. For
-example, on modern Red Hat distributions, create an ifcfg-bond0 file in
-the /etc/sysconfig/network-scripts directory that resembles the following:
+5. Querying Bonding Configuration
+5.1    Bonding Configuration
+5.2    Network Configuration
 
-DEVICE=bond0
-IPADDR=192.168.1.1
-NETMASK=255.255.255.0
-NETWORK=192.168.1.0
-BROADCAST=192.168.1.255
-ONBOOT=yes
-BOOTPROTO=none
-USERCTL=no
+6. Switch Configuration
 
-(use appropriate values for your network above)
+7. 802.1q VLAN Support
 
-All interfaces that are part of a bond should have SLAVE and MASTER
-definitions. For example, in the case of Red Hat, if you wish to make eth0 and
-eth1 a part of the bonding interface bond0, their config files (ifcfg-eth0 and
-ifcfg-eth1) should resemble the following:
+8. Link Monitoring
+8.1    ARP Monitor Operation
+8.2    Configuring Multiple ARP Targets
+8.3    MII Monitor Operation
 
-DEVICE=eth0
-USERCTL=no
-ONBOOT=yes
-MASTER=bond0
-SLAVE=yes
-BOOTPROTO=none
+9. Potential Trouble Sources
+9.1    Adventures in Routing
+9.2    Ethernet Device Renaming
+9.3    Painfully Slow Or No Failed Link Detection By Miimon
 
-Use DEVICE=eth1 in the ifcfg-eth1 config file. If you configure a second
-bonding interface (bond1), use MASTER=bond1 in the config file to make the
-network interface be a slave of bond1.
-
-Restart the networking subsystem or just bring up the bonding device if your
-administration tools allow it. Otherwise, reboot. On Red Hat distros you can
-issue `ifup bond0' or `/etc/rc.d/init.d/network restart'.
-
-If the administration tools of your distribution do not support
-master/slave notation in configuring network interfaces, you will need to
-manually configure the bonding device with the following commands:
-
-    # /sbin/ifconfig bond0 192.168.1.1 netmask 255.255.255.0 \
-      broadcast 192.168.1.255 up
-
-    # /sbin/ifenslave bond0 eth0
-    # /sbin/ifenslave bond0 eth1
-
-(use appropriate values for your network above)
-
-You can then create a script containing these commands and place it in the
-appropriate rc directory.
-
-If you specifically need all network drivers loaded before the bonding driver,
-adding the following line to modprobe.conf will cause the network driver for
-eth0 and eth1 to be loaded before the bonding driver.
-
-install bond0 /sbin/modprobe -a eth0 eth1 && /sbin/modprobe bonding
-
-Be careful not to reference bond0 itself at the end of the line, or modprobe
-will die in an endless recursive loop.
-
-If running SNMP agents, the bonding driver should be loaded before any network
-drivers participating in a bond. This requirement is due to the the interface
-index (ipAdEntIfIndex) being associated to the first interface found with a
-given IP address. That is, there is only one ipAdEntIfIndex for each IP
-address. For example, if eth0 and eth1 are slaves of bond0 and the driver for
-eth0 is loaded before the bonding driver, the interface for the IP address
-will be associated with the eth0 interface. This configuration is shown below,
-the IP address 192.168.1.1 has an interface index of 2 which indexes to eth0
-in the ifDescr table (ifDescr.2).
+10. SNMP agents
 
-     interfaces.ifTable.ifEntry.ifDescr.1 = lo
-     interfaces.ifTable.ifEntry.ifDescr.2 = eth0
-     interfaces.ifTable.ifEntry.ifDescr.3 = eth1
-     interfaces.ifTable.ifEntry.ifDescr.4 = eth2
-     interfaces.ifTable.ifEntry.ifDescr.5 = eth3
-     interfaces.ifTable.ifEntry.ifDescr.6 = bond0
-     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.10.10.10 = 5
-     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.1 = 2
-     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.74.20.94 = 4
-     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 = 1
+11. Promiscuous mode
 
-This problem is avoided by loading the bonding driver before any network
-drivers participating in a bond. Below is an example of loading the bonding
-driver first, the IP address 192.168.1.1 is correctly associated with
-ifDescr.2.
+12. High Availability Information
+12.1   High Availability in a Single Switch Topology
+12.1.1         Bonding Mode Selection for Single Switch Topology
+12.1.2         Link Monitoring for Single Switch Topology
+12.2   High Availability in a Multiple Switch Topology
+12.2.1         Bonding Mode Selection for Multiple Switch Topology
+12.2.2         Link Monitoring for Multiple Switch Topology
+12.3   Switch Behavior Issues for High Availability
 
-     interfaces.ifTable.ifEntry.ifDescr.1 = lo
-     interfaces.ifTable.ifEntry.ifDescr.2 = bond0
-     interfaces.ifTable.ifEntry.ifDescr.3 = eth0
-     interfaces.ifTable.ifEntry.ifDescr.4 = eth1
-     interfaces.ifTable.ifEntry.ifDescr.5 = eth2
-     interfaces.ifTable.ifEntry.ifDescr.6 = eth3
-     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.10.10.10 = 6
-     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.1 = 2
-     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.74.20.94 = 5
-     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 = 1
+13. Hardware Specific Considerations
+13.1   IBM BladeCenter
 
-While some distributions may not report the interface name in ifDescr,
-the association between the IP address and IfIndex remains and SNMP
-functions such as Interface_Scan_Next will report that association.
+14. Frequently Asked Questions
 
+15. Resources and Links
 
-Module Parameters
-=================
 
-Optional parameters for the bonding driver can be supplied as command line
-arguments to the insmod command. Typically, these parameters are specified in
-the file /etc/modprobe.conf (see the manual page for modprobe.conf). The
-available bonding driver parameters are listed below. If a parameter is not
-specified the default value is used. When initially configuring a bond, it
-is recommended "tail -f /var/log/messages" be run in a separate window to
-watch for bonding driver error messages.
-
-It is critical that either the miimon or arp_interval and arp_ip_target
-parameters be specified, otherwise serious network degradation will occur
-during link failures.
+1. Bonding Driver Installation
+==============================
+
+       Most popular distro kernels ship with the bonding driver
+already available as a module and the ifenslave user level control
+program installed and ready for use. If your distro does not, or you
+have need to compile bonding from source (e.g., configuring and
+installing a mainline kernel from kernel.org), you'll need to perform
+the following steps:
+
+1.1 Configure and build the kernel with bonding
+-----------------------------------------------
+
+       The latest version of the bonding driver is available in the
+drivers/net/bonding subdirectory of the most recent kernel source
+(which is available on http://kernel.org).
+
+       Prior to the 2.4.11 kernel, the bonding driver was maintained
+largely outside the kernel tree; patches for some earlier kernels are
+available on the bonding sourceforge site, although those patches are
+still several years out of date.  Most users will want to use either
+the most recent kernel from kernel.org or whatever kernel came with
+their distro.
+
+       Configure kernel with "make menuconfig" (or "make xconfig" or
+"make config"), then select "Bonding driver support" in the "Network
+device support" section.  It is recommended that you configure the
+driver as module since it is currently the only way to pass parameters
+to the driver or configure more than one bonding device.
+
+       Build and install the new kernel and modules, then proceed to
+step 2.
+
+1.2 Install ifenslave Control Utility
+-------------------------------------
+
+       The ifenslave user level control program is included in the
+kernel source tree, in the file Documentation/networking/ifenslave.c.
+It is generally recommended that you use the ifenslave that
+corresponds to the kernel that you are using (either from the same
+source tree or supplied with the distro), however, ifenslave
+executables from older kernels should function (but features newer
+than the ifenslave release are not supported).  Running an ifenslave
+that is newer than the kernel is not supported, and may or may not
+work.
+
+       To install ifenslave, do the following:
+
+# gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave
+# cp ifenslave /sbin/ifenslave
+
+       If your kernel source is not in "/usr/src/linux," then replace
+"/usr/src/linux/include" in the above with the location of your kernel
+source include directory.
+
+       You may wish to back up any existing /sbin/ifenslave, or, for
+testing or informal use, tag the ifenslave to the kernel version
+(e.g., name the ifenslave executable /sbin/ifenslave-2.6.10).
+
+IMPORTANT NOTE:
+
+       If you omit the "-I" or specify an incorrect directory, you
+may end up with an ifenslave that is incompatible with the kernel
+you're trying to build it for.  Some distros (e.g., Red Hat from 7.1
+onwards) do not have /usr/include/linux symbolically linked to the
+default kernel source include directory.
+
+
+2. Bonding Driver Options
+=========================
+
+       Options for the bonding driver are supplied as parameters to
+the bonding module at load time.  They may be given as command line
+arguments to the insmod or modprobe command, but are usually specified
+in either the /etc/modprobe.conf configuration file, or in a
+distro-specific configuration file (some of which are detailed in the
+next section).
+
+       The available bonding driver parameters are listed below. If a
+parameter is not specified the default value is used.  When initially
+configuring a bond, it is recommended "tail -f /var/log/messages" be
+run in a separate window to watch for bonding driver error messages.
+
+       It is critical that either the miimon or arp_interval and
+arp_ip_target parameters be specified, otherwise serious network
+degradation will occur during link failures.  Very few devices do not
+support at least miimon, so there is really no reason not to use it.
+
+       Options with textual values will accept either the text name
+       or, for backwards compatibility, the option value.  E.g.,
+       "mode=802.3ad" and "mode=4" set the same mode.
+
+       The parameters are as follows:
 
 arp_interval
 
-        Specifies the ARP monitoring frequency in milli-seconds.
-        If ARP monitoring is used in a load-balancing mode (mode 0 or 2), the
-        switch should be configured in a mode that evenly distributes packets
-        across all links - such as round-robin. If the switch is configured to
-        distribute the packets in an XOR fashion, all replies from the ARP
-        targets will be received on the same link which could cause the other
-        team members to fail. ARP monitoring should not be used in conjunction
-        with miimon. A value of 0 disables ARP monitoring. The default value
-        is 0.
+       Specifies the ARP monitoring frequency in milli-seconds. If
+       ARP monitoring is used in a load-balancing mode (mode 0 or 2),
+       the switch should be configured in a mode that evenly
+       distributes packets across all links - such as round-robin. If
+       the switch is configured to distribute the packets in an XOR
+       fashion, all replies from the ARP targets will be received on
+       the same link which could cause the other team members to
+       fail. ARP monitoring should not be used in conjunction with
+       miimon. A value of 0 disables ARP monitoring. The default
+       value is 0.
 
 arp_ip_target
 
-       Specifies the ip addresses to use when arp_interval is > 0. These
-       are the targets of the ARP request sent to determine the health of
-       the link to the targets. Specify these values in ddd.ddd.ddd.ddd
-       format. Multiple ip adresses must be seperated by a comma. At least
-       one ip address needs to be given for ARP monitoring to work. The
-       maximum number of targets that can be specified is set at 16.
+       Specifies the ip addresses to use when arp_interval is > 0.
+       These are the targets of the ARP request sent to determine the
+       health of the link to the targets.  Specify these values in
+       ddd.ddd.ddd.ddd format.  Multiple ip adresses must be
+       seperated by a comma.  At least one IP address must be given
+       for ARP monitoring to function.  The maximum number of targets
+       that can be specified is 16.  The default value is no IP
+       addresses.
 
 downdelay
 
-        Specifies the delay time in milli-seconds to disable a link after a
-        link failure has been detected. This should be a multiple of miimon
-        value, otherwise the value will be rounded. The default value is 0.
+       Specifies the time, in milliseconds, to wait before disabling
+       a slave after a link failure has been detected.  This option
+       is only valid for the miimon link monitor.  The downdelay
+       value should be a multiple of the miimon value; if not, it
+       will be rounded down to the nearest multiple.  The default
+       value is 0.
 
 lacp_rate
 
-        Option specifying the rate in which we'll ask our link partner to
-       transmit LACPDU packets in 802.3ad mode.  Possible values are:
+       Option specifying the rate in which we'll ask our link partner
+       to transmit LACPDU packets in 802.3ad mode.  Possible values
+       are:
 
        slow or 0
                Request partner to transmit LACPDUs every 30 seconds (default)
@@ -246,69 +221,76 @@
 
 miimon
 
-        Specifies the frequency in milli-seconds that MII link monitoring
-        will occur. A value of zero disables MII link monitoring. A value
-        of 100 is a good starting point. See High Availability section for
-        additional information. The default value is 0.
+       Specifies the frequency in milli-seconds that MII link
+       monitoring will occur.  A value of zero disables MII link
+       monitoring.  A value of 100 is a good starting point.  The
+       use_carrier option, below, affects how the link state is
+       determined.  See the High Availability section for additional
+       information.  The default value is 0.
 
 mode
 
        Specifies one of the bonding policies. The default is
-       round-robin (balance-rr).  Possible values are (you can use
-       either the text or numeric option):
+       balance-rr (round robin).  Possible values are:
 
        balance-rr or 0
 
-               Round-robin policy: Transmit in a sequential order
-               from the first available slave through the last. This
-               mode provides load balancing and fault tolerance.
+               Round-robin policy: Transmit packets in sequential
+               order from the first available slave through the
+               last.  This mode provides load balancing and fault
+               tolerance.
 
        active-backup or 1
 
                Active-backup policy: Only one slave in the bond is
-               active. A different slave becomes active if, and only
-               if, the active slave fails. The bond's MAC address is
+               active.  A different slave becomes active if, and only
+               if, the active slave fails.  The bond's MAC address is
                externally visible on only one port (network adapter)
                to avoid confusing the switch.  This mode provides
-               fault tolerance.
+               fault tolerance.  The primary option affects the
+               behavior of this mode.
 
        balance-xor or 2
 
                XOR policy: Transmit based on [(source MAC address
-               XOR'd with destination MAC address) modula slave
-               count]. This selects the same slave for each
-               destination MAC address. This mode provides load
+               XOR'd with destination MAC address) modulo slave
+               count].  This selects the same slave for each
+               destination MAC address.  This mode provides load
                balancing and fault tolerance.
 
        broadcast or 3
 
                Broadcast policy: transmits everything on all slave
-               interfaces. This mode provides fault tolerance.
+               interfaces.  This mode provides fault tolerance.
 
        802.3ad or 4
 
-               IEEE 802.3ad Dynamic link aggregation. Creates aggregation
-               groups that share the same speed and duplex settings.
-               Transmits and receives on all slaves in the active
-               aggregator.
+               IEEE 802.3ad Dynamic link aggregation.  Creates
+               aggregation groups that share the same speed and
+               duplex settings.  Utilizes all slaves in the active
+               aggregator according to the 802.3ad specification.
 
                Pre-requisites:
 
-               1. Ethtool support in the base drivers for retrieving the
-               speed and duplex of each slave.
+               1. Ethtool support in the base drivers for retrieving
+               the speed and duplex of each slave.
 
                2. A switch that supports IEEE 802.3ad Dynamic link
                aggregation.
 
+               Most switches will require some type of configuration
+               to enable 802.3ad mode.
+
        balance-tlb or 5
 
-               Adaptive transmit load balancing: channel bonding that does
-               not require any special switch support. The outgoing
-               traffic is distributed according to the current load
-               (computed relative to the speed) on each slave. Incoming
-               traffic is received by the current slave. If the receiving
-               slave fails, another slave takes over the MAC address of
-               the failed receiving slave.
+               Adaptive transmit load balancing: channel bonding that
+               does not require any special switch support.  The
+               outgoing traffic is distributed according to the
+               current load (computed relative to the speed) on each
+               slave.  Incoming traffic is received by the current
+               slave.  If the receiving slave fails, another slave
+               takes over the MAC address of the failed receiving
+               slave.
 
                Prerequisite:
 
@@ -317,205 +299,452 @@
 
        balance-alb or 6
 
-               Adaptive load balancing: includes balance-tlb + receive
-               load balancing (rlb) for IPV4 traffic and does not require
-               any special switch support. The receive load balancing is
-               achieved by ARP negotiation. The bonding driver intercepts
-               the ARP Replies sent by the server on their way out and
-               overwrites the src hw address with the unique hw address of
-               one of the slaves in the bond such that different clients
-               use different hw addresses for the server.
-
-               Receive traffic from connections created by the server is
-               also balanced. When the server sends an ARP Request the
-               bonding driver copies and saves the client's IP information
-               from the ARP. When the ARP Reply arrives from the client,
-               its hw address is retrieved and the bonding driver
-               initiates an ARP reply to this client assigning it to one
-               of the slaves in the bond. A problematic outcome of using
-               ARP negotiation for balancing is that each time that an ARP
-               request is broadcasted it uses the hw address of the
-               bond. Hence, clients learn the hw address of the bond and
-               the balancing of receive traffic collapses to the current
-               salve. This is handled by sending updates (ARP Replies) to
-               all the clients with their assigned hw address such that
-               the traffic is redistributed. Receive traffic is also
-               redistributed when a new slave is added to the bond and
-               when an inactive slave is re-activated. The receive load is
-               distributed sequentially (round robin) among the group of
-               highest speed slaves in the bond.
-
-               When a link is reconnected or a new slave joins the bond
-               the receive traffic is redistributed among all active
-               slaves in the bond by intiating ARP Replies with the
-               selected mac address to each of the clients. The updelay
-               modeprobe parameter must be set to a value equal or greater
-               than the switch's forwarding delay so that the ARP Replies
-               sent to the clients will not be blocked by the switch.
+               Adaptive load balancing: includes balance-tlb plus
+               receive load balancing (rlb) for IPV4 traffic, and
+               does not require any special switch support.  The
+               receive load balancing is achieved by ARP negotiation.
+               The bonding driver intercepts the ARP Replies sent by
+               the local system on their way out and overwrites the
+               source hardware address with the unique hardware
+               address of one of the slaves in the bond such that
+               different peers use different hardware addresses for
+               the server.
+
+               Receive traffic from connections created by the server
+               is also balanced.  When the local system sends an ARP
+               Request the bonding driver copies and saves the peer's
+               IP information from the ARP packet.  When the ARP
+               Reply arrives from the peer, its hardware address is
+               retrieved and the bonding driver initiates an ARP
+               reply to this peer assigning it to one of the slaves
+               in the bond.  A problematic outcome of using ARP
+               negotiation for balancing is that each time that an
+               ARP request is broadcast it uses the hardware address
+               of the bond.  Hence, peers learn the hardware address
+               of the bond and the balancing of receive traffic
+               collapses to the current slave.  This is handled by
+               sending updates (ARP Replies) to all the peers with
+               their individually assigned hardware address such that
+               the traffic is redistributed.  Receive traffic is also
+               redistributed when a new slave is added to the bond
+               and when an inactive slave is re-activated.  The
+               receive load is distributed sequentially (round robin)
+               among the group of highest speed slaves in the bond.
+
+               When a link is reconnected or a new slave joins the
+               bond the receive traffic is redistributed among all
+               active slaves in the bond by intiating ARP Replies
+               with the selected mac address to each of the
+               clients. The updelay parameter (detailed below) must
+               be set to a value equal or greater than the switch's
+               forwarding delay so that the ARP Replies sent to the
+               peers will not be blocked by the switch.
 
                Prerequisites:
 
-               1. Ethtool support in the base drivers for retrieving the
-               speed of each slave.
+               1. Ethtool support in the base drivers for retrieving
+               the speed of each slave.
 
-               2. Base driver support for setting the hw address of a
-               device also when it is open. This is required so that there
-               will always be one slave in the team using the bond hw
-               address (the curr_active_slave) while having a unique hw
-               address for each slave in the bond. If the curr_active_slave
-               fails it's hw address is swapped with the new curr_active_slave
-               that was chosen.
+               2. Base driver support for setting the hardware
+               address of a device while it is open.  This is
+               required so that there will always be one slave in the
+               team using the bond hardware address (the
+               curr_active_slave) while having a unique hardware
+               address for each slave in the bond.  If the
+               curr_active_slave fails its hardware address is
+               swapped with the new curr_active_slave that was
+               chosen.
 
 primary
 
-        A string (eth0, eth2, etc) to equate to a primary device. If this
-        value is entered, and the device is on-line, it will be used first
-        as the output media. Only when this device is off-line, will
-        alternate devices be used. Otherwise, once a failover is detected
-        and a new default output is chosen, it will remain the output media
-        until it too fails. This is useful when one slave was preferred
-        over another, i.e. when one slave is 1000Mbps and another is
-        100Mbps. If the 1000Mbps slave fails and is later restored, it may
-        be preferred the faster slave gracefully become the active slave -
-        without deliberately failing the 100Mbps slave. Specifying a
-        primary is only valid in active-backup mode.
+       A string (eth0, eth2, etc) specifying which slave is the
+       primary device.  The specified device will always be the
+       active slave while it is available.  Only when the primary is
+       off-line will alternate devices be used.  This is useful when
+       one slave is preferred over another, e.g., when one slave has
+       higher throughput than another.
+
+       The primary option is only valid for active-backup mode.
 
 updelay
 
-        Specifies the delay time in milli-seconds to enable a link after a
-        link up status has been detected. This should be a multiple of miimon
-        value, otherwise the value will be rounded. The default value is 0.
+       Specifies the time, in milliseconds, to wait before enabling a
+       slave after a link recovery has been detected.  This option is
+       only valid for the miimon link monitor.  The updelay value
+       should be a multiple of the miimon value; if not, it will be
+       rounded down to the nearest multiple.  The default value is 0.
 
 use_carrier
 
-        Specifies whether or not miimon should use MII or ETHTOOL
-        ioctls vs. netif_carrier_ok() to determine the link status.
-        The MII or ETHTOOL ioctls are less efficient and utilize a
-        deprecated calling sequence within the kernel.  The
-        netif_carrier_ok() relies on the device driver to maintain its
-        state with netif_carrier_on/off; at this writing, most, but
-        not all, device drivers support this facility.
-
-        If bonding insists that the link is up when it should not be,
-        it may be that your network device driver does not support
-        netif_carrier_on/off.  This is because the default state for
-        netif_carrier is "carrier on." In this case, disabling
-        use_carrier will cause bonding to revert to the MII / ETHTOOL
-        ioctl method to determine the link state.
-
-        A value of 1 enables the use of netif_carrier_ok(), a value of
-        0 will use the deprecated MII / ETHTOOL ioctls.  The default
-        value is 1.
-
-
-Configuring Multiple Bonds
-==========================
-
-If several bonding interfaces are required, either specify the max_bonds
-parameter (described above), or load the driver multiple times.  Using
-the max_bonds parameter is less complicated, but has the limitation that
-all bonding instances created will have the same options.  Loading the
-driver multiple times allows each instance of the driver to have differing
-options.
-
-For example, to configure two bonding interfaces, one with mii link
-monitoring performed every 100 milliseconds, and one with ARP link
-monitoring performed every 200 milliseconds, the /etc/conf.modules should
-resemble the following:
+       Specifies whether or not miimon should use MII or ETHTOOL
+       ioctls vs. netif_carrier_ok() to determine the link
+       status. The MII or ETHTOOL ioctls are less efficient and
+       utilize a deprecated calling sequence within the kernel.  The
+       netif_carrier_ok() relies on the device driver to maintain its
+       state with netif_carrier_on/off; at this writing, most, but
+       not all, device drivers support this facility.
+
+       If bonding insists that the link is up when it should not be,
+       it may be that your network device driver does not support
+       netif_carrier_on/off.  The default state for netif_carrier is
+       "carrier on," so if a driver does not support netif_carrier,
+       it will appear as if the link is always up.  In this case,
+       setting use_carrier to 0 will cause bonding to revert to the
+       MII / ETHTOOL ioctl method to determine the link state.
+
+       A value of 1 enables the use of netif_carrier_ok(), a value of
+       0 will use the deprecated MII / ETHTOOL ioctls.  The default
+       value is 1.
+
+
+
+3. Configuring Bonding Devices
+==============================
+
+       There are, essentially, two methods for configuring bonding:
+with support from the distro's network initialization scripts, and
+without.  Distros generally use one of two packages for the network
+initialization scripts: initscripts or sysconfig.  Recent versions of
+these packages have support for bonding, while older versions do not.
+
+       We will first describe the options for configuring bonding for
+distros using versions of initscripts and sysconfig with full or
+partial support for bonding, then provide information on enabling
+bonding without support from the network initialization scripts (i.e.,
+older versions of initscripts or sysconfig).
+
+       If you're unsure whether your distro uses sysconfig or
+initscripts, or don't know if it's new enough, have no fear.
+Determining this is fairly straightforward.
+
+       First, issue the command:
+
+$ rpm -qf /sbin/ifup
+
+       It will respond with a line of text starting with either
+"initscripts" or "sysconfig," followed by some numbers.  This is the
+package that provides your network initialization scripts.
+
+       Next, to determine if your installation supports bonding,
+issue the command:
+
+$ grep ifenslave /sbin/ifup
+
+       If this returns any matches, then your initscripts or
+sysconfig has support for bonding.
+
+3.1 Configuration with sysconfig support
+----------------------------------------
+
+       This section applies to distros using a version of sysconfig
+with bonding support, for example, SuSE Linux Enterprise Server 9.
+
+       SuSE SLES 9's networking configuration system does support
+bonding, however, at this writing, the YaST system configuration
+frontend does not provide any means to work with bonding devices.
+Bonding devices can be managed by hand, however, as follows.
+
+       First, if they have not already been configured, configure the
+slave devices.  On SLES 9, this is most easily done by running the
+yast2 sysconfig configuration utility.  The goal is for to create an
+ifcfg-id file for each slave device.  The simplest way to accomplish
+this is to configure the devices for DHCP.  The name of the
+configuration file for each device will be of the form:
+
+ifcfg-id-xx:xx:xx:xx:xx:xx
+
+       Where the "xx" portion will be replaced with the digits from
+the device's permanent MAC address.
+
+       Once the set of ifcfg-id-xx:xx:xx:xx:xx:xx files has been
+created, it is necessary to edit the configuration files for the slave
+devices (the MAC addresses correspond to those of the slave devices).
+Before editing, the file will contain muliple lines, and will look
+something like this:
+
+BOOTPROTO='dhcp'
+STARTMODE='on'
+USERCTL='no'
+UNIQUE='XNzu.WeZGOGF+4wE'
+_nm_name='bus-pci-0001:61:01.0'
+
+       Change the BOOTPROTO and STARTMODE lines to the following:
+
+BOOTPROTO='none'
+STARTMODE='off'
+
+       Do not alter the UNIQUE or _nm_name lines.  Remove any other
+lines (USERCTL, etc).
+
+       Once the ifcfg-id-xx:xx:xx:xx:xx:xx files have been modified,
+it's time to create the configuration file for the bonding device
+itself.  This file is named ifcfg-bondX, where X is the number of the
+bonding device to create, starting at 0.  The first such file is
+ifcfg-bond0, the second is ifcfg-bond1, and so on.  The sysconfig
+network configuration system will correctly start multiple instances
+of bonding.
+
+       The contents of the ifcfg-bondX file is as follows:
+
+BOOTPROTO="static"
+BROADCAST="10.0.2.255"
+IPADDR="10.0.2.10"
+NETMASK="255.255.0.0"
+NETWORK="10.0.2.0"
+REMOTE_IPADDR=""
+STARTMODE="onboot"
+BONDING_MASTER="yes"
+BONDING_MODULE_OPTS="mode=active-backup miimon=100"
+BONDING_SLAVE0="eth0"
+BONDING_SLAVE1="eth1"
+
+       Replace the sample BROADCAST, IPADDR, NETMASK and NETWORK
+values with the appropriate values for your network.
+
+       Note that configuring the bonding device with BOOTPROTO='dhcp'
+does not work; the scripts attempt to obtain the device address from
+DHCP prior to adding any of the slave devices.  Without active slaves,
+the DHCP requests are not sent to the network.
+
+       The STARTMODE specifies when the device is brought online.
+The possible values are:
+
+       onboot:  The device is started at boot time.  If you're not
+                sure, this is probably what you want.
+
+       manual:  The device is started only when ifup is called
+                manually.  Bonding devices may be configured this
+                way if you do not wish them to start automatically
+                at boot for some reason.
+
+       hotplug: The device is started by a hotplug event.  This is not
+                a valid choice for a bonding device.
+
+       off or ignore: The device configuration is ignored.
+
+       The line BONDING_MASTER='yes' indicates that the device is a
+bonding master device.  The only useful value is "yes."
+
+       The contents of BONDING_MODULE_OPTS are supplied to the
+instance of the bonding module for this device.  Specify the options
+for the bonding mode, link monitoring, and so on here.  Do not include
+the max_bonds bonding parameter; this will confuse the configuration
+system if you have multiple bonding devices.
+
+       Finally, supply one BONDING_SLAVEn="ethX" for each slave,
+where "n" is an increasing value, one for each slave, and "ethX" is
+the name of the slave device (eth0, eth1, etc).
+
+       When all configuration files have been modified or created,
+networking must be restarted for the configuration changes to take
+effect.  This can be accomplished via the following:
+
+# /etc/init.d/network restart
+
+       Note that the network control script (/sbin/ifdown) will
+remove the bonding module as part of the network shutdown processing,
+so it is not necessary to remove the module by hand if, e.g., the
+module paramters have changed.
+
+       Also, at this writing, YaST/YaST2 will not manage bonding
+devices (they do not show bonding interfaces on its list of network
+devices).  It is necessary to edit the configuration file by hand to
+change the bonding configuration.
+
+       Additional general options and details of the ifcfg file
+format can be found in an example ifcfg template file:
+
+/etc/sysconfig/network/ifcfg.template
+
+       Note that the template does not document the various BONDING_
+settings described above, but does describe many of the other options.
+
+3.2 Configuration with initscripts support
+------------------------------------------
+
+       This section applies to distros using a version of initscripts
+with bonding support, for example, Red Hat Linux 9 or Red Hat
+Enterprise Linux version 3.  On these systems, the network
+initialization scripts have some knowledge of bonding, and can be
+configured to control bonding devices.
+
+       These distros will not automatically load the network adapter
+driver unless the ethX device is configured with an IP address.
+Because of this constraint, users must manually configure a
+network-script file for all physical adapters that will be members of
+a bondX link.  Network script files are located in the directory:
+
+/etc/sysconfig/network-scripts
+
+       The file name must be prefixed with "ifcfg-eth" and suffixed
+with the adapter's physical adapter number.  For example, the script
+for eth0 would be named /etc/sysconfig/network-scripts/ifcfg-eth0.
+Place the following text in the file:
 
-alias bond0 bonding
-alias bond1 bonding
+DEVICE=eth0
+USERCTL=no
+ONBOOT=yes
+MASTER=bond0
+SLAVE=yes
+BOOTPROTO=none
 
-options bond0 miimon=100
-options bond1 -o bonding1 arp_interval=200 arp_ip_target=10.0.0.1
+       The DEVICE= line will be different for every ethX device and
+must correspond with the name of the file, i.e., ifcfg-eth1 must have
+a device line of DEVICE=eth1.  The setting of the MASTER= line will
+also depend on the final bonding interface name chosen for your bond.
+As with other network devices, these typically start at 0, and go up
+one for each device, i.e., the first bonding instance is bond0, the
+second is bond1, and so on.
+
+       Next, create a bond network script.  The file name for this
+script will be /etc/sysconfig/network-scripts/ifcfg-bondX where X is
+the number of the bond.  For bond0 the file is named "ifcfg-bond0",
+for bond1 it is named "ifcfg-bond1", and so on.  Within that file,
+place the following text:
 
-Configuring Multiple ARP Targets
-================================
+DEVICE=bond0
+IPADDR=192.168.1.1
+NETMASK=255.255.255.0
+NETWORK=192.168.1.0
+BROADCAST=192.168.1.255
+ONBOOT=yes
+BOOTPROTO=none
+USERCTL=no
 
-While ARP monitoring can be done with just one target, it can be useful
-in a High Availability setup to have several targets to monitor. In the
-case of just one target,  the target itself may go down or have a problem
-making it unresponsive to ARP requests. Having an additional target (or
-several) increases the reliability of the ARP monitoring.
+       Be sure to change the networking specific lines (IPADDR,
+NETMASK, NETWORK and BROADCAST) to match your network configuration.
 
-Multiple ARP targets must be seperated by commas as follows:
+       Finally, it is necessary to edit /etc/modules.conf to load the
+bonding module when the bond0 interface is brought up.  The following
+sample lines in /etc/modules.conf will load the bonding module, and
+select its options:
 
-# example options for ARP monitoring with three targets
 alias bond0 bonding
-options bond0 arp_interval=60 arp_ip_target=192.168.0.1,192.168.0.3,192.168.0.9
+options bond0 mode=balance-alb miimon=100
 
-For just a single target the options would resemble:
+       Replace the sample parameters with the appropriate set of
+options for your configuration.
 
-# example options for ARP monitoring with one target
+       Finally run "/etc/rc.d/init.d/network restart" as root.  This
+will restart the networking subsystem and your bond link should be now
+up and running.
+
+
+3.3 Configuring Bonding Manually
+--------------------------------
+
+       This section applies to distros whose network initialization
+scripts (the sysconfig or initscripts package) do not have specific
+knowledge of bonding.  One such distro is SuSE Linux Enterprise Server
+version 8.
+
+       The general methodology for these systems is to place the
+bonding module parameters into /etc/modprobe.conf, then add modprobe
+and/or ifenslave commands to the system's global init script.  The
+name of the global init script differs; for sysconfig, it is
+/etc/init.d/boot.local and for initscripts it is /etc/rc.d/rc.local.
+
+       For example, if you wanted to make a simple bond of two e100
+devices (presumed to be eth0 and eth1), and have it persist across
+reboots, edit the appropriate file (/etc/init.d/boot.local or
+/etc/rc.d/rc.local), and add the following:
+
+modprobe bonding -obond0 mode=balance-alb miimon=100
+modprobe e100
+ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up
+ifenslave bond0 eth0
+ifenslave bond0 eth1
+
+       Replace the example bonding module parameters and bond0
+network configuration (IP address, netmask, etc) with the appropriate
+values for your configuration.  The above example loads the bonding
+module with the name "bond0," this simplifies the naming if multiple
+bonding modules are loaded (each successive instance of the module is
+given a different name, and the module instance names match the
+bonding interface names).
+
+       Unfortunately, this method will not provide support for the
+ifup and ifdown scripts on the bond devices.  To reload the bonding
+configuration, it is necessary to run the initialization script, e.g.,
+
+# /etc/init.d/boot.local
+
+       or
+
+# /etc/rc.d/rc.local
+
+       It may be desirable in such a case to create a separate script
+which only initializes the bonding configuration, then call that
+separate script from within boot.local.  This allows for bonding to be
+enabled without re-running the entire global init script.
+
+       To shut down the bonding devices, it is necessary to first
+mark the bonding device itself as being down, then remove the
+appropriate device driver modules.  For our example above, you can do
+the following:
+
+# ifconfig bond0 down
+# rmmod bond0
+# rmmod e100
+
+       Again, for convenience, it may be desirable to create a script
+with these commands.
+
+
+3.4 Configuring Multiple Bonds
+------------------------------
+
+       This section contains information on configuring multiple
+bonding devices with differing options.  If you require multiple
+bonding devices, but all with the same options, see the "max_bonds"
+module paramter, documented above.
+
+       To create multiple bonding devices with differing options, it
+is necessary to load the bonding driver multiple times.  Note that
+current versions of the sysconfig network initialization scripts
+handle this automatically; if your distro uses these scripts, no
+special action is needed.  See the section Configuring Bonding
+Devices, above, if you're not sure about your network initialization
+scripts.
+
+       To load multiple instances of the module, it is necessary to
+specify a different name for each instance (the module loading system
+requires that every loaded module, even multiple instances of the same
+module, have a unique name).  This is accomplished by supplying
+multiple sets of bonding options in /etc/modprobe.conf, for example:
+       
 alias bond0 bonding
-options bond0 arp_interval=60 arp_ip_target=192.168.0.100
-
-Potential Problems When Using ARP Monitor
-=========================================
+options bond0 -o bond0 mode=balance-rr miimon=100
 
-1. Driver support
-
-The ARP monitor relies on the network device driver to maintain two
-statistics: the last receive time (dev->last_rx), and the last
-transmit time (dev->trans_start).  If the network device driver does
-not update one or both of these, then the typical result will be that,
-upon startup, all links in the bond will immediately be declared down,
-and remain that way.  A network monitoring tool (tcpdump, e.g.) will
-show ARP requests and replies being sent and received on the bonding
-device.
-
-The possible resolutions for this are to (a) fix the device driver, or
-(b) discontinue the ARP monitor (using miimon as an alternative, for
-example).
-
-2. Adventures in Routing
-
-When bonding is set up with the ARP monitor, it is important that the
-slave devices not have routes that supercede routes of the master (or,
-generally, not have routes at all).  For example, suppose the bonding
-device bond0 has two slaves, eth0 and eth1, and the routing table is
-as follows:
-
-Kernel IP routing table
-Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
-10.0.0.0        0.0.0.0         255.255.0.0     U        40 0          0 eth0
-10.0.0.0        0.0.0.0         255.255.0.0     U        40 0          0 eth1
-10.0.0.0        0.0.0.0         255.255.0.0     U        40 0          0 bond0
-127.0.0.0       0.0.0.0         255.0.0.0       U        40 0          0 lo
+alias bond1 bonding
+options bond1 -o bond1 mode=balance-alb miimon=50
 
-In this case, the ARP monitor (and ARP itself) may become confused,
-because ARP requests will be sent on one interface (bond0), but the
-corresponding reply will arrive on a different interface (eth0).  This
-reply looks to ARP as an unsolicited ARP reply (because ARP matches
-replies on an interface basis), and is discarded.  This will likely
-still update the receive/transmit times in the driver, but will lose
-packets.
-
-The resolution here is simply to insure that slaves do not have routes
-of their own, and if for some reason they must, those routes do not
-supercede routes of their master.  This should generally be the case,
-but unusual configurations or errant manual or automatic static route
-additions may cause trouble.
+       will load the bonding module two times.  The first instance is
+named "bond0" and creates the bond0 device in balance-rr mode with an
+miimon of 100.  The second instance is named "bond1" and creates the
+bond1 device in balance-alb mode with an miimon of 50.
 
-Switch Configuration
-====================
+       This may be repeated any number of times, specifying a new and
+unique name in place of bond0 or bond1 for each instance.
 
-While the switch does not need to be configured when the active-backup,
-balance-tlb or balance-alb policies (mode=1,5,6) are used, it does need to
-be configured for the round-robin, XOR, broadcast, or 802.3ad policies
-(mode=0,2,3,4).
+       When the appropriate module paramters are in place, then
+configure bonding according to the instructions for your distro.
 
+5. Querying Bonding Configuration 
+=================================
 
-Verifying Bond Configuration
-============================
+5.1 Bonding Configuration
+-------------------------
 
-1) Bonding information files
-----------------------------
-The bonding driver information files reside in the /proc/net/bonding directory.
+       Each bonding device has a read-only file residing in the
+/proc/net/bonding directory.  The file contents include information
+about the bonding configuration, options and state of each slave.
 
-Sample contents of /proc/net/bonding/bond0 after the driver is loaded with
-parameters of mode=0 and miimon=1000 is shown below.
+       For example, the contents of /proc/net/bonding/bond0 after the
+driver is loaded with parameters of mode=0 and miimon=1000 is
+generally as follows:
 
+       Ethernet Channel Bonding Driver: 2.6.1 (October 29, 2004)
         Bonding Mode: load balancing (round-robin)
         Currently Active Slave: eth0
         MII Status: up
@@ -531,15 +760,23 @@
         MII Status: up
         Link Failure Count: 1
 
-2) Network verification
------------------------
-The network configuration can be verified using the ifconfig command. In
-the example below, the bond0 interface is the master (MASTER) while eth0 and
-eth1 are slaves (SLAVE). Notice all slaves of bond0 have the same MAC address
-(HWaddr) as bond0 for all modes except TLB and ALB that require a unique MAC
-address for each slave.
+       The precise format and contents will change depending upon the
+bonding configuration, state, and version of the bonding driver.
+
+5.2 Network configuration
+-------------------------
+
+       The network configuration can be inspected using the ifconfig
+command.  Bonding devices will have the MASTER flag set; Bonding slave
+devices will have the SLAVE flag set.  The ifconfig output does not
+contain information on which slaves are associated with which masters.
+
+       In the example below, the bond0 interface is the master
+(MASTER) while eth0 and eth1 are slaves (SLAVE). Notice all slaves of
+bond0 have the same MAC address (HWaddr) as bond0 for all modes except
+TLB and ALB that require a unique MAC address for each slave.
 
-[root]# /sbin/ifconfig
+# /sbin/ifconfig
 bond0     Link encap:Ethernet  HWaddr 00:C0:F0:1F:37:B4
           inet addr:XXX.XXX.XXX.YYY  Bcast:XXX.XXX.XXX.255  Mask:255.255.252.0
           UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
@@ -563,430 +800,819 @@
           collisions:0 txqueuelen:100
           Interrupt:9 Base address:0x1400
 
+6. Switch Configuration
+=======================
 
-Frequently Asked Questions
-==========================
+       For this section, "switch" refers to whatever system the
+bonded devices are directly connected to (i.e., where the other end of
+the cable plugs into).  This may be an actual dedicated switch device,
+or it may be another regular system (e.g., another computer running
+Linux),
+
+       The active-backup, balance-tlb and balance-alb modes do not
+require any specific configuration of the switch.
+
+       The 802.3ad mode requires that the switch have the appropriate
+ports configured as an 802.3ad aggregation.  The precise method used
+to configure this varies from switch to switch, but, for example, a
+Cisco 3550 series switch requires that the appropriate ports first be
+grouped together in a single etherchannel instance, then that
+etherchannel is set to mode "lacp" to enable 802.3ad (instead of
+standard EtherChannel).
+
+       The balance-rr, balance-xor and broadcast modes generally
+require that the switch have the appropriate ports grouped together.
+The nomenclature for such a group differs between switches, it may be
+called an "etherchannel" (as in the Cisco example, above), a "trunk
+group" or some other similar variation.  For these modes, each switch
+will also have its own configuration options for the switch's transmit
+policy to the bond.  Typical choices include XOR of either the MAC or
+IP addresses.  The transmit policy of the two peers does not need to
+match.  For these three modes, the bonding mode really selects a
+transmit policy for an EtherChannel group; all three will interoperate
+with another EtherChannel group.
+
+
+7. 802.1q VLAN Support
+======================
+
+       It is possible to configure VLAN devices over a bond interface
+using the 8021q driver.  However, only packets coming from the 8021q
+driver and passing through bonding will be tagged by default.  Self
+generated packets, for example, bonding's learning packets or ARP
+packets generated by either ALB mode or the ARP monitor mechanism, are
+tagged internally by bonding itself.  As a result, bonding must
+"learn" the VLAN IDs configured above it, and use those IDs to tag
+self generated packets.
+
+       For reasons of simplicity, and to support the use of adapters
+that can do VLAN hardware acceleration offloding, the bonding
+interface declares itself as fully hardware offloaing capable, it gets
+the add_vid/kill_vid notifications to gather the necessary
+information, and it propagates those actions to the slaves.  In case
+of mixed adapter types, hardware accelerated tagged packets that
+should go through an adapter that is not offloading capable are
+"un-accelerated" by the bonding driver so the VLAN tag sits in the
+regular location.
+
+       VLAN interfaces *must* be added on top of a bonding interface
+only after enslaving at least one slave.  The bonding interface has a
+hardware address of 00:00:00:00:00:00 until the first slave is added.
+If the VLAN interface is created prior to the first enslavement, it
+would pick up the all-zeroes hardware address.  Once the first slave
+is attached to the bond, the bond device itself will pick up the
+slave's hardware address, which is then available for the VLAN device.
+
+       Also, be aware that a similar problem can occur if all slaves
+are released from a bond that still has one or more VLAN interfaces on
+top of it.  When a new slave is added, the bonding interface will
+obtain its hardware address from the first slave, which might not
+match the hardware address of the VLAN interfaces (which was
+ultimately copied from an earlier slave).
+
+       There are two methods to insure that the VLAN device operates
+with the correct hardware address if all slaves are removed from a
+bond interface:
+
+       1. Remove all VLAN interfaces then recreate them
+
+       2. Set the bonding interface's hardware address so that it
+matches the hardware address of the VLAN interfaces.
+
+       Note that changing a VLAN interface's HW address would set the
+underlying device -- i.e. the bonding interface -- to promiscouos
+mode, which might not be what you want.
 
-1.  Is it SMP safe?
-
-       Yes. The old 2.0.xx channel bonding patch was not SMP safe.
-       The new driver was designed to be SMP safe from the start.
 
-2.  What type of cards will work with it?
-
-       Any Ethernet type cards (you can even mix cards - a Intel
-       EtherExpress PRO/100 and a 3com 3c905b, for example).
-       You can even bond together Gigabit Ethernet cards!
+8. Link Monitoring
+==================
 
-3.  How many bonding devices can I have?
+       The bonding driver at present supports two schemes for
+monitoring a slave device's link state: the ARP monitor and the MII
+monitor.
+
+       At the present time, due to implementation restrictions in the
+bonding driver itself, it is not possible to enable both ARP and MII
+monitoring simultaneously.
+
+8.1 ARP Monitor Operation
+-------------------------
+
+       The ARP monitor operates as its name suggests: it sends ARP
+queries to one or more designated peer systems on the network, and
+uses the response as an indication that the link is operating.  This
+gives some assurance that traffic is actually flowing to and from one
+or more peers on the local network.
+
+       The ARP monitor relies on the device driver itself to verify
+that traffic is flowing.  In particular, the driver must keep up to
+date the last receive time, dev->last_rx, and transmit start time,
+dev->trans_start.  If these are not updated by the driver, then the
+ARP monitor will immediately fail any slaves using that driver, and
+those slaves will stay down.  If networking monitoring (tcpdump, etc)
+shows the ARP requests and replies on the network, then it may be that
+your device driver is not updating last_rx and trans_start.
 
-       There is no limit.
+8.2 Configuring Multiple ARP Targets
+------------------------------------
 
-4.  How many slaves can a bonding device have?
+       While ARP monitoring can be done with just one target, it can
+be useful in a High Availability setup to have several targets to
+monitor.  In the case of just one target, the target itself may go
+down or have a problem making it unresponsive to ARP requests.  Having
+an additional target (or several) increases the reliability of the ARP
+monitoring.
 
-       Limited by the number of network interfaces Linux supports and/or the
-       number of network cards you can place in your system.
+       Multiple ARP targets must be seperated by commas as follows:
 
-5.  What happens when a slave link dies?
+# example options for ARP monitoring with three targets
+alias bond0 bonding
+options bond0 arp_interval=60 arp_ip_target=192.168.0.1,192.168.0.3,192.168.0.9
 
-       If your ethernet cards support MII or ETHTOOL link status monitoring
-        and the MII monitoring has been enabled in the driver (see description
-        of module parameters), there will be no adverse consequences. This
-        release of the bonding driver knows how to get the MII information and
-       enables or disables its slaves according to their link status.
-       See section on High Availability for additional information.
-
-       For ethernet cards not supporting MII status, the arp_interval and
-        arp_ip_target parameters must be specified for bonding to work
-        correctly. If packets have not been sent or received during the
-        specified arp_interval duration, an ARP request is sent to the
-        targets to generate send and receive traffic. If after this
-        interval, either the successful send and/or receive count has not
-        incremented, the next slave in the sequence will become the active
-        slave.
-
-       If neither mii_monitor and arp_interval is configured, the bonding
-       driver will not handle this situation very well. The driver will
-       continue to send packets but some packets will be lost. Retransmits
-       will cause serious degradation of performance (in the case when one
-       of two slave links fails, 50% packets will be lost, which is a serious
-       problem for both TCP and UDP).
+       For just a single target the options would resemble:
 
-6.  Can bonding be used for High Availability?
+# example options for ARP monitoring with one target
+alias bond0 bonding
+options bond0 arp_interval=60 arp_ip_target=192.168.0.100
 
-        Yes, if you use MII monitoring and ALL your cards support MII link
-        status reporting. See section on High Availability for more
-        information.
 
-7.  Which switches/systems does it work with?
+8.3 MII Monitor Operation
+-------------------------
 
-       In round-robin and XOR mode, it works with systems that support
-       trunking:
+       The MII monitor monitors only the carrier state of the local
+network interface.  It accomplishes this in one of three ways: by
+depending upon the device driver to maintain its carrier state, by
+querying the device's MII registers, or by making an ethtool query to
+the device.
+
+       If the use_carrier module parameter is 1 (the default value),
+then the MII monitor will rely on the driver for carrier state
+information (via the netif_carrier subsystem).  As explained in the
+use_carrier parameter information, above, if the MII monitor fails to
+detect carrier loss on the device (e.g., when the cable is physically
+disconnected), it may be that the driver does not support
+netif_carrier.
+
+       If use_carrier is 0, then the MII monitor will first query the
+device's (via ioctl) MII registers and check the link state.  If that
+request fails (not just that it returns carrier down), then the MII
+monitor will make an ethtool ETHOOL_GLINK request to attempt to obtain
+the same information.  If both methods fail (i.e., the driver either
+does not support or had some error in processing both the MII register
+and ethtool requests), then the MII monitor will assume the link is
+up.
 
-       * Many Cisco switches and routers (look for EtherChannel support).
-       * SunTrunking software.
-       * Alteon AceDirector switches / WebOS (use Trunks).
-       * BayStack Switches (trunks must be explicitly configured). Stackable
-         models (450) can define trunks between ports on different physical
-         units.
-       * Linux bonding, of course !
-
-       In 802.3ad mode, it works with with systems that support IEEE 802.3ad
-       Dynamic Link Aggregation:
-
-       * Extreme networks Summit 7i (look for link-aggregation).
-       * Many Cisco switches and routers (look for LACP support; this may
-         require an upgrade to your IOS software; LACP support was added
-         by Cisco in late 2002).
-       * Foundry Big Iron 4000
+9. Potential Sources of Trouble
+===============================
 
-        In active-backup, balance-tlb and balance-alb modes, it should work
-        with any Layer-II switch.
+9.1 Adventures in Routing
+-------------------------
 
+       When bonding is configured, it is important that the slave
+devices not have routes that supercede routes of the master (or,
+generally, not have routes at all).  For example, suppose the bonding
+device bond0 has two slaves, eth0 and eth1, and the routing table is
+as follows:
 
-8.  Where does a bonding device get its MAC address from?
+Kernel IP routing table
+Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
+10.0.0.0        0.0.0.0         255.255.0.0     U        40 0          0 eth0
+10.0.0.0        0.0.0.0         255.255.0.0     U        40 0          0 eth1
+10.0.0.0        0.0.0.0         255.255.0.0     U        40 0          0 bond0
+127.0.0.0       0.0.0.0         255.0.0.0       U        40 0          0 lo
 
-       If not explicitly configured with ifconfig, the MAC address of the
-       bonding device is taken from its first slave device. This MAC address
-       is then passed to all following slaves and remains persistent (even if
-       the the first slave is removed) until the bonding device is brought
-       down or reconfigured.
+       This routing configuration will likely still update the
+receive/transmit times in the driver (needed by the ARP monitor), but
+may bypass the bonding driver (because outgoing traffic to, in this
+case, another host on network 10 would use eth0 or eth1 before bond0).
+
+       The ARP monitor (and ARP itself) may become confused by this
+configuration, because ARP requests (generated by the ARP monitor)
+will be sent on one interface (bond0), but the corresponding reply
+will arrive on a different interface (eth0).  This reply looks to ARP
+as an unsolicited ARP reply (because ARP matches replies on an
+interface basis), and is discarded.  The MII monitor is not affected
+by the state of the routing table.
+
+       The solution here is simply to insure that slaves do not have
+routes of their own, and if for some reason they must, those routes do
+not supercede routes of their master.  This should generally be the
+case, but unusual configurations or errant manual or automatic static
+route additions may cause trouble.
 
-       If you wish to change the MAC address, you can set it with ifconfig:
+9.2 Ethernet Device Renaming
+----------------------------
 
-         # ifconfig bond0 hw ether 00:11:22:33:44:55
+       On systems with network configuration scripts that do not
+associate physical devices directly with network interface names (so
+that the same physical device always has the same "ethX" name), it may
+be necessary to add some special logic to either /etc/modules.conf or
+/etc/modprobe.conf (depending upon which is installed on the system).
 
-       The MAC address can be also changed by bringing down/up the device
-       and then changing its slaves (or their order):
+       For example, given a modules.conf containing the following:
 
-         # ifconfig bond0 down ; modprobe -r bonding
-         # ifconfig bond0 .... up
-         # ifenslave bond0 eth...
+alias bond0 bonding
+options bond0 mode=some-mode miimon=50
+alias eth0 tg3
+alias eth1 tg3
+alias eth2 e1000
+alias eth3 e1000
+
+       If neither eth0 and eth1 are slaves to bond0, then when the
+bond0 interface comes up, the devices may end up reordered.  This
+happens because bonding is loaded first, then its slave device's
+drivers are loaded next.  Since no other drivers have been loaded,
+when the e1000 driver loads, it will receive eth0 and eth1 for its
+devices, but the bonding configuration tries to enslave eth2 and eth3
+(which may later be assigned to the tg3 devices).
+
+       Adding the following:
+
+add above bonding e1000 tg3
+
+       causes modprobe to load e1000 then tg3, in that order, when
+bonding is loaded.  This command is fully documented in the
+modules.conf manual page.
+
+       On systems utilizing modprobe.conf (or modprobe.conf.local),
+an equivalent problem can occur.  In this case, the following can be
+added to modprobe.conf (or modprobe.conf.local, as appropriate), as
+follows (all on one line; it has been split here for clarity):
+
+install bonding /sbin/modprobe tg3; /sbin/modprobe e1000;
+       /sbin/modprobe --ignore-install bonding
+
+       This will, when loading the bonding module, rather than
+performing the normal action, instead execute the provided command.
+This command loads the device drivers in the order needed, then calls
+modprobe with --ingore-install to cause the normal action to then take
+place.  Full documentation on this can be found in the modprobe.conf
+and modprobe manual pages.
+
+9.3. Painfully Slow Or No Failed Link Detection By Miimon
+---------------------------------------------------------
+
+       By default, bonding enables the use_carrier option, which
+instructs bonding to trust the driver to maintain carrier state.
+
+       As discussed in the options section, above, some drivers do
+not support the netif_carrier_on/_off link state tracking system.
+With use_carrier enabled, bonding will always see these links as up,
+regardless of their actual state.
+
+       Additionally, other drivers do support netif_carrier, but do
+not maintain it in real time, e.g., only polling the link state at
+some fixed interval.  In this case, miimon will detect failures, but
+only after some long period of time has expired.  If it appears that
+miimon is very slow in detecting link failures, try specifying
+use_carrier=0 to see if that improves the failure detection time.  If
+it does, then it may be that the driver checks the carrier state at a
+fixed interval, but does not cache the MII register values (so the
+use_carrier=0 method of querying the registers directly works).  If
+use_carrier=0 does not improve the failover, then the driver may cache
+the registers, or the problem may be elsewhere.
+
+       Also, remember that miimon only checks for the device's
+carrier state.  It has no way to determine the state of devices on or
+beyond other ports of a switch, or if a switch is refusing to pass
+traffic while still maintaining carrier on.
+
+10. SNMP agents
+===============
+
+       If running SNMP agents, the bonding driver should be loaded
+before any network drivers participating in a bond.  This requirement
+is due to the the interface index (ipAdEntIfIndex) being associated to
+the first interface found with a given IP address.  That is, there is
+only one ipAdEntIfIndex for each IP address.  For example, if eth0 and
+eth1 are slaves of bond0 and the driver for eth0 is loaded before the
+bonding driver, the interface for the IP address will be associated
+with the eth0 interface.  This configuration is shown below, the IP
+address 192.168.1.1 has an interface index of 2 which indexes to eth0
+in the ifDescr table (ifDescr.2).
 
-       This method will automatically take the address from the next slave
-       that will be added.
+     interfaces.ifTable.ifEntry.ifDescr.1 = lo
+     interfaces.ifTable.ifEntry.ifDescr.2 = eth0
+     interfaces.ifTable.ifEntry.ifDescr.3 = eth1
+     interfaces.ifTable.ifEntry.ifDescr.4 = eth2
+     interfaces.ifTable.ifEntry.ifDescr.5 = eth3
+     interfaces.ifTable.ifEntry.ifDescr.6 = bond0
+     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.10.10.10 = 5
+     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.1 = 2
+     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.74.20.94 = 4
+     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 = 1
 
-       To restore your slaves' MAC addresses, you need to detach them
-       from the bond (`ifenslave -d bond0 eth0'). The bonding driver will then
-       restore the MAC addresses that the slaves had before they were enslaved.
+       This problem is avoided by loading the bonding driver before
+any network drivers participating in a bond.  Below is an example of
+loading the bonding driver first, the IP address 192.168.1.1 is
+correctly associated with ifDescr.2.
 
-9.  Which transmit polices can be used?
+     interfaces.ifTable.ifEntry.ifDescr.1 = lo
+     interfaces.ifTable.ifEntry.ifDescr.2 = bond0
+     interfaces.ifTable.ifEntry.ifDescr.3 = eth0
+     interfaces.ifTable.ifEntry.ifDescr.4 = eth1
+     interfaces.ifTable.ifEntry.ifDescr.5 = eth2
+     interfaces.ifTable.ifEntry.ifDescr.6 = eth3
+     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.10.10.10 = 6
+     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.1 = 2
+     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.74.20.94 = 5
+     ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 = 1
 
-       Round-robin, based on the order of enslaving, the output device
-       is selected base on the next available slave. Regardless of
-       the source and/or destination of the packet.
+       While some distributions may not report the interface name in
+ifDescr, the association between the IP address and IfIndex remains
+and SNMP functions such as Interface_Scan_Next will report that
+association.
 
-       Active-backup policy that ensures that one and only one device will
-       transmit at any given moment. Active-backup policy is useful for
-       implementing high availability solutions using two hubs (see
-       section on High Availability).
+11. Promiscuous mode
+====================
 
-       XOR, based on (src hw addr XOR dst hw addr) % slave count. This
-       policy selects the same slave for each destination hw address.
+       When running network monitoring tools, e.g., tcpdump, it is
+common to enable promiscuous mode on the device, so that all traffic
+is seen (instead of seeing only traffic destined for the local host).
+The bonding driver handles promiscuous mode changes to the bonding
+master device (e.g., bond0), and propogates the setting to the slave
+devices.
+
+       For the balance-rr, balance-xor, broadcast, and 802.3ad modes,
+the promiscuous mode setting is propogated to all slaves.
+
+       For the active-backup, balance-tlb and balance-alb modes, the
+promiscuous mode setting is propogated only to the active slave.
+
+       For balance-tlb mode, the active slave is the slave currently
+receiving inbound traffic.
+
+       For balance-alb mode, the active slave is the slave used as a
+"primary."  This slave is used for mode-specific control traffic, for
+sending to peers that are unassigned or if the load is unbalanced.
+
+       For the active-backup, balance-tlb and balance-alb modes, when
+the active slave changes (e.g., due to a link failure), the
+promiscuous setting will be propogated to the new active slave.
+
+12. High Availability Information
+=================================
+
+       High Availability refers to configurations that provide
+maximum network availability by having redundant or backup devices,
+links and switches between the host and the rest of the world.
+
+       There are currently two basic methods for configuring to
+maximize availability. They are dependent on the network topology and
+the primary goal of the configuration, but in general, a configuration
+can be optimized for maximum available bandwidth, or for maximum
+network availability.
+
+12.1 High Availability in a Single Switch Topology
+--------------------------------------------------
+
+       If two hosts (or a host and a switch) are directly connected
+via multiple physical links, then there is no network availability
+penalty for optimizing for maximum bandwidth: there is only one switch
+(or peer), so if it fails, you have no alternative access to fail over
+to.
 
-       Broadcast policy transmits everything on all slave interfaces.
+Example 1 : host to switch (or other host)
 
-       802.3ad, based on XOR but distributes traffic among all interfaces
-       in the active aggregator.
+          +----------+                          +----------+
+          |          |eth0                  eth0|  switch  |
+          | Host A   +--------------------------+    or    |
+          |          +--------------------------+  other   |
+          |          |eth1                  eth1|  host    |
+          +----------+                          +----------+
 
-       Transmit load balancing (balance-tlb) balances the traffic
-       according to the current load on each slave. The balancing is
-       clients based and the least loaded slave is selected for each new
-       client. The load of each slave is calculated relative to its speed
-       and enables load balancing in mixed speed teams.
 
-       Adaptive load balancing (balance-alb) uses the Transmit load
-       balancing for the transmit load. The receive load is balanced only
-       among the group of highest speed active slaves in the bond. The
-       load is distributed with round-robin i.e. next available slave in
-       the high speed group of active slaves.
+12.1.1 Bonding Mode Selection for single switch topology
+--------------------------------------------------------
 
-High Availability
-=================
+       This configuration is the easiest to set up and to understand,
+although you will have to decide which bonding mode best suits your
+needs.  The tradeoffs for each mode are detailed below:
+
+balance-rr: This mode is the only mode that will permit a single
+       TCP/IP connection to stripe traffic across multiple
+       interfaces. It is therefore the only mode that will allow a
+       single TCP/IP stream to utilize more than one interface's
+       worth of throughput.  This comes at a cost, however: the
+       striping often results in peer systems receiving packets out
+       of order, causing TCP/IP's congestion control system to kick
+       in, often by retransmitting segments.
+
+       It is possible to adjust TCP/IP's congestion limits by
+       altering the net.ipv4.tcp_reordering sysctl parameter.  The
+       usual default value is 3, and the maximum useful value is 127.
+       For a four interface balance-rr bond, expect that a single
+       TCP/IP stream will utilize no more than approximately 2.3
+       interface's worth of throughput, even after adjusting
+       tcp_reordering.
+
+       If you are utilizing protocols other than TCP/IP, UDP for
+       example, and your application can tolerate out of order
+       delivery, then this mode can allow for single stream datagram
+       performance that scales near linearly as interfaces are added
+       to the bond.
+
+       This mode requires the switch to have the appropriate ports
+       configured for "etherchannel" or "trunking."
+
+active-backup: There is not much advantage in this network topology to
+       the active-backup mode, as the inactive backup devices are all
+       connected to the same peer as the primary.  In this case, a
+       load balancing mode (with link monitoring) will provide the
+       same level of network availability, but with increased
+       available bandwidth.  On the plus side, it does not require
+       any configuration of the switch.
+
+balance-xor: This mode will limit traffic such that packets destined
+       for specific peers will always be sent over the same
+       interface.  Since the destination is determined by the MAC
+       addresses involved, this may be desirable if you have a large
+       network with many hosts.  It is likely to be suboptimal if all
+       your traffic is passed through a single router, however.  As
+       with balance-rr, the switch ports need to be configured for
+       "etherchannel" or "trunking."
+
+broadcast: Like active-backup, there is not much advantage to this
+       mode in this type of network topology.
+
+802.3ad: This mode can be a good choice for this type of network
+       topology.  The 802.3ad mode is an IEEE standard, so all peers
+       that implement 802.3ad should interoperate well.  The 802.3ad
+       protocol includes automatic configuration of the aggregates,
+       so minimal manual configuration of the switch is needed
+       (typically only to designate that some set of devices is
+       usable for 802.3ad).  The 802.3ad standard also mandates that
+       frames be delivered in order (within certain limits), so in
+       general single connections will not see misordering of
+       packets.  The 802.3ad mode does have some drawbacks: the
+       standard mandates that all devices in the aggregate operate at
+       the same speed and duplex.  Also, as with all bonding load
+       balance modes other than balance-rr, no single connection will
+       be able to utilize more than a single interface's worth of
+       bandwidth.  Additionally, the linux bonding 802.3ad
+       implementation distributes traffic by peer (using an XOR of
+       MAC addresses), so in general all traffic to a particular
+       destination will use the same interface.  Finally, the 802.3ad
+       mode mandates the use of the MII monitor, therefore, the ARP
+       monitor is not available in this mode.
+
+balance-tlb: This mode is also a good choice for this type of
+       topology.  It has no special switch configuration
+       requirements, and balances outgoing traffic by peer, in a
+       vaguely intelligent manner (not a simple XOR as in balance-xor
+       or 802.3ad mode), so that unlucky MAC addresses will not all
+       "bunch up" on a single interface.  Interfaces may be of
+       differing speeds.  On the down side, in this mode all incoming
+       traffic arrives over a single interface, this mode requires
+       certain ethtool support in the network device driver of the
+       slave interfaces, and the ARP monitor is not available.
+
+balance-alb: This mode is everything that balance-tlb is, and more. It
+       has all of the features (and restrictions) of balance-tlb, and
+       will also balance incoming traffic from peers (as described in
+       the Bonding Module Options section, above).  The only extra
+       down side to this mode is that the network device driver must
+       support changing the hardware address while the device is
+       open.
+
+12.1.2 Link Monitoring for Single Switch Topology
+-------------------------------------------------
+
+       The choice of link monitoring may largely depend upon which
+mode you choose to use.  The more advanced load balancing modes do not
+support the use of the ARP monitor, and are thus restricted to using
+the MII monitor (which does not provide as high a level of assurance
+as the ARP monitor).
+
+
+12.2 High Availability in a Multiple Switch Topology
+----------------------------------------------------
+
+       With multiple switches, the configuration of bonding and the
+network changes dramatically.  In multiple switch topologies, there is
+a tradeoff between network availability and usable bandwidth.
 
-To implement high availability using the bonding driver, the driver needs to be
-compiled as a module, because currently it is the only way to pass parameters
-to the driver. This may change in the future.
-
-High availability is achieved by using MII or ETHTOOL status reporting. You
-need to verify that all your interfaces support MII or ETHTOOL link status
-reporting.  On Linux kernel 2.2.17, all the 100 Mbps capable drivers and
-yellowfin gigabit driver support MII. To determine if ETHTOOL link reporting
-is available for interface eth0, type "ethtool eth0" and the "Link detected:"
-line should contain the correct link status. If your system has an interface
-that does not support MII or ETHTOOL status reporting, a failure of its link
-will not be detected! A message indicating MII and ETHTOOL is not supported by
-a network driver is logged when the bonding driver is loaded with a non-zero
-miimon value.
-
-The bonding driver can regularly check all its slaves links using the ETHTOOL
-IOCTL (ETHTOOL_GLINK command) or by checking the MII status registers. The
-check interval is specified by the module argument "miimon" (MII monitoring).
-It takes an integer that represents the checking time in milliseconds. It
-should not come to close to (1000/HZ) (10 milli-seconds on i386) because it
-may then reduce the system interactivity. A value of 100 seems to be a good
-starting point. It means that a dead link will be detected at most 100
-milli-seconds after it goes down.
-
-Example:
-
-   # modprobe bonding miimon=100
-
-Or, put the following line in /etc/modprobe.conf:
-
-   options bond0 miimon=100
-
-There are currently two policies for high availability. They are dependent on
-whether:
-
-   a) hosts are connected to a single host or switch that support trunking
-
-   b) hosts are connected to several different switches or a single switch that
-      does not support trunking
-
-
-1) High Availability on a single switch or host - load balancing
-----------------------------------------------------------------
-It is the easiest to set up and to understand. Simply configure the
-remote equipment (host or switch) to aggregate traffic over several
-ports (Trunk, EtherChannel, etc.) and configure the bonding interfaces.
-If the module has been loaded with the proper MII option, it will work
-automatically. You can then try to remove and restore different links
-and see in your logs what the driver detects. When testing, you may
-encounter problems on some buggy switches that disable the trunk for a
-long time if all ports in a trunk go down. This is not Linux, but really
-the switch (reboot it to ensure).
+       Below is a sample network, configured to maximize the
+availability of the network:
 
-Example 1 : host to host at twice the speed
+                |                                     |
+                |port3                           port3|
+          +-----+----+                          +-----+----+
+          |          |port2       ISL      port2|          |
+          | switch A +--------------------------+ switch B |
+          |          |                          |          |
+          +-----+----+                          +-----++---+
+                |port1                           port1|
+                |             +-------+               |
+                +-------------+ host1 +---------------+
+                         eth0 +-------+ eth1
 
-          +----------+                          +----------+
-          |          |eth0                  eth0|          |
-          | Host A   +--------------------------+  Host B  |
-          |          +--------------------------+          |
-          |          |eth1                  eth1|          |
-          +----------+                          +----------+
+       In this configuration, there is a link between the two
+switches (ISL, or inter switch link), and multiple ports connecting to
+the outside world ("port3" on each switch).  There is no technical
+reason that this could not be extended to a third switch.
+
+12.2.1 Bonding Mode Selection for Multiple Switch Topology
+----------------------------------------------------------
+
+       In a topology such as this, the active-backup and broadcast
+modes are the only useful bonding modes; the other modes require all
+links to terminate on the same peer for them to behave rationally.
+
+active-backup: This is generally the preferred mode, particularly if
+       the switches have an ISL and play together well.  If the
+       network configuration is such that one switch is specifically
+       a backup switch (e.g., has lower capacity, higher cost, etc),
+       then the primary option can be used to insure that the
+       preferred link is always used when it is available.
+
+broadcast: This mode is really a special purpose mode, and is suitable
+       only for very specific needs.  For example, if the two
+       switches are not connected (no ISL), and the networks beyond
+       them are totally independant.  In this case, if it is
+       necessary for some specific one-way traffic to reach both
+       independent networks, then the broadcast mode may be suitable.
+
+12.2.2 Link Monitoring Selection for Multiple Switch Topology
+-------------------------------------------------------------
+
+       The choice of link monitoring ultimately depends upon your
+switch.  If the switch can reliably fail ports in response to other
+failures, then either the MII or ARP monitors should work.  For
+example, in the above example, if the "port3" link fails at the remote
+end, the MII monitor has no direct means to detect this.  The ARP
+monitor could be configured with a target at the remote end of port3,
+thus detecting that failure without switch support.
+
+       In general, however, in a multiple switch topology, the ARP
+monitor can provide a higher level of reliability in detecting link
+failures.  Additionally, it should be configured with multiple targets
+(at least one for each switch in the network).  This will insure that,
+regardless of which switch is active, the ARP monitor has a suitable
+target to query.
+
+
+12.3 Switch Behavior Issues for High Availability
+-------------------------------------------------
+
+       You may encounter issues with the timing of link up and down
+reporting by the switch.
+
+       First, when a link comes up, some switches may indicate that
+the link is up (carrier available), but not pass traffic over the
+interface for some period of time.  This delay is typically due to
+some type of autonegotiation or routing protocol, but may also occur
+during switch initialization (e.g., during recovery after a switch
+failure).  If you find this to be a problem, specify an appropriate
+value to the updelay bonding module option to delay the use of the
+relevant interface(s).
+
+       Second, some switches may "bounce" the link state one or more
+times while a link is changing state.  This occurs most commonly while
+the switch is initializing.  Again, an appropriate updelay value may
+help, but note that if all links are down, then updelay is ignored
+when any link becomes active (the slave closest to completing its
+updelay is chosen).
+
+       Note that when a bonding interface has no active links, the
+driver will immediately reuse the first link that goes up, even if
+updelay parameter was specified.  If there are slave interfaces
+waiting for the updelay timeout to expire, the interface that first
+went into that state will be immediately reused.  This reduces down
+time of the network if the value of updelay has been overestimated.
+
+       In addition to the concerns about switch timings, if your
+switches take a long time to go into backup mode, it may be desirable
+to not activate a backup interface immediately after a link goes down.
+Failover may be delayed via the downdelay bonding module option.
+
+13. Hardware Specific Considerations
+====================================
+
+       This section contains additional information for configuring
+bonding on specific hardware platforms, or for interfacing bonding
+with particular switches or other devices.
+
+13.1 IBM BladeCenter
+--------------------
+
+       This applies to the JS20 and similar systems.
+
+       On the JS20 blades, the bonding driver supports only
+balance-rr, active-backup, balance-tlb and balance-alb modes.  This is
+largely due to the network topology inside the BladeCenter, detailed
+below.
+
+JS20 network adapter information
+--------------------------------
+
+       All JS20s come with two Broadcom Gigabit Ethernet ports
+integrated on the planar.  In the BladeCenter chassis, the eth0 port
+of all JS20 blades is hard wired to I/O Module #1; similarly, all eth1
+ports are wired to I/O Module #2.  An add-on Broadcom daughter card
+can be installed on a JS20 to provide two more Gigabit Ethernet ports.
+These ports, eth2 and eth3, are wired to I/O Modules 3 and 4,
+respectively.
+
+       Each I/O Module may contain either a switch or a passthrough
+module (which allows ports to be directly connected to an external
+switch).  Some bonding modes require a specific BladeCenter internal
+network topology in order to function; these are detailed below.
 
-  On each host :
-     # modprobe bonding miimon=100
-     # ifconfig bond0 addr
-     # ifenslave bond0 eth0 eth1
+       Additional BladeCenter-specific networking information can be
+found in two IBM Redbooks (www.ibm.com/redbooks):
 
-Example 2 : host to switch at twice the speed
+"IBM eServer BladeCenter Networking Options"
+"IBM eServer BladeCenter Layer 2-7 Network Switching"
 
-          +----------+                          +----------+
-          |          |eth0                 port1|          |
-          | Host A   +--------------------------+  switch  |
-          |          +--------------------------+          |
-          |          |eth1                 port2|          |
-          +----------+                          +----------+
+BladeCenter networking configuration
+------------------------------------
 
-  On host A :                             On the switch :
-     # modprobe bonding miimon=100           # set up a trunk on port1
-     # ifconfig bond0 addr                     and port2
-     # ifenslave bond0 eth0 eth1
+       Because a BladeCenter can be configured in a very large number
+of ways, this discussion will be confined to describing basic
+configurations.
+
+       Normally, Ethernet Switch Modules (ESM) are used in I/O
+modules 1 and 2.  In this configuration, the eth0 and eth1 ports of a
+JS20 will be connected to different internal switches (in the
+respective I/O modules).
+
+       An optical passthru module (OPM) connects the I/O module
+directly to an external switch.  By using OPMs in I/O module #1 and
+#2, the eth0 and eth1 interfaces of a JS20 can be redirected to the
+outside world and connected to a common external switch.
+
+       Depending upon the mix of ESM and OPM modules, the network
+will appear to bonding as either a single switch topology (all OPM
+modules) or as a multiple switch topology (one or more ESM modules,
+zero or more OPM modules).  It is also possible to connect ESM modules
+together, resulting in a configuration much like the example in "High
+Availability in a multiple switch topology."
+
+Requirements for specifc modes
+------------------------------
+
+       The balance-rr mode requires the use of OPM modules for
+devices in the bond, all connected to an common external switch.  That
+switch must be configured for "etherchannel" or "trunking" on the
+appropriate ports, as is usual for balance-rr.
+
+       The balance-alb and balance-tlb modes will function with
+either switch modules or passthrough modules (or a mix).  The only
+specific requirement for these modes is that all network interfaces
+must be able to reach all destinations for traffic sent over the
+bonding device (i.e., the network must converge at some point outside
+the BladeCenter).
+
+       The active-backup mode has no additional requirements.
+
+Link monitoring issues
+----------------------
+
+       When an Ethernet Switch Module is in place, only the ARP
+monitor will reliably detect link loss to an external switch.  This is
+nothing unusual, but examination of the BladeCenter cabinet would
+suggest that the "external" network ports are the ethernet ports for
+the system, when it fact there is a switch between these "external"
+ports and the devices on the JS20 system itself.  The MII monitor is
+only able to detect link failures between the ESM and the JS20 system.
+
+       When a passthrough module is in place, the MII monitor does
+detect failures to the "external" port, which is then directly
+connected to the JS20 system.
+
+Other concerns
+--------------
+
+       The Serial Over LAN link is established over the primary
+ethernet (eth0) only, therefore, any loss of link to eth0 will result
+in losing your SoL connection.  It will not fail over with other
+network traffic.
+
+       It may be desirable to disable spanning tree on the switch
+(either the internal Ethernet Switch Module, or an external switch) to
+avoid fail-over delays issues when using bonding.
+
+       
+14. Frequently Asked Questions
+==============================
 
+1.  Is it SMP safe?
 
-2) High Availability on two or more switches (or a single switch without
-   trunking support)
----------------------------------------------------------------------------
-This mode is more problematic because it relies on the fact that there
-are multiple ports and the host's MAC address should be visible on one
-port only to avoid confusing the switches.
+       Yes. The old 2.0.xx channel bonding patch was not SMP safe.
+The new driver was designed to be SMP safe from the start.
 
-If you need to know which interface is the active one, and which ones are
-backup, use ifconfig. All backup interfaces have the NOARP flag set.
+2.  What type of cards will work with it?
 
-To use this mode, pass "mode=1" to the module at load time :
+       Any Ethernet type cards (you can even mix cards - a Intel
+EtherExpress PRO/100 and a 3com 3c905b, for example).  They need not
+be of the same speed.
 
-    # modprobe bonding miimon=100 mode=active-backup
+3.  How many bonding devices can I have?
 
-       or:
+       There is no limit.
 
-    # modprobe bonding miimon=100 mode=1
+4.  How many slaves can a bonding device have?
 
-Or, put in your /etc/modprobe.conf :
+       This is limited only by the number of network interfaces Linux
+supports and/or the number of network cards you can place in your
+system.
 
-    options bond0 miimon=100 mode=active-backup
+5.  What happens when a slave link dies?
 
-Example 1: Using multiple host and multiple switches to build a "no single
-point of failure" solution.
+       If link monitoring is enabled, then the failing device will be
+disabled.  The active-backup mode will fail over to a backup link, and
+other modes will ignore the failed link.  The link will continue to be
+monitored, and should it recover, it will rejoin the bond (in whatever
+manner is appropriate for the mode). See the section on High
+Availability for additional information.
+       
+       Link monitoring can be enabled via either the miimon or
+arp_interval paramters (described in the module paramters section,
+above).  In general, miimon monitors the carrier state as sensed by
+the underlying network device, and the arp monitor (arp_interval)
+monitors connectivity to another host on the local network.
+
+       If no link monitoring is configured, the bonding driver will
+be unable to detect link failures, and will assume that all links are
+always available.  This will likely result in lost packets, and a
+resulting degredation of performance.  The precise performance loss
+depends upon the bonding mode and network configuration.
 
+6.  Can bonding be used for High Availability?
 
-                |                                     |
-                |port3                           port3|
-          +-----+----+                          +-----+----+
-          |          |port7       ISL      port7|          |
-          | switch A +--------------------------+ switch B |
-          |          +--------------------------+          |
-          |          |port8                port8|          |
-          +----++----+                          +-----++---+
-          port2||port1                           port1||port2
-               ||             +-------+               ||
-               |+-------------+ host1 +---------------+|
-               |         eth0 +-------+ eth1           |
-               |                                       |
-               |              +-------+                |
-               +--------------+ host2 +----------------+
-                         eth0 +-------+ eth1
+       Yes.  See the section on High Availability for details.
 
-In this configuration, there is an ISL - Inter Switch Link (could be a trunk),
-several servers (host1, host2 ...) attached to both switches each, and one or
-more ports to the outside world (port3...). One and only one slave on each host
-is active at a time, while all links are still monitored (the system can
-detect a failure of active and backup links).
-
-Each time a host changes its active interface, it sticks to the new one until
-it goes down. In this example, the hosts are negligibly affected by the
-expiration time of the switches' forwarding tables.
-
-If host1 and host2 have the same functionality and are used in load balancing
-by another external mechanism, it is good to have host1's active interface
-connected to one switch and host2's to the other. Such system will survive
-a failure of a single host, cable, or switch. The worst thing that may happen
-in the case of a switch failure is that half of the hosts will be temporarily
-unreachable until the other switch expires its tables.
+7.  Which switches/systems does it work with?
 
-Example 2: Using multiple ethernet cards connected to a switch to configure
-           NIC failover (switch is not required to support trunking).
+       The full answer to this depends upon the desired mode.
 
+       In the basic balance modes (balance-rr and balance-xor), it
+works with any system that supports etherchannel (also called
+trunking).  Most managed switches currently available have such
+support, and many unmananged switches as well.
+
+       The advanced balance modes (balance-tlb and balance-alb) do
+not have special switch requirements, but do need device drivers that
+support specific features (described in the appropriate section under
+module paramters, above).
+
+       In 802.3ad mode, it works with with systems that support IEEE
+802.3ad Dynamic Link Aggregation.  Most managed and many unmanaged
+switches currently available support 802.3ad.
 
-          +----------+                          +----------+
-          |          |eth0                 port1|          |
-          | Host A   +--------------------------+  switch  |
-          |          +--------------------------+          |
-          |          |eth1                 port2|          |
-          +----------+                          +----------+
+        The active-backup mode should work with any Layer-II switch.
 
-  On host A :                                 On the switch :
-     # modprobe bonding miimon=100 mode=1     # (optional) minimize the time
-     # ifconfig bond0 addr                    # for table expiration
-     # ifenslave bond0 eth0 eth1
+8.  Where does a bonding device get its MAC address from?
 
-Each time the host changes its active interface, it sticks to the new one until
-it goes down. In this example, the host is strongly affected by the expiration
-time of the switch forwarding table.
+       If not explicitly configured with ifconfig, the MAC address of
+the bonding device is taken from its first slave device. This MAC
+address is then passed to all following slaves and remains persistent
+(even if the the first slave is removed) until the bonding device is
+brought down or reconfigured.
+
+       If you wish to change the MAC address, you can set it with
+ifconfig:
+
+# ifconfig bond0 hw ether 00:11:22:33:44:55
+
+       The MAC address can be also changed by bringing down/up the
+device and then changing its slaves (or their order):
+
+# ifconfig bond0 down ; modprobe -r bonding
+# ifconfig bond0 .... up
+# ifenslave bond0 eth...
 
+       This method will automatically take the address from the next
+slave that is added.
 
-3) Adapting to your switches' timing
-------------------------------------
-If your switches take a long time to go into backup mode, it may be
-desirable not to activate a backup interface immediately after a link goes
-down. It is possible to delay the moment at which a link will be
-completely disabled by passing the module parameter "downdelay" (in
-milliseconds, must be a multiple of miimon).
-
-When a switch reboots, it is possible that its ports report "link up" status
-before they become usable. This could fool a bond device by causing it to
-use some ports that are not ready yet. It is possible to delay the moment at
-which an active link will be reused by passing the module parameter "updelay"
-(in milliseconds, must be a multiple of miimon).
-
-A similar situation can occur when a host re-negotiates a lost link with the
-switch (a case of cable replacement).
-
-A special case is when a bonding interface has lost all slave links. Then the
-driver will immediately reuse the first link that goes up, even if updelay
-parameter was specified. (If there are slave interfaces in the "updelay" state,
-the interface that first went into that state will be immediately reused.) This
-allows to reduce down-time if the value of updelay has been overestimated.
-
-Examples :
-
-    # modprobe bonding miimon=100 mode=1 downdelay=2000 updelay=5000
-    # modprobe bonding miimon=100 mode=balance-rr downdelay=0 updelay=5000
-
-
-Promiscuous Sniffing notes
-==========================
-
-If you wish to bond channels together for a network sniffing
-application --- you wish to run tcpdump, or ethereal, or an IDS like
-snort, with its input aggregated from multiple interfaces using the
-bonding driver --- then you need to handle the Promiscuous interface
-setting by hand. Specifically, when you "ifconfing bond0 up" you
-must add the promisc flag there; it will be propagated down to the
-slave interfaces at ifenslave time; a full example might look like:
-
-   ifconfig bond0 promisc up
-   for if in eth1 eth2 ...;do
-       ifconfig $if up
-       ifenslave bond0 $if
-   done
-   snort ... -i bond0 ...
-
-Ifenslave also wants to propagate addresses from interface to
-interface, appropriately for its design functions in HA and channel
-capacity aggregating; but it works fine for unnumbered interfaces;
-just ignore all the warnings it emits.
+       To restore your slaves' MAC addresses, you need to detach them
+from the bond (`ifenslave -d bond0 eth0'). The bonding driver will
+then restore the MAC addresses that the slaves had before they were
+enslaved.
 
+15. Resources and Links
+=======================
 
-8021q VLAN support
-==================
+The latest version of the bonding driver can be found in the latest
+version of the linux kernel, found on http://kernel.org
 
-It is possible to configure VLAN devices over a bond interface using the 8021q
-driver. However, only packets coming from the 8021q driver and passing through
-bonding will be tagged by default. Self generated packets, like bonding's
-learning packets or ARP packets generated by either ALB mode or the ARP
-monitor mechanism, are tagged internally by bonding itself. As a result,
-bonding has to "learn" what VLAN IDs are configured on top of it, and it uses
-those IDs to tag self generated packets.
-
-For simplicity reasons, and to support the use of adapters that can do VLAN
-hardware acceleration offloding, the bonding interface declares itself as
-fully hardware offloaing capable, it gets the add_vid/kill_vid notifications
-to gather the necessary information, and it propagates those actions to the
-slaves.
-In case of mixed adapter types, hardware accelerated tagged packets that should
-go through an adapter that is not offloading capable are "un-accelerated" by 
the
-bonding driver so the VLAN tag sits in the regular location.
-
-VLAN interfaces *must* be added on top of a bonding interface only after
-enslaving at least one slave. This is because until the first slave is added 
the
-bonding interface has a HW address of 00:00:00:00:00:00, which will be copied 
by
-the VLAN interface when it is created.
-
-Notice that a problem would occur if all slaves are released from a bond that
-still has VLAN interfaces on top of it. When later coming to add new slaves, 
the
-bonding interface would get a HW address from the first slave, which might not
-match that of the VLAN interfaces. It is recommended that either all VLANs are
-removed and then re-added, or to manually set the bonding interface's HW
-address so it matches the VLAN's. (Note: changing a VLAN interface's HW address
-would set the underlying device -- i.e. the bonding interface -- to promiscouos
-mode, which might not be what you want).
-
-
-Limitations
-===========
-The main limitations are :
-  - only the link status is monitored. If the switch on the other side is
-    partially down (e.g. doesn't forward anymore, but the link is OK), the link
-    won't be disabled. Another way to check for a dead link could be to count
-    incoming frames on a heavily loaded host. This is not applicable to small
-    servers, but may be useful when the front switches send multicast
-    information on their links (e.g. VRRP), or even health-check the servers.
-    Use the arp_interval/arp_ip_target parameters to count incoming/outgoing
-    frames.
+Discussions regarding the bonding driver take place primarily on the
+bonding-devel mailing list, hosted at sourceforge.net.  If you have
+questions or problems, post them to the list.
 
+bonding-devel@lists.sourceforge.net
 
+https://lists.sourceforge.net/lists/listinfo/bonding-devel
 
-Resources and Links
-===================
+There is also a project site on sourceforge.
 
-Current development on this driver is posted to:
- - http://www.sourceforge.net/projects/bonding/
+http://www.sourceforge.net/projects/bonding
 
 Donald Becker's Ethernet Drivers and diag programs may be found at :
  - http://www.scyld.com/network/
 
-You will also find a lot of information regarding Ethernet, NWay, MII, etc. at
-www.scyld.com.
-
-Patches for 2.2 kernels are at Willy Tarreau's site :
- - http://wtarreau.free.fr/pub/bonding/
- - http://www-miaif.lip6.fr/~tarreau/pub/bonding/
-
-To get latest informations about Linux Kernel development, please consult
-the Linux Kernel Mailing List Archives at :
-   http://www.ussg.iu.edu/hypermail/linux/kernel/
+You will also find a lot of information regarding Ethernet, NWay, MII,
+etc. at www.scyld.com.
 
 -- END --
diff -urN linux/Documentation/networking/e100.txt 
linux/Documentation/networking/e100.txt
--- linux/Documentation/networking/e100.txt     2005/01/13 14:05:16     1.7
+++ linux/Documentation/networking/e100.txt     2005/03/18 17:36:44     1.8
@@ -140,8 +140,7 @@
   NAPI
   ----
 
-  NAPI (Rx polling mode) is supported in the e100 driver. NAPI is enabled
-  or disabled based on the configuration of the kernel. 
+  NAPI (Rx polling mode) is supported in the e100 driver.
 
   See www.cyberus.ca/~hadi/usenix-paper.tgz for more information on NAPI.
 
diff -urN linux/Documentation/networking/ixgb.txt 
linux/Documentation/networking/ixgb.txt
--- linux/Documentation/networking/ixgb.txt     2004/11/15 11:49:13     1.2
+++ linux/Documentation/networking/ixgb.txt     2005/03/18 17:36:44     1.3
@@ -1,7 +1,7 @@
 Linux* Base Driver for the Intel(R) PRO/10GbE Family of Adapters
 ================================================================
 
-September 13, 2004
+November 17, 2004
 
 
 Contents
@@ -18,8 +18,7 @@
 ===============
 
 This file describes the Linux* Base Driver for the Intel(R) PRO/10GbE Family 
-of Adapters, version 1.0.x.  This driver includes support for Itanium(TM)2 and
-EM64T systems.
+of Adapters, version 1.0.x.  
 
 For questions related to hardware requirements, refer to the documentation 
 supplied with your Intel PRO/10GbE adapter. All hardware requirements listed 
@@ -71,8 +70,8 @@
     Ethernet PAUSE frames.
 
 RxDescriptors
-Valid Range: 64-4096
-Default Value: 1024
+Valid Range: 64-512
+Default Value: 512
     This value is the number of receive descriptors allocated by the driver. 
     Increasing this value allows the driver to buffer more incoming packets. 
     Each descriptor is 16 bytes.  A receive buffer is also allocated for 
diff -urN linux/Documentation/parisc/00-INDEX 
linux/Documentation/parisc/00-INDEX
--- linux/Documentation/parisc/00-INDEX 2001/01/10 05:27:25     1.1
+++ linux/Documentation/parisc/00-INDEX 2005/03/18 17:36:44     1.2
@@ -1,10 +1,6 @@
 00-INDEX
        - this file.
-IODC.txt
-       - Documentation IODC
 debugging
        - some debugging hints for real-mode code
-mm
-       - Documentation on parisc mm status
 registers
        - current/planned usage of registers
diff -urN linux/Documentation/power/video.txt 
linux/Documentation/power/video.txt
--- linux/Documentation/power/video.txt 2004/10/25 20:44:09     1.5
+++ linux/Documentation/power/video.txt 2005/03/18 17:36:44     1.6
@@ -1,7 +1,7 @@
 
                Video issues with S3 resume
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                 2003-2004, Pavel Machek
+                 2003-2005, Pavel Machek
 
 During S3 resume, hardware needs to be reinitialized. For most
 devices, this is easy, and kernel driver knows how to do
@@ -11,33 +11,160 @@
 driver -- vesafb and vgacon are widely used).
 
 This is not problem for swsusp, because during swsusp resume, BIOS is
-run normally so video card is normally initialized.
+run normally so video card is normally initialized. S3 has absolutely
+no chance of working with SMP/HT. Be sure it to turn it off before
+testing (swsusp should work ok, OTOH).
 
-There are three types of systems where video works after S3 resume:
+There are a few types of systems where video works after S3 resume:
 
-* systems where video state is preserved over S3. (Athlon HP Omnibook xe3s)
+(1) systems where video state is preserved over S3.
 
-* systems where it is possible to call video bios during S3
-  resume. Unfortunately, it is not correct to call video BIOS at that
-  point, but it happens to work on some machines. Use
-  acpi_sleep=s3_bios (Athlon64 desktop system)
+(2) systems where it is possible to call the video BIOS during S3
+  resume. Unfortunately, it is not correct to call the video BIOS at
+  that point, but it happens to work on some machines. Use
+  acpi_sleep=s3_bios.
 
-* systems that initialize video card into vga text mode and where BIOS
-  works well enough to be able to set video mode. Use
-  acpi_sleep=s3_mode on these. (Toshiba 4030cdt)
+(3) systems that initialize video card into vga text mode and where
+  the BIOS works well enough to be able to set video mode. Use
+  acpi_sleep=s3_mode on these.
 
-* on some systems s3_bios kicks video into text mode, and
-  acpi_sleep=s3_bios,s3_mode is needed (Toshiba Satellite P10-554)
+(4) on some systems s3_bios kicks video into text mode, and
+  acpi_sleep=s3_bios,s3_mode is needed.
 
-* radeon systems, where X can soft-boot your video card. You'll need
+(5) radeon systems, where X can soft-boot your video card. You'll need
   patched X, and plain text console (no vesafb or radeonfb), see
-  http://www.doesi.gmxhome.de/linux/tm800s3/s3.html. (Acer TM 800)
+  http://www.doesi.gmxhome.de/linux/tm800s3/s3.html. Actually you
+  should probably use vbetool (6) instead.
+
+(6) other radeon systems, where vbetool is enough to bring system back
+  to life. It needs text console to be working. Do vbetool vbestate
+  save > /tmp/delme; echo 3 > /proc/acpi/sleep; vbetool post; vbetool
+  vbestate restore < /tmp/delme; setfont <whatever>, and your video
+  should work.
+
+(7) on some systems, it is possible to boot most of kernel, and then
+  POSTing bios works. Ole Rohne has patch to do just that at
+  http://dev.gentoo.org/~marineam/patch-radeonfb-2.6.11-rc2-mm2.
 
 Now, if you pass acpi_sleep=something, and it does not work with your
-bios, you'll get hard crash during resume. Be carefull.
+bios, you'll get a hard crash during resume. Be careful. Also it is
+safest to do your experiments with plain old VGA console. The vesafb
+and radeonfb (etc) drivers have a tendency to crash the machine during
+resume.
 
-You may have system where none of above works. At that point you
+You may have a system where none of above works. At that point you
 either invent another ugly hack that works, or write proper driver for
 your video card (good luck getting docs :-(). Maybe suspending from X
 (proper X, knowing your hardware, not XF68_FBcon) might have better
 chance of working.
+
+Table of known working systems:
+
+Model                           hack (or "how to do it")
+------------------------------------------------------------------------------
+Acer Aspire 1406LC             ole's late BIOS init (7), turn off DRI
+Acer TM 242FX                  vbetool (6)
+Acer TM 4052LCi                        s3_bios (2)
+Acer TM 636Lci                 s3_bios vga=normal (2)
+Acer TM 650 (Radeon M7)                vga=normal plus boot-radeon (5) gets 
text console back
+Acer TM 660                    ??? (*)
+Acer TM 800                    vga=normal, X patches, see webpage (5)
+Arima W730a                    vbetool needed (6)
+Asus L2400D                     s3_mode (3)(***) (S1 also works OK)
+Asus L3800C (Radeon M7)                s3_bios (2) (S1 also works OK)
+Asus M6NE                      ??? (*)
+Athlon64 desktop prototype     s3_bios (2)
+Compal CL-50                   ??? (*)
+Compaq Armada E500 - P3-700     none (1) (S1 also works OK)
+Dell 600m, ATI R250 Lf         none (1), but needs xorg-x11-6.8.1.902-1
+Dell D600, ATI RV250            vga=normal (**), or try vbestate (6)
+Dell Inspiron 4000             ??? (*)
+Dell Inspiron 500m             ??? (*)
+Dell Inspiron 600m             ??? (*)
+Dell Inspiron 8200             ??? (*)
+Dell Inspiron 8500             ??? (*)
+Dell Inspiron 8600             ??? (*)
+eMachines athlon64 machines    vbetool needed (6) (someone please get me model 
#s)
+HP NC6000                      s3_bios, may not use radeonfb (2)
+HP NX7000                      ??? (*)
+HP Pavilion ZD7000             vbetool post needed, need open-source nv driver 
for X
+HP Omnibook XE3        athlon version  none (1)
+HP Omnibook XE3GC w/S3 Savage/IX-MV  none (1)
+IBM TP A31 / Type 2652-M5G      s3_mode (3) [works ok with BIOS 1.04 
2002-08-23, but not at all with BIOS 1.11 2004-11-05 :-(]
+IBM TP R32 / Type 2658-MMG      none (1)
+IBM TP R40 2722B3G             ??? (*)
+IBM TP R50p / Type 1832-22U     s3_bios (2)
+IBM TP R51                     ??? (*)
+IBM TP T30     236681A         ??? (*)
+IBM TP T40 / Type 2373-MU4      none (1)
+IBM TP T40p                    ??? (*)
+IBM TP T41p                    none (1)
+IBM TP T42                     ??? (*)
+IBM ThinkPad T42p (2373-GTG)   s3_bios (2)
+IBM TP X20                     ??? (*)
+IBM TP X30                     ??? (*)
+IBM TP X31 / Type 2672-XXH      none (1), use radeontool 
(http://fdd.com/software/radeon/) to turn off backlight.
+IBM TP X40                     ??? (*)
+Medion MD4220                  ??? (*)
+Samsung P35                    vbetool needed (6)
+Sharp PC-AR10 (ATI rage)       none (1)
+Sony Vaio PCG-F403             ??? (*)
+Sony Vaio PCG-N505SN           ??? (*)
+Sony Vaio vgn-s260             X or boot-radeon can init it (5)
+Toshiba Satellite 4030CDT      s3_mode (3)
+Toshiba Satellite 4080XCDT      s3_mode (3)
+Toshiba Satellite 4090XCDT      ??? (*)
+Toshiba Satellite P10-554       s3_bios,s3_mode (4)(****)
+Uniwill 244IIO                 ??? (*)
+
+
+(*) from http://www.ubuntulinux.org/wiki/HoaryPMResults, not sure
+    which options to use. If you know, please tell me.
+
+(**) Text console is "strange" after resume. Backlight is switched on again
+     by the X server. X server is:
+     | X Window System Version 6.8.1.904 (6.8.2 RC 4)
+     | Release Date: 2 February 2005
+     | X Protocol Version 11, Revision 0, Release 6.8.1.904
+     | Build Operating System: SuSE Linux [ELF] SuSE
+     as present in SUSE 9.3preview3.
+
+(***) To be tested with a newer kernel.
+
+(****) Not with SMP kernel, UP only.
+
+VBEtool details
+~~~~~~~~~~~~~~~
+(with thanks to Carl-Daniel Hailfinger)
+
+First, boot into X and run the following script ONCE:
+#!/bin/bash
+statedir=/root/s3/state
+mkdir -p $statedir
+chvt 2
+sleep 1
+vbetool vbestate save >$statedir/vbe
+
+
+To suspend and resume properly, call the following script as root:
+#!/bin/bash
+statedir=/root/s3/state
+curcons=`fgconsole`
+fuser /dev/tty$curcons 2>/dev/null|xargs ps -o comm= -p|grep -q X && chvt 2
+cat /dev/vcsa >$statedir/vcsa
+sync
+echo 3 >/proc/acpi/sleep
+sync
+vbetool post
+vbetool vbestate restore <$statedir/vbe
+cat $statedir/vcsa >/dev/vcsa
+rckbd restart
+chvt $[curcons%6+1]
+chvt $curcons
+
+
+Unless you change your graphics card or other hardware configuration,
+the state once saved will be OK for every resume afterwards.
+NOTE: The "rckbd restart" command may be different for your
+distribution. Simply replace it with the command you would use to
+set the fonts on screen.
diff -urN linux/Documentation/scsi/st.txt linux/Documentation/scsi/st.txt
--- linux/Documentation/scsi/st.txt     2004/04/12 20:23:21     1.6
+++ linux/Documentation/scsi/st.txt     2005/03/18 17:36:44     1.7
@@ -2,7 +2,7 @@
 The driver is currently maintained by Kai Mäkisara (email
 Kai.Makisara@kolumbus.fi)
 
-Last modified: Wed Feb 25 14:09:08 2004 by makisara
+Last modified: Mon Mar  7 21:14:44 2005 by kai.makisara
 
 
 BASICS
@@ -85,6 +85,9 @@
 optionally written. In both cases end of data is signified by
 returning zero bytes for two consecutive reads.
 
+If rewind, offline, bsf, or seek is done and previous tape operation was
+write, a filemark is written before moving tape.
+
 The compile options are defined in the file linux/drivers/scsi/st_options.h.
 
 4. If the open option O_NONBLOCK is used, open succeeds even if the
diff -urN linux/Documentation/scsi/sym53c8xx_2.txt 
linux/Documentation/scsi/sym53c8xx_2.txt
--- linux/Documentation/scsi/sym53c8xx_2.txt    2004/11/15 11:49:13     1.4
+++ linux/Documentation/scsi/sym53c8xx_2.txt    2005/03/18 17:36:44     1.5
@@ -440,7 +440,7 @@
 The following command will install the driver module with the same
 options as above.
 
-    modprobe sym53c8xx cmd_per_lun=4 sync=10 debug=0x200"
+    modprobe sym53c8xx cmd_per_lun=4 sync=10 debug=0x200
 
 10.2 Available arguments
 
diff -urN linux/Documentation/sound/alsa/VIA82xx-mixer.txt 
linux/Documentation/sound/alsa/VIA82xx-mixer.txt
--- linux/Documentation/sound/alsa/VIA82xx-mixer.txt    1970/01/01 00:00:00
+++ linux/Documentation/sound/alsa/VIA82xx-mixer.txt    Fri Mar 18 17:36:45 
2005        1.1
@@ -0,0 +1,8 @@
+
+                               VIA82xx mixer
+                               =============
+
+On many VIA82xx boards, the 'Input Source Select' mixer control does not work.
+Setting it to 'Input2' on such boards will cause recording to hang, or fail
+with EIO (input/output error) via OSS emulation.  This control should be left
+at 'Input1' for such cards.
diff -urN linux/Documentation/sound/alsa/hda_codec.txt 
linux/Documentation/sound/alsa/hda_codec.txt
--- linux/Documentation/sound/alsa/hda_codec.txt        1970/01/01 00:00:00
+++ linux/Documentation/sound/alsa/hda_codec.txt        Fri Mar 18 17:36:45 
2005        1.1
@@ -0,0 +1,299 @@
+Notes on Universal Interface for Intel High Definition Audio Codec
+------------------------------------------------------------------
+
+Takashi Iwai <tiwai@suse.de>
+
+
+[Still a draft version]
+
+
+General
+=======
+
+The snd-hda-codec module supports the generic access function for the
+High Definition (HD) audio codecs.  It's designed to be independent
+from the controller code like ac97 codec module.  The real accessors
+from/to the controller must be implemented in the lowlevel driver.
+
+The structure of this module is similar with ac97_codec module.
+Each codec chip belongs to a bus class which communicates with the
+controller.
+
+
+Initialization of Bus Instance
+==============================
+
+The card driver has to create struct hda_bus at first.  The template
+struct should be filled and passed to the constructor:
+
+struct hda_bus_template {
+       void *private_data;
+       struct pci_dev *pci;
+       const char *modelname;
+       struct hda_bus_ops ops;
+};
+
+The card driver can set and use the private_data field to retrieve its
+own data in callback functions.  The pci field is used when the patch
+needs to check the PCI subsystem IDs, so on.  For non-PCI system, it
+doesn't have to be set, of course.
+The modelname field specifies the board's specific configuration.  The
+string is passed to the codec parser, and it depends on the parser how
+the string is used.
+These fields, private_data, pci and modelname are all optional.
+
+The ops field contains the callback functions as the following:
+
+struct hda_bus_ops {
+       int (*command)(struct hda_codec *codec, hda_nid_t nid, int direct,
+                      unsigned int verb, unsigned int parm);
+       unsigned int (*get_response)(struct hda_codec *codec);
+       void (*private_free)(struct hda_bus *);
+};
+
+The command callback is called when the codec module needs to send a
+VERB to the controller.  It's always a single command.
+The get_response callback is called when the codec requires the answer
+for the last command.  These two callbacks are mandatory and have to
+be given.
+The last, private_free callback, is optional.  It's called in the
+destructor to release any necessary data in the lowlevel driver.
+
+The bus instance is created via snd_hda_bus_new().  You need to pass
+the card instance, the template, and the pointer to store the
+resultant bus instance.
+
+int snd_hda_bus_new(snd_card_t *card, const struct hda_bus_template *temp,
+                   struct hda_bus **busp);
+
+It returns zero if successful.  A negative return value means any
+error during creation.
+
+
+Creation of Codec Instance
+==========================
+
+Each codec chip on the board is then created on the BUS instance.
+To create a codec instance, call snd_hda_codec_new().
+
+int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
+                     struct hda_codec **codecp);
+
+The first argument is the BUS instance, the second argument is the
+address of the codec, and the last one is the pointer to store the
+resultant codec instance (can be NULL if not needed).
+
+The codec is stored in a linked list of bus instance.  You can follow
+the codec list like:
+
+       struct list_head *p;
+       struct hda_codec *codec;
+       list_for_each(p, &bus->codec_list) {
+               codec = list_entry(p, struct hda_codec, list);
+               ...
+       }
+
+The codec isn't initialized at this stage properly.  The
+initialization sequence is called when the controls are built later.
+
+
+Codec Access
+============
+
+To access codec, use snd_codec_read() and snd_codec_write().
+snd_hda_param_read() is for reading parameters.
+For writing a sequence of verbs, use snd_hda_sequence_write().
+
+To retrieve the number of sub nodes connected to the given node, use
+snd_hda_get_sub_nodes().  The connection list can be obtained via
+snd_hda_get_connections() call.
+
+When an unsolicited event happens, pass the event via
+snd_hda_queue_unsol_event() so that the codec routines will process it
+later.
+
+
+(Mixer) Controls
+================
+
+To create mixer controls of all codecs, call
+snd_hda_build_controls().  It then builds the mixers and does
+initialization stuff on each codec.
+
+
+PCM Stuff
+=========
+
+snd_hda_build_pcms() gives the necessary information to create PCM
+streams.  When it's called, each codec belonging to the bus stores 
+codec->num_pcms and codec->pcm_info fields.  The num_pcms indicates
+the number of elements in pcm_info array.  The card driver is supposed
+to traverse the codec linked list, read the pcm information in
+pcm_info array, and build pcm instances according to them. 
+
+The pcm_info array contains the following record:
+
+/* PCM information for each substream */
+struct hda_pcm_stream {
+       unsigned int substreams;        /* number of substreams, 0 = not exist 
*/
+       unsigned int channels_min;      /* min. number of channels */
+       unsigned int channels_max;      /* max. number of channels */
+       hda_nid_t nid;  /* default NID to query rates/formats/bps, or set up */
+       u32 rates;      /* supported rates */
+       u64 formats;    /* supported formats (SNDRV_PCM_FMTBIT_) */
+       unsigned int maxbps;    /* supported max. bit per sample */
+       struct hda_pcm_ops ops;
+};
+
+/* for PCM creation */
+struct hda_pcm {
+       char *name;
+       struct hda_pcm_stream stream[2];
+};
+
+The name can be passed to snd_pcm_new().  The stream field contains
+the information  for playback (SNDRV_PCM_STREAM_PLAYBACK = 0) and
+capture (SNDRV_PCM_STREAM_CAPTURE = 1) directions.  The card driver
+should pass substreams to snd_pcm_new() for the number of substreams
+to create.
+
+The channels_min, channels_max, rates and formats should be copied to
+runtime->hw record.  They and maxbps fields are used also to compute
+the format value for the HDA codec and controller.  Call
+snd_hda_calc_stream_format() to get the format value.
+
+The ops field contains the following callback functions:
+
+struct hda_pcm_ops {
+       int (*open)(struct hda_pcm_stream *info, struct hda_codec *codec,
+                   snd_pcm_substream_t *substream);
+       int (*close)(struct hda_pcm_stream *info, struct hda_codec *codec,
+                    snd_pcm_substream_t *substream);
+       int (*prepare)(struct hda_pcm_stream *info, struct hda_codec *codec,
+                      unsigned int stream_tag, unsigned int format,
+                      snd_pcm_substream_t *substream);
+       int (*cleanup)(struct hda_pcm_stream *info, struct hda_codec *codec,
+                      snd_pcm_substream_t *substream);
+};
+
+All are non-NULL, so you can call them safely without NULL check.
+
+The open callback should be called in PCM open after runtime->hw is
+set up.  It may override some setting and constraints additionally.
+Similarly, the close callback should be called in the PCM close.
+
+The prepare callback should be called in PCM prepare.  This will set
+up the codec chip properly for the operation.  The cleanup should be
+called in hw_free to clean up the configuration.
+
+The caller should check the return value, at least for open and
+prepare callbacks.  When a negative value is returned, some error
+occurred.
+
+
+Proc Files
+==========
+
+Each codec dumps the widget node information in
+/proc/asound/card*/codec#* file.  This information would be really
+helpful for debugging.  Please provide its contents together with the
+bug report.
+
+
+Power Management
+================
+
+It's simple:
+Call snd_hda_suspend() in the PM suspend callback.
+Call snd_hda_resume() in the PM resume callback.
+
+
+Codec Preset (Patch)
+====================
+
+To set up and handle the codec functionality fully, each codec may
+have a codec preset (patch).  It's defined in struct hda_codec_preset:
+
+       struct hda_codec_preset {
+               unsigned int id;
+               unsigned int mask;
+               unsigned int subs;
+               unsigned int subs_mask;
+               unsigned int rev;
+               const char *name;
+               int (*patch)(struct hda_codec *codec);
+       };
+
+When the codec id and codec subsystem id match with the given id and
+subs fields bitwise (with bitmask mask and subs_mask), the callback
+patch is called.  The patch callback should initialize the codec and
+set the codec->patch_ops field.  This is defined as below:
+
+       struct hda_codec_ops {
+               int (*build_controls)(struct hda_codec *codec);
+               int (*build_pcms)(struct hda_codec *codec);
+               int (*init)(struct hda_codec *codec);
+               void (*free)(struct hda_codec *codec);
+               void (*unsol_event)(struct hda_codec *codec, unsigned int res);
+       #ifdef CONFIG_PM
+               int (*suspend)(struct hda_codec *codec, pm_message_t state);
+               int (*resume)(struct hda_codec *codec);
+       #endif
+       };
+
+The build_controls callback is called from snd_hda_build_controls().
+Similarly, the build_pcms callback is called from
+snd_hda_build_pcms().  The init callback is called after
+build_controls to initialize the hardware.
+The free callback is called as a destructor.
+
+The unsol_event callback is called when an unsolicited event is
+received.
+
+The suspend and resume callbacks are for power management.
+
+Each entry can be NULL if not necessary to be called.
+
+
+Generic Parser
+==============
+
+When the device doesn't match with any given presets, the widgets are
+parsed via th generic parser (hda_generic.c).  Its support is
+limited: no multi-channel support, for example.
+
+
+Digital I/O
+===========
+
+Call snd_hda_create_spdif_out_ctls() from the patch to create controls
+related with SPDIF out.  In the patch resume callback, call
+snd_hda_resume_spdif().
+
+
+Helper Functions
+================
+
+snd_hda_get_codec_name() stores the codec name on the given string.
+
+snd_hda_check_board_config() can be used to obtain the configuration
+information matching with the device.  Define the table with struct
+hda_board_config entries (zero-terminated), and pass it to the
+function.  The function checks the modelname given as a module
+parameter, and PCI subsystem IDs.  If the matching entry is found, it
+returns the config field value.
+
+snd_hda_add_new_ctls() can be used to create and add control entries.
+Pass the zero-terminated array of snd_kcontrol_new_t.  The same array
+can be passed to snd_hda_resume_ctls() for resume.
+Note that this will call control->put callback of these entries.  So,
+put callback should check codec->in_resume and force to restore the
+given value if it's non-zero even if the value is identical with the
+cached value.
+
+Macros HDA_CODEC_VOLUME(), HDA_CODEC_MUTE() and their variables can be
+used for the entry of snd_kcontrol_new_t.
+
+The input MUX helper callbacks for such a control are provided, too:
+snd_hda_input_mux_info() and snd_hda_input_mux_put().  See
+patch_realtek.c for example.
diff -urN linux/Documentation/sound/alsa/ALSA-Configuration.txt 
linux/Documentation/sound/alsa/ALSA-Configuration.txt
--- linux/Documentation/sound/alsa/ALSA-Configuration.txt       2005/01/25 
04:27:51     1.16
+++ linux/Documentation/sound/alsa/ALSA-Configuration.txt       2005/03/18 
17:36:44     1.17
@@ -7,75 +7,75 @@
 Kernel Configuration
 ====================
 
-To enable the ALSA support, at least you need to build the kernel with
-the primary sound card support (CONFIG_SOUND).  Since ALSA can emulate
-the OSS, you don't have to choose any of the OSS/Free modules.  Please
-enable "OSS API emulation" (CONFIG_SND_OSSEMUL) and both OSS mixer and
-PCM supports if you want to run the OSS application with the ALSA.
+To enable ALSA support you need at least to build the kernel with
+primary sound card support (CONFIG_SOUND).  Since ALSA can emulate OSS,
+you don't have to choose any of the OSS modules.
 
-When you want to support the WaveTable functionality on some cards
-such like SB Live!, you need to enable "Sequencer support"
+Enable "OSS API emulation" (CONFIG_SND_OSSEMUL) and both OSS mixer and
+PCM supports if you want to run OSS applications with ALSA.
+
+If you want to support the WaveTable functionality on cards such as
+SB Live! then you need to enable "Sequencer support"
 (CONFIG_SND_SEQUENCER).
 
-For getting more verbose debug messages, turn on "Verbose printk" and
-"Debug" options.  For checking the memory leaks, you can turn on
-"Debug memory" option, too.  "Debug detection" will put more
-additional checks for the detection of cards.
-
-Please note that all the ALSA ISA drivers support Linux isapnp API (if
-the card supports).  You don't need to configure the PnP via
-isapnptools.
+To make ALSA debug messages more verbose, enable the "Verbose printk"
+and "Debug" options.  To check for memory leaks, turn on "Debug memory"
+too.  "Debug detection" will add checks for the detection of cards.
+
+Please note that all the ALSA ISA drivers support the Linux isapnp API
+(if the card supports ISA PnP).  You don't need to configure the cards
+using isapnptools.
 
 
 Creating ALSA devices
 =====================
 
-Use the /dev/MAKEDEV script to create the nessecary device nodes.
+This depends on your distribution, but normally you use the /dev/MAKEDEV
+script to create the necessary device nodes.  On some systems you use a
+script named 'snddevices'.
 
 
 Module parameters
 =================
 
-  A user can modify or set parameters at the load time of the module. If
-  the module supports more cards and you have got more than one card
-  of the same type, you may simply specify more values for the parameter,
-  delimited by commas.
-  
-  Note that module option names were changed in 0.9.0rc4. The 'snd_'
-  prefix was removed.
+The user can load modules with options. If the module supports more than
+one card and you have more than one card of the same type then you can
+specify multiple values for the option separated by commas.
+
+Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
 
   Module snd
   ----------
 
-    The module snd is the ALSA core module, which is used by all ALSA
-    card drivers.  This takes the global options for creating devices,
-    etc.
+    The core ALSA module.  It is used by all ALSA card drivers.
+    It takes the following options which have global effects.
 
-    major      - major # for sound driver
-               - default is 116
+    major      - major number for sound driver
+               - Default: 116
     cards_limit
-               - specifies card limit # for auto-loading (1-8)
-               - default is 1
-               - for auto-loading more than 1 card, specify this option
-                 together with snd-card-X aliases.
+               - limiting card index for auto-loading (1-8)
+               - Default: 1
+               - For auto-loading more than one card, specify this
+                 option together with snd-card-X aliases.
     device_mode
-               - specifies permission mask for dynamic sound device filesystem
-                 (available only when DEVFS is enabled)
-               - default value = 0666
-               - for example 'device_mode=0660'
+               - permission mask for dynamic sound device filesystem
+               - This is available only when DEVFS is enabled
+               - Default: 0666
+               - E.g.: device_mode=0660
 
   
   Module snd-pcm-oss
   ------------------
 
     The PCM OSS emulation module.
-    This module takes the options to change the mapping of devices.
+    This module takes options which change the mapping of devices.
 
     dsp_map    - PCM device number maps assigned to the 1st OSS device.
-                 (default: 0)
+               - Default: 0
     adsp_map   - PCM device number maps assigned to the 2st OSS device.
-                 (default: 1)
-    nonblock_open - Don't block opening busy PCM devices.
+               - Default: 1
+    nonblock_open
+               - Don't block opening busy PCM devices.
 
     For example, when dsp_map=2, /dev/dsp will be mapped to PCM #2 of
     the card #0.  Similarly, when adsp_map=0, /dev/adsp will be mapped
@@ -91,33 +91,39 @@
   Module snd-rawmidi
   ------------------
 
-    This module takes the options to change the mapping of OSS
-    devices like snd-pcm-oss module.
+    This module takes options which change the mapping of devices.
+    similar to those of the snd-pcm-oss module.
 
     midi_map   - MIDI device number maps assigned to the 1st OSS device.
-                 (default: 0)
+               - Default: 0
     amidi_map  - MIDI device number maps assigned to the 2st OSS device.
-                 (default: 1)
+               - Default: 1
 
-  Common parameters for top soundcard modules
-  -------------------------------------------
+  Common parameters for top sound card modules
+  --------------------------------------------
 
-    Each of top-level soundcard module takes some general options,
+    Each of top level sound card module takes the following options.
 
-    index      - 0-7 - index (slot #) for soundcard
-                - if not set or -1, first free index (slot #) is assigned
-    id         - user identification for card (up to 15 chars)
-               - default expression is 'card<index>' (for example card1)
-               - value is used for /proc/asound filesystem
-               - this value can be used by applications for identification
-                 of card if user does not want identify card with index number
-    enable     - enable card.  (all cards enabled for PCI and ISA PnP cards
-                 as default.)
+    index      - index (slot #) of sound card
+               - Values: 0 through 7 or negative
+               - If nonnegative, assign that index number
+                - if negative, interpret as a bitmask of permissible
+                 indices; the first free permitted index is assigned
+               - Default: -1
+    id         - card ID (identifier or name)
+               - Can be up to 15 characters long
+               - Default: the card type
+               - A directory by this name is created under /proc/asound/
+                 containing information about the card
+               - This ID can be used instead of the index number in
+                 identifying the card
+    enable     - enable card
+               - Default: enabled, for PCI and ISA PnP cards
 
   Module snd-ad1816a
   ------------------
 
-    Module for soundcards based on Analog Devices AD1816A/AD1815 ISA chips.
+    Module for sound cards based on Analog Devices AD1816A/AD1815 ISA chips.
 
     port       - port # for AD1816A chip (PnP setup)
     mpu_port   - port # for MPU-401 UART (PnP setup)
@@ -132,7 +138,7 @@
   Module snd-ad1848
   -----------------
 
-    Module for soundcards based on AD1848/AD1847/CS4248 ISA chips.
+    Module for sound cards based on AD1848/AD1847/CS4248 ISA chips.
 
     port       - port # for AD1848 chip
     irq                - IRQ # for AD1848  chip
@@ -147,7 +153,8 @@
     Module for ALi M5451 PCI chip.
 
     pcm_channels    - Number of hardware channels assigned for PCM
-    spdif           - Support SPDIF I/O (disabled by default)
+    spdif           - Support SPDIF I/O
+                   - Default: disabled
 
     Module supports autoprobe and multiple chips (max 8).
 
@@ -156,7 +163,7 @@
   Module snd-als100
   -----------------
 
-    Module for soundcards based on Avance Logic ALS100/ALS120 ISA chips.
+    Module for sound cards based on Avance Logic ALS100/ALS120 ISA chips.
 
     port       - port # for ALS100 (SB16) chip (PnP setup)
     irq                - IRQ # for ALS100 (SB16) chip (PnP setup)
@@ -171,7 +178,7 @@
   Module snd-als4000
   ------------------
 
-    Module for soundcards based on Avance Logic ALS4000 PCI chip.
+    Module for sound cards based on Avance Logic ALS4000 PCI chip.
 
     joystick_port - port # for legacy joystick support.
                     0 = disabled (default), 1 = auto-detect
@@ -197,6 +204,9 @@
 
     Module supports up to 8 cards.
 
+    Note: The default index value of this module is -2, i.e. the first
+          slot is excluded.
+
   Module snd-au8810, snd-au8820, snd-au8830
   -----------------------------------------
 
@@ -226,7 +236,7 @@
   Module snd-azt2320
   ------------------
 
-    Module for soundcards based on Aztech System AZT2320 ISA chip (PnP only).
+    Module for sound cards based on Aztech System AZT2320 ISA chip (PnP only).
 
     port       - port # for AZT2320 chip (PnP setup)
     wss_port   - port # for WSS (PnP setup)
@@ -242,7 +252,7 @@
   Module snd-azt3328
   ------------------
 
-    Module for soundcards based on Aztech AZF3328 PCI chip.
+    Module for sound cards based on Aztech AZF3328 PCI chip.
 
     joystick   - Enable joystick (default off)
 
@@ -258,6 +268,9 @@
 
     Module supports up to 8 cards.
 
+    Note: The default index value of this module is -2, i.e. the first
+          slot is excluded.
+
   Module snd-ca0106
   -----------------
 
@@ -269,7 +282,7 @@
   Module snd-cmi8330
   ------------------
 
-    Module for soundcards based on C-Media CMI8330 ISA chips.
+    Module for sound cards based on C-Media CMI8330 ISA chips.
 
     wssport    - port # for CMI8330 chip (WSS)
     wssirq     - IRQ # for CMI8330 chip (WSS)
@@ -284,7 +297,7 @@
   Module snd-cmipci
   -----------------
 
-    Module for C-Media CMI8338 and 8738 PCI soundcards.
+    Module for C-Media CMI8338 and 8738 PCI sound cards.
 
     mpu_port   - 0x300,0x310,0x320,0x330, 0 = disable (default)
     fm_port     - 0x388 (default), 0 = disable (default)
@@ -297,7 +310,7 @@
   Module snd-cs4231
   -----------------
 
-    Module for soundcards based on CS4231 ISA chips.
+    Module for sound cards based on CS4231 ISA chips.
 
     port       - port # for CS4231 chip
     mpu_port   - port # for MPU-401 UART (optional), -1 = disable
@@ -314,7 +327,7 @@
   Module snd-cs4232
   -----------------
 
-    Module for soundcards based on CS4232/CS4232A ISA chips.
+    Module for sound cards based on CS4232/CS4232A ISA chips.
 
     port       - port # for CS4232 chip (PnP setup - 0x534)
     cport      - control port # for CS4232 chip (PnP setup - 0x120,0x210,0xf00)
@@ -334,7 +347,7 @@
   Module snd-cs4236
   -----------------
 
-    Module for soundcards based on CS4235/CS4236/CS4236B/CS4237B/
+    Module for sound cards based on CS4235/CS4236/CS4236B/CS4237B/
                                    CS4238B/CS4239 ISA chips.
 
     port       - port # for CS4236 chip (PnP setup - 0x534)
@@ -367,7 +380,7 @@
   Module snd-cs46xx
   -----------------
 
-    Module for PCI soundcards based on CS4610/CS4612/CS4614/CS4615/CS4622/
+    Module for PCI sound cards based on CS4610/CS4612/CS4614/CS4615/CS4622/
                                       CS4624/CS4630/CS4280 PCI chips.
 
     external_amp     - Force to enable external amplifer.
@@ -400,14 +413,14 @@
   Module snd-dummy
   ----------------
 
-    Module for the dummy soundcard. This soundcard doesn't do any output
+    Module for the dummy sound card. This "card" doesn't do any output
     or input, but you may use this module for any application which
-    requires a soundcard (like RealPlayer).
+    requires a sound card (like RealPlayer).
 
   Module snd-emu10k1
   ------------------
 
-    Module for EMU10K1/EMU10k2 based PCI soundcards.
+    Module for EMU10K1/EMU10k2 based PCI sound cards.
                        * Sound Blaster Live!
                        * Sound Blaster PCI 512
                        * Emu APS (partially supported)
@@ -447,7 +460,7 @@
   Module snd-ens1370
   ------------------
 
-    Module for Ensoniq AudioPCI ES1370 PCI soundcards.
+    Module for Ensoniq AudioPCI ES1370 PCI sound cards.
                        * SoundBlaster PCI 64
                        * SoundBlaster PCI 128
 
@@ -458,7 +471,7 @@
   Module snd-ens1371
   ------------------
 
-    Module for Ensoniq AudioPCI ES1371 PCI soundcards.
+    Module for Ensoniq AudioPCI ES1371 PCI sound cards.
                        * SoundBlaster PCI 64
                        * SoundBlaster PCI 128
                        * SoundBlaster Vibra PCI
@@ -471,7 +484,7 @@
   Module snd-es968
   ----------------
 
-    Module for soundcards based on ESS ES968 chip (PnP only).
+    Module for sound cards based on ESS ES968 chip (PnP only).
 
     port       - port # for ES968 (SB8) chip (PnP setup)
     irq                - IRQ # for ES968 (SB8) chip (PnP setup)
@@ -482,7 +495,7 @@
   Module snd-es1688
   -----------------
 
-    Module for ESS AudioDrive ES-1688 and ES-688 soundcards.
+    Module for ESS AudioDrive ES-1688 and ES-688 sound cards.
 
     port       - port # for ES-1688 chip (0x220,0x240,0x260)
     mpu_port   - port # for MPU-401 port (0x300,0x310,0x320,0x330), -1 = 
disable (default)
@@ -495,7 +508,7 @@
   Module snd-es18xx
   -----------------
 
-    Module for ESS AudioDrive ES-18xx soundcards.
+    Module for ESS AudioDrive ES-18xx sound cards.
 
     port       - port # for ES-18xx chip (0x220,0x240,0x260)
     mpu_port   - port # for MPU-401 port (0x300,0x310,0x320,0x330), -1 = 
disable (default)
@@ -514,14 +527,14 @@
   Module snd-es1938
   -----------------
 
-    Module for soundcards based on ESS Solo-1 (ES1938,ES1946) chips.
+    Module for sound cards based on ESS Solo-1 (ES1938,ES1946) chips.
 
     Module supports up to 8 cards and autoprobe.
 
   Module snd-es1968
   -----------------
 
-    Module for soundcards based on ESS Maestro-1/2/2E (ES1968/ES1978) chips.
+    Module for sound cards based on ESS Maestro-1/2/2E (ES1968/ES1978) chips.
 
     total_bufsize      - total buffer size in kB (1-4096kB)
     pcm_substreams_p   - playback channels (1-8, default=2)
@@ -539,7 +552,7 @@
   Module snd-fm801
   ----------------
 
-    Module for ForteMedia FM801 based PCI soundcards.
+    Module for ForteMedia FM801 based PCI sound cards.
 
     tea575x_tuner       - Enable TEA575x tuner
                           - 1 = MediaForte 256-PCS
@@ -553,7 +566,7 @@
   Module snd-gusclassic
   ---------------------
 
-    Module for Gravis UltraSound Classic soundcard.
+    Module for Gravis UltraSound Classic sound card.
 
     port       - port # for GF1 chip (0x220,0x230,0x240,0x250,0x260)
     irq                - IRQ # for GF1 chip (3,5,9,11,12,15)
@@ -568,7 +581,7 @@
   Module snd-gusextreme
   ---------------------
 
-    Module for Gravis UltraSound Extreme (Synergy ViperMax) soundcard.
+    Module for Gravis UltraSound Extreme (Synergy ViperMax) sound card.
 
     port       - port # for ES-1688 chip (0x220,0x230,0x240,0x250,0x260)
     gf1_port   - port # for GF1 chip 
(0x210,0x220,0x230,0x240,0x250,0x260,0x270)
@@ -587,7 +600,7 @@
   Module snd-gusmax
   -----------------
 
-    Module for Gravis UltraSound MAX soundcard.
+    Module for Gravis UltraSound MAX sound card.
 
     port       - port # for GF1 chip (0x220,0x230,0x240,0x250,0x260)
     irq                - IRQ # for GF1 chip (3,5,9,11,12,15)
@@ -599,18 +612,42 @@
 
     Module supports up to 8 cards and autoprobe.
     
+  Module snd-hda-intel
+  --------------------
+
+    Module for Intel HD Audio (ICH6, ICH6M, ICH7)
+
+    model      - force the model name
+
+    Module supports up to 8 cards.
+
+    Each codec may have a model table for different configurations.
+    If your machine isn't listed there, the default (usually minimal)
+    configuration is set up.  You can pass "model=<name>" option to
+    specify a certain model in such a case.  There are different
+    models depending on the codec chip.
+
+         Model name    Description
+         ----------    -----------
+       ALC880
+         3stack        3-jack in back and a headphone out
+         3stack-digout 3-jack in back, a HP out and a SPDIF out
+         5stack        5-jack in back, 2-jack in front
+         5stack-digout 5-jack in back, 2-jack in front, a SPDIF out
+         w810          3-jack
+
+       CMI9880
+         minimal       3-jack in back
+         min_fp        3-jack in back, 2-jack in front
+         full          6-jack in back, 2-jack in front
+         full_dig      6-jack in back, 2-jack in front, SPDIF I/O
+         allout        5-jack in back, 2-jack in front, SPDIF out
+
   Module snd-hdsp
   ---------------
 
     Module for RME Hammerfall DSP audio interface(s)
 
-    precise_ptr              - Enable precise pointer (doesn't work reliably).
-                       (default = 0)
-    line_outs_monitor - Send all input and playback streams to line outs
-                       by default. (default = 0)
-    force_firmware    - Force a reload of the I/O box firmware
-                       (default = 0)
-
     Module supports up to 8 cards.
 
     Note: The firmware data can be automatically loaded via hotplug
@@ -628,7 +665,7 @@
   Module snd-ice1712
   ------------------
 
-    Module for Envy24 (ICE1712) based PCI soundcards.
+    Module for Envy24 (ICE1712) based PCI sound cards.
                        * MidiMan M Audio Delta 1010
                        * MidiMan M Audio Delta 1010LT
                        * MidiMan M Audio Delta DiO 2496
@@ -660,7 +697,7 @@
   Module snd-ice1724
   ------------------
 
-    Module for Envy24HT (VT/ICE1724) based PCI soundcards.
+    Module for Envy24HT (VT/ICE1724) based PCI sound cards.
                        * MidiMan M Audio Revolution 7.1
                        * AMP Ltd AUDIO2000
                        * TerraTec Aureon Sky-5.1, Space-7.1
@@ -689,7 +726,7 @@
                       hp_only = use headphone control as master
                       swap_hp = swap headphone and master controls
                       swap_surround = swap master and surround controls
-                      ad_shring = for AD1985, turn on OMS bit and use headphone
+                      ad_sharing = for AD1985, turn on OMS bit and use 
headphone
                       alc_jack = for ALC65x, turn on the jack sense mode
                       inv_eapd = inverted EAPD implementation
                       mute_led = bind EAPD bit for turning on/off mute LED
@@ -726,11 +763,14 @@
 
     This module supports up to 8 cards and autoprobe.
 
+    Note: The default index value of this module is -2, i.e. the first
+          slot is excluded.
+
   Module snd-interwave
   --------------------
 
     Module for Gravis UltraSound PnP, Dynasonic 3-D/Pro, STB Sound Rage 32
-    and other soundcards based on AMD InterWave (tm) chip.
+    and other sound cards based on AMD InterWave (tm) chip.
   
     port       - port # for InterWave chip 
(0x210,0x220,0x230,0x240,0x250,0x260)
     irq                - IRQ # for InterWave chip (3,5,9,11,12,15)
@@ -747,8 +787,8 @@
   Module snd-interwave-stb
   ------------------------
 
-    Module for UltraSound 32-Pro (soundcard from STB used by Compaq)
-    and other soundcards based on AMD InterWave (tm) chip with TEA6330T
+    Module for UltraSound 32-Pro (sound card from STB used by Compaq)
+    and other sound cards based on AMD InterWave (tm) chip with TEA6330T
     circuit for extended control of bass, treble and master volume.
   
     port       - port # for InterWave chip 
(0x210,0x220,0x230,0x240,0x250,0x260)
@@ -794,7 +834,7 @@
   Module snd-mixart
   -----------------
 
-    Module for Digigram miXart8 soundcards.
+    Module for Digigram miXart8 sound cards.
 
     Module supports multiple cards.
     Note: One miXart8 board will be represented as 4 alsa cards.
@@ -813,10 +853,9 @@
 
     port       - port number or -1 (disable)
     irq                - IRQ number or -1 (disable)
-    acpipnp    - ACPI PnP detection - 0 = disable, 1 = enable (default)
+    pnp                - PnP detection - 0 = disable, 1 = enable (default)
 
-    Module supports multiple devices (max 8) and ACPI PnP.  If PnP is not
-    used (or ACPI not enabled), port and irq must be specified.
+    Module supports multiple devices (max 8) and PnP.
     
   Module snd-mtpav
   ----------------
@@ -883,7 +922,7 @@
   Module snd-opl3sa2
   ------------------
 
-    Module for Yamaha OPL3-SA2/SA3 soundcards.
+    Module for Yamaha OPL3-SA2/SA3 sound cards.
 
     port       - control port # for OPL3-SA chip (0x370)
     sb_port    - SB port # for OPL3-SA chip (0x220,0x240)
@@ -903,7 +942,7 @@
   Module snd-opti92x-ad1848
   -------------------------
 
-    Module for soundcards based on OPTi 82c92x and Analog Devices AD1848 chips.
+    Module for sound cards based on OPTi 82c92x and Analog Devices AD1848 
chips.
     Module works with OAK Mozart cards as well.
     
     port      - port # for WSS chip (0x530,0xe80,0xf40,0x604)
@@ -918,7 +957,7 @@
   Module snd-opti92x-cs4231
   -------------------------
 
-    Module for soundcards based on OPTi 82c92x and Crystal CS4231 chips.
+    Module for sound cards based on OPTi 82c92x and Crystal CS4231 chips.
     
     port      - port # for WSS chip (0x530,0xe80,0xf40,0x604)
     mpu_port  - port # for MPU-401 UART (0x300,0x310,0x320,0x330)
@@ -933,7 +972,7 @@
   Module snd-opti93x
   ------------------
 
-    Module for soundcards based on OPTi 82c93x chips.
+    Module for sound cards based on OPTi 82c93x chips.
     
     port      - port # for WSS chip (0x530,0xe80,0xf40,0x604)
     mpu_port  - port # for MPU-401 UART (0x300,0x310,0x320,0x330)
@@ -962,21 +1001,21 @@
   ----------------
 
     Module for RME Digi32, Digi32 Pro and Digi32/8 (Sek'd Prodif32, 
-    Prodif96 and Prodif Gold) soundcards.
+    Prodif96 and Prodif Gold) sound cards.
 
     Module supports up to 8 cards.
 
   Module snd-rme96
   ----------------
 
-    Module for RME Digi96, Digi96/8 and Digi96/8 PRO/PAD/PST soundcards.
+    Module for RME Digi96, Digi96/8 and Digi96/8 PRO/PAD/PST sound cards.
 
     Module supports up to 8 cards.
 
   Module snd-rme9652
   ------------------
 
-    Module for RME Digi9652 (Hammerfall, Hammerfall-Light) soundcards.
+    Module for RME Digi9652 (Hammerfall, Hammerfall-Light) sound cards.
 
     precise_ptr        - Enable precise pointer (doesn't work reliably).
                  (default = 0)
@@ -992,7 +1031,7 @@
   Module snd-sa11xx-uda1341 (on arm only)
   ---------------------------------------
 
-    Module for Philips UDA1341TS on Compaq iPAQ H3600 soundcard.
+    Module for Philips UDA1341TS on Compaq iPAQ H3600 sound card.
 
     Module supports only one card.
     Module has no enable and index options.
@@ -1039,7 +1078,7 @@
   Module snd-sgalaxy
   ------------------
 
-    Module for Aztech Sound Galaxy soundcard.
+    Module for Aztech Sound Galaxy sound card.
 
     sbport     - Port # for SB16 interface (0x220,0x240)
     wssport    - Port # for WSS interface (0x530,0xe80,0xf40,0x604)
@@ -1079,7 +1118,7 @@
   Module snd-wavefront
   --------------------
 
-    Module for Turtle Beach Maui, Tropez and Tropez+ soundcards.
+    Module for Turtle Beach Maui, Tropez and Tropez+ sound cards.
 
     cs4232_pcm_port - Port # for CS4232 PCM interface.
     cs4232_pcm_irq  - IRQ # for CS4232 PCM interface (5,7,9,11,12,15).
@@ -1099,7 +1138,7 @@
   Module snd-sonicvibes
   ---------------------
 
-    Module for S3 SonicVibes PCI soundcards.
+    Module for S3 SonicVibes PCI sound cards.
                        * PINE Schubert 32 PCI
 
     reverb    - Reverb Enable - 1 = enable, 0 = disable (default)
@@ -1131,7 +1170,7 @@
   Module snd-trident
   ------------------
 
-    Module for Trident 4DWave DX/NX soundcards.
+    Module for Trident 4DWave DX/NX sound cards.
                        * Best Union  Miss Melody 4DWave PCI
                        * HIS  4DWave PCI
                        * Warpspeed  ONSpeed 4DWave PCI
@@ -1223,6 +1262,9 @@
 
     Module supports up to 8 cards.
 
+    Note: The default index value of this module is -2, i.e. the first
+          slot is excluded.
+
   Module snd-virmidi
   ------------------
 
@@ -1266,10 +1308,6 @@
 
     Module for Digigram VX-Pocket VX2 PCMCIA card.
 
-    irq_mask - IRQ bitmask, specifies the available IRQs as bits
-               (default = 0xffff, all available)
-    irq_list - List of available interrupts (default = -1, not specified)
-               4 numbers must be given (if specified).
     ibl      - Capture IBL size. (default = 0, minimum size)
 
     Module supports up to 8 cards.  The module is compiled only when
@@ -1284,9 +1322,6 @@
     When no hotplug fw loader is available, you need to load the
     firmware via vxloader utility in alsa-tools package.
 
-    The irq_mask and irq_list are provided to avoid allocation of
-    specific IRQs.  Usually you don't need to specify them.
-
     About capture IBL, see the description of snd-vx222 module.
 
     Note: the driver is build only when CONFIG_ISA is set.
@@ -1296,9 +1331,6 @@
 
     Module for Digigram VX-Pocket 440 PCMCIA card.
 
-    irq_mask - IRQ bitmask, specifies the available IRQs as bits
-    irq_list - List of available interrupts (default = -1, not specified)
-               4 numbers must be given (if specified).
     ibl      - Capture IBL size. (default = 0, minimum size)
 
     Module supports up to 8 cards.  The module is compiled only when
@@ -1313,9 +1345,6 @@
     When no hotplug fw loader is available, you need to load the
     firmware via vxloader utility in alsa-tools package.
 
-    The irq_mask and irq_list are provided to avoid allocation of
-    specific IRQs.  Usually you don't need to specify them.
-
     About capture IBL, see the description of snd-vx222 module.
 
     Note: the driver is build only when CONFIG_ISA is set.
@@ -1340,10 +1369,7 @@
   Module snd-pdaudiocf
   --------------------
 
-    Module for Sound Core PDAudioCF soundcard.
-
-    irq_mask     - IRQ mask (PCMCIA type)
-    irq_list     - List of available interrupts for this soundcard
+    Module for Sound Core PDAudioCF sound card.
 
     Note: the driver is build only when CONFIG_ISA is set.
 
@@ -1366,7 +1392,7 @@
 
 The ALSA drivers can be loaded automatically on demand by defining
 module aliases.  The string 'snd-card-%1' is requested for ALSA native
-devices where %i is soundcard number from zero to seven.
+devices where %i is sound card number from zero to seven.
 
 To auto-load an ALSA driver for OSS services, define the string
 'sound-slot-%i' where %i means the slot number for OSS, which
@@ -1379,16 +1405,16 @@
 alias sound-slot-0 snd-emu10k1
 ----- /etc/modprobe.conf
 
-The available number of auto-loaded soundcards depends on the module
+The available number of auto-loaded sound cards depends on the module
 option "cards_limit" of snd module.  As default it's set to 1.
 To enable the auto-loading of multiple cards, specify the number of
-soundcards in that option.
+sound cards in that option.
 
 When multiple cards are available, it'd better to specify the index
 number for each card via module option, too, so that the order of
 cards is kept consistent.
 
-An example configuration for two soundcards is like below:
+An example configuration for two sound cards is like below:
 
 ----- /etc/modprobe.conf
 # ALSA portion
@@ -1420,7 +1446,7 @@
 /dev/snd/pcmC2D1[c|p]  -> /dev/adsp2               -> minor 12+32 = 44
 
 The first number from /dev/snd/pcmC{X}D{Y}[c|p] expression means
-soundcard number and second means device number.  The ALSA devices
+sound card number and second means device number.  The ALSA devices
 have either 'c' or 'p' suffix indicating the direction, capture and
 playback, respectively.
 
diff -urN linux/Documentation/sound/alsa/serial-u16550.txt 
linux/Documentation/sound/alsa/serial-u16550.txt
--- linux/Documentation/sound/alsa/serial-u16550.txt    2003/06/05 10:06:35     
1.3
+++ linux/Documentation/sound/alsa/serial-u16550.txt    2005/03/18 17:36:44     
1.4
@@ -23,12 +23,12 @@
 
 Usage example for simple serial converter:
 
-       /sbin/setserial /dev/ttyS0 none
+       /sbin/setserial /dev/ttyS0 uart none
        /sbin/modprobe snd-serial-u16550 port=0x3f8 irq=4 speed=115200
 
 Usage example for Roland SoundCanvas with 4 MIDI ports:
 
-       /sbin/setserial /dev/ttyS0 none
+       /sbin/setserial /dev/ttyS0 uart none
        /sbin/modprobe snd-serial-u16550 port=0x3f8 irq=4 outs=4
 
 In MS-124T mode, one raw MIDI substream is supported (midiCnD0); the outs
@@ -38,7 +38,7 @@
 
 Usage example for MS-124T, with A-B switch in A position:
 
-       /sbin/setserial /dev/ttyS0 none
+       /sbin/setserial /dev/ttyS0 uart none
        /sbin/modprobe snd-serial-u16550 port=0x3f8 irq=4 adaptor=1 \
                        speed=19200
 
@@ -48,7 +48,7 @@
 
 Usage example for S/A mode:
 
-       /sbin/setserial /dev/ttyS0 none
+       /sbin/setserial /dev/ttyS0 uart none
        /sbin/modprobe snd-serial-u16550 port=0x3f8 irq=4 adaptor=2
 
 In MS-124W M/B mode, the driver supports 16 ALSA raw MIDI substreams;
@@ -64,7 +64,7 @@
 
 Usage example for M/B mode:
 
-       /sbin/setserial /dev/ttyS0 none
+       /sbin/setserial /dev/ttyS0 uart none
        /sbin/modprobe snd-serial-u16550 port=0x3f8 irq=4 adaptor=3
 
 The MS-124W hardware's M/A mode is currently not supported. This mode allows
diff -urN linux/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl 
linux/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
--- linux/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl  
2005/01/13 14:05:16     1.17
+++ linux/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl  
2005/03/18 17:36:45     1.18
@@ -18,8 +18,8 @@
       </affiliation>
      </author>
 
-     <date>July 11, 2004</date>
-     <edition>0.3.3</edition>
+     <date>March 6, 2005</date>
+     <edition>0.3.4</edition>
 
     <abstract>
       <para>
@@ -110,9 +110,9 @@
       </para>
 
       <para>
-        One is the the trees provided as a tarball or via cvs from the
+        One is the trees provided as a tarball or via cvs from the
       ALSA's ftp site, and another is the 2.6 (or later) Linux kernel
-      tree. To synchronize both, the ALSA driver tree is split to
+      tree. To synchronize both, the ALSA driver tree is split into
       two different trees: alsa-kernel and alsa-driver. The former
       contains purely the source codes for the Linux 2.6 (or later)
       tree. This tree is designed only for compilation on 2.6 or
@@ -766,7 +766,7 @@
       </para>
 
       <para>
-      The ALSA interfaces like PCM or control API are define in other
+      The ALSA interfaces like PCM or control API are defined in other
       header files as <filename>&lt;sound/xxx.h&gt;</filename>.
       They have to be included after
       <filename>&lt;sound/core.h&gt;</filename>.
@@ -1103,7 +1103,7 @@
           /* release the irq */
           if (chip->irq >= 0)
                   free_irq(chip->irq, (void *)chip);
-          /* release the i/o ports */
+          /* release the i/o ports & memory */
           pci_release_regions(chip->pci);
           /* disable the PCI entry */
           pci_disable_device(chip->pci);
@@ -1314,6 +1314,7 @@
       </para>
 
       <para>
+        <!-- obsolete -->
         It will reserve the i/o port region of 8 bytes of the given
       PCI device. The returned value, chip-&gt;res_port, is allocated
       via <function>kmalloc()</function> by
@@ -1936,6 +1937,7 @@
           snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
                           &snd_mychip_capture_ops);
           /* pre-allocation of buffers */
+          /* NOTE: this may fail */
           snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
                                                 snd_dma_pci_data(chip->pci),
                                                 64*1024, 64*1024);
@@ -1950,7 +1952,7 @@
     <section id="pcm-interface-constructor">
       <title>Constructor</title>
       <para>
-        A pcm instance is allocated <function>snd_pcm_new()</function>
+        A pcm instance is allocated by <function>snd_pcm_new()</function>
       function. It would be better to create a constructor for pcm,
       namely, 
 
@@ -2235,7 +2237,8 @@
        unsigned char *dma_area;        /* DMA area */
        dma_addr_t dma_addr;            /* physical bus address (not accessible 
from main CPU) */
        size_t dma_bytes;               /* size of DMA area */
-       void *dma_private;              /* private DMA data for the memory 
allocator */
+
+       struct snd_dma_buffer *dma_buffer_p;    /* allocated buffer */
 
 #if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
        /* -- OSS things -- */
@@ -2250,7 +2253,7 @@
        <para>
          For the operators (callbacks) of each sound driver, most of
        these records are supposed to be read-only.  Only the PCM
-       middle-layer changes / updates these info.  The excpetions are
+       middle-layer changes / updates these info.  The exceptions are
        the hardware description (hw), interrupt callbacks
        (transfer_ack_xxx), DMA buffer information, and the private
        data.  Besides, if you use the standard buffer allocation
@@ -3250,7 +3253,7 @@
 
       <para>
         There are many different constraints.
-        Look in <filename>sound/asound.h</filename> for a complete list.
+        Look in <filename>sound/pcm.h</filename> for a complete list.
         You can even define your own constraint rules.
         For example, let's suppose my_chip can manage a substream of 1 channel
         if and only if the format is S16_LE, otherwise it supports any format
@@ -4066,7 +4069,7 @@
         Both <function>snd_ac97_write()</function> and
         <function>snd_ac97_update()</function> functions are used to
         set a value to the given register
-        (<constant>AC97_XXX</constant>). The different between them is
+        (<constant>AC97_XXX</constant>). The difference between them is
         that <function>snd_ac97_update()</function> doesn't write a
         value if the given value has been already set, while
         <function>snd_ac97_write()</function> always rewrites the
@@ -4152,8 +4155,8 @@
       <title>Proc Files</title>
       <para>
         The ALSA AC97 interface will create a proc file such as
-      <filename>/proc/asound/card0/ac97#0</filename> and
-      <filename>ac97#0regs</filename>. You can refer to these files to
+      <filename>/proc/asound/card0/codec97#0/ac97#0-0</filename> and
+      <filename>ac97#0-0+regs</filename>. You can refer to these files to
       see the current status and registers of the codec. 
       </para>
     </section>
@@ -4200,18 +4203,6 @@
       implementation of mpu401 stuff. For example, emu10k1 has its own
       mpu401 routines. 
       </para>
-
-      <para>
-        In this document, I won't explain the rawmidi interface API,
-      which is the basis of MPU401-UART implementation. 
-      </para>
-
-      <para>
-        For details, please check the source,
-      <filename>core/rawmidi.c</filename>, and examples such as
-      <filename>drivers/mpu401/mpu401_uart.c</filename> or
-      <filename>usb/usbmidi.c</filename>. 
-      </para>
     </section>
 
     <section id="midi-interface-constructor">
@@ -4335,6 +4326,356 @@
 
 
 <!-- ****************************************************** -->
+<!-- RawMIDI Interface  -->
+<!-- ****************************************************** -->
+  <chapter id="rawmidi-interface">
+    <title>RawMIDI Interface</title>
+
+    <section id="rawmidi-interface-overview">
+      <title>Overview</title>
+
+      <para>
+      The raw MIDI interface is used for hardware MIDI ports that can
+      be accessed as a byte stream.  It is not used for synthesizer
+      chips that do not directly understand MIDI.
+      </para>
+
+      <para>
+      ALSA handles file and buffer management.  All you have to do is
+      to write some code to move data between the buffer and the
+      hardware.
+      </para>
+
+      <para>
+      The rawmidi API is defined in
+      <filename>&lt;sound/rawmidi.h&gt;</filename>.
+      </para>
+    </section>
+
+    <section id="rawmidi-interface-constructor">
+      <title>Constructor</title>
+
+      <para>
+      To create a rawmidi device, call the
+      <function>snd_rawmidi_new</function> function:
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  snd_rawmidi_t *rmidi;
+  err = snd_rawmidi_new(chip->card, "MyMIDI", 0, outs, ins, &rmidi);
+  if (err < 0)
+          return err;
+  rmidi->private_data = chip;
+  strcpy(rmidi->name, "My MIDI");
+  rmidi->info_flags = SNDRV_RAWMIDI_INFO_OUTPUT |
+                      SNDRV_RAWMIDI_INFO_INPUT |
+                      SNDRV_RAWMIDI_INFO_DUPLEX;
+]]>
+          </programlisting>
+        </informalexample>
+      </para>
+
+      <para>
+      The first argument is the card pointer, the second argument is
+      the ID string.
+      </para>
+
+      <para>
+      The third argument is the index of this component.  You can
+      create up to 8 rawmidi devices.
+      </para>
+
+      <para>
+      The fourth and fifth arguments are the number of output and
+      input substreams, respectively, of this device.  (A substream is
+      the equivalent of a MIDI port.)
+      </para>
+
+      <para>
+      Set the <structfield>info_flags</structfield> field to specify
+      the capabilities of the device.
+      Set <constant>SNDRV_RAWMIDI_INFO_OUTPUT</constant> if there is
+      at least one output port,
+      <constant>SNDRV_RAWMIDI_INFO_INPUT</constant> if there is at
+      least one input port,
+      and <constant>SNDRV_RAWMIDI_INFO_DUPLEX</constant> if the device
+      can handle output and input at the same time.
+      </para>
+
+      <para>
+      After the rawmidi device is created, you need to set the
+      operators (callbacks) for each substream.  There are helper
+      functions to set the operators for all substream of a device:
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, 
&snd_mymidi_output_ops);
+  snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT, 
&snd_mymidi_input_ops);
+]]>
+          </programlisting>
+        </informalexample>
+      </para>
+
+      <para>
+      The operators are usually defined like this:
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  static snd_rawmidi_ops_t snd_mymidi_output_ops = {
+          .open =    snd_mymidi_output_open,
+          .close =   snd_mymidi_output_close,
+          .trigger = snd_mymidi_output_trigger,
+  };
+]]>
+          </programlisting>
+        </informalexample>
+      These callbacks are explained in the <link
+      
linkend="rawmidi-interface-callbacks"><citetitle>Callbacks</citetitle></link>
+      section.
+      </para>
+
+      <para>
+      If there is more than one substream, you should give each one a
+      unique name:
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  struct list_head *list;
+  snd_rawmidi_substream_t *substream;
+  list_for_each(list, &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams) 
{
+          substream = list_entry(list, snd_rawmidi_substream_t, list);
+          sprintf(substream->name, "My MIDI Port %d", substream->number + 1);
+  }
+  /* same for SNDRV_RAWMIDI_STREAM_INPUT */
+]]>
+          </programlisting>
+        </informalexample>
+      </para>
+    </section>
+
+    <section id="rawmidi-interface-callbacks">
+      <title>Callbacks</title>
+
+      <para>
+      In all callbacks, the private data that you've set for the
+      rawmidi device can be accessed as
+      substream-&gt;rmidi-&gt;private_data.
+      <!-- <code> isn't available before DocBook 4.3 -->
+      </para>
+
+      <para>
+      If there is more than one port, your callbacks can determine the
+      port index from the snd_rawmidi_substream_t data passed to each
+      callback:
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  snd_rawmidi_substream_t *substream;
+  int index = substream->number;
+]]>
+          </programlisting>
+        </informalexample>
+      </para>
+
+      <section id="rawmidi-interface-op-open">
+      <title><function>open</function> callback</title>
+
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  static int snd_xxx_open(snd_rawmidi_substream_t *substream);
+]]>
+          </programlisting>
+        </informalexample>
+
+        <para>
+        This is called when a substream is opened.
+        You can initialize the hardware here, but you should not yet
+        start transmitting/receiving data.
+        </para>
+      </section>
+
+      <section id="rawmidi-interface-op-close">
+      <title><function>close</function> callback</title>
+
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  static int snd_xxx_close(snd_rawmidi_substream_t *substream);
+]]>
+          </programlisting>
+        </informalexample>
+
+        <para>
+        Guess what.
+        </para>
+
+        <para>
+        The <function>open</function> and <function>close</function>
+        callbacks of a rawmidi device are serialized with a mutex,
+        and can sleep.
+        </para>
+      </section>
+
+      <section id="rawmidi-interface-op-trigger-out">
+      <title><function>trigger</function> callback for output
+      substreams</title>
+
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  static void snd_xxx_output_trigger(snd_rawmidi_substream_t *substream, int 
up);
+]]>
+          </programlisting>
+        </informalexample>
+
+        <para>
+        This is called with a nonzero <parameter>up</parameter>
+        parameter when there is some data in the substream buffer that
+        must be transmitted.
+        </para>
+
+        <para>
+        To read data from the buffer, call
+        <function>snd_rawmidi_transmit_peek</function>.  It will
+        return the number of bytes that have been read; this will be
+        less than the number of bytes requested when there is no more
+        data in the buffer.
+        After the data has been transmitted successfully, call
+        <function>snd_rawmidi_transmit_ack</function> to remove the
+        data from the substream buffer:
+          <informalexample>
+            <programlisting>
+<![CDATA[
+  unsigned char data;
+  while (snd_rawmidi_transmit_peek(substream, &data, 1) == 1) {
+          if (mychip_try_to_transmit(data))
+                  snd_rawmidi_transmit_ack(substream, 1);
+          else
+                  break; /* hardware FIFO full */
+  }
+]]>
+            </programlisting>
+          </informalexample>
+        </para>
+
+        <para>
+        If you know beforehand that the hardware will accept data, you
+        can use the <function>snd_rawmidi_transmit</function> function
+        which reads some data and removes it from the buffer at once:
+          <informalexample>
+            <programlisting>
+<![CDATA[
+  while (mychip_transmit_possible()) {
+          unsigned char data;
+          if (snd_rawmidi_transmit(substream, &data, 1) != 1)
+                  break; /* no more data */
+          mychip_transmit(data);
+  }
+]]>
+            </programlisting>
+          </informalexample>
+        </para>
+
+        <para>
+        If you know beforehand how many bytes you can accept, you can
+        use a buffer size greater than one with the
+        <function>snd_rawmidi_transmit*</function> functions.
+        </para>
+
+        <para>
+        The <function>trigger</function> callback must not sleep.  If
+        the hardware FIFO is full before the substream buffer has been
+        emptied, you have to continue transmitting data later, either
+        in an interrupt handler, or with a timer if the hardware
+        doesn't have a MIDI transmit interrupt.
+        </para>
+
+        <para>
+        The <function>trigger</function> callback is called with a
+        zero <parameter>up</parameter> parameter when the transmission
+        of data should be aborted.
+        </para>
+
+        <para>
+        The <function>trigger</function> callback may be called from
+        another hardware interrupt handler.  This means that all
+        spinlocks taken in the <function>trigger</function> callback
+        must be taken with <function>spin_lock_irqsave</function>
+        everywhere.
+        </para>
+      </section>
+
+      <section id="rawmidi-interface-op-trigger-in">
+      <title><function>trigger</function> callback for input
+      substreams</title>
+
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  static void snd_xxx_input_trigger(snd_rawmidi_substream_t *substream, int 
up);
+]]>
+          </programlisting>
+        </informalexample>
+
+        <para>
+        This is called with a nonzero <parameter>up</parameter>
+        parameter to enable receiving data, or with a zero
+        <parameter>up</parameter> parameter do disable receiving data.
+        </para>
+
+        <para>
+        When data reception is enabled, your interrupt handler should
+        call <function>snd_rawmidi_receive</function> for all received
+        data:
+          <informalexample>
+            <programlisting>
+<![CDATA[
+  void snd_mychip_midi_interrupt(...)
+  {
+          while (mychip_midi_available()) {
+                  unsigned char data;
+                  data = mychip_midi_read();
+                  snd_rawmidi_receive(substream, &data, 1);
+          }
+  }
+]]>
+            </programlisting>
+          </informalexample>
+        </para>
+      </section>
+
+      <section id="rawmidi-interface-op-drain">
+      <title><function>drain</function> callback</title>
+
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  static void snd_xxx_drain(snd_rawmidi_substream_t *substream);
+]]>
+          </programlisting>
+        </informalexample>
+
+        <para>
+        This is only used with output substreams.  This function should wait
+        until all data read from the substream buffer has been transmitted.
+        This ensures that the device can be closed and the driver unloaded
+        without losing data.
+        </para>
+
+        <para>
+        This callback is optional.  If you do not set
+        <structfield>drain</structfield> in the snd_rawmidi_ops_t
+        structure, ALSA will simply wait for 50&nbsp;milliseconds
+        instead.
+        </para>
+      </section>
+    </section>
+
+  </chapter>
+
+
+<!-- ****************************************************** -->
 <!-- Miscellaneous Devices  -->
 <!-- ****************************************************** -->
   <chapter id="misc-devices">
@@ -4633,7 +4974,7 @@
         where <parameter>size</parameter> is the byte size to be
       pre-allocated and the <parameter>max</parameter> is the maximal
       size to be changed via <filename>prealloc</filename> proc file.
-      The allocator will try to get as the large area as possible
+      The allocator will try to get as large area as possible
       within the given size. 
       </para>
 
@@ -4855,7 +5196,7 @@
         If your hardware supports the page table like emu10k1 or the
       buffer descriptors like via82xx, you can use the scatter-gather
       (SG) DMA. ALSA provides an interface for handling SG-buffers.
-      The API is provided in <filename>&lt;sound/pcm_sgbuf.h&gt;</filename>. 
+      The API is provided in <filename>&lt;sound/pcm.h&gt;</filename>. 
       </para>
 
       <para>
@@ -5159,12 +5500,12 @@
         <programlisting>
 <![CDATA[
   #ifdef CONFIG_PM
-  static int snd_my_suspend(snd_card_t *card, unsigned int state)
+  static int snd_my_suspend(snd_card_t *card, pm_message_t state)
   {
           .... // do things for suspsend
           return 0;
   }
-  static int snd_my_resume(snd_card_t *card, unsigned int state)
+  static int snd_my_resume(snd_card_t *card)
   {
           .... // do things for suspsend
           return 0;
@@ -5193,7 +5534,7 @@
       <informalexample>
         <programlisting>
 <![CDATA[
-  static int mychip_suspend(snd_card_t *card, unsigned int state)
+  static int mychip_suspend(snd_card_t *card, pm_message_t state)
   {
           /* (1) */
           mychip_t *chip = card->pm_private_data;
diff -urN linux/Documentation/usb/error-codes.txt 
linux/Documentation/usb/error-codes.txt
--- linux/Documentation/usb/error-codes.txt     2005/01/25 04:27:51     1.11
+++ linux/Documentation/usb/error-codes.txt     2005/03/18 17:36:45     1.12
@@ -23,6 +23,9 @@
 
 -ENODEV                specified USB-device or bus doesn't exist
 
+-ENOENT                specified interface or endpoint does not exist or
+               is not enabled
+
 -ENXIO         host controller driver does not support queuing of this type
                of urb.  (treat as a host controller bug.)
 
@@ -88,13 +91,19 @@
                           prescribed bus turn-around time
                        c) unknown USB error 
 
-                       In cases b) and c) either -EPROTO or -EILSEQ
-                       may be returned.  Note that often the controller
-                       hardware does not distinguish among cases a),
-                       b), and c), so a driver cannot tell whether
-                       there was a protocol error, a failure to respond
-                       (often caused by device disconnect), or some
-                       other fault.
+                       Note that often the controller hardware does not
+                       distinguish among cases a), b), and c), so a
+                       driver cannot tell whether there was a protocol
+                       error, a failure to respond (often caused by
+                       device disconnect), or some other fault.
+
+-ETIMEDOUT (**)                No response packet received within the 
prescribed
+                       bus turn-around time.  This error may instead be
+                       reported as -EPROTO or -EILSEQ.
+
+                       Note that the synchronous USB message functions
+                       also use this code to indicate timeout expired
+                       before the transfer completed.
 
 -EPIPE (**)            Endpoint stalled.  For non-control endpoints,
                        reset this status with usb_clear_halt().
@@ -152,4 +161,7 @@
 usb_get_*/usb_set_*():
 usb_control_msg():
 usb_bulk_msg():
--ETIMEDOUT             timeout expired before the transfer completed
+-ETIMEDOUT             Timeout expired before the transfer completed.
+                       In the future this code may change to -ETIME,
+                       whose definition is a closer match to this sort
+                       of error.
diff -urN linux/Documentation/usb/sn9c102.txt 
linux/Documentation/usb/sn9c102.txt
--- linux/Documentation/usb/sn9c102.txt 2005/01/25 04:27:51     1.7
+++ linux/Documentation/usb/sn9c102.txt 2005/03/18 17:36:45     1.8
@@ -210,8 +210,8 @@
 SN9C10x bridge, while the other two control the sensor chip. "reg" and
 "i2c_reg" hold the values of the current register index where the following
 reading/writing operations are addressed at through "val" and "i2c_val". Their
-use is not intended for end-users. Note that "i2c_reg" and "i2c_val" won't be
-created if the sensor does not actually support the standard I2C protocol or
+use is not intended for end-users. Note that "i2c_reg" and "i2c_val" will not
+be created if the sensor does not actually support the standard I2C protocol or
 its registers are not 8-bit long. Also, remember that you must be logged in as
 root before writing to them.
 
@@ -341,15 +341,8 @@
 All the available control settings of each image sensor are supported through
 the V4L2 interface.
 
-If you think your camera is based on the above hardware and is not actually
-listed in the above table, you may try to add the specific USB VendorID and
-ProductID identifiers to the sn9c102_id_table[] in the file "sn9c102_sensor.h";
-then compile, load the module again and look at the kernel output.
-If this works, please send an email to the author reporting the kernel
-messages, so that a new entry in the list of supported devices can be added.
-
 Donations of new models for further testing and support would be much
-appreciated. Non-available hardware won't be supported by the author of this
+appreciated. Non-available hardware will not be supported by the author of this
 driver.
 
 
diff -urN linux/Documentation/video4linux/CARDLIST.saa7134 
linux/Documentation/video4linux/CARDLIST.saa7134
--- linux/Documentation/video4linux/CARDLIST.saa7134    2004/04/23 15:54:05     
1.2
+++ linux/Documentation/video4linux/CARDLIST.saa7134    2005/03/18 17:36:45     
1.3
@@ -6,23 +6,23 @@
   5 -> SKNet Monster TV                         [1131:4e85]
   6 -> Tevion MD 9717                          
   7 -> KNC One TV-Station RDS / Typhoon TV Tuner RDS [1131:fe01,1894:fe01]
-  8 -> KNC One TV-Station DVR                   [1894:a006]
-  9 -> Terratec Cinergy 400 TV                  [153B:1142]
- 10 -> Medion 5044
- 11 -> Kworld/KuroutoShikou SAA7130-TVPCI
- 12 -> Terratec Cinergy 600 TV                  [153B:1143]
- 13 -> Medion 7134                              [16be:0003]
- 14 -> Typhoon TV+Radio 90031
- 15 -> ELSA EX-VISION 300TV                     [1048:226b]
- 16 -> ELSA EX-VISION 500TV                     [1048:226b]
- 17 -> ASUS TV-FM 7134                          [1043:4842,1043:4830,1043:4840]
- 18 -> AOPEN VA1000 POWER                       [1131:7133]
- 19 -> 10MOONS PCI TV CAPTURE CARD              [1131:2001]
- 20 -> BMK MPEX No Tuner
- 21 -> Compro VideoMate TV                      [185b:c100]
- 22 -> Matrox CronosPlus                        [102B:48d0]
- 23 -> Medion 2819/ AverMedia M156              [1461:a70b,1461:2115]
- 24 -> BMK MPEX Tuner
+  8 -> Terratec Cinergy 400 TV                  [153B:1142]
+  9 -> Medion 5044
+ 10 -> Kworld/KuroutoShikou SAA7130-TVPCI
+ 11 -> Terratec Cinergy 600 TV                  [153B:1143]
+ 12 -> Medion 7134                              [16be:0003]
+ 13 -> Typhoon TV+Radio 90031
+ 14 -> ELSA EX-VISION 300TV                     [1048:226b]
+ 15 -> ELSA EX-VISION 500TV                     [1048:226b]
+ 16 -> ASUS TV-FM 7134                          [1043:4842,1043:4830,1043:4840]
+ 17 -> AOPEN VA1000 POWER                       [1131:7133]
+ 18 -> BMK MPEX No Tuner
+ 19 -> Compro VideoMate TV                      [185b:c100]
+ 20 -> Matrox CronosPlus                        [102B:48d0]
+ 21 -> 10MOONS PCI TV CAPTURE CARD              [1131:2001]
+ 22 -> Medion 2819/ AverMedia M156              [1461:a70b,1461:2115]
+ 23 -> BMK MPEX Tuner
+ 24 -> KNC One TV-Station DVR                   [1894:a006]
  25 -> ASUS TV-FM 7133                          [1043:4843]
  26 -> Pinnacle PCTV Stereo (saa7134)           [11bd:002b]
  27 -> Manli MuchTV M-TV002
@@ -32,3 +32,4 @@
  31 -> Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) [1019:4cb5]
  32 -> AVACS SmartTV
  33 -> AVerMedia DVD EZMaker                    [1461:10ff]
+ 34 -> LifeView FlyTV Platinum33 mini           [5168:0212]
diff -urN linux/Documentation/video4linux/README.cx88 
linux/Documentation/video4linux/README.cx88
--- linux/Documentation/video4linux/README.cx88 2004/04/23 15:54:05     1.2
+++ linux/Documentation/video4linux/README.cx88 2005/03/18 17:36:45     1.3
@@ -11,9 +11,6 @@
 video
        - Basically works.
        - Some minor image quality glitches.
-       - Red and blue are swapped sometimes for not-yet known
-         reasons (seems to depend on the image size, try to resize
-         your tv app window as workaround ...).
        - For now only capture, overlay support isn't completed yet.
 
 audio
diff -urN linux/Documentation/video4linux/bttv/Cards 
linux/Documentation/video4linux/bttv/Cards
--- linux/Documentation/video4linux/bttv/Cards  2003/06/05 18:23:57     1.7
+++ linux/Documentation/video4linux/bttv/Cards  2005/03/18 17:36:45     1.8
@@ -1,9 +1,9 @@
 
 Gunther Mayer's bttv card gallery (graphical version of this text file :-)
-is available at: http://mayerg.gmxhome.de/bttv/bttv-gallery.html
+is available at: http://www.bttv-gallery.de/
 
 
-Suppported cards:
+Supported cards:
 Bt848/Bt848a/Bt849/Bt878/Bt879 cards
 ------------------------------------
 
@@ -166,6 +166,9 @@
                or Flyvideo 3000 (SAA7134) w/Stereo TV
                   These exist in variations w/FM and w/Remote sometimes denoted
                   by suffixes "FM" and "R".
+  3) You have a laptop (miniPCI card):
+      Product    = FlyTV Platinum Mini
+      Model/Chip = LR212/saa7135
 
       Lifeview.com.tw states (Feb. 2002):
       "The FlyVideo2000 and FlyVideo2000s product name have renamed to 
FlyVideo98."
diff -urN linux/Documentation/video4linux/bttv/README 
linux/Documentation/video4linux/bttv/README
--- linux/Documentation/video4linux/bttv/README 2004/03/11 16:46:40     1.14
+++ linux/Documentation/video4linux/bttv/README 2005/03/18 17:36:45     1.15
@@ -22,7 +22,7 @@
 cards is in CARDLIST.bttv
 
 If bttv takes very long to load (happens sometimes with the cheap
-cards which have no tuner), try adding this to your modprobe.conf:
+cards which have no tuner), try adding this to your modules.conf:
        options i2c-algo-bit bit_test=1
 
 For the WinTV/PVR you need one firmware file from the driver CD:
diff -urN linux/arch/alpha/kernel/alpha_ksyms.c 
linux/arch/alpha/kernel/alpha_ksyms.c
--- linux/arch/alpha/kernel/alpha_ksyms.c       2004/11/15 11:49:13     1.52
+++ linux/arch/alpha/kernel/alpha_ksyms.c       2005/03/18 17:36:45     1.53
@@ -176,7 +176,6 @@
 
 #ifdef CONFIG_SMP
 EXPORT_SYMBOL(synchronize_irq);
-EXPORT_SYMBOL(flush_tlb_all);
 EXPORT_SYMBOL(flush_tlb_mm);
 EXPORT_SYMBOL(flush_tlb_range);
 EXPORT_SYMBOL(flush_tlb_page);
diff -urN linux/arch/alpha/kernel/osf_sys.c linux/arch/alpha/kernel/osf_sys.c
--- linux/arch/alpha/kernel/osf_sys.c   2004/10/12 01:45:39     1.53
+++ linux/arch/alpha/kernel/osf_sys.c   2005/03/18 17:36:45     1.54
@@ -437,11 +437,10 @@
 osf_getdomainname(char __user *name, int namelen)
 {
        unsigned len;
-       int i, error;
+       int i;
 
-       error = verify_area(VERIFY_WRITE, name, namelen);
-       if (error)
-               goto out;
+       if (!access_ok(VERIFY_WRITE, name, namelen))
+               return -EFAULT;
 
        len = namelen;
        if (namelen > 32)
@@ -454,8 +453,8 @@
                        break;
        }
        up_read(&uts_sem);
- out:
-       return error;
+
+       return 0;
 }
 
 asmlinkage long
@@ -990,18 +989,19 @@
        char *bits;
        size_t size;
        long timeout;
-       int ret;
+       int ret = -EINVAL;
 
        timeout = MAX_SCHEDULE_TIMEOUT;
        if (tvp) {
                time_t sec, usec;
 
-               if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp)))
-                   || (ret = __get_user(sec, &tvp->tv_sec))
-                   || (ret = __get_user(usec, &tvp->tv_usec)))
+               if (!access_ok(VERIFY_READ, tvp, sizeof(*tvp))
+                   || __get_user(sec, &tvp->tv_sec)
+                   || __get_user(usec, &tvp->tv_usec)) {
+                       ret = -EFAULT;
                        goto out_nofds;
+               }
 
-               ret = -EINVAL;
                if (sec < 0 || usec < 0)
                        goto out_nofds;
 
@@ -1011,7 +1011,6 @@
                }
        }
 
-       ret = -EINVAL;
        if (n < 0 || n > current->files->max_fdset)
                goto out_nofds;
 
diff -urN linux/arch/alpha/kernel/setup.c linux/arch/alpha/kernel/setup.c
--- linux/arch/alpha/kernel/setup.c     2005/02/28 15:45:09     1.52
+++ linux/arch/alpha/kernel/setup.c     2005/03/18 17:36:45     1.53
@@ -111,8 +111,6 @@
 int alpha_using_srm;
 #endif
 
-unsigned char aux_device_present = 0xaa;
-
 #define N(a) (sizeof(a)/sizeof(a[0]))
 
 static struct alpha_machine_vector *get_sysvec(unsigned long, unsigned long,
diff -urN linux/arch/alpha/kernel/signal.c linux/arch/alpha/kernel/signal.c
--- linux/arch/alpha/kernel/signal.c    2004/10/25 20:44:09     1.36
+++ linux/arch/alpha/kernel/signal.c    2005/03/18 17:36:45     1.37
@@ -91,7 +91,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_flags, &act->sa_flags))
                        return -EFAULT;
@@ -103,7 +103,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_flags, &oact->sa_flags))
                        return -EFAULT;
@@ -298,7 +298,7 @@
        sigset_t set;
 
        /* Verify that it's a good sigcontext before using it */
-       if (verify_area(VERIFY_READ, sc, sizeof(*sc)))
+       if (!access_ok(VERIFY_READ, sc, sizeof(*sc)))
                goto give_sigsegv;
        if (__get_user(set.sig[0], &sc->sc_mask))
                goto give_sigsegv;
@@ -336,7 +336,7 @@
        sigset_t set;
 
        /* Verify that it's a good ucontext_t before using it */
-       if (verify_area(VERIFY_READ, &frame->uc, sizeof(frame->uc)))
+       if (!access_ok(VERIFY_READ, &frame->uc, sizeof(frame->uc)))
                goto give_sigsegv;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto give_sigsegv;
@@ -446,7 +446,7 @@
 
        oldsp = rdusp();
        frame = get_sigframe(ka, oldsp, sizeof(*frame));
-       if (verify_area(VERIFY_WRITE, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
                goto give_sigsegv;
 
        err |= setup_sigcontext(&frame->sc, regs, sw, set->sig[0], oldsp);
@@ -497,7 +497,7 @@
 
        oldsp = rdusp();
        frame = get_sigframe(ka, oldsp, sizeof(*frame));
-       if (verify_area(VERIFY_WRITE, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
                goto give_sigsegv;
 
        err |= copy_siginfo_to_user(&frame->info, info);
diff -urN linux/arch/alpha/kernel/smp.c linux/arch/alpha/kernel/smp.c
--- linux/arch/alpha/kernel/smp.c       2004/10/25 20:44:09     1.57
+++ linux/arch/alpha/kernel/smp.c       2005/03/18 17:36:45     1.58
@@ -78,8 +78,6 @@
 
 int smp_num_probed;            /* Internal processor count */
 int smp_num_cpus = 1;          /* Number that came online.  */
-cycles_t cacheflush_time;
-unsigned long cache_decay_ticks;
 
 extern void calibrate_delay(void);
 
@@ -217,15 +215,6 @@
        }
 
        freq = hwrpb->cycle_freq ? : est_cycle_freq;
-
-       cacheflush_time = (freq / 1000000) * (on_chip_cache << 10) / bandwidth;
-       cache_decay_ticks = cacheflush_time / (freq / 1000) * HZ / 1000;
-
-       printk("per-CPU timeslice cutoff: %ld.%02ld usecs.\n",
-              cacheflush_time/(freq/1000000),
-              (cacheflush_time*100/(freq/1000000)) % 100);
-       printk("task migration cache decay timeout: %ld msecs.\n",
-              (cache_decay_ticks + 1) * 1000 / HZ);
 }
 
 /* Wait until hwrpb->txrdy is clear for cpu.  Return -1 on timeout.  */
diff -urN linux/arch/arm/Kconfig linux/arch/arm/Kconfig
--- linux/arch/arm/Kconfig      2005/01/25 04:27:52     1.44
+++ linux/arch/arm/Kconfig      2005/03/18 17:36:45     1.45
@@ -231,7 +231,7 @@
 
 config SHARP_LOCOMO
        bool
-       depends on SA1100_COLLIE
+       depends on SA1100_COLLIE || MACH_POODLE
        default y
 
 config SHARP_SCOOP
diff -urN linux/arch/arm/Kconfig.debug linux/arch/arm/Kconfig.debug
--- linux/arch/arm/Kconfig.debug        2004/12/04 18:15:57     1.3
+++ linux/arch/arm/Kconfig.debug        2005/03/18 17:36:45     1.4
@@ -47,15 +47,6 @@
          you are concerned with the code size or don't want to see these
          messages.
 
-config DEBUG_INFO
-       bool "Include GDB debugging information in kernel binary"
-       help
-         Say Y here to include source-level debugging information in the
-         `vmlinux' binary image. This is handy if you want to use gdb or
-         addr2line to debug the kernel. It has no impact on the in-memory
-         footprint of the running kernel but it can increase the amount of
-         time and disk space needed for compilation of the kernel. If in
-         doubt say N.
 
 # These options are only for real kernel hackers who want to get their hands 
dirty.
 config DEBUG_LL
diff -urN linux/arch/arm/common/locomo.c linux/arch/arm/common/locomo.c
--- linux/arch/arm/common/locomo.c      2005/01/13 14:05:17     1.3
+++ linux/arch/arm/common/locomo.c      2005/03/18 17:36:45     1.4
@@ -34,11 +34,33 @@
 
 #include <asm/hardware/locomo.h>
 
+/* M62332 output channel selection */
+#define M62332_EVR_CH  1       /* M62332 volume channel number  */
+                               /*   0 : CH.1 , 1 : CH. 2        */
+/* DAC send data */
+#define        M62332_SLAVE_ADDR       0x4e    /* Slave address  */
+#define        M62332_W_BIT            0x00    /* W bit (0 only) */
+#define        M62332_SUB_ADDR         0x00    /* Sub address    */
+#define        M62332_A_BIT            0x00    /* A bit (0 only) */
+
+/* DAC setup and hold times (expressed in us) */
+#define DAC_BUS_FREE_TIME      5       /*   4.7 us */
+#define DAC_START_SETUP_TIME   5       /*   4.7 us */
+#define DAC_STOP_SETUP_TIME    4       /*   4.0 us */
+#define DAC_START_HOLD_TIME    5       /*   4.7 us */
+#define DAC_SCL_LOW_HOLD_TIME  5       /*   4.7 us */
+#define DAC_SCL_HIGH_HOLD_TIME 4       /*   4.0 us */
+#define DAC_DATA_SETUP_TIME    1       /*   250 ns */
+#define DAC_DATA_HOLD_TIME     1       /*   300 ns */
+#define DAC_LOW_SETUP_TIME     1       /*   300 ns */
+#define DAC_HIGH_SETUP_TIME    1       /*  1000 ns */
+
 /* the following is the overall data for the locomo chip */
 struct locomo {
        struct device *dev;
        unsigned long phys;
        unsigned int irq;
+       spinlock_t lock;
        void *base;
 };
 
@@ -50,7 +72,57 @@
        const char *    name;
 };
 
+/* All the locomo devices.  If offset is non-zero, the mapbase for the
+ * locomo_dev will be set to the chip base plus offset.  If offset is
+ * zero, then the mapbase for the locomo_dev will be set to zero.  An
+ * offset of zero means the device only uses GPIOs or other helper
+ * functions inside this file */
 static struct locomo_dev_info locomo_devices[] = {
+       {
+               .devid          = LOCOMO_DEVID_KEYBOARD,
+               .irq = {
+                       IRQ_LOCOMO_KEY,
+               },
+               .name           = "locomo-keyboard",
+               .offset         = LOCOMO_KEYBOARD,
+               .length         = 16,
+       },
+       {
+               .devid          = LOCOMO_DEVID_FRONTLIGHT,
+               .irq            = {},
+               .name           = "locomo-frontlight",
+               .offset         = LOCOMO_FRONTLIGHT,
+               .length         = 8,
+
+       },
+       {
+               .devid          = LOCOMO_DEVID_BACKLIGHT,
+               .irq            = {},
+               .name           = "locomo-backlight",
+               .offset         = LOCOMO_BACKLIGHT,
+               .length         = 8,
+       },
+       {
+               .devid          = LOCOMO_DEVID_AUDIO,
+               .irq            = {},
+               .name           = "locomo-audio",
+               .offset         = LOCOMO_AUDIO,
+               .length         = 4,
+       },
+       {
+               .devid          = LOCOMO_DEVID_LED,
+               .irq            = {},
+               .name           = "locomo-led",
+               .offset         = LOCOMO_LED,
+               .length         = 8,
+       },
+       {
+               .devid          = LOCOMO_DEVID_UART,
+               .irq            = {},
+               .name           = "locomo-uart",
+               .offset         = 0,
+               .length         = 0,
+       },
 };
 
 
@@ -146,7 +218,7 @@
        struct irqdesc *d;
        void *mapbase = get_irq_chipdata(irq);
 
-       if (locomo_readl(mapbase + LOCOMO_KIC) & 0x0001) {
+       if (locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC) & 0x0001) {
                d = irq_desc + LOCOMO_IRQ_KEY_START;
                d->handle(LOCOMO_IRQ_KEY_START, d, regs);
        }
@@ -156,27 +228,27 @@
 {
        void *mapbase = get_irq_chipdata(irq);
        unsigned int r;
-       r = locomo_readl(mapbase + LOCOMO_KIC);
+       r = locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC);
        r &= ~(0x0100 << (irq - LOCOMO_IRQ_KEY_START));
-       locomo_writel(r, mapbase + LOCOMO_KIC);
+       locomo_writel(r, mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC);
 }
 
 static void locomo_key_mask_irq(unsigned int irq)
 {
        void *mapbase = get_irq_chipdata(irq);
        unsigned int r;
-       r = locomo_readl(mapbase + LOCOMO_KIC);
+       r = locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC);
        r &= ~(0x0010 << (irq - LOCOMO_IRQ_KEY_START));
-       locomo_writel(r, mapbase + LOCOMO_KIC);
+       locomo_writel(r, mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC);
 }
 
 static void locomo_key_unmask_irq(unsigned int irq)
 {
        void *mapbase = get_irq_chipdata(irq);
        unsigned int r;
-       r = locomo_readl(mapbase + LOCOMO_KIC);
+       r = locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC);
        r |= (0x0010 << (irq - LOCOMO_IRQ_KEY_START));
-       locomo_writel(r, mapbase + LOCOMO_KIC);
+       locomo_writel(r, mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC);
 }
 
 static struct irqchip locomo_key_chip = {
@@ -421,13 +493,11 @@
 {
        struct locomo_dev *dev = LOCOMO_DEV(_dev);
 
-       release_resource(&dev->res);
        kfree(dev);
 }
 
 static int
-locomo_init_one_child(struct locomo *lchip, struct resource *parent,
-                     struct locomo_dev_info *info)
+locomo_init_one_child(struct locomo *lchip, struct locomo_dev_info *info)
 {
        struct locomo_dev *dev;
        int ret;
@@ -454,25 +524,17 @@
        dev->dev.bus     = &locomo_bus_type;
        dev->dev.release = locomo_dev_release;
        dev->dev.coherent_dma_mask = lchip->dev->coherent_dma_mask;
-       dev->res.start   = lchip->phys + info->offset;
-       dev->res.end     = dev->res.start + info->length;
-       dev->res.name    = dev->dev.bus_id;
-       dev->res.flags   = IORESOURCE_MEM;
-       dev->mapbase     = lchip->base + info->offset;
-       memmove(dev->irq, info->irq, sizeof(dev->irq));
 
-       if (info->length) {
-               ret = request_resource(parent, &dev->res);
-               if (ret) {
-                       printk("LoCoMo: failed to allocate resource for %s\n",
-                               dev->res.name);
-                       goto out;
-               }
-       }
+       if (info->offset)
+               dev->mapbase = lchip->base + info->offset;
+       else
+               dev->mapbase = 0;
+       dev->length = info->length;
+
+       memmove(dev->irq, info->irq, sizeof(dev->irq));
 
        ret = device_register(&dev->dev);
        if (ret) {
-               release_resource(&dev->res);
  out:
                kfree(dev);
        }
@@ -504,6 +566,8 @@
 
        memset(lchip, 0, sizeof(struct locomo));
 
+       spin_lock_init(&lchip->lock);
+
        lchip->dev = me;
        dev_set_drvdata(lchip->dev, lchip);
 
@@ -523,7 +587,7 @@
        /* locomo initialize */
        locomo_writel(0, lchip->base + LOCOMO_ICR);
        /* KEYBOARD */
-       locomo_writel(0, lchip->base + LOCOMO_KIC);
+       locomo_writel(0, lchip->base + LOCOMO_KEYBOARD + LOCOMO_KIC);
 
        /* GPIO */
        locomo_writel(0, lchip->base + LOCOMO_GPO);
@@ -534,8 +598,8 @@
        locomo_writel(0, lchip->base + LOCOMO_GIE);
 
        /* FrontLight */
-       locomo_writel(0, lchip->base + LOCOMO_ALS);
-       locomo_writel(0, lchip->base + LOCOMO_ALD);
+       locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
+       locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
        /* Longtime timer */
        locomo_writel(0, lchip->base + LOCOMO_LTINT);
        /* SPI */
@@ -578,7 +642,7 @@
                locomo_setup_irq(lchip);
 
        for (i = 0; i < ARRAY_SIZE(locomo_devices); i++)
-               locomo_init_one_child(lchip, mem, &locomo_devices[i]);
+               locomo_init_one_child(lchip, &locomo_devices[i]);
 
        return 0;
 
@@ -654,6 +718,238 @@
        return (struct locomo *)dev_get_drvdata(ldev->dev.parent);
 }
 
+void locomo_gpio_set_dir(struct locomo_dev *ldev, unsigned int bits, unsigned 
int dir)
+{
+       struct locomo *lchip = locomo_chip_driver(ldev);
+       unsigned long flags;
+       unsigned int r;
+
+       spin_lock_irqsave(&lchip->lock, flags);
+
+       r = locomo_readl(lchip->base + LOCOMO_GPD);
+       r &= ~bits;
+       locomo_writel(r, lchip->base + LOCOMO_GPD);
+
+       r = locomo_readl(lchip->base + LOCOMO_GPE);
+       if (dir)
+               r |= bits;
+       else
+               r &= ~bits;
+       locomo_writel(r, lchip->base + LOCOMO_GPE);
+
+       spin_unlock_irqrestore(&lchip->lock, flags);
+}
+
+unsigned int locomo_gpio_read_level(struct locomo_dev *ldev, unsigned int bits)
+{
+       struct locomo *lchip = locomo_chip_driver(ldev);
+       unsigned long flags;
+       unsigned int ret;
+
+       spin_lock_irqsave(&lchip->lock, flags);
+       ret = locomo_readl(lchip->base + LOCOMO_GPL);
+       spin_unlock_irqrestore(&lchip->lock, flags);
+
+       ret &= bits;
+       return ret;
+}
+
+unsigned int locomo_gpio_read_output(struct locomo_dev *ldev, unsigned int 
bits)
+{
+       struct locomo *lchip = locomo_chip_driver(ldev);
+       unsigned long flags;
+       unsigned int ret;
+
+       spin_lock_irqsave(&lchip->lock, flags);
+       ret = locomo_readl(lchip->base + LOCOMO_GPO);
+       spin_unlock_irqrestore(&lchip->lock, flags);
+
+       ret &= bits;
+       return ret;
+}
+
+void locomo_gpio_write(struct locomo_dev *ldev, unsigned int bits, unsigned 
int set)
+{
+       struct locomo *lchip = locomo_chip_driver(ldev);
+       unsigned long flags;
+       unsigned int r;
+
+       spin_lock_irqsave(&lchip->lock, flags);
+
+       r = locomo_readl(lchip->base + LOCOMO_GPO);
+       if (set)
+               r |= bits;
+       else
+               r &= ~bits;
+       locomo_writel(r, lchip->base + LOCOMO_GPO);
+
+       spin_unlock_irqrestore(&lchip->lock, flags);
+}
+
+static void locomo_m62332_sendbit(void *mapbase, int bit)
+{
+       unsigned int r;
+
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SCLOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       udelay(DAC_DATA_HOLD_TIME);     /* 300 nsec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SCLOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       udelay(DAC_SCL_LOW_HOLD_TIME);  /* 4.7 usec */
+
+       if (bit & 1) {
+               r = locomo_readl(mapbase + LOCOMO_DAC);
+               r |=  LOCOMO_DAC_SDAOEB;
+               locomo_writel(r, mapbase + LOCOMO_DAC);
+               udelay(DAC_HIGH_SETUP_TIME);    /* 1000 nsec */
+       } else {
+               r = locomo_readl(mapbase + LOCOMO_DAC);
+               r &=  ~(LOCOMO_DAC_SDAOEB);
+               locomo_writel(r, mapbase + LOCOMO_DAC);
+               udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       }
+
+       udelay(DAC_DATA_SETUP_TIME);    /* 250 nsec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r |=  LOCOMO_DAC_SCLOEB;
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_HIGH_SETUP_TIME);    /* 1000 nsec */
+       udelay(DAC_SCL_HIGH_HOLD_TIME); /*  4.0 usec */
+}
+
+void locomo_m62332_senddata(struct locomo_dev *ldev, unsigned int dac_data, 
int channel)
+{
+       struct locomo *lchip = locomo_chip_driver(ldev);
+       int i;
+       unsigned char data;
+       unsigned int r;
+       void *mapbase = lchip->base;
+       unsigned long flags;
+
+       spin_lock_irqsave(&lchip->lock, flags);
+
+       /* Start */
+       udelay(DAC_BUS_FREE_TIME);      /* 5.0 usec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r |=  LOCOMO_DAC_SCLOEB | LOCOMO_DAC_SDAOEB;
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_HIGH_SETUP_TIME);    /* 1000 nsec */
+       udelay(DAC_SCL_HIGH_HOLD_TIME); /* 4.0 usec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SDAOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_START_HOLD_TIME);    /* 5.0 usec */
+       udelay(DAC_DATA_HOLD_TIME);     /* 300 nsec */
+
+       /* Send slave address and W bit (LSB is W bit) */
+       data = (M62332_SLAVE_ADDR << 1) | M62332_W_BIT;
+       for (i = 1; i <= 8; i++) {
+               locomo_m62332_sendbit(mapbase, data >> (8 - i));
+       }
+
+       /* Check A bit */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SCLOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       udelay(DAC_SCL_LOW_HOLD_TIME);  /* 4.7 usec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SDAOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r |=  LOCOMO_DAC_SCLOEB;
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_HIGH_SETUP_TIME);    /* 1000 nsec */
+       udelay(DAC_SCL_HIGH_HOLD_TIME); /* 4.7 usec */
+       if (locomo_readl(mapbase + LOCOMO_DAC) & LOCOMO_DAC_SDAOEB) {   /* High 
is error */
+               printk(KERN_WARNING "locomo: m62332_senddata Error 1\n");
+               return;
+       }
+
+       /* Send Sub address (LSB is channel select) */
+       /*    channel = 0 : ch1 select              */
+       /*            = 1 : ch2 select              */
+       data = M62332_SUB_ADDR + channel;
+       for (i = 1; i <= 8; i++) {
+               locomo_m62332_sendbit(mapbase, data >> (8 - i));
+       }
+
+       /* Check A bit */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SCLOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       udelay(DAC_SCL_LOW_HOLD_TIME);  /* 4.7 usec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SDAOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r |=  LOCOMO_DAC_SCLOEB;
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_HIGH_SETUP_TIME);    /* 1000 nsec */
+       udelay(DAC_SCL_HIGH_HOLD_TIME); /* 4.7 usec */
+       if (locomo_readl(mapbase + LOCOMO_DAC) & LOCOMO_DAC_SDAOEB) {   /* High 
is error */
+               printk(KERN_WARNING "locomo: m62332_senddata Error 2\n");
+               return;
+       }
+
+       /* Send DAC data */
+       for (i = 1; i <= 8; i++) {
+               locomo_m62332_sendbit(mapbase, dac_data >> (8 - i));
+       }
+
+       /* Check A bit */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SCLOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       udelay(DAC_SCL_LOW_HOLD_TIME);  /* 4.7 usec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SDAOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r |=  LOCOMO_DAC_SCLOEB;
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_HIGH_SETUP_TIME);    /* 1000 nsec */
+       udelay(DAC_SCL_HIGH_HOLD_TIME); /* 4.7 usec */
+       if (locomo_readl(mapbase + LOCOMO_DAC) & LOCOMO_DAC_SDAOEB) {   /* High 
is error */
+               printk(KERN_WARNING "locomo: m62332_senddata Error 3\n");
+               return;
+       }
+
+       /* stop */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r &=  ~(LOCOMO_DAC_SCLOEB);
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 300 nsec */
+       udelay(DAC_SCL_LOW_HOLD_TIME);  /* 4.7 usec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r |=  LOCOMO_DAC_SCLOEB;
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_HIGH_SETUP_TIME);    /* 1000 nsec */
+       udelay(DAC_SCL_HIGH_HOLD_TIME); /* 4 usec */
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r |=  LOCOMO_DAC_SDAOEB;
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_HIGH_SETUP_TIME);    /* 1000 nsec */
+       udelay(DAC_SCL_HIGH_HOLD_TIME); /* 4 usec */
+
+       r = locomo_readl(mapbase + LOCOMO_DAC);
+       r |=  LOCOMO_DAC_SCLOEB | LOCOMO_DAC_SDAOEB;
+       locomo_writel(r, mapbase + LOCOMO_DAC);
+       udelay(DAC_LOW_SETUP_TIME);     /* 1000 nsec */
+       udelay(DAC_SCL_LOW_HOLD_TIME);  /* 4.7 usec */
+
+       spin_unlock_irqrestore(&lchip->lock, flags);
+}
+
 /*
  *     LoCoMo "Register Access Bus."
  *
@@ -755,3 +1051,8 @@
 
 EXPORT_SYMBOL(locomo_driver_register);
 EXPORT_SYMBOL(locomo_driver_unregister);
+EXPORT_SYMBOL(locomo_gpio_set_dir);
+EXPORT_SYMBOL(locomo_gpio_read_level);
+EXPORT_SYMBOL(locomo_gpio_read_output);
+EXPORT_SYMBOL(locomo_gpio_write);
+EXPORT_SYMBOL(locomo_m62332_senddata);
diff -urN linux/arch/arm/common/rtctime.c linux/arch/arm/common/rtctime.c
--- linux/arch/arm/common/rtctime.c     2005/01/25 04:27:52     1.4
+++ linux/arch/arm/common/rtctime.c     2005/03/18 17:36:45     1.5
@@ -94,24 +94,29 @@
 EXPORT_SYMBOL(rtc_time_to_tm);
 
 /*
- * Convert Gregorian date to seconds since 01-01-1970 00:00:00.
+ * Does the rtc_time represent a valid date/time?
  */
-int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time)
+int rtc_valid_tm(struct rtc_time *tm)
 {
-       unsigned int yrs = tm->tm_year + 1900;
-
-       *time = 0;
-
-       if (yrs < 1970 ||
+       if (tm->tm_year < 70 ||
            tm->tm_mon >= 12 ||
            tm->tm_mday < 1 ||
-           tm->tm_mday > month_days(tm->tm_mon, yrs) ||
+           tm->tm_mday > month_days(tm->tm_mon, tm->tm_year + 1900) ||
            tm->tm_hour >= 24 ||
            tm->tm_min >= 60 ||
            tm->tm_sec >= 60)
                return -EINVAL;
 
-       *time = mktime(yrs, tm->tm_mon + 1, tm->tm_mday,
+       return 0;
+}
+EXPORT_SYMBOL(rtc_valid_tm);
+
+/*
+ * Convert Gregorian date to seconds since 01-01-1970 00:00:00.
+ */
+int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time)
+{
+       *time = mktime(tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
                       tm->tm_hour, tm->tm_min, tm->tm_sec);
 
        return 0;
@@ -144,7 +149,13 @@
 
 static inline int rtc_set_time(struct rtc_ops *ops, struct rtc_time *tm)
 {
-       return ops->set_time(tm);
+       int ret;
+
+       ret = rtc_valid_tm(tm);
+       if (ret == 0)
+               ret = ops->set_time(tm);
+
+       return ret;
 }
 
 static inline int rtc_read_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
@@ -412,7 +423,6 @@
        struct rtc_wkalrm alrm;
        struct rtc_time tm;
        char *p = page;
-       int len;
 
        rtc_read_time(ops, &tm);
 
@@ -461,13 +471,7 @@
        if (ops->proc)
                p += ops->proc(p);
 
-       len = (p - page) - off;
-       if (len < 0)
-               len = 0;
-       *eof = len <= count;
-       *start = page + off;
-
-       return len;
+       return p - page;
 }
 
 int register_rtc(struct rtc_ops *ops)
diff -urN linux/arch/arm/common/scoop.c linux/arch/arm/common/scoop.c
--- linux/arch/arm/common/scoop.c       2005/01/25 04:27:52     1.2
+++ linux/arch/arm/common/scoop.c       2005/03/18 17:36:45     1.3
@@ -15,47 +15,52 @@
 #include <asm/io.h>
 #include <asm/hardware/scoop.h>
 
-static void __iomem *scoop_io_base;
+#define SCOOP_REG(d,adr) (*(volatile unsigned short*)(d +(adr)))
 
-#define SCOOP_REG(adr) (*(volatile unsigned short*)(scoop_io_base+(adr)))
+struct  scoop_dev {
+       void  *base;
+       spinlock_t scoop_lock;
+       u32 scoop_gpwr;
+};
 
-void reset_scoop(void)
+void reset_scoop(struct device *dev)
 {
-       SCOOP_REG(SCOOP_MCR) = 0x0100;  // 00
-       SCOOP_REG(SCOOP_CDR) = 0x0000;  // 04
-       SCOOP_REG(SCOOP_CPR) = 0x0000;  // 0C
-       SCOOP_REG(SCOOP_CCR) = 0x0000;  // 10
-       SCOOP_REG(SCOOP_IMR) = 0x0000;  // 18
-       SCOOP_REG(SCOOP_IRM) = 0x00FF;  // 14
-       SCOOP_REG(SCOOP_ISR) = 0x0000;  // 1C
-       SCOOP_REG(SCOOP_IRM) = 0x0000;
-}
+       struct scoop_dev *sdev = dev_get_drvdata(dev);
 
-static DEFINE_SPINLOCK(scoop_lock);
-static u32 scoop_gpwr;
+       SCOOP_REG(sdev->base,SCOOP_MCR) = 0x0100;  // 00
+       SCOOP_REG(sdev->base,SCOOP_CDR) = 0x0000;  // 04
+       SCOOP_REG(sdev->base,SCOOP_CPR) = 0x0000;  // 0C
+       SCOOP_REG(sdev->base,SCOOP_CCR) = 0x0000;  // 10
+       SCOOP_REG(sdev->base,SCOOP_IMR) = 0x0000;  // 18
+       SCOOP_REG(sdev->base,SCOOP_IRM) = 0x00FF;  // 14
+       SCOOP_REG(sdev->base,SCOOP_ISR) = 0x0000;  // 1C
+       SCOOP_REG(sdev->base,SCOOP_IRM) = 0x0000;
+}
 
-unsigned short set_scoop_gpio(unsigned short bit)
+unsigned short set_scoop_gpio(struct device *dev, unsigned short bit)
 {
        unsigned short gpio_bit;
        unsigned long flag;
+       struct scoop_dev *sdev = dev_get_drvdata(dev);
 
-       spin_lock_irqsave(&scoop_lock, flag);
-       gpio_bit = SCOOP_REG(SCOOP_GPWR) | bit;
-       SCOOP_REG(SCOOP_GPWR) = gpio_bit;
-       spin_unlock_irqrestore(&scoop_lock, flag);
+       spin_lock_irqsave(&sdev->scoop_lock, flag);
+       gpio_bit = SCOOP_REG(sdev->base, SCOOP_GPWR) | bit;
+       SCOOP_REG(sdev->base, SCOOP_GPWR) = gpio_bit;
+       spin_unlock_irqrestore(&sdev->scoop_lock, flag);
 
        return gpio_bit;
 }
 
-unsigned short reset_scoop_gpio(unsigned short bit)
+unsigned short reset_scoop_gpio(struct device *dev, unsigned short bit)
 {
        unsigned short gpio_bit;
        unsigned long flag;
+       struct scoop_dev *sdev = dev_get_drvdata(dev);
 
-       spin_lock_irqsave(&scoop_lock, flag);
-       gpio_bit = SCOOP_REG(SCOOP_GPWR) & ~bit;
-       SCOOP_REG(SCOOP_GPWR) = gpio_bit;
-       spin_unlock_irqrestore(&scoop_lock, flag);
+       spin_lock_irqsave(&sdev->scoop_lock, flag);
+       gpio_bit = SCOOP_REG(sdev->base, SCOOP_GPWR) & ~bit;
+       SCOOP_REG(sdev->base,SCOOP_GPWR) = gpio_bit;
+       spin_unlock_irqrestore(&sdev->scoop_lock, flag);
 
        return gpio_bit;
 }
@@ -63,25 +68,30 @@
 EXPORT_SYMBOL(set_scoop_gpio);
 EXPORT_SYMBOL(reset_scoop_gpio);
 
-unsigned short read_scoop_reg(unsigned short reg)
+unsigned short read_scoop_reg(struct device *dev, unsigned short reg)
 {
-       return SCOOP_REG(reg);
+       struct scoop_dev *sdev = dev_get_drvdata(dev);
+       return SCOOP_REG(sdev->base,reg);
 }
 
-void write_scoop_reg(unsigned short reg, unsigned short data)
+void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short 
data)
 {
-       SCOOP_REG(reg)=data;
+       struct scoop_dev *sdev = dev_get_drvdata(dev);
+       SCOOP_REG(sdev->base,reg)=data;
 }
 
 EXPORT_SYMBOL(reset_scoop);
 EXPORT_SYMBOL(read_scoop_reg);
 EXPORT_SYMBOL(write_scoop_reg);
 
+#ifdef CONFIG_PM
 static int scoop_suspend(struct device *dev, uint32_t state, uint32_t level)
 {
        if (level == SUSPEND_POWER_DOWN) {
-               scoop_gpwr = SCOOP_REG(SCOOP_GPWR);
-               SCOOP_REG(SCOOP_GPWR) = 0;
+               struct scoop_dev *sdev = dev_get_drvdata(dev);
+
+               sdev->scoop_gpwr = SCOOP_REG(sdev->base,SCOOP_GPWR);
+               SCOOP_REG(sdev->base,SCOOP_GPWR) = 0;
        }
        return 0;
 }
@@ -89,13 +99,20 @@
 static int scoop_resume(struct device *dev, uint32_t level)
 {
        if (level == RESUME_POWER_ON) {
-               SCOOP_REG(SCOOP_GPWR) = scoop_gpwr;
+               struct scoop_dev *sdev = dev_get_drvdata(dev);
+
+               SCOOP_REG(sdev->base,SCOOP_GPWR) = sdev->scoop_gpwr;
        }
        return 0;
 }
+#else
+#define scoop_suspend  NULL
+#define scoop_resume   NULL
+#endif
 
 int __init scoop_probe(struct device *dev)
 {
+       struct scoop_dev *devptr;
        struct scoop_config *inf;
        struct platform_device *pdev = to_platform_device(dev);
        struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -103,25 +120,50 @@
        if (!mem)
                return -EINVAL;
 
+       devptr = kmalloc(sizeof(struct scoop_dev), GFP_KERNEL);
+
+       if (!devptr)
+               return  -ENOMEM;
+
+       memset(devptr, 0, sizeof(struct scoop_dev));
+       spin_lock_init(&devptr->scoop_lock);
+
        inf = dev->platform_data;
-       scoop_io_base = ioremap(mem->start, 0x1000);
-       if (!scoop_io_base)
+       devptr->base = ioremap(mem->start, mem->end - mem->start + 1);
+
+       if (!devptr->base) {
+               kfree(devptr);
                return -ENOMEM;
+       }
 
-       SCOOP_REG(SCOOP_MCR) = 0x0140;
+       dev_set_drvdata(dev, devptr);
 
-       reset_scoop();
+       printk("Sharp Scoop Device found at 0x%08x -> 0x%08x\n",(unsigned 
int)mem->start,(unsigned int)devptr->base);
 
-       SCOOP_REG(SCOOP_GPCR) = inf->io_dir & 0xffff;
-       SCOOP_REG(SCOOP_GPWR) = inf->io_out & 0xffff;
+       SCOOP_REG(devptr->base, SCOOP_MCR) = 0x0140;
+       reset_scoop(dev);
+       SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff;
+       SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff;
 
        return 0;
 }
 
+static int scoop_remove(struct device *dev)
+{
+       struct scoop_dev *sdev = dev_get_drvdata(dev);
+       if (sdev) {
+               iounmap(sdev->base);
+               kfree(sdev);
+               dev_set_drvdata(dev, NULL);
+       }
+       return 0;
+}
+
 static struct device_driver scoop_driver = {
        .name           = "sharp-scoop",
        .bus            = &platform_bus_type,
        .probe          = scoop_probe,
+       .remove         = scoop_remove,
        .suspend        = scoop_suspend,
        .resume         = scoop_resume,
 };
diff -urN linux/arch/arm/configs/pxa255-idp_defconfig 
linux/arch/arm/configs/pxa255-idp_defconfig
--- linux/arch/arm/configs/pxa255-idp_defconfig 1970/01/01 00:00:00
+++ linux/arch/arm/configs/pxa255-idp_defconfig Fri Mar 18 17:36:45 2005        
1.1
@@ -0,0 +1,765 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.11-rc3
+# Fri Feb 11 16:53:43 2005
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_IOMAP=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+# CONFIG_IKCONFIG 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_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+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
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODULE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+CONFIG_ARCH_PXA_IDP=y
+# CONFIG_PXA_SHARPSL is not set
+CONFIG_PXA25x=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_MINICACHE=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# General setup
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+# CONFIG_XIP_KERNEL is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PC-card bridges
+#
+
+#
+# At least one math emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_PM is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="root=/dev/nfs ip=dhcp console=ttyS0,115200 mem=64M"
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+# CONFIG_MTD_CFI_I1 is not set
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_SHARP_SL is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CDROM_PKTCDVD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# 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
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_IP_TCPDIAG=y
+# CONFIG_IP_TCPDIAG_IPV6 is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+# CONFIG_NET_CLS_ROUTE is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_SMC91X=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_SCSI is not set
+
+#
+# Fusion MPT device support
+#
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+
+#
+# XFS support
+#
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+# CONFIG_VFAT_FS is not set
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+# CONFIG_JFFS2_FS_NAND is not set
+# CONFIG_JFFS2_FS_NOR_ECC is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# Misc devices
+#
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Kernel hacking
+#
+CONFIG_DEBUG_KERNEL=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff -urN linux/arch/arm/configs/s3c2410_defconfig 
linux/arch/arm/configs/s3c2410_defconfig
--- linux/arch/arm/configs/s3c2410_defconfig    2005/01/25 04:27:52     1.8
+++ linux/arch/arm/configs/s3c2410_defconfig    2005/03/18 17:36:45     1.9
@@ -86,9 +86,13 @@
 #
 CONFIG_ARCH_BAST=y
 CONFIG_ARCH_H1940=y
+CONFIG_MACH_N30=y
 CONFIG_ARCH_SMDK2410=y
+CONFIG_ARCH_S3C2440=y
 CONFIG_MACH_VR1000=y
 CONFIG_MACH_RX3715=y
+CONFIG_MACH_OTOM=y
+CONFIG_MACH_NEXCODER_2440=y
 CONFIG_CPU_S3C2410=y
 CONFIG_CPU_S3C2440=y
 
diff -urN linux/arch/arm/kernel/calls.S linux/arch/arm/kernel/calls.S
--- linux/arch/arm/kernel/calls.S       2005/02/13 20:16:14     1.27
+++ linux/arch/arm/kernel/calls.S       2005/03/18 17:36:45     1.28
@@ -1,7 +1,7 @@
 /*
  *  linux/arch/arm/kernel/calls.S
  *
- *  Copyright (C) 1995-2004 Russell King
+ *  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
@@ -10,7 +10,7 @@
  *  This file is included twice in entry-common.S
  */
 #ifndef NR_syscalls
-#define NR_syscalls 288
+#define NR_syscalls 320
 #else
 
 __syscall_start:
@@ -295,6 +295,38 @@
                .long   sys_mq_notify
                .long   sys_mq_getsetattr
 /* 280 */      .long   sys_waitid
+               .long   sys_socket
+               .long   sys_bind
+               .long   sys_connect
+               .long   sys_listen
+/* 285 */      .long   sys_accept
+               .long   sys_getsockname
+               .long   sys_getpeername
+               .long   sys_socketpair
+               .long   sys_send
+/* 290 */      .long   sys_sendto
+               .long   sys_recv
+               .long   sys_recvfrom
+               .long   sys_shutdown
+               .long   sys_setsockopt
+/* 295 */      .long   sys_getsockopt
+               .long   sys_sendmsg
+               .long   sys_recvmsg
+               .long   sys_semop
+               .long   sys_semget
+/* 300 */      .long   sys_semctl
+               .long   sys_msgsnd
+               .long   sys_msgrcv
+               .long   sys_msgget
+               .long   sys_msgctl
+/* 305 */      .long   sys_shmat
+               .long   sys_shmdt
+               .long   sys_shmget
+               .long   sys_shmctl
+               .long   sys_add_key
+/* 310 */      .long   sys_request_key
+               .long   sys_keyctl
+               .long   sys_semtimedop
 __syscall_end:
 
                .rept   NR_syscalls - (__syscall_end - __syscall_start) / 4
diff -urN linux/arch/arm/kernel/ecard.c linux/arch/arm/kernel/ecard.c
--- linux/arch/arm/kernel/ecard.c       2004/11/15 11:49:14     1.40
+++ linux/arch/arm/kernel/ecard.c       2005/03/18 17:36:45     1.41
@@ -85,27 +85,21 @@
 };
 
 asmlinkage extern int
-ecard_loader_reset(volatile unsigned char *pa, loader_t loader);
+ecard_loader_reset(unsigned long base, loader_t loader);
 asmlinkage extern int
-ecard_loader_read(int off, volatile unsigned char *pa, loader_t loader);
+ecard_loader_read(int off, unsigned long base, loader_t loader);
 
-static const struct ecard_id *
-ecard_match_device(const struct ecard_id *ids, struct expansion_card *ec);
-
-static inline unsigned short
-ecard_getu16(unsigned char *v)
+static inline unsigned short ecard_getu16(unsigned char *v)
 {
        return v[0] | v[1] << 8;
 }
 
-static inline signed long
-ecard_gets24(unsigned char *v)
+static inline signed long ecard_gets24(unsigned char *v)
 {
        return v[0] | v[1] << 8 | v[2] << 16 | ((v[2] & 0x80) ? 0xff000000 : 0);
 }
 
-static inline ecard_t *
-slot_to_ecard(unsigned int slot)
+static inline ecard_t *slot_to_ecard(unsigned int slot)
 {
        return slot < MAX_ECARDS ? slot_to_expcard[slot] : NULL;
 }
@@ -122,26 +116,31 @@
  * From a security standpoint, we trust the card vendors.  This
  * may be a misplaced trust.
  */
-#define BUS_ADDR(x) ((((unsigned long)(x)) << 2) + IO_BASE)
-#define POD_INT_ADDR(x)        ((volatile unsigned char *)\
-                        ((BUS_ADDR((x)) - IO_BASE) + IO_START))
-
 static void ecard_task_reset(struct ecard_request *req)
 {
        struct expansion_card *ec = req->ec;
-       if (ec->loader)
-               ecard_loader_reset(POD_INT_ADDR(ec->podaddr), ec->loader);
+       struct resource *res;
+
+       res = ec->slot_no == 8
+               ? &ec->resource[ECARD_RES_MEMC]
+               : ec->type == ECARD_EASI
+                 ? &ec->resource[ECARD_RES_EASI]
+                 : &ec->resource[ECARD_RES_IOCSYNC];
+
+       ecard_loader_reset(res->start, ec->loader);
 }
 
 static void ecard_task_readbytes(struct ecard_request *req)
 {
-       unsigned char *buf = (unsigned char *)req->buffer;
-       volatile unsigned char *base_addr =
-               (volatile unsigned char *)POD_INT_ADDR(req->ec->podaddr);
+       struct expansion_card *ec = req->ec;
+       unsigned char *buf = req->buffer;
        unsigned int len = req->length;
        unsigned int off = req->address;
 
-       if (req->ec->slot_no == 8) {
+       if (ec->slot_no == 8) {
+               void __iomem *base = (void __iomem *)
+                               ec->resource[ECARD_RES_MEMC].start;
+
                /*
                 * The card maintains an index which increments the address
                 * into a 4096-byte page on each access.  We need to keep
@@ -161,7 +160,7 @@
                 * greater than the offset, reset the hardware index counter.
                 */
                if (off == 0 || index > off) {
-                       *base_addr = 0;
+                       writeb(0, base);
                        index = 0;
                }
 
@@ -170,21 +169,24 @@
                 * required offset.  The read bytes are discarded.
                 */
                while (index < off) {
-                       unsigned char byte;
-                       byte = base_addr[page];
+                       readb(base + page);
                        index += 1;
                }
 
                while (len--) {
-                       *buf++ = base_addr[page];
+                       *buf++ = readb(base + page);
                        index += 1;
                }
        } else {
+               unsigned long base = (ec->type == ECARD_EASI
+                        ? &ec->resource[ECARD_RES_EASI]
+                        : &ec->resource[ECARD_RES_IOCSYNC])->start;
+               void __iomem *pbase = (void __iomem *)base;
 
-               if (!req->use_loader || !req->ec->loader) {
+               if (!req->use_loader || !ec->loader) {
                        off *= 4;
                        while (len--) {
-                               *buf++ = base_addr[off];
+                               *buf++ = readb(pbase + off);
                                off += 4;
                        }
                } else {
@@ -194,8 +196,8 @@
                                 * expansion card loader programs.
                                 */
                                *(unsigned long *)0x108 = 0;
-                               *buf++ = ecard_loader_read(off++, base_addr,
-                                                          req->ec->loader);
+                               *buf++ = ecard_loader_read(off++, base,
+                                                          ec->loader);
                        }
                }
        }
@@ -406,7 +408,7 @@
 
 static int ecard_def_irq_pending(ecard_t *ec)
 {
-       return !ec->irqmask || ec->irqaddr[0] & ec->irqmask;
+       return !ec->irqmask || readb(ec->irqaddr) & ec->irqmask;
 }
 
 static void ecard_def_fiq_enable(ecard_t *ec, int fiqnr)
@@ -421,7 +423,7 @@
 
 static int ecard_def_fiq_pending(ecard_t *ec)
 {
-       return !ec->fiqmask || ec->fiqaddr[0] & ec->fiqmask;
+       return !ec->fiqmask || readb(ec->fiqaddr) & ec->fiqmask;
 }
 
 static expansioncard_ops_t ecard_default_ops = {
@@ -522,7 +524,7 @@
                               ec->ops->irqpending(ec) ? "" : "not ");
                else
                        printk("irqaddr %p, mask = %02X, status = %02X\n",
-                              ec->irqaddr, ec->irqmask, *ec->irqaddr);
+                              ec->irqaddr, ec->irqmask, readb(ec->irqaddr));
        }
 }
 
@@ -675,7 +677,7 @@
 #define IO_EC_MEMC8_BASE 0
 #endif
 
-unsigned int ecard_address(ecard_t *ec, card_type_t type, card_speed_t speed)
+unsigned int __ecard_address(ecard_t *ec, card_type_t type, card_speed_t speed)
 {
        unsigned long address = 0;
        int slot = ec->slot_no;
@@ -779,55 +781,89 @@
                get_ecard_dev_info);
 }
 
-#define ec_set_resource(ec,nr,st,sz,flg)                       \
+#define ec_set_resource(ec,nr,st,sz)                           \
        do {                                                    \
                (ec)->resource[nr].name = ec->dev.bus_id;       \
                (ec)->resource[nr].start = st;                  \
                (ec)->resource[nr].end = (st) + (sz) - 1;       \
-               (ec)->resource[nr].flags = flg;                 \
+               (ec)->resource[nr].flags = IORESOURCE_MEM;      \
        } while (0)
 
-static void __init ecard_init_resources(struct expansion_card *ec)
+static void __init ecard_free_card(struct expansion_card *ec)
+{
+       int i;
+
+       for (i = 0; i < ECARD_NUM_RESOURCES; i++)
+               if (ec->resource[i].flags)
+                       release_resource(&ec->resource[i]);
+
+       kfree(ec);
+}
+
+static struct expansion_card *__init ecard_alloc_card(int type, int slot)
 {
-       unsigned long base = PODSLOT_IOC4_BASE;
-       unsigned int slot = ec->slot_no;
+       struct expansion_card *ec;
+       unsigned long base;
        int i;
 
+       ec = kmalloc(sizeof(ecard_t), GFP_KERNEL);
+       if (!ec) {
+               ec = ERR_PTR(-ENOMEM);
+               goto nomem;
+       }
+
+       memset(ec, 0, sizeof(ecard_t));
+
+       ec->slot_no = slot;
+       ec->type = type;
+       ec->irq = NO_IRQ;
+       ec->fiq = NO_IRQ;
+       ec->dma = NO_DMA;
+       ec->ops = &ecard_default_ops;
+
+       snprintf(ec->dev.bus_id, sizeof(ec->dev.bus_id), "ecard%d", slot);
+       ec->dev.parent = NULL;
+       ec->dev.bus = &ecard_bus_type;
+       ec->dev.dma_mask = &ec->dma_mask;
+       ec->dma_mask = (u64)0xffffffff;
+
        if (slot < 4) {
                ec_set_resource(ec, ECARD_RES_MEMC,
                                PODSLOT_MEMC_BASE + (slot << 14),
-                               PODSLOT_MEMC_SIZE, IORESOURCE_MEM);
-               base = PODSLOT_IOC0_BASE;
-       }
+                               PODSLOT_MEMC_SIZE);
+               base = PODSLOT_IOC0_BASE + (slot << 14);
+       } else
+               base = PODSLOT_IOC4_BASE + ((slot - 4) << 14);
 
 #ifdef CONFIG_ARCH_RPC
        if (slot < 8) {
                ec_set_resource(ec, ECARD_RES_EASI,
                                PODSLOT_EASI_BASE + (slot << 24),
-                               PODSLOT_EASI_SIZE, IORESOURCE_MEM);
+                               PODSLOT_EASI_SIZE);
        }
 
        if (slot == 8) {
-               ec_set_resource(ec, ECARD_RES_MEMC, NETSLOT_BASE,
-                               NETSLOT_SIZE, IORESOURCE_MEM);
+               ec_set_resource(ec, ECARD_RES_MEMC, NETSLOT_BASE, NETSLOT_SIZE);
        } else
 #endif
 
-       for (i = 0; i <= ECARD_RES_IOCSYNC - ECARD_RES_IOCSLOW; i++) {
+       for (i = 0; i <= ECARD_RES_IOCSYNC - ECARD_RES_IOCSLOW; i++)
                ec_set_resource(ec, i + ECARD_RES_IOCSLOW,
-                               base + (slot << 14) + (i << 19),
-                               PODSLOT_IOC_SIZE, IORESOURCE_MEM);
-       }
+                               base + (i << 19), PODSLOT_IOC_SIZE);
 
        for (i = 0; i < ECARD_NUM_RESOURCES; i++) {
-               if (ec->resource[i].start &&
+               if (ec->resource[i].flags &&
                    request_resource(&iomem_resource, &ec->resource[i])) {
                        printk(KERN_ERR "%s: resource(s) not available\n",
                                ec->dev.bus_id);
                        ec->resource[i].end -= ec->resource[i].start;
                        ec->resource[i].start = 0;
+                       ec->resource[i].flags = 0;
                }
        }
+
+ nomem:
+       return ec;
 }
 
 static ssize_t ecard_show_irq(struct device *dev, char *buf)
@@ -836,16 +872,12 @@
        return sprintf(buf, "%u\n", ec->irq);
 }
 
-static DEVICE_ATTR(irq, S_IRUGO, ecard_show_irq, NULL);
-
 static ssize_t ecard_show_dma(struct device *dev, char *buf)
 {
        struct expansion_card *ec = ECARD_DEV(dev);
        return sprintf(buf, "%u\n", ec->dma);
 }
 
-static DEVICE_ATTR(dma, S_IRUGO, ecard_show_dma, NULL);
-
 static ssize_t ecard_show_resources(struct device *dev, char *buf)
 {
        struct expansion_card *ec = ECARD_DEV(dev);
@@ -861,23 +893,33 @@
        return str - buf;
 }
 
-static DEVICE_ATTR(resource, S_IRUGO, ecard_show_resources, NULL);
-
 static ssize_t ecard_show_vendor(struct device *dev, char *buf)
 {
        struct expansion_card *ec = ECARD_DEV(dev);
        return sprintf(buf, "%u\n", ec->cid.manufacturer);
 }
 
-static DEVICE_ATTR(vendor, S_IRUGO, ecard_show_vendor, NULL);
-
 static ssize_t ecard_show_device(struct device *dev, char *buf)
 {
        struct expansion_card *ec = ECARD_DEV(dev);
        return sprintf(buf, "%u\n", ec->cid.product);
 }
 
-static DEVICE_ATTR(device, S_IRUGO, ecard_show_device, NULL);
+static ssize_t ecard_show_type(struct device *dev, char *buf)
+{
+       struct expansion_card *ec = ECARD_DEV(dev);
+       return sprintf(buf, "%s\n", ec->type == ECARD_EASI ? "EASI" : "IOC");
+}
+
+static struct device_attribute ecard_dev_attrs[] = {
+       __ATTR(device,   S_IRUGO, ecard_show_device,    NULL),
+       __ATTR(dma,      S_IRUGO, ecard_show_dma,       NULL),
+       __ATTR(irq,      S_IRUGO, ecard_show_irq,       NULL),
+       __ATTR(resource, S_IRUGO, ecard_show_resources, NULL),
+       __ATTR(type,     S_IRUGO, ecard_show_type,      NULL),
+       __ATTR(vendor,   S_IRUGO, ecard_show_vendor,    NULL),
+       __ATTR_NULL,
+};
 
 
 int ecard_request_resources(struct expansion_card *ec)
@@ -927,21 +969,13 @@
        ecard_t **ecp;
        ecard_t *ec;
        struct ex_ecid cid;
-       int i, rc = -ENOMEM;
+       int i, rc;
 
-       ec = kmalloc(sizeof(ecard_t), GFP_KERNEL);
-       if (!ec)
+       ec = ecard_alloc_card(type, slot);
+       if (IS_ERR(ec)) {
+               rc = PTR_ERR(ec);
                goto nomem;
-
-       memset(ec, 0, sizeof(ecard_t));
-
-       ec->slot_no     = slot;
-       ec->type        = type;
-       ec->irq         = NO_IRQ;
-       ec->fiq         = NO_IRQ;
-       ec->dma         = NO_DMA;
-       ec->card_desc   = NULL;
-       ec->ops         = &ecard_default_ops;
+       }
 
        rc = -ENODEV;
        if ((ec->podaddr = ecard_address(ec, type, ECARD_SYNC)) == 0)
@@ -964,7 +998,7 @@
        ec->cid.fiqmask = cid.r_fiqmask;
        ec->cid.fiqoff  = ecard_gets24(cid.r_fiqoff);
        ec->fiqaddr     =
-       ec->irqaddr     = (unsigned char *)ioaddr(ec->podaddr);
+       ec->irqaddr     = (void __iomem *)ioaddr(ec->podaddr);
 
        if (ec->cid.is) {
                ec->irqmask = ec->cid.irqmask;
@@ -983,14 +1017,6 @@
                        break;
                }
 
-       snprintf(ec->dev.bus_id, sizeof(ec->dev.bus_id), "ecard%d", slot);
-       ec->dev.parent = NULL;
-       ec->dev.bus    = &ecard_bus_type;
-       ec->dev.dma_mask = &ec->dma_mask;
-       ec->dma_mask = (u64)0xffffffff;
-
-       ecard_init_resources(ec);
-
        /*
         * hook the interrupt handlers
         */
@@ -1017,17 +1043,12 @@
        slot_to_expcard[slot] = ec;
 
        device_register(&ec->dev);
-       device_create_file(&ec->dev, &dev_attr_dma);
-       device_create_file(&ec->dev, &dev_attr_irq);
-       device_create_file(&ec->dev, &dev_attr_resource);
-       device_create_file(&ec->dev, &dev_attr_vendor);
-       device_create_file(&ec->dev, &dev_attr_device);
 
        return 0;
 
-nodev:
-       kfree(ec);
-nomem:
+ nodev:
+       ecard_free_card(ec);
+ nomem:
        return rc;
 }
 
@@ -1128,9 +1149,15 @@
        if (drv->shutdown)
                drv->shutdown(ec);
        ecard_release(ec);
-       req.fn = ecard_task_reset;
-       req.ec = ec;
-       ecard_call(&req);
+
+       /*
+        * If this card has a loader, call the reset handler.
+        */
+       if (ec->loader) {
+               req.fn = ecard_task_reset;
+               req.ec = ec;
+               ecard_call(&req);
+       }
 }
 
 int ecard_register_driver(struct ecard_driver *drv)
@@ -1164,8 +1191,9 @@
 }
 
 struct bus_type ecard_bus_type = {
-       .name   = "ecard",
-       .match  = ecard_match,
+       .name           = "ecard",
+       .dev_attrs      = ecard_dev_attrs,
+       .match          = ecard_match,
 };
 
 static int ecard_bus_init(void)
@@ -1176,7 +1204,7 @@
 postcore_initcall(ecard_bus_init);
 
 EXPORT_SYMBOL(ecard_readchunk);
-EXPORT_SYMBOL(ecard_address);
+EXPORT_SYMBOL(__ecard_address);
 EXPORT_SYMBOL(ecard_register_driver);
 EXPORT_SYMBOL(ecard_remove_driver);
 EXPORT_SYMBOL(ecard_bus_type);
diff -urN linux/arch/arm/kernel/fiq.c linux/arch/arm/kernel/fiq.c
--- linux/arch/arm/kernel/fiq.c 2005/02/07 02:54:30     1.20
+++ linux/arch/arm/kernel/fiq.c 2005/03/18 17:36:45     1.21
@@ -46,12 +46,6 @@
 #include <asm/system.h>
 #include <asm/uaccess.h>
 
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
-#warning This file requires GCC 3.3.x or older to build.  Alternatively,
-#warning please talk to GCC people to resolve the issues with the
-#warning assembly clobber list.
-#endif
-
 static unsigned long no_fiq_insn;
 
 /* Default reacquire function
@@ -91,44 +85,43 @@
 
 /*
  * Taking an interrupt in FIQ mode is death, so both these functions
- * disable irqs for the duration. 
+ * disable irqs for the duration.  Note - these functions are almost
+ * entirely coded in assembly.
  */
-void set_fiq_regs(struct pt_regs *regs)
+void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
 {
        register unsigned long tmp;
-       __asm__ volatile (
-       "mrs    %0, cpsr\n\
+       asm volatile (
+       "mov    ip, sp\n\
+       stmfd   sp!, {fp, ip, lr, pc}\n\
+       sub     fp, ip, #4\n\
+       mrs     %0, cpsr\n\
        msr     cpsr_c, %2      @ select FIQ mode\n\
        mov     r0, r0\n\
        ldmia   %1, {r8 - r14}\n\
        msr     cpsr_c, %0      @ return to SVC mode\n\
-       mov     r0, r0"
+       mov     r0, r0\n\
+       ldmea   fp, {fp, sp, pc}"
        : "=&r" (tmp)
-       : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)
-       /* These registers aren't modified by the above code in a way
-          visible to the compiler, but we mark them as clobbers anyway
-          so that GCC won't put any of the input or output operands in
-          them.  */
-       : "r8", "r9", "r10", "r11", "r12", "r13", "r14");
+       : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
 }
 
-void get_fiq_regs(struct pt_regs *regs)
+void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs)
 {
        register unsigned long tmp;
-       __asm__ volatile (
-       "mrs    %0, cpsr\n\
+       asm volatile (
+       "mov    ip, sp\n\
+       stmfd   sp!, {fp, ip, lr, pc}\n\
+       sub     fp, ip, #4\n\
+       mrs     %0, cpsr\n\
        msr     cpsr_c, %2      @ select FIQ mode\n\
        mov     r0, r0\n\
        stmia   %1, {r8 - r14}\n\
        msr     cpsr_c, %0      @ return to SVC mode\n\
-       mov     r0, r0"
+       mov     r0, r0\n\
+       ldmea   fp, {fp, sp, pc}"
        : "=&r" (tmp)
-       : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)
-       /* These registers aren't modified by the above code in a way
-          visible to the compiler, but we mark them as clobbers anyway
-          so that GCC won't put any of the input or output operands in
-          them.  */
-       : "r8", "r9", "r10", "r11", "r12", "r13", "r14");
+       : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
 }
 
 int claim_fiq(struct fiq_handler *f)
diff -urN linux/arch/arm/kernel/irq.c linux/arch/arm/kernel/irq.c
--- linux/arch/arm/kernel/irq.c 2005/01/25 04:27:52     1.46
+++ linux/arch/arm/kernel/irq.c 2005/03/18 17:36:45     1.47
@@ -56,6 +56,13 @@
 void (*init_arch_irq)(void) __initdata = NULL;
 
 /*
+ * No architecture-specific irq_finish function defined in arm/arch/irqs.h.
+ */
+#ifndef irq_finish
+#define irq_finish(irq) do { } while (0)
+#endif
+
+/*
  * Dummy mask/unmask handler
  */
 void dummy_mask_unmask_irq(unsigned int irq)
@@ -532,6 +539,8 @@
        if (!list_empty(&irq_pending))
                do_pending_irqs(regs);
 
+       irq_finish(irq);
+
        spin_unlock(&irq_controller_lock);
        irq_exit();
 }
diff -urN linux/arch/arm/kernel/module.c linux/arch/arm/kernel/module.c
--- linux/arch/arm/kernel/module.c      2004/11/15 11:49:14     1.7
+++ linux/arch/arm/kernel/module.c      2005/03/18 17:36:45     1.8
@@ -35,44 +35,16 @@
 void *module_alloc(unsigned long size)
 {
        struct vm_struct *area;
-       struct page **pages;
-       unsigned int array_size, i;
 
        size = PAGE_ALIGN(size);
        if (!size)
-               goto out_null;
+               return NULL;
 
        area = __get_vm_area(size, VM_ALLOC, MODULE_START, MODULE_END);
        if (!area)
-               goto out_null;
+               return NULL;
 
-       area->nr_pages = size >> PAGE_SHIFT;
-       array_size = area->nr_pages * sizeof(struct page *);
-       area->pages = pages = kmalloc(array_size, GFP_KERNEL);
-       if (!area->pages) {
-               remove_vm_area(area->addr);
-               kfree(area);
-               goto out_null;
-       }
-
-       memset(pages, 0, array_size);
-
-       for (i = 0; i < area->nr_pages; i++) {
-               pages[i] = alloc_page(GFP_KERNEL);
-               if (unlikely(!pages[i])) {
-                       area->nr_pages = i;
-                       goto out_no_pages;
-               }
-       }
-
-       if (map_vm_area(area, PAGE_KERNEL, &pages))
-               goto out_no_pages;
-       return area->addr;
-
- out_no_pages:
-       vfree(area->addr);
- out_null:
-       return NULL;
+       return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL);
 }
 
 void module_free(struct module *module, void *region)
diff -urN linux/arch/arm/kernel/setup.c linux/arch/arm/kernel/setup.c
--- linux/arch/arm/kernel/setup.c       2005/01/25 04:27:52     1.58
+++ linux/arch/arm/kernel/setup.c       2005/03/18 17:36:45     1.59
@@ -92,8 +92,6 @@
 struct cpu_cache_fns cpu_cache;
 #endif
 
-unsigned char aux_device_present;
-
 char elf_platform[ELF_PLATFORM_SIZE];
 EXPORT_SYMBOL(elf_platform);
 
diff -urN linux/arch/arm/kernel/signal.c linux/arch/arm/kernel/signal.c
--- linux/arch/arm/kernel/signal.c      2005/01/25 04:27:52     1.48
+++ linux/arch/arm/kernel/signal.c      2005/03/18 17:36:45     1.49
@@ -102,7 +102,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
@@ -114,7 +114,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
@@ -317,7 +317,7 @@
 
        frame = (struct sigframe __user *)regs->ARM_sp;
 
-       if (verify_area(VERIFY_READ, frame, sizeof (*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof (*frame)))
                goto badframe;
        if (__get_user(set.sig[0], &frame->sc.oldmask)
            || (_NSIG_WORDS > 1
@@ -365,7 +365,7 @@
 
        frame = (struct rt_sigframe __user *)regs->ARM_sp;
 
-       if (verify_area(VERIFY_READ, frame, sizeof (*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof (*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/arm/kernel/sys_arm.c linux/arch/arm/kernel/sys_arm.c
--- linux/arch/arm/kernel/sys_arm.c     2005/02/28 15:45:09     1.37
+++ linux/arch/arm/kernel/sys_arm.c     2005/03/18 17:36:45     1.38
@@ -169,7 +169,11 @@
 
        switch (call) {
        case SEMOP:
-               return sys_semop(first, (struct sembuf __user *)ptr, second);
+               return sys_semtimedop (first, (struct sembuf __user *)ptr, 
second, NULL);
+       case SEMTIMEDOP:
+               return sys_semtimedop(first, (struct sembuf __user *)ptr, 
second,
+                                       (const struct timespec __user *)fifth);
+
        case SEMGET:
                return sys_semget (first, second, third);
        case SEMCTL: {
@@ -230,6 +234,18 @@
        }
 }
 
+asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg,
+                         unsigned long __user *addr)
+{
+       unsigned long ret;
+       long err;
+
+       err = do_shmat(shmid, shmaddr, shmflg, &ret);
+       if (err == 0)
+               err = put_user(ret, addr);
+       return err;
+}
+
 /* Fork a new task - this creates a new program thread.
  * This is called indirectly via a small wrapper
  */
diff -urN linux/arch/arm/mach-clps7500/core.c 
linux/arch/arm/mach-clps7500/core.c
--- linux/arch/arm/mach-clps7500/core.c 2004/11/15 11:49:14     1.7
+++ linux/arch/arm/mach-clps7500/core.c 2005/03/18 17:36:46     1.8
@@ -12,6 +12,7 @@
 #include <linux/list.h>
 #include <linux/sched.h>
 #include <linux/init.h>
+#include <linux/device.h>
 #include <linux/serial_8250.h>
 
 #include <asm/mach/arch.h>
@@ -305,11 +306,10 @@
 static void __init clps7500_timer_init(void)
 {
        ioctime_init();
-
        setup_irq(IRQ_TIMER, &clps7500_timer_irq);
 }
 
-static struct clps7500_timer = {
+static struct sys_timer clps7500_timer = {
        .init           = clps7500_timer_init,
        .offset         = ioc_timer_gettimeoffset,
 };
@@ -360,7 +360,7 @@
 
 static int __init clps7500_init(void)
 {
-       return platform_register_device(&serial_device);
+       return platform_device_register(&serial_device);
 }
 
 MACHINE_START(CLPS7500, "CL-PS7500")
@@ -368,6 +368,7 @@
        BOOT_MEM(0x10000000, 0x03000000, 0xe0000000)
        MAPIO(clps7500_map_io)
        INITIRQ(clps7500_init_irq)
-       .timer          = &clps7500_timer,
+               .init_machine   = clps7500_init,
+               .timer          = &clps7500_timer,
 MACHINE_END
 
diff -urN linux/arch/arm/mach-ebsa110/io.c linux/arch/arm/mach-ebsa110/io.c
--- linux/arch/arm/mach-ebsa110/io.c    2004/11/15 11:49:14     1.9
+++ linux/arch/arm/mach-ebsa110/io.c    2005/03/18 17:36:46     1.10
@@ -153,9 +153,9 @@
         * The SuperIO registers use sane addressing techniques...
         */
        if (SUPERIO_PORT(port))
-               ret = __raw_readb(ISAIO_BASE + (port << 2));
+               ret = __raw_readb((void __iomem *)ISAIO_BASE + (port << 2));
        else {
-               void __iomem *a = ISAIO_BASE + ((port & ~1) << 1);
+               void __iomem *a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 
1);
 
                /*
                 * Shame nothing else does
@@ -174,45 +174,33 @@
  */
 u8 __inb16(unsigned int port)
 {
-       u32 ret;
+       unsigned int offset;
 
        /*
         * The SuperIO registers use sane addressing techniques...
         */
        if (SUPERIO_PORT(port))
-               ret = __raw_readb(ISAIO_BASE + (port << 2));
-       else {
-               void __iomem *a = ISAIO_BASE + ((port & ~1) << 1);
+               offset = port << 2;
+       else
+               offset = (port & ~1) << 1 | (port & 1);
 
-               /*
-                * Shame nothing else does
-                */
-               ret = __raw_readb(a + (port & 1));
-       }
-       return ret;
+       return __raw_readb((void __iomem *)ISAIO_BASE + offset);
 }
 
 u16 __inw(unsigned int port)
 {
-       u32 ret;
+       unsigned int offset;
 
        /*
         * The SuperIO registers use sane addressing techniques...
         */
        if (SUPERIO_PORT(port))
-               ret = __raw_readw(ISAIO_BASE + (port << 2));
+               offset = port << 2;
        else {
-               void __iomem *a = ISAIO_BASE + ((port & ~1) << 1);
-
-               /*
-                * Shame nothing else does
-                */
-               if (port & 1)
-                       BUG();
-
-               ret = __raw_readw(a);
+               offset = port << 1;
+               BUG_ON(port & 1);
        }
-       return ret;
+       return __raw_readw((void __iomem *)ISAIO_BASE + offset);
 }
 
 /*
@@ -225,7 +213,7 @@
        if (SUPERIO_PORT(port) || port & 3)
                BUG();
 
-       a = ISAIO_BASE + (port << 1);
+       a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 1);
 
        return __raw_readw(a) | __raw_readw(a + 4) << 16;
 }
@@ -241,9 +229,9 @@
         * The SuperIO registers use sane addressing techniques...
         */
        if (SUPERIO_PORT(port))
-               __raw_writeb(val, ISAIO_BASE + (port << 2));
+               __raw_writeb(val, (void __iomem *)ISAIO_BASE + (port << 2));
        else {
-               void __iomem *a = ISAIO_BASE + ((port & ~1) << 1);
+               void __iomem *a = (void __iomem *)ISAIO_BASE + ((port & ~1) << 
1);
 
                /*
                 * Shame nothing else does
@@ -257,37 +245,33 @@
 
 void __outb16(u8 val, unsigned int port)
 {
+       unsigned int offset;
+
        /*
         * The SuperIO registers use sane addressing techniques...
         */
        if (SUPERIO_PORT(port))
-               __raw_writeb(val, ISAIO_BASE + (port << 2));
-       else {
-               void __iomem *a = ISAIO_BASE + ((port & ~1) << 1);
+               offset = port << 2;
+       else
+               offset = (port & ~1) << 1 | (port & 1);
 
-               /*
-                * Shame nothing else does
-                */
-               __raw_writeb(val, a + (port & 1));
-       }
+       __raw_writeb(val, (void __iomem *)ISAIO_BASE + offset);
 }
 
 void __outw(u16 val, unsigned int port)
 {
-       u32 off;
+       unsigned int offset;
 
        /*
         * The SuperIO registers use sane addressing techniques...
         */
        if (SUPERIO_PORT(port))
-               off = port << 2;
+               offset = port << 2;
        else {
-               off = port << 1;
-               if (port & 1)
-                       BUG();
-
+               offset = port << 1;
+               BUG_ON(port & 1);
        }
-       __raw_writew(val, ISAIO_BASE + off);
+       __raw_writew(val, (void __iomem *)ISAIO_BASE + offset);
 }
 
 void __outl(u32 val, unsigned int port)
@@ -300,13 +284,6 @@
 EXPORT_SYMBOL(__outw);
 EXPORT_SYMBOL(__outl);
 
-extern void __arch_writesb(unsigned long virt, const void *from, int len);
-extern void __arch_writesw(unsigned long virt, const void *from, int len);
-extern void __arch_writesl(unsigned long virt, const void *from, int len);
-extern void __arch_readsb(unsigned long virt, void *from, int len);
-extern void __arch_readsw(unsigned long virt, void *from, int len);
-extern void __arch_readsl(unsigned long virt, void *from, int len);
-
 void outsb(unsigned int port, const void *from, int len)
 {
        u32 off;
@@ -319,7 +296,7 @@
                        BUG();
        }
 
-       __raw_writesb(ISAIO_BASE + off, from, len);
+       __raw_writesb((void __iomem *)ISAIO_BASE + off, from, len);
 }
 
 void insb(unsigned int port, void *from, int len)
@@ -334,7 +311,7 @@
                        BUG();
        }
 
-       __raw_readsb(ISAIO_BASE + off, from, len);
+       __raw_readsb((void __iomem *)ISAIO_BASE + off, from, len);
 }
 
 EXPORT_SYMBOL(outsb);
@@ -352,7 +329,7 @@
                        BUG();
        }
 
-       __raw_writesw(ISAIO_BASE + off, from, len);
+       __raw_writesw((void __iomem *)ISAIO_BASE + off, from, len);
 }
 
 void insw(unsigned int port, void *from, int len)
@@ -367,7 +344,7 @@
                        BUG();
        }
 
-       __raw_readsw(ISAIO_BASE + off, from, len);
+       __raw_readsw((void __iomem *)ISAIO_BASE + off, from, len);
 }
 
 EXPORT_SYMBOL(outsw);
@@ -384,7 +361,7 @@
        if (SUPERIO_PORT(port) || port & 3)
                BUG();
 
-       __raw_writesw(ISAIO_BASE + off, from, len << 1);
+       __raw_writesw((void __iomem *)ISAIO_BASE + off, from, len << 1);
 }
 
 void insl(unsigned int port, void *from, int len)
@@ -394,7 +371,7 @@
        if (SUPERIO_PORT(port) || port & 3)
                BUG();
 
-       __raw_readsw(ISAIO_BASE + off, from, len << 1);
+       __raw_readsw((void __iomem *)ISAIO_BASE + off, from, len << 1);
 }
 
 EXPORT_SYMBOL(outsl);
diff -urN linux/arch/arm/mach-ixp2000/core.c linux/arch/arm/mach-ixp2000/core.c
--- linux/arch/arm/mach-ixp2000/core.c  2005/02/28 15:45:09     1.7
+++ linux/arch/arm/mach-ixp2000/core.c  2005/03/18 17:36:46     1.8
@@ -79,31 +79,11 @@
 /*************************************************************************
  * Chip specific mappings shared by all IXP2000 systems
  *************************************************************************/
-static struct map_desc ixp2000_small_io_desc[] __initdata = {
+static struct map_desc ixp2000_io_desc[] __initdata = {
        {
-               .virtual        = IXP2000_GLOBAL_REG_VIRT_BASE,
-               .physical       = IXP2000_GLOBAL_REG_PHYS_BASE,
-               .length         = IXP2000_GLOBAL_REG_SIZE,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = IXP2000_GPIO_VIRT_BASE,
-               .physical       = IXP2000_GPIO_PHYS_BASE,
-               .length         = IXP2000_GPIO_SIZE,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = IXP2000_TIMER_VIRT_BASE,
-               .physical       = IXP2000_TIMER_PHYS_BASE,
-               .length         = IXP2000_TIMER_SIZE,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = IXP2000_UART_VIRT_BASE,
-               .physical       = IXP2000_UART_PHYS_BASE,
-               .length         = IXP2000_UART_SIZE,
-               .type           = MT_DEVICE
-       }, {
-               .virtual        = IXP2000_SLOWPORT_CSR_VIRT_BASE,
-               .physical       = IXP2000_SLOWPORT_CSR_PHYS_BASE,
-               .length         = IXP2000_SLOWPORT_CSR_SIZE,
+               .virtual        = IXP2000_CAP_VIRT_BASE,
+               .physical       = IXP2000_CAP_PHYS_BASE,
+               .length         = IXP2000_CAP_SIZE,
                .type           = MT_DEVICE
        }, {
                .virtual        = IXP2000_INTCTL_VIRT_BASE,
@@ -115,11 +95,7 @@
                .physical       = IXP2000_PCI_CREG_PHYS_BASE,
                .length         = IXP2000_PCI_CREG_SIZE,
                .type           = MT_DEVICE
-       }
-};
-
-static struct map_desc ixp2000_large_io_desc[] __initdata = {
-       {
+       }, {
                .virtual        = IXP2000_PCI_CSR_VIRT_BASE,
                .physical       = IXP2000_PCI_CSR_PHYS_BASE,
                .length         = IXP2000_PCI_CSR_SIZE,
@@ -157,8 +133,7 @@
 
 void __init ixp2000_map_io(void)
 {
-       iotable_init(ixp2000_small_io_desc, ARRAY_SIZE(ixp2000_small_io_desc));
-       iotable_init(ixp2000_large_io_desc, ARRAY_SIZE(ixp2000_large_io_desc));
+       iotable_init(ixp2000_io_desc, ARRAY_SIZE(ixp2000_io_desc));
        early_serial_setup(&ixp2000_serial_port);
 
        /* Set slowport to 8-bit mode.  */
diff -urN linux/arch/arm/mach-ixp2000/enp2611.c 
linux/arch/arm/mach-ixp2000/enp2611.c
--- linux/arch/arm/mach-ixp2000/enp2611.c       2005/02/28 15:45:09     1.5
+++ linux/arch/arm/mach-ixp2000/enp2611.c       2005/03/18 17:36:46     1.6
@@ -6,7 +6,7 @@
  * Created 2004 by Lennert Buytenhek from the ixdp2x01 code.  The
  * original version carries the following notices:
  *
- * Original Author: Andrzej Mialwoski <andrzej.mialwoski@intel.com>
+ * Original Author: Andrzej Mialkowski <andrzej.mialkowski@intel.com>
  * Maintainer: Deepak Saxena <dsaxena@plexity.net>
  *
  * Copyright (C) 2002-2003 Intel Corp.
diff -urN linux/arch/arm/mach-ixp2000/ixdp2x01.c 
linux/arch/arm/mach-ixp2000/ixdp2x01.c
--- linux/arch/arm/mach-ixp2000/ixdp2x01.c      2004/12/04 18:15:58     1.4
+++ linux/arch/arm/mach-ixp2000/ixdp2x01.c      2005/03/18 17:36:46     1.5
@@ -3,7 +3,7 @@
  *
  * Code common to Intel IXDP2401 and IXDP2801 platforms
  *
- * Original Author: Andrzej Mialwoski <andrzej.mialwoski@intel.com>
+ * Original Author: Andrzej Mialkowski <andrzej.mialkowski@intel.com>
  * Maintainer: Deepak Saxena <dsaxena@plexity.net>
  *
  * Copyright (C) 2002-2003 Intel Corp.
diff -urN linux/arch/arm/mach-ixp4xx/Makefile 
linux/arch/arm/mach-ixp4xx/Makefile
--- linux/arch/arm/mach-ixp4xx/Makefile 2005/02/07 02:54:31     1.3
+++ linux/arch/arm/mach-ixp4xx/Makefile 2005/03/18 17:36:46     1.4
@@ -7,6 +7,5 @@
 obj-$(CONFIG_ARCH_IXDP4XX)     += ixdp425-pci.o ixdp425-setup.o
 obj-$(CONFIG_MACH_IXDPG425)    += ixdpg425-pci.o coyote-setup.o
 obj-$(CONFIG_ARCH_ADI_COYOTE)  += coyote-pci.o coyote-setup.o
-obj-$(CONFIG_ARCH_PRPMC1100)   += prpmc1100-pci.o prpmc1100-setup.o
 obj-$(CONFIG_MACH_GTWX5715)    += gtwx5715-pci.o gtwx5715-setup.o
 
diff -urN linux/arch/arm/mach-ixp4xx/coyote-setup.c 
linux/arch/arm/mach-ixp4xx/coyote-setup.c
--- linux/arch/arm/mach-ixp4xx/coyote-setup.c   2005/01/25 04:27:53     1.7
+++ linux/arch/arm/mach-ixp4xx/coyote-setup.c   2005/03/18 17:36:46     1.8
@@ -3,7 +3,7 @@
  *
  * Board setup for ADI Engineering and IXDGP425 boards
  *
- * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ * Copyright (C) 2003-2005 MontaVista Software, Inc.
  *
  * Author: Deepak Saxena <dsaxena@plexity.net>
  */
@@ -13,7 +13,7 @@
 #include <linux/device.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
-#include <linux/serial_core.h>
+#include <linux/serial_8250.h>
 
 #include <asm/types.h>
 #include <asm/setup.h>
@@ -24,39 +24,8 @@
 #include <asm/mach/arch.h>
 #include <asm/mach/flash.h>
 
-#ifdef __ARMEB__
-#define        REG_OFFSET      3
-#else
-#define        REG_OFFSET      0
-#endif
-
-/*
- * Only one serial port is connected on the Coyote & IXDPG425
- */
-static struct uart_port coyote_serial_port = {
-       .membase        = (char*)(IXP4XX_UART2_BASE_VIRT + REG_OFFSET),
-       .mapbase        = (IXP4XX_UART2_BASE_PHYS),
-       .irq            = IRQ_IXP4XX_UART2,
-       .flags          = UPF_SKIP_TEST,
-       .iotype         = UPIO_MEM,     
-       .regshift       = 2,
-       .uartclk        = IXP4XX_UART_XTAL,
-       .line           = 0,
-       .type           = PORT_XSCALE,
-       .fifosize       = 32
-};
-
 void __init coyote_map_io(void)
 {
-       if (machine_is_ixdpg425()) {
-               coyote_serial_port.membase =
-                       (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET);
-               coyote_serial_port.mapbase = IXP4XX_UART1_BASE_PHYS;
-               coyote_serial_port.irq = IRQ_IXP4XX_UART1;
-       }
-
-       early_serial_setup(&coyote_serial_port);
-
        ixp4xx_map_io();
 }
 
@@ -81,8 +50,35 @@
        .resource       = &coyote_flash_resource,
 };
 
+static struct resource coyote_uart_resource = {
+       .start  = IXP4XX_UART2_BASE_PHYS,
+       .end    = IXP4XX_UART2_BASE_PHYS + 0x0fff,
+       .flags  = IORESOURCE_MEM,
+};
+
+static struct plat_serial8250_port coyote_uart_data = {
+       .mapbase        = IXP4XX_UART2_BASE_PHYS,
+       .membase        = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
+       .irq            = IRQ_IXP4XX_UART2,
+       .flags          = UPF_BOOT_AUTOCONF,
+       .iotype         = UPIO_MEM,
+       .regshift       = 2,
+       .uartclk        = IXP4XX_UART_XTAL,
+};
+
+static struct platform_device coyote_uart = {
+       .name           = "serial8250",
+       .id             = 0,
+       .dev                    = {
+               .platform_data  = &coyote_uart_data,
+       },
+       .num_resources  = 1,
+       .resource       = &coyote_uart_resource,
+};
+
 static struct platform_device *coyote_devices[] __initdata = {
-       &coyote_flash
+       &coyote_flash,
+       &coyote_uart
 };
 
 static void __init coyote_init(void)
@@ -90,6 +86,14 @@
        *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE;
        *IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0;
 
+       if (machine_is_ixdpg425()) {
+               coyote_uart_data.membase =
+                       (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET);
+               coyote_uart_data.mapbase = IXP4XX_UART1_BASE_PHYS;
+               coyote_uart_data.irq = IRQ_IXP4XX_UART1;
+       }
+
+
        ixp4xx_sys_init();
        platform_add_devices(coyote_devices, ARRAY_SIZE(coyote_devices));
 }
diff -urN linux/arch/arm/mach-ixp4xx/ixdp425-setup.c 
linux/arch/arm/mach-ixp4xx/ixdp425-setup.c
--- linux/arch/arm/mach-ixp4xx/ixdp425-setup.c  2005/01/25 04:27:53     1.6
+++ linux/arch/arm/mach-ixp4xx/ixdp425-setup.c  2005/03/18 17:36:46     1.7
@@ -3,7 +3,7 @@
  *
  * IXDP425/IXCDP1100 board-setup 
  *
- * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ * Copyright (C) 2003-2005 MontaVista Software, Inc.
  *
  * Author: Deepak Saxena <dsaxena@plexity.net>
  */
@@ -13,7 +13,7 @@
 #include <linux/device.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
-#include <linux/serial_core.h>
+#include <linux/serial_8250.h>
 
 #include <asm/types.h>
 #include <asm/setup.h>
@@ -24,46 +24,8 @@
 #include <asm/mach/arch.h>
 #include <asm/mach/flash.h>
 
-#ifdef __ARMEB__
-#define        REG_OFFSET      3
-#else
-#define        REG_OFFSET      0
-#endif
-
-/*
- * IXDP425 uses both chipset serial ports
- */
-static struct uart_port ixdp425_serial_ports[] = {
-       {
-               .membase        = (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET),
-               .mapbase        = (IXP4XX_UART1_BASE_PHYS),
-               .irq            = IRQ_IXP4XX_UART1,
-               .flags          = UPF_SKIP_TEST,
-               .iotype         = UPIO_MEM,     
-               .regshift       = 2,
-               .uartclk        = IXP4XX_UART_XTAL,
-               .line           = 0,
-               .type           = PORT_XSCALE,
-               .fifosize       = 32
-       } , {
-               .membase        = (char*)(IXP4XX_UART2_BASE_VIRT + REG_OFFSET),
-               .mapbase        = (IXP4XX_UART2_BASE_PHYS),
-               .irq            = IRQ_IXP4XX_UART2,
-               .flags          = UPF_SKIP_TEST,
-               .iotype         = UPIO_MEM,     
-               .regshift       = 2,
-               .uartclk        = IXP4XX_UART_XTAL,
-               .line           = 1,
-               .type           = PORT_XSCALE,
-               .fifosize       = 32
-       }
-};
-
 void __init ixdp425_map_io(void) 
 {
-       early_serial_setup(&ixdp425_serial_ports[0]);
-       early_serial_setup(&ixdp425_serial_ports[1]);
-
        ixp4xx_map_io();
 }
 
@@ -102,11 +64,55 @@
        .num_resources  = 0
 };
 
+static struct resource ixdp425_uart_resources[] = {
+       {
+               .start          = IXP4XX_UART1_BASE_PHYS,
+               .end            = IXP4XX_UART1_BASE_PHYS + 0x0fff,
+               .flags          = IORESOURCE_MEM
+       },
+       {
+               .start          = IXP4XX_UART2_BASE_PHYS,
+               .end            = IXP4XX_UART2_BASE_PHYS + 0x0fff,
+               .flags          = IORESOURCE_MEM
+       }
+};
+
+static struct plat_serial8250_port ixdp425_uart_data[] = {
+       {
+               .mapbase        = IXP4XX_UART1_BASE_PHYS,
+               .membase        = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
+               .irq            = IRQ_IXP4XX_UART1,
+               .flags          = UPF_BOOT_AUTOCONF,
+               .iotype         = UPIO_MEM,
+               .regshift       = 2,
+               .uartclk        = IXP4XX_UART_XTAL,
+       },
+       {
+               .mapbase        = IXP4XX_UART2_BASE_PHYS,
+               .membase        = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
+               .irq            = IRQ_IXP4XX_UART1,
+               .flags          = UPF_BOOT_AUTOCONF,
+               .iotype         = UPIO_MEM,
+               .regshift       = 2,
+               .uartclk        = IXP4XX_UART_XTAL,
+       }
+};
+
+static struct platform_device ixdp425_uart = {
+       .name                   = "serial8250",
+       .id                     = 0,
+       .dev.platform_data      = ixdp425_uart_data,
+       .num_resources          = 2,
+       .resource               = ixdp425_uart_resources
+};
+
 static struct platform_device *ixdp425_devices[] __initdata = {
        &ixdp425_i2c_controller,
-       &ixdp425_flash
+       &ixdp425_flash,
+       &ixdp425_uart
 };
 
+
 static void __init ixdp425_init(void)
 {
        ixp4xx_sys_init();
diff -urN linux/arch/arm/mach-ixp4xx/prpmc1100-pci.c 
linux/arch/arm/mach-ixp4xx/prpmc1100-pci.c
--- linux/arch/arm/mach-ixp4xx/Attic/prpmc1100-pci.c    Fri Mar 18 17:36:46 
2005        1.2
+++ linux/arch/arm/mach-ixp4xx/Attic/prpmc1100-pci.c    1970/01/01 00:00:002002
@@ -1,120 +0,0 @@
-/*
- * arch/arm/mach-ixp4xx/prpmc1100-pci.c 
- *
- * PrPMC1100 PCI initialization
- *
- * Copyright (C) 2003-2004 MontaVista Sofwtare, Inc. 
- * Based on IXDP425 code originally (C) Intel Corporation
- *
- * Author: Deepak Saxena <dsaxena@plexity.net>
- *
- * PrPMC1100 PCI init code.  GPIO usage is similar to that on 
- * IXDP425, but the IRQ routing is completely different and
- * depends on what carrier you are using. This code is written
- * to work on the Motorola PrPMC800 ATX carrier board.
- *
- * 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/kernel.h>
-#include <linux/config.h>
-#include <linux/pci.h>
-#include <linux/init.h>
-
-#include <asm/mach-types.h>
-#include <asm/irq.h>
-#include <asm/hardware.h>
-
-#include <asm/mach/pci.h>
-
-
-void __init prpmc1100_pci_preinit(void)
-{
-       gpio_line_config(PRPMC1100_PCI_INTA_PIN, 
-                               IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
-       gpio_line_config(PRPMC1100_PCI_INTB_PIN, 
-                               IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
-       gpio_line_config(PRPMC1100_PCI_INTC_PIN, 
-                               IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
-       gpio_line_config(PRPMC1100_PCI_INTD_PIN, 
-                               IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
-
-       gpio_line_isr_clear(PRPMC1100_PCI_INTA_PIN);
-       gpio_line_isr_clear(PRPMC1100_PCI_INTB_PIN);
-       gpio_line_isr_clear(PRPMC1100_PCI_INTC_PIN);
-       gpio_line_isr_clear(PRPMC1100_PCI_INTD_PIN);
-
-       ixp4xx_pci_preinit();
-}
-
-
-static int __init prpmc1100_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-{
-       int irq = -1;
-
-       static int pci_irq_table[][4] = { 
-               {       /* IDSEL 16 - PMC A1 */
-                       IRQ_PRPMC1100_PCI_INTD, 
-                       IRQ_PRPMC1100_PCI_INTA, 
-                       IRQ_PRPMC1100_PCI_INTB, 
-                       IRQ_PRPMC1100_PCI_INTC
-               }, {    /* IDSEL 17 - PRPMC-A-B */
-                       IRQ_PRPMC1100_PCI_INTD, 
-                       IRQ_PRPMC1100_PCI_INTA, 
-                       IRQ_PRPMC1100_PCI_INTB, 
-                       IRQ_PRPMC1100_PCI_INTC
-               }, {    /* IDSEL 18 - PMC A1-B */
-                       IRQ_PRPMC1100_PCI_INTA, 
-                       IRQ_PRPMC1100_PCI_INTB, 
-                       IRQ_PRPMC1100_PCI_INTC, 
-                       IRQ_PRPMC1100_PCI_INTD
-               }, {    /* IDSEL 19 - Unused */
-                       0, 0, 0, 0 
-               }, {    /* IDSEL 20 - P2P Bridge */
-                       IRQ_PRPMC1100_PCI_INTA, 
-                       IRQ_PRPMC1100_PCI_INTB, 
-                       IRQ_PRPMC1100_PCI_INTC, 
-                       IRQ_PRPMC1100_PCI_INTD
-               }, {    /* IDSEL 21 - PMC A2 */
-                       IRQ_PRPMC1100_PCI_INTC, 
-                       IRQ_PRPMC1100_PCI_INTD, 
-                       IRQ_PRPMC1100_PCI_INTA, 
-                       IRQ_PRPMC1100_PCI_INTB
-               }, {    /* IDSEL 22 - PMC A2-B */
-                       IRQ_PRPMC1100_PCI_INTD, 
-                       IRQ_PRPMC1100_PCI_INTA, 
-                       IRQ_PRPMC1100_PCI_INTB, 
-                       IRQ_PRPMC1100_PCI_INTC
-               },
-       };
-
-       if (slot >= PRPMC1100_PCI_MIN_DEVID && slot <= PRPMC1100_PCI_MAX_DEVID 
-               && pin >= 1 && pin <= PRPMC1100_PCI_IRQ_LINES) {
-               irq = pci_irq_table[slot - PRPMC1100_PCI_MIN_DEVID][pin - 1];
-       }
-
-       return irq;
-}
-
-
-struct hw_pci prpmc1100_pci __initdata = {
-       .nr_controllers = 1,
-       .preinit =        prpmc1100_pci_preinit,
-       .swizzle =        pci_std_swizzle,
-       .setup =          ixp4xx_setup,
-       .scan =           ixp4xx_scan_bus,
-       .map_irq =        prpmc1100_map_irq,
-};
-
-int __init prpmc1100_pci_init(void)
-{
-       if (machine_is_prpmc1100())
-               pci_common_init(&prpmc1100_pci);
-       return 0;
-}
-
-subsys_initcall(prpmc1100_pci_init);
-
diff -urN linux/arch/arm/mach-ixp4xx/prpmc1100-setup.c 
linux/arch/arm/mach-ixp4xx/prpmc1100-setup.c
--- linux/arch/arm/mach-ixp4xx/Attic/prpmc1100-setup.c  Fri Mar 18 17:36:46 
2005        1.6
+++ linux/arch/arm/mach-ixp4xx/Attic/prpmc1100-setup.c  1970/01/01 00:00:002002
@@ -1,98 +0,0 @@
-/*
- * arch/arm/mach-ixp4xx/prpmc1100-setup.c
- *
- * Motorola PrPMC1100 board setup
- *
- * Copyright (C) 2003-2004 MontaVista Software, Inc.
- *
- * Author: Deepak Saxena <dsaxena@plexity.net>
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-#include <linux/serial.h>
-#include <linux/tty.h>
-#include <linux/serial_core.h>
-
-#include <asm/types.h>
-#include <asm/setup.h>
-#include <asm/memory.h>
-#include <asm/hardware.h>
-#include <asm/irq.h>
-#include <asm/mach-types.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/flash.h>
-
-#ifdef __ARMEB__
-#define        REG_OFFSET      3
-#else
-#define        REG_OFFSET      0
-#endif
-
-/*
- * Only one serial port is connected on the PrPMC1100
- */
-static struct uart_port prpmc1100_serial_port = {
-       .membase        = (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET),
-       .mapbase        = (IXP4XX_UART1_BASE_PHYS),
-       .irq            = IRQ_IXP4XX_UART1,
-       .flags          = UPF_SKIP_TEST,
-       .iotype         = UPIO_MEM,     
-       .regshift       = 2,
-       .uartclk        = IXP4XX_UART_XTAL,
-       .line           = 0,
-       .type           = PORT_XSCALE,
-       .fifosize       = 32
-};
-
-void __init prpmc1100_map_io(void)
-{
-       early_serial_setup(&prpmc1100_serial_port);
-
-       ixp4xx_map_io();
-}
-
-static struct flash_platform_data prpmc1100_flash_data = {
-       .map_name       = "cfi_probe",
-       .width          = 2,
-};
-
-static struct resource prpmc1100_flash_resource = {
-       .start          = PRPMC1100_FLASH_BASE,
-       .end            = PRPMC1100_FLASH_BASE + PRPMC1100_FLASH_SIZE,
-       .flags          = IORESOURCE_MEM,
-};
-
-static struct platform_device prpmc1100_flash = {
-       .name           = "IXP4XX-Flash",
-       .id             = 0,
-       .dev            = {
-               .platform_data = &prpmc1100_flash_data,
-       },
-       .num_resources  = 1,
-       .resource       = &prpmc1100_flash_resource,
-};
-
-static struct platform_device *prpmc1100_devices[] __initdata = {
-       &prpmc1100_flash
-};
-
-static void __init prpmc1100_init(void)
-{
-       ixp4xx_sys_init();
-
-       platform_add_devices(prpmc1100_devices, ARRAY_SIZE(prpmc1100_devices));
-}
-
-MACHINE_START(PRPMC1100, "Motorola PrPMC1100")
-        MAINTAINER("MontaVista Software, Inc.")
-        BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
-                IXP4XX_PERIPHERAL_BASE_VIRT)
-        MAPIO(prpmc1100_map_io)
-        INITIRQ(ixp4xx_init_irq)
-       .timer          = &ixp4xx_timer,
-        BOOT_PARAMS(0x0100)
-       INIT_MACHINE(prpmc1100_init)
-MACHINE_END
-
diff -urN linux/arch/arm/mach-lh7a40x/arch-lpd7a40x.c 
linux/arch/arm/mach-lh7a40x/arch-lpd7a40x.c
--- linux/arch/arm/mach-lh7a40x/arch-lpd7a40x.c 2004/12/27 02:15:48     1.8
+++ linux/arch/arm/mach-lh7a40x/arch-lpd7a40x.c 2005/03/18 17:36:46     1.9
@@ -157,8 +157,6 @@
        .unmask = lh7a40x_unmask_cpld_irq,
 };
 
-#define IRQ_DISPATCH(irq) irq_desc[irq].handle ((irq), &irq_desc[irq], regs)
-
 static void lpd7a40x_cpld_handler (unsigned int irq, struct irqdesc *desc,
                                  struct pt_regs *regs)
 {
diff -urN linux/arch/arm/mach-lh7a40x/common.h 
linux/arch/arm/mach-lh7a40x/common.h
--- linux/arch/arm/mach-lh7a40x/common.h        2004/12/27 02:15:48     1.2
+++ linux/arch/arm/mach-lh7a40x/common.h        2005/03/18 17:36:46     1.3
@@ -12,3 +12,5 @@
 
 extern void lh7a400_init_irq (void);
 extern void lh7a404_init_irq (void);
+
+#define IRQ_DISPATCH(irq) irq_desc[irq].handle ((irq), &irq_desc[irq], regs)
diff -urN linux/arch/arm/mach-lh7a40x/irq-lpd7a40x.c 
linux/arch/arm/mach-lh7a40x/irq-lpd7a40x.c
--- linux/arch/arm/mach-lh7a40x/irq-lpd7a40x.c  2004/05/10 14:25:30     1.1
+++ linux/arch/arm/mach-lh7a40x/irq-lpd7a40x.c  2005/03/18 17:36:46     1.2
@@ -55,8 +55,6 @@
        .unmask = lh7a40x_unmask_cpld_irq,
 };
 
-#define IRQ_DISPATCH(irq) irq_desc[irq].handle ((irq), &irq_desc[irq], regs)
-
 static void lh7a40x_cpld_handler (unsigned int irq, struct irqdesc *desc,
                                  struct pt_regs *regs)
 {
diff -urN linux/arch/arm/mach-omap/Kconfig linux/arch/arm/mach-omap/Kconfig
--- linux/arch/arm/mach-omap/Kconfig    2004/11/15 11:49:14     1.4
+++ linux/arch/arm/mach-omap/Kconfig    2005/03/18 17:36:46     1.5
@@ -113,6 +113,38 @@
          printed, it's safe to deselect OMAP_MUX for your product.
 
 choice
+        prompt "System timer"
+       default OMAP_MPU_TIMER
+
+config OMAP_MPU_TIMER
+       bool "Use mpu timer"
+       help
+         Select this option if you want to use the OMAP mpu timer. This
+         timer provides more intra-tick resolution than the 32KHz timer,
+         but consumes more power.
+
+config OMAP_32K_TIMER
+       bool "Use 32KHz timer"
+       depends on ARCH_OMAP16XX
+       help
+         Select this option if you want to enable the OMAP 32KHz timer.
+         This timer saves power compared to the OMAP_MPU_TIMER, and has
+         support for no tick during idle. The 32KHz timer provides less
+         intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is
+         currently only available for OMAP-16xx.
+
+endchoice
+
+config OMAP_32K_TIMER_HZ
+       int "Kernel internal timer frequency for 32KHz timer"
+       range 32 1024
+       depends on OMAP_32K_TIMER
+       default "128"
+       help
+         Kernel internal timer frequency should be a divisor of 32768,
+         such as 64 or 128.
+
+choice
        prompt "Low-level debug console UART"
        depends on ARCH_OMAP
        default OMAP_LL_DEBUG_UART1
diff -urN linux/arch/arm/mach-omap/time.c linux/arch/arm/mach-omap/time.c
--- linux/arch/arm/mach-omap/time.c     2004/12/04 18:15:58     1.4
+++ linux/arch/arm/mach-omap/time.c     2005/03/18 17:36:46     1.5
@@ -51,6 +51,8 @@
 
 struct sys_timer omap_timer;
 
+#ifdef CONFIG_OMAP_MPU_TIMER
+
 /*
  * ---------------------------------------------------------------------------
  * MPU timer
@@ -67,6 +69,36 @@
 #define MPU_TIMER_AR                   (1 << 1)
 #define MPU_TIMER_ST                   (1 << 0)
 
+/* cycles to nsec conversions taken from arch/i386/kernel/timers/timer_tsc.c,
+ * converted to use kHz by Kevin Hilman */
+/* convert from cycles(64bits) => nanoseconds (64bits)
+ *  basic equation:
+ *             ns = cycles / (freq / ns_per_sec)
+ *             ns = cycles * (ns_per_sec / freq)
+ *             ns = cycles * (10^9 / (cpu_khz * 10^3))
+ *             ns = cycles * (10^6 / cpu_khz)
+ *
+ *     Then we use scaling math (suggested by george at mvista.com) to get:
+ *             ns = cycles * (10^6 * SC / cpu_khz / SC
+ *             ns = cycles * cyc2ns_scale / SC
+ *
+ *     And since SC is a constant power of two, we can convert the div
+ *  into a shift.
+ *                     -johnstul at us.ibm.com "math is hard, lets go 
shopping!"
+ */
+static unsigned long cyc2ns_scale;
+#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */
+
+static inline void set_cyc2ns_scale(unsigned long cpu_khz)
+{
+       cyc2ns_scale = (1000000 << CYC2NS_SCALE_FACTOR)/cpu_khz;
+}
+
+static inline unsigned long long cycles_2_ns(unsigned long long cyc)
+{
+       return (cyc * cyc2ns_scale) >> CYC2NS_SCALE_FACTOR;
+}
+
 /*
  * MPU_TICKS_PER_SEC must be an even number, otherwise machinecycles_to_usecs
  * will break. On P2, the timer count rate is 6.5 MHz after programming PTV
@@ -112,8 +144,10 @@
 
 unsigned long omap_mpu_timer_ticks_to_usecs(unsigned long nr_ticks)
 {
-       /* Round up to nearest usec */
-       return ((nr_ticks * 1000) / (MPU_TICKS_PER_SEC / 2 / 1000) + 1) >> 1;
+       unsigned long long nsec;
+
+       nsec = cycles_2_ns((unsigned long long)nr_ticks);
+       return (unsigned long)nsec / 1000;
 }
 
 /*
@@ -158,22 +192,190 @@
        .handler        = omap_mpu_timer_interrupt
 };
 
+static unsigned long omap_mpu_timer1_overflows;
+static irqreturn_t omap_mpu_timer1_interrupt(int irq, void *dev_id,
+                                            struct pt_regs *regs)
+{
+       omap_mpu_timer1_overflows++;
+       return IRQ_HANDLED;
+}
+
+static struct irqaction omap_mpu_timer1_irq = {
+       .name           = "mpu timer1 overflow",
+       .flags          = SA_INTERRUPT,
+       .handler        = omap_mpu_timer1_interrupt
+};
+
 static __init void omap_init_mpu_timer(void)
 {
+       set_cyc2ns_scale(MPU_TICKS_PER_SEC / 1000);
        omap_timer.offset = omap_mpu_timer_gettimeoffset;
+       setup_irq(INT_TIMER1, &omap_mpu_timer1_irq);
        setup_irq(INT_TIMER2, &omap_mpu_timer_irq);
        omap_mpu_timer_start(0, 0xffffffff);
        omap_mpu_timer_start(1, MPU_TIMER_TICK_PERIOD);
 }
 
 /*
+ * Scheduler clock - returns current time in nanosec units.
+ */
+unsigned long long sched_clock(void)
+{
+       unsigned long ticks = 0 - omap_mpu_timer_read(0);
+       unsigned long long ticks64;
+
+       ticks64 = omap_mpu_timer1_overflows;
+       ticks64 <<= 32;
+       ticks64 |= ticks;
+
+       return cycles_2_ns(ticks64);
+}
+#endif /* CONFIG_OMAP_MPU_TIMER */
+
+#ifdef CONFIG_OMAP_32K_TIMER
+
+#ifdef CONFIG_ARCH_OMAP1510
+#error OMAP 32KHz timer does not currently work on 1510!
+#endif
+
+/*
+ * ---------------------------------------------------------------------------
+ * 32KHz OS timer
+ *
+ * This currently works only on 16xx, as 1510 does not have the continuous
+ * 32KHz synchronous timer. The 32KHz synchronous timer is used to keep track
+ * of time in addition to the 32KHz OS timer. Using only the 32KHz OS timer
+ * on 1510 would be possible, but the timer would not be as accurate as
+ * with the 32KHz synchronized timer.
+ * ---------------------------------------------------------------------------
+ */
+#define OMAP_32K_TIMER_BASE            0xfffb9000
+#define OMAP_32K_TIMER_CR              0x08
+#define OMAP_32K_TIMER_TVR             0x00
+#define OMAP_32K_TIMER_TCR             0x04
+
+#define OMAP_32K_TICKS_PER_HZ          (32768 / HZ)
+
+/*
+ * TRM says 1 / HZ = ( TVR + 1) / 32768, so TRV = (32768 / HZ) - 1
+ * so with HZ = 100, TVR = 327.68.
+ */
+#define OMAP_32K_TIMER_TICK_PERIOD     ((32768 / HZ) - 1)
+#define MAX_SKIP_JIFFIES               25
+#define TIMER_32K_SYNCHRONIZED         0xfffbc410
+
+#define JIFFIES_TO_HW_TICKS(nr_jiffies, clock_rate)                    \
+                               (((nr_jiffies) * (clock_rate)) / HZ)
+
+static inline void omap_32k_timer_write(int val, int reg)
+{
+       omap_writew(val, reg + OMAP_32K_TIMER_BASE);
+}
+
+static inline unsigned long omap_32k_timer_read(int reg)
+{
+       return omap_readl(reg + OMAP_32K_TIMER_BASE) & 0xffffff;
+}
+
+/*
+ * The 32KHz synchronized timer is an additional timer on 16xx.
+ * It is always running.
+ */
+static inline unsigned long omap_32k_sync_timer_read(void)
+{
+       return omap_readl(TIMER_32K_SYNCHRONIZED);
+}
+
+static inline void omap_32k_timer_start(unsigned long load_val)
+{
+       omap_32k_timer_write(load_val, OMAP_32K_TIMER_TVR);
+       omap_32k_timer_write(0x0f, OMAP_32K_TIMER_CR);
+}
+
+static inline void omap_32k_timer_stop(void)
+{
+       omap_32k_timer_write(0x0, OMAP_32K_TIMER_CR);
+}
+
+/*
+ * Rounds down to nearest usec
+ */
+static inline unsigned long omap_32k_ticks_to_usecs(unsigned long ticks_32k)
+{
+       return (ticks_32k * 5*5*5*5*5*5) >> 9;
+}
+
+static unsigned long omap_32k_last_tick = 0;
+
+/*
+ * Returns elapsed usecs since last 32k timer interrupt
+ */
+static unsigned long omap_32k_timer_gettimeoffset(void)
+{
+       unsigned long now = omap_32k_sync_timer_read();
+       return omap_32k_ticks_to_usecs(now - omap_32k_last_tick);
+}
+
+/*
+ * Timer interrupt for 32KHz timer. When dynamic tick is enabled, this
+ * function is also called from other interrupts to remove latency
+ * issues with dynamic tick. In the dynamic tick case, we need to lock
+ * with irqsave.
+ */
+static irqreturn_t omap_32k_timer_interrupt(int irq, void *dev_id,
+                                           struct pt_regs *regs)
+{
+       unsigned long flags;
+       unsigned long now;
+
+       write_seqlock_irqsave(&xtime_lock, flags);
+       now = omap_32k_sync_timer_read();
+
+       while (now - omap_32k_last_tick >= OMAP_32K_TICKS_PER_HZ) {
+               omap_32k_last_tick += OMAP_32K_TICKS_PER_HZ;
+               timer_tick(regs);
+       }
+
+       /* Restart timer so we don't drift off due to modulo or dynamic tick.
+        * By default we program the next timer to be continuous to avoid
+        * latencies during high system load. During dynamic tick operation the
+        * continuous timer can be overridden from pm_idle to be longer.
+        */
+       omap_32k_timer_start(omap_32k_last_tick + OMAP_32K_TICKS_PER_HZ - now);
+       write_sequnlock_irqrestore(&xtime_lock, flags);
+
+       return IRQ_HANDLED;
+}
+
+static struct irqaction omap_32k_timer_irq = {
+       .name           = "32KHz timer",
+       .flags          = SA_INTERRUPT,
+       .handler        = omap_32k_timer_interrupt
+};
+
+static __init void omap_init_32k_timer(void)
+{
+       setup_irq(INT_OS_TIMER, &omap_32k_timer_irq);
+       omap_timer.offset  = omap_32k_timer_gettimeoffset;
+       omap_32k_last_tick = omap_32k_sync_timer_read();
+       omap_32k_timer_start(OMAP_32K_TIMER_TICK_PERIOD);
+}
+#endif /* CONFIG_OMAP_32K_TIMER */
+
+/*
  * ---------------------------------------------------------------------------
  * Timer initialization
  * ---------------------------------------------------------------------------
  */
 void __init omap_timer_init(void)
 {
+#if defined(CONFIG_OMAP_MPU_TIMER)
        omap_init_mpu_timer();
+#elif defined(CONFIG_OMAP_32K_TIMER)
+       omap_init_32k_timer();
+#else
+#error No system timer selected in Kconfig!
+#endif
 }
 
 struct sys_timer omap_timer = {
diff -urN linux/arch/arm/mach-pxa/poodle.c linux/arch/arm/mach-pxa/poodle.c
--- linux/arch/arm/mach-pxa/poodle.c    1970/01/01 00:00:00
+++ linux/arch/arm/mach-pxa/poodle.c    Fri Mar 18 17:36:46 2005        1.1
@@ -0,0 +1,181 @@
+/*
+ * linux/arch/arm/mach-pxa/poodle.c
+ *
+ *  Support for the SHARP Poodle Board.
+ *
+ * Based on:
+ *  linux/arch/arm/mach-pxa/lubbock.c Author:  Nicolas Pitre
+ *
+ *  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.
+ *
+ * Change Log
+ *  12-Dec-2002 Sharp Corporation for Poodle
+ *  John Lenz <lenz@cs.wisc.edu> updates to 2.6
+ */
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/fb.h>
+
+#include <asm/hardware.h>
+#include <asm/mach-types.h>
+#include <asm/irq.h>
+#include <asm/setup.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <asm/arch/pxa-regs.h>
+#include <asm/arch/irq.h>
+#include <asm/arch/poodle.h>
+#include <asm/arch/pxafb.h>
+
+#include <asm/hardware/scoop.h>
+#include <asm/hardware/locomo.h>
+
+#include "generic.h"
+
+static struct resource poodle_scoop_resources[] = {
+       [0] = {
+               .start          = 0x10800000,
+               .end            = 0x10800fff,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+static struct scoop_config poodle_scoop_setup = {
+       .io_dir         = POODLE_SCOOP_IO_DIR,
+       .io_out         = POODLE_SCOOP_IO_OUT,
+};
+
+struct platform_device poodle_scoop_device = {
+       .name           = "sharp-scoop",
+       .id             = -1,
+       .dev            = {
+               .platform_data  = &poodle_scoop_setup,
+       },
+       .num_resources  = ARRAY_SIZE(poodle_scoop_resources),
+       .resource       = poodle_scoop_resources,
+};
+
+
+/* LoCoMo device */
+static struct resource locomo_resources[] = {
+       [0] = {
+               .start          = 0x10000000,
+               .end            = 0x10001fff,
+               .flags          = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start          = IRQ_GPIO(10),
+               .end            = IRQ_GPIO(10),
+               .flags          = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device locomo_device = {
+       .name           = "locomo",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(locomo_resources),
+       .resource       = locomo_resources,
+};
+
+/* PXAFB device */
+static struct pxafb_mach_info poodle_fb_info __initdata = {
+       .pixclock       = 144700,
+
+       .xres           = 320,
+       .yres           = 240,
+       .bpp            = 16,
+
+       .hsync_len      = 7,
+       .left_margin    = 11,
+       .right_margin   = 30,
+
+       .vsync_len      = 2,
+       .upper_margin   = 2,
+       .lower_margin   = 0,
+       .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+
+       .lccr0          = LCCR0_Act | LCCR0_Sngl | LCCR0_Color,
+       .lccr3          = 0,
+
+       .pxafb_backlight_power  = NULL,
+       .pxafb_lcd_power        = NULL,
+};
+
+static struct platform_device *devices[] __initdata = {
+       &locomo_device,
+       &poodle_scoop_device,
+};
+
+static void __init poodle_init(void)
+{
+       int ret = 0;
+
+       /* cpu initialize */
+       /* Pgsr Register */
+       PGSR0 = 0x0146dd80;
+       PGSR1 = 0x03bf0890;
+       PGSR2 = 0x0001c000;
+
+       /* Alternate Register */
+       GAFR0_L = 0x01001000;
+       GAFR0_U = 0x591a8010;
+       GAFR1_L = 0x900a8451;
+       GAFR1_U = 0xaaa5aaaa;
+       GAFR2_L = 0x8aaaaaaa;
+       GAFR2_U = 0x00000002;
+
+       /* Direction Register */
+       GPDR0 = 0xd3f0904c;
+       GPDR1 = 0xfcffb7d3;
+       GPDR2 = 0x0001ffff;
+
+       /* Output Register */
+       GPCR0 = 0x00000000;
+       GPCR1 = 0x00000000;
+       GPCR2 = 0x00000000;
+
+       GPSR0 = 0x00400000;
+       GPSR1 = 0x00000000;
+        GPSR2 = 0x00000000;
+
+       set_pxa_fb_info(&poodle_fb_info);
+
+       ret = platform_add_devices(devices, ARRAY_SIZE(devices));
+       if (ret) {
+               printk(KERN_WARNING "poodle: Unable to register LoCoMo 
device\n");
+       }
+}
+
+static struct map_desc poodle_io_desc[] __initdata = {
+ /* virtual     physical    length                   */
+  { 0xef800000, 0x00000000, 0x00800000, MT_DEVICE }, /* Boot Flash */
+};
+
+static void __init poodle_map_io(void)
+{
+       pxa_map_io();
+       iotable_init(poodle_io_desc, ARRAY_SIZE(poodle_io_desc));
+
+       /* setup sleep mode values */
+       PWER  = 0x00000002;
+       PFER  = 0x00000000;
+       PRER  = 0x00000002;
+       PGSR0 = 0x00008000;
+       PGSR1 = 0x003F0202;
+       PGSR2 = 0x0001C000;
+       PCFR |= PCFR_OPDE;
+}
+
+MACHINE_START(POODLE, "SHARP Poodle")
+       BOOT_MEM(0xa0000000, 0x40000000, io_p2v(0x40000000))
+       MAPIO(poodle_map_io)
+       INITIRQ(pxa_init_irq)
+       .timer = &pxa_timer,
+       .init_machine = poodle_init,
+MACHINE_END
diff -urN linux/arch/arm/mach-pxa/Kconfig linux/arch/arm/mach-pxa/Kconfig
--- linux/arch/arm/mach-pxa/Kconfig     2005/01/13 14:05:19     1.5
+++ linux/arch/arm/mach-pxa/Kconfig     2005/03/18 17:36:46     1.6
@@ -19,28 +19,36 @@
        select PXA25x
 
 config PXA_SHARPSL
-       bool "SHARP SL-C7xx Models (Corgi, Shepherd and Husky)"
+       bool "SHARP SL-5600 and SL-C7xx Models"
        select PXA25x
        help
          Say Y here if you intend to run this kernel on a
-         Sharp SL-C700 (Corgi), SL-C750 (Shepherd) or a
-         Sharp SL-C760 (Husky) handheld computer.
+         Sharp SL-5600 (Poodle), Sharp SL-C700 (Corgi),
+         SL-C750 (Shepherd) or a Sharp SL-C760 (Husky)
+         handheld computer.
 
 endchoice
 
 endmenu
 
+config MACH_POODLE
+       bool "Enable Sharp SL-5600 (Poodle) Support"
+       depends PXA_SHARPSL
+
 config MACH_CORGI
        bool "Enable Sharp SL-C700 (Corgi) Support"
        depends PXA_SHARPSL
+       select PXA_SHARP_C7xx
 
 config MACH_SHEPHERD
        bool "Enable Sharp SL-C750 (Shepherd) Support"
        depends PXA_SHARPSL
+       select PXA_SHARP_C7xx
 
 config MACH_HUSKY
        bool "Enable Sharp SL-C760 (Husky) Support"
        depends PXA_SHARPSL
+       select PXA_SHARP_C7xx
 
 config PXA25x
        bool
@@ -57,4 +65,9 @@
        help
          Enable support for iWMMXt
 
+config PXA_SHARP_C7xx
+       bool
+       help
+         Enable support for all Sharp C7xx models
+
 endif
diff -urN linux/arch/arm/mach-pxa/Makefile linux/arch/arm/mach-pxa/Makefile
--- linux/arch/arm/mach-pxa/Makefile    2005/01/25 04:27:53     1.11
+++ linux/arch/arm/mach-pxa/Makefile    2005/03/18 17:36:46     1.12
@@ -11,7 +11,8 @@
 obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o
 obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o
 obj-$(CONFIG_ARCH_PXA_IDP) += idp.o
-obj-$(CONFIG_PXA_SHARPSL)      += corgi.o corgi_ssp.o ssp.o
+obj-$(CONFIG_PXA_SHARP_C7xx)   += corgi.o corgi_ssp.o ssp.o
+obj-$(CONFIG_MACH_POODLE)      += poodle.o
 
 # Support for blinky lights
 led-y := leds.o
diff -urN linux/arch/arm/mach-pxa/corgi.c linux/arch/arm/mach-pxa/corgi.c
--- linux/arch/arm/mach-pxa/corgi.c     2005/02/07 02:54:31     1.3
+++ linux/arch/arm/mach-pxa/corgi.c     2005/03/18 17:36:46     1.4
@@ -59,7 +59,7 @@
        .io_out         = CORGI_SCOOP_IO_OUT,
 };
 
-static struct platform_device corgiscoop_device = {
+struct platform_device corgiscoop_device = {
        .name           = "sharp-scoop",
        .id             = -1,
        .dev            = {
diff -urN linux/arch/arm/mach-pxa/idp.c linux/arch/arm/mach-pxa/idp.c
--- linux/arch/arm/mach-pxa/idp.c       2004/10/25 20:44:11     1.13
+++ linux/arch/arm/mach-pxa/idp.c       2005/03/18 17:36:46     1.14
@@ -10,13 +10,16 @@
  *  2001-09-13: Cliff Brake <cbrake@accelent.com>
  *              Initial code
  *
- * Expected command line: mem=32M initrd=0xa1000000,4M root=/dev/ram 
ramdisk=8192
+ *  2005-02-15: Cliff Brake <cliff.brake@gmail.com>
+ *             <http://www.vibren.com> <http://bec-systems.com>
+ *              Updated for 2.6 kernel
+ *
  */
-#include <linux/kernel.h>
+
 #include <linux/init.h>
-#include <linux/major.h>
-#include <linux/fs.h>
 #include <linux/interrupt.h>
+#include <linux/device.h>
+#include <linux/fb.h>
 
 #include <asm/setup.h>
 #include <asm/memory.h>
@@ -29,68 +32,133 @@
 
 #include <asm/arch/pxa-regs.h>
 #include <asm/arch/idp.h>
+#include <asm/arch/pxafb.h>
+#include <asm/arch/bitfield.h>
+#include <asm/arch/mmc.h>
 
 #include "generic.h"
 
-#ifndef PXA_IDP_REV02
-/* shadow registers for write only registers */
-unsigned int idp_cpld_led_control_shadow = 0x1;
-unsigned int idp_cpld_periph_pwr_shadow = 0xd;
-unsigned int ipd_cpld_cir_shadow = 0;
-unsigned int idp_cpld_kb_col_high_shadow = 0;
-unsigned int idp_cpld_kb_col_low_shadow = 0;
-unsigned int idp_cpld_pccard_en_shadow = 0xC3;
-unsigned int idp_cpld_gpioh_dir_shadow = 0;
-unsigned int idp_cpld_gpioh_value_shadow = 0;
-unsigned int idp_cpld_gpiol_dir_shadow = 0;
-unsigned int idp_cpld_gpiol_value_shadow = 0;
-
-/*
- * enable all LCD signals -- they should still be on
- * write protect flash
- * enable all serial port transceivers
+/* TODO:
+ * - add pxa2xx_audio_ops_t device structure
+ * - Ethernet interrupt
  */
 
-unsigned int idp_control_port_shadow = ((0x7 << 21) |          /* LCD power */
-                                       (0x1 << 19) |           /* disable 
flash write enable */
-                                       (0x7 << 9));            /* enable 
serial port transeivers */
+static struct resource smc91x_resources[] = {
+       [0] = {
+               .start  = (IDP_ETH_PHYS + 0x300),
+               .end    = (IDP_ETH_PHYS + 0xfffff),
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = IRQ_GPIO(4),
+               .end    = IRQ_GPIO(4),
+               .flags  = IORESOURCE_IRQ,
+       }
+};
 
-#endif
+static struct platform_device smc91x_device = {
+       .name           = "smc91x",
+       .id             = 0,
+       .num_resources  = ARRAY_SIZE(smc91x_resources),
+       .resource       = smc91x_resources,
+};
+
+static void idp_backlight_power(int on)
+{
+       if (on) {
+               IDP_CPLD_LCD |= (1<<1);
+       } else {
+               IDP_CPLD_LCD &= ~(1<<1);
+       }
+}
+
+static void idp_vlcd(int on)
+{
+       if (on) {
+               IDP_CPLD_LCD |= (1<<2);
+       } else {
+               IDP_CPLD_LCD &= ~(1<<2);
+       }
+}
+
+static void idp_lcd_power(int on)
+{
+       if (on) {
+               IDP_CPLD_LCD |= (1<<0);
+       } else {
+               IDP_CPLD_LCD &= ~(1<<0);
+       }
+
+       /* call idp_vlcd for now as core driver does not support
+        * both power and vlcd hooks.  Note, this is not technically
+        * the correct sequence, but seems to work.  Disclaimer:
+        * this may eventually damage the display.
+        */
+
+       idp_vlcd(on);
+}
+
+static struct pxafb_mach_info sharp_lm8v31 __initdata = {
+       .pixclock       = 270000,
+       .xres           = 640,
+       .yres           = 480,
+       .bpp            = 16,
+       .hsync_len      = 1,
+       .left_margin    = 3,
+       .right_margin   = 3,
+       .vsync_len      = 1,
+       .upper_margin   = 0,
+       .lower_margin   = 0,
+       .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+       .cmap_greyscale = 0,
+       .cmap_inverse   = 0,
+       .cmap_static    = 0,
+       .lccr0          = LCCR0_SDS,
+       .lccr3          = LCCR3_PCP | LCCR3_Acb(255),
+       .pxafb_backlight_power = &idp_backlight_power,
+       .pxafb_lcd_power = &idp_lcd_power
+};
+
+static int idp_mci_init(struct device *dev, irqreturn_t (*idp_detect_int)(int, 
void *, struct pt_regs *), void *data)
+{
+       /* setup GPIO for PXA25x MMC controller */
+       pxa_gpio_mode(GPIO6_MMCCLK_MD);
+       pxa_gpio_mode(GPIO8_MMCCS0_MD);
+
+       return 0;
+}
+
+static struct pxamci_platform_data idp_mci_platform_data = {
+       .ocr_mask       = MMC_VDD_32_33|MMC_VDD_33_34,
+       .init           = idp_mci_init,
+};
 
 static void __init idp_init(void)
 {
        printk("idp_init()\n");
+
+       platform_device_register(&smc91x_device);
+       //platform_device_register(&mst_audio_device);
+       set_pxa_fb_info(&sharp_lm8v31);
+       pxa_set_mci_info(&idp_mci_platform_data);
 }
 
 static void __init idp_init_irq(void)
 {
+
        pxa_init_irq();
+
+       set_irq_type(TOUCH_PANEL_IRQ, TOUCH_PANEL_IRQ_EDGE);
 }
 
 static struct map_desc idp_io_desc[] __initdata = {
  /* virtual     physical    length      type */
 
-
-#ifndef PXA_IDP_REV02
-  { IDP_CTRL_PORT_BASE,
-    IDP_CTRL_PORT_PHYS,
-    IDP_CTRL_PORT_SIZE,
-    MT_DEVICE },
-#endif
-
-  { IDP_IDE_BASE,
-    IDP_IDE_PHYS,
-    IDP_IDE_SIZE,
-    MT_DEVICE },
-  { IDP_ETH_BASE,
-    IDP_ETH_PHYS,
-    IDP_ETH_SIZE,
-    MT_DEVICE },
-  { IDP_COREVOLT_BASE,
+  { IDP_COREVOLT_VIRT,
     IDP_COREVOLT_PHYS,
     IDP_COREVOLT_SIZE,
     MT_DEVICE },
-  { IDP_CPLD_BASE,
+  { IDP_CPLD_VIRT,
     IDP_CPLD_PHYS,
     IDP_CPLD_SIZE,
     MT_DEVICE }
@@ -101,8 +169,6 @@
        pxa_map_io();
        iotable_init(idp_io_desc, ARRAY_SIZE(idp_io_desc));
 
-       set_irq_type(TOUCH_PANEL_IRQ, TOUCH_PANEL_IRQ_EDGE);
-
        // serial ports 2 & 3
        pxa_gpio_mode(GPIO42_BTRXD_MD);
        pxa_gpio_mode(GPIO43_BTTXD_MD);
@@ -114,8 +180,8 @@
 }
 
 
-MACHINE_START(PXA_IDP, "Accelent Xscale IDP")
-       MAINTAINER("Accelent Systems Inc.")
+MACHINE_START(PXA_IDP, "Vibren PXA255 IDP")
+       MAINTAINER("Vibren Technologies")
        BOOT_MEM(0xa0000000, 0x40000000, io_p2v(0x40000000))
        MAPIO(idp_map_io)
        INITIRQ(idp_init_irq)
diff -urN linux/arch/arm/mach-pxa/irq.c linux/arch/arm/mach-pxa/irq.c
--- linux/arch/arm/mach-pxa/irq.c       2004/10/12 01:45:40     1.9
+++ linux/arch/arm/mach-pxa/irq.c       2005/03/18 17:36:46     1.10
@@ -97,23 +97,23 @@
                type = __IRQT_RISEDGE | __IRQT_FALEDGE;
        }
 
-       printk(KERN_DEBUG "IRQ%d (GPIO%d): ", irq, gpio);
+       /* printk(KERN_DEBUG "IRQ%d (GPIO%d): ", irq, gpio); */
 
        pxa_gpio_mode(gpio | GPIO_IN);
 
        if (type & __IRQT_RISEDGE) {
-               printk("rising ");
+               /* printk("rising "); */
                __set_bit (gpio, GPIO_IRQ_rising_edge);
        } else
                __clear_bit (gpio, GPIO_IRQ_rising_edge);
 
        if (type & __IRQT_FALEDGE) {
-               printk("falling ");
+               /* printk("falling "); */
                __set_bit (gpio, GPIO_IRQ_falling_edge);
        } else
                __clear_bit (gpio, GPIO_IRQ_falling_edge);
 
-       printk("edges\n");
+       /* printk("edges\n"); */
 
        GRER(gpio) = GPIO_IRQ_rising_edge[idx] & GPIO_IRQ_mask[idx];
        GFER(gpio) = GPIO_IRQ_falling_edge[idx] & GPIO_IRQ_mask[idx];
diff -urN linux/arch/arm/mach-pxa/leds-idp.c linux/arch/arm/mach-pxa/leds-idp.c
--- linux/arch/arm/mach-pxa/leds-idp.c  2004/06/09 14:12:04     1.2
+++ linux/arch/arm/mach-pxa/leds-idp.c  2005/03/18 17:36:46     1.3
@@ -19,6 +19,7 @@
 #include <asm/leds.h>
 #include <asm/system.h>
 
+#include <asm/arch/pxa-regs.h>
 #include <asm/arch/idp.h>
 
 #include "leds.h"
diff -urN linux/arch/arm/mach-pxa/lubbock.c linux/arch/arm/mach-pxa/lubbock.c
--- linux/arch/arm/mach-pxa/lubbock.c   2005/02/13 20:16:14     1.22
+++ linux/arch/arm/mach-pxa/lubbock.c   2005/03/18 17:36:46     1.23
@@ -138,6 +138,7 @@
 
 static struct resource smc91x_resources[] = {
        [0] = {
+               .name   = "smc91x-regs",
                .start  = 0x0c000000,
                .end    = 0x0c0fffff,
                .flags  = IORESOURCE_MEM,
@@ -148,6 +149,7 @@
                .flags  = IORESOURCE_IRQ,
        },
        [2] = {
+               .name   = "smc91x-attrib",
                .start  = 0x0e000000,
                .end    = 0x0e0fffff,
                .flags  = IORESOURCE_MEM,
diff -urN linux/arch/arm/mach-pxa/mainstone.c 
linux/arch/arm/mach-pxa/mainstone.c
--- linux/arch/arm/mach-pxa/mainstone.c 2005/02/07 02:54:31     1.8
+++ linux/arch/arm/mach-pxa/mainstone.c 2005/03/18 17:36:46     1.9
@@ -295,6 +295,15 @@
 {
        pxa_map_io();
        iotable_init(mainstone_io_desc, ARRAY_SIZE(mainstone_io_desc));
+
+       /* initialize sleep mode regs (wake-up sources, etc) */
+       PGSR0 = 0x00008800;
+       PGSR1 = 0x00000002;
+       PGSR2 = 0x0001FC00;
+       PGSR3 = 0x00001F81;
+       PWER  = 0xC0000002;
+       PRER  = 0x00000002;
+       PFER  = 0x00000002;
 }
 
 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        2004/11/15 11:49:14     1.12
+++ linux/arch/arm/mach-pxa/pm.c        2005/03/18 17:36:46     1.13
@@ -47,12 +47,18 @@
  */
 enum { SLEEP_SAVE_START = 0,
 
-       SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2,
-       SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2,
-       SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2,
-       SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2,
-       SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR2_L,
-       SLEEP_SAVE_GAFR0_U, SLEEP_SAVE_GAFR1_U, SLEEP_SAVE_GAFR2_U,
+       SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, SLEEP_SAVE_GPLR3,
+       SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, SLEEP_SAVE_GPDR3,
+       SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, SLEEP_SAVE_GRER3,
+       SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, SLEEP_SAVE_GFER3,
+       SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, SLEEP_SAVE_PGSR3,
+
+       SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U,
+       SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR1_U,
+       SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR2_U,
+       SLEEP_SAVE_GAFR3_L, SLEEP_SAVE_GAFR3_U,
+
+       SLEEP_SAVE_PSTR,
 
        SLEEP_SAVE_ICMR,
        SLEEP_SAVE_CKEN,
@@ -73,6 +79,11 @@
        if (state != PM_SUSPEND_MEM)
                return -EINVAL;
 
+#ifdef CONFIG_IWMMXT
+       /* force any iWMMXt context to ram **/
+       iwmmxt_task_disable(NULL);
+#endif
+
        /* preserve current time */
        rtc.tv_sec = RCNR;
        rtc.tv_nsec = 0;
@@ -82,20 +93,32 @@
        SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2);
        SAVE(GRER0); SAVE(GRER1); SAVE(GRER2);
        SAVE(GFER0); SAVE(GFER1); SAVE(GFER2);
+       SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2);
+
        SAVE(GAFR0_L); SAVE(GAFR0_U);
        SAVE(GAFR1_L); SAVE(GAFR1_U);
        SAVE(GAFR2_L); SAVE(GAFR2_U);
 
+#ifdef CONFIG_PXA27x
+       SAVE(GPLR3); SAVE(GPDR3); SAVE(GRER3); SAVE(GFER3); SAVE(PGSR3);
+       SAVE(GAFR3_L); SAVE(GAFR3_U);
+#endif
+
        SAVE(ICMR);
        ICMR = 0;
 
        SAVE(CKEN);
        CKEN = 0;
 
+       SAVE(PSTR);
+
        /* Note: wake up source are set up in each machine specific files */
 
        /* clear GPIO transition detect  bits */
        GEDR0 = GEDR0; GEDR1 = GEDR1; GEDR2 = GEDR2;
+#ifdef CONFIG_PXA27x
+       GEDR3 = GEDR3;
+#endif
 
        /* Clear sleep reset status */
        RCSR = RCSR_SMR;
@@ -121,7 +144,8 @@
 #ifdef CONFIG_ARCH_LUBBOCK
                LUB_HEXLED = 0xbadbadc5;
 #endif
-               while (1);
+               while (1)
+                       pxa_cpu_suspend();
        }
 
        /* ensure not to come back here if it wasn't intended */
@@ -135,6 +159,12 @@
        RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
        RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2);
        RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2);
+       RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2);
+
+#ifdef CONFIG_PXA27x
+       RESTORE(GAFR3_L); RESTORE(GAFR3_U); RESTORE_GPLEVEL(3);
+       RESTORE(GPDR3); RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3);
+#endif
 
        PSSR = PSSR_RDH | PSSR_PH;
 
@@ -144,6 +174,8 @@
        ICCR = 1;
        RESTORE(ICMR);
 
+       RESTORE(PSTR);
+
        /* restore current time */
        rtc.tv_sec = RCNR;
        restore_time_delta(&delta, &rtc);
diff -urN linux/arch/arm/mach-s3c2410/mach-n30.c 
linux/arch/arm/mach-s3c2410/mach-n30.c
--- linux/arch/arm/mach-s3c2410/mach-n30.c      1970/01/01 00:00:00
+++ linux/arch/arm/mach-s3c2410/mach-n30.c      Fri Mar 18 17:36:47 2005        
1.1
@@ -0,0 +1,155 @@
+/* linux/arch/arm/mach-s3c2410/mach-n30.c
+ *
+ * Copyright (c) 2003-2005 Simtec Electronics
+ *     Ben Dooks <ben@simtec.co.uk>
+ *
+ * Copyright (c) 2005 Christer Weinigel <christer@weinigel.se>
+ *
+ * There is a wiki with more information about the n30 port at
+ * http://handhelds.org/moin/moin.cgi/AcerN30Documentation .
+ *
+ * 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/kernel.h>
+#include <linux/types.h>
+#include <linux/interrupt.h>
+#include <linux/list.h>
+#include <linux/timer.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/kthread.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <asm/hardware.h>
+#include <asm/hardware/iomd.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+
+#include <asm/arch/regs-serial.h>
+#include <asm/arch/regs-gpio.h>
+#include <asm/arch/iic.h>
+
+#include <linux/serial_core.h>
+
+#include "s3c2410.h"
+#include "clock.h"
+#include "devs.h"
+#include "cpu.h"
+
+static struct map_desc n30_iodesc[] __initdata = {
+       /* nothing here yet */
+};
+
+static struct s3c2410_uartcfg n30_uartcfgs[] = {
+       /* Normal serial port */
+       [0] = {
+               .hwport      = 0,
+               .flags       = 0,
+               .ucon        = 0x2c5,
+               .ulcon       = 0x03,
+               .ufcon       = 0x51,
+       },
+       /* IR port */
+       [1] = {
+               .hwport      = 1,
+               .flags       = 0,
+               .uart_flags  = UPF_CONS_FLOW,
+               .ucon        = 0x2c5,
+               .ulcon       = 0x43,
+               .ufcon       = 0x51,
+       },
+       /* The BlueTooth controller is connected to port 2 */
+       [2] = {
+               .hwport      = 2,
+               .flags       = 0,
+               .ucon        = 0x2c5,
+               .ulcon       = 0x03,
+               .ufcon       = 0x51,
+       },
+};
+
+static struct platform_device *n30_devices[] __initdata = {
+       &s3c_device_usb,
+       &s3c_device_lcd,
+       &s3c_device_wdt,
+       &s3c_device_i2c,
+       &s3c_device_iis,
+       &s3c_device_usbgadget,
+};
+
+static struct s3c2410_platform_i2c n30_i2ccfg = {
+       .flags          = 0,
+       .slave_addr     = 0x10,
+       .bus_freq       = 10*1000,
+       .max_freq       = 10*1000,
+};
+
+static struct s3c24xx_board n30_board __initdata = {
+       .devices       = n30_devices,
+       .devices_count = ARRAY_SIZE(n30_devices)
+};
+
+void __init n30_map_io(void)
+{
+       s3c24xx_init_io(n30_iodesc, ARRAY_SIZE(n30_iodesc));
+       s3c24xx_init_clocks(0);
+       s3c24xx_init_uarts(n30_uartcfgs, ARRAY_SIZE(n30_uartcfgs));
+       s3c24xx_set_board(&n30_board);
+}
+
+void __init n30_init_irq(void)
+{
+       s3c24xx_init_irq();
+}
+
+
+static int n30_usbstart_thread(void *unused)
+{
+       /* Turn off suspend on both USB ports, and switch the
+        * selectable USB port to USB device mode. */
+       writel(readl(S3C2410_MISCCR) & ~0x00003008, S3C2410_MISCCR);
+
+       /* Turn off the D+ pull up for 3 seconds so that the USB host
+        * at the other end will do a rescan of the USB bus.  */
+       s3c2410_gpio_setpin(S3C2410_GPB3, 0);
+
+       msleep_interruptible(3*HZ);
+
+       s3c2410_gpio_setpin(S3C2410_GPB3, 1);
+
+       return 0;
+}
+
+
+void __init n30_init(void)
+{
+       s3c_device_i2c.dev.platform_data = &n30_i2ccfg;
+
+       kthread_run(n30_usbstart_thread, NULL, "n30_usbstart");
+}
+
+MACHINE_START(N30, "Acer-N30")
+     MAINTAINER("Christer Weinigel <christer@weinigel.se>, Ben Dooks 
<ben-linux@fluff.org>")
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
+     BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
+
+       .timer          = &s3c24xx_timer,
+       .init_machine   = n30_init,
+       .init_irq       = n30_init_irq,
+       .map_io         = n30_map_io,
+MACHINE_END
+
+/*
+    Local variables:
+        compile-command: "make ARCH=arm 
CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.."
+        c-basic-offset: 8
+    End:
+*/
diff -urN linux/arch/arm/mach-s3c2410/mach-nexcoder.c 
linux/arch/arm/mach-s3c2410/mach-nexcoder.c
--- linux/arch/arm/mach-s3c2410/mach-nexcoder.c 1970/01/01 00:00:00
+++ linux/arch/arm/mach-s3c2410/mach-nexcoder.c Fri Mar 18 17:36:47 2005        
1.1
@@ -0,0 +1,156 @@
+/* linux/arch/arm/mach-s3c2410/mach-nexcoder.c
+ *
+ * Copyright (c) 2004 Nex Vision
+ *   Guillaume GOURAT <guillaume.gourat@nexvision.tv>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Modifications:
+ *     15-10-2004 GG  Created initial version
+ *     12-03-2005 BJD Updated for release
+ */
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/interrupt.h>
+#include <linux/list.h>
+#include <linux/timer.h>
+#include <linux/init.h>
+#include <linux/string.h>
+#include <linux/device.h>
+
+#include <linux/mtd/map.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <asm/setup.h>
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+
+//#include <asm/debug-ll.h>
+#include <asm/arch/regs-gpio.h>
+#include <asm/arch/regs-serial.h>
+
+#include "s3c2410.h"
+#include "s3c2440.h"
+#include "clock.h"
+#include "devs.h"
+#include "cpu.h"
+
+static struct map_desc nexcoder_iodesc[] __initdata = {
+       /* nothing here yet */
+};
+
+#define UCON S3C2410_UCON_DEFAULT
+#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
+#define UFCON S3C2410_UFCON_RXTRIG12 | S3C2410_UFCON_FIFOMODE
+
+static struct s3c2410_uartcfg nexcoder_uartcfgs[] = {
+       [0] = {
+               .hwport      = 0,
+               .flags       = 0,
+               .ucon        = UCON,
+               .ulcon       = ULCON,
+               .ufcon       = UFCON,
+       },
+       [1] = {
+               .hwport      = 1,
+               .flags       = 0,
+               .ucon        = UCON,
+               .ulcon       = ULCON,
+               .ufcon       = UFCON,
+       },
+       [2] = {
+               .hwport      = 2,
+               .flags       = 0,
+               .ucon        = UCON,
+               .ulcon       = ULCON,
+               .ufcon       = UFCON,
+       }
+};
+
+/* NOR Flash on NexVision NexCoder 2440 board */
+
+static struct resource nexcoder_nor_resource[] = {
+       [0] = {
+               .start = S3C2410_CS0,
+               .end   = S3C2410_CS0 + (8*1024*1024) - 1,
+               .flags = IORESOURCE_MEM,
+       }
+};
+
+static struct map_info nexcoder_nor_map = {
+       .bankwidth = 2,
+};
+
+static struct platform_device nexcoder_device_nor = {
+       .name           = "mtd-flash",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(nexcoder_nor_resource),
+       .resource       = nexcoder_nor_resource,
+       .dev =
+       {
+               .platform_data = &nexcoder_nor_map,
+       }
+};
+
+/* Standard Nexcoder devices */
+
+static struct platform_device *nexcoder_devices[] __initdata = {
+       &s3c_device_usb,
+       &s3c_device_lcd,
+       &s3c_device_wdt,
+       &s3c_device_i2c,
+       &s3c_device_iis,
+       &s3c_device_rtc,
+       &s3c_device_camif,
+       &s3c_device_spi0,
+       &s3c_device_spi1,
+       &nexcoder_device_nor,
+};
+
+static struct s3c24xx_board nexcoder_board __initdata = {
+       .devices       = nexcoder_devices,
+       .devices_count = ARRAY_SIZE(nexcoder_devices),
+};
+
+
+static void __init nexcoder_sensorboard_init(void)
+{
+       // Initialize SCCB bus
+       s3c2410_gpio_setpin(S3C2410_GPE14, 1); // IICSCL
+       s3c2410_gpio_cfgpin(S3C2410_GPE14, S3C2410_GPE14_OUTP);
+       s3c2410_gpio_setpin(S3C2410_GPE15, 1); // IICSDA
+       s3c2410_gpio_cfgpin(S3C2410_GPE15, S3C2410_GPE15_OUTP);
+
+       // Power up the sensor board
+       s3c2410_gpio_setpin(S3C2410_GPF1, 1);
+       s3c2410_gpio_cfgpin(S3C2410_GPF1, S3C2410_GPF1_OUTP); // CAM_GPIO7 => 
nLDO_PWRDN
+       s3c2410_gpio_setpin(S3C2410_GPF2, 0);
+       s3c2410_gpio_cfgpin(S3C2410_GPF2, S3C2410_GPF2_OUTP); // CAM_GPIO6 => 
CAM_PWRDN
+}
+
+void __init nexcoder_map_io(void)
+{
+       s3c24xx_init_io(nexcoder_iodesc, ARRAY_SIZE(nexcoder_iodesc));
+       s3c24xx_init_clocks(0);
+       s3c24xx_init_uarts(nexcoder_uartcfgs, ARRAY_SIZE(nexcoder_uartcfgs));
+       s3c24xx_set_board(&nexcoder_board);
+       nexcoder_sensorboard_init();
+}
+
+
+MACHINE_START(NEXCODER_2440, "NexVision - Nexcoder 2440")
+     MAINTAINER("Guillaume GOURAT <guillaume.gourat@nexvision.tv>")
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C24XX_VA_UART)
+     BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
+       .map_io         = nexcoder_map_io,
+       .init_irq       = s3c24xx_init_irq,
+       .timer          = &s3c24xx_timer,
+MACHINE_END
diff -urN linux/arch/arm/mach-s3c2410/mach-otom.c 
linux/arch/arm/mach-s3c2410/mach-otom.c
--- linux/arch/arm/mach-s3c2410/mach-otom.c     1970/01/01 00:00:00
+++ linux/arch/arm/mach-s3c2410/mach-otom.c     Fri Mar 18 17:36:47 2005        
1.1
@@ -0,0 +1,124 @@
+/* linux/arch/arm/mach-s3c2410/mach-otom.c
+ *
+ * Copyright (c) 2004 Nex Vision
+ *   Guillaume GOURAT <guillaume.gourat@nexvision.fr>
+ *
+ * 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/kernel.h>
+#include <linux/types.h>
+#include <linux/interrupt.h>
+#include <linux/list.h>
+#include <linux/timer.h>
+#include <linux/init.h>
+#include <linux/device.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <asm/arch/otom-map.h>
+
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+
+#include <asm/arch/regs-serial.h>
+#include <asm/arch/regs-gpio.h>
+
+#include "s3c2410.h"
+#include "clock.h"
+#include "devs.h"
+#include "cpu.h"
+
+static struct map_desc otom11_iodesc[] __initdata = {
+  /* Device area */
+       { OTOM_VA_CS8900A_BASE,  OTOM_PA_CS8900A_BASE,     SZ_16M, MT_DEVICE },
+};
+
+#define UCON S3C2410_UCON_DEFAULT
+#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
+#define UFCON S3C2410_UFCON_RXTRIG12 | S3C2410_UFCON_FIFOMODE
+
+static struct s3c2410_uartcfg otom11_uartcfgs[] = {
+       [0] = {
+               .hwport      = 0,
+               .flags       = 0,
+               .ucon        = UCON,
+               .ulcon       = ULCON,
+               .ufcon       = UFCON,
+       },
+       [1] = {
+               .hwport      = 1,
+               .flags       = 0,
+               .ucon        = UCON,
+               .ulcon       = ULCON,
+               .ufcon       = UFCON,
+       },
+       /* port 2 is not actually used */
+       [2] = {
+               .hwport      = 2,
+               .flags       = 0,
+               .ucon        = UCON,
+               .ulcon       = ULCON,
+               .ufcon       = UFCON,
+       }
+};
+
+/* NOR Flash on NexVision OTOM board */
+
+static struct resource otom_nor_resource[] = {
+       [0] = {
+               .start = S3C2410_CS0,
+               .end   = S3C2410_CS0 + (4*1024*1024) - 1,
+               .flags = IORESOURCE_MEM,
+       }
+};
+
+static struct platform_device otom_device_nor = {
+       .name           = "mtd-flash",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(otom_nor_resource),
+       .resource       = otom_nor_resource,
+};
+
+/* Standard OTOM devices */
+
+static struct platform_device *otom11_devices[] __initdata = {
+       &s3c_device_usb,
+       &s3c_device_lcd,
+       &s3c_device_wdt,
+       &s3c_device_i2c,
+       &s3c_device_iis,
+       &s3c_device_rtc,
+       &otom_device_nor,
+};
+
+static struct s3c24xx_board otom11_board __initdata = {
+       .devices       = otom11_devices,
+       .devices_count = ARRAY_SIZE(otom11_devices)
+};
+
+
+void __init otom11_map_io(void)
+{
+       s3c24xx_init_io(otom11_iodesc, ARRAY_SIZE(otom11_iodesc));
+       s3c24xx_init_clocks(0);
+       s3c24xx_init_uarts(otom11_uartcfgs, ARRAY_SIZE(otom11_uartcfgs));
+       s3c24xx_set_board(&otom11_board);
+}
+
+
+MACHINE_START(OTOM, "Nex Vision - Otom 1.1")
+     MAINTAINER("Guillaume GOURAT <guillaume.gourat@nexvision.tv>")
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C24XX_VA_UART)
+     BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
+       .map_io         = otom11_map_io,
+       .init_irq       = s3c24xx_init_irq,
+       .timer          = &s3c24xx_timer,
+MACHINE_END
diff -urN linux/arch/arm/mach-s3c2410/mach-smdk2440.c 
linux/arch/arm/mach-s3c2410/mach-smdk2440.c
--- linux/arch/arm/mach-s3c2410/mach-smdk2440.c 1970/01/01 00:00:00
+++ linux/arch/arm/mach-s3c2410/mach-smdk2440.c Fri Mar 18 17:36:47 2005        
1.1
@@ -0,0 +1,135 @@
+/* linux/arch/arm/mach-s3c2410/mach-smdk2440.c
+ *
+ * Copyright (c) 2004,2005 Simtec Electronics
+ *     Ben Dooks <ben@simtec.co.uk>
+ *
+ * http://www.fluff.org/ben/smdk2440/
+ *
+ * Thanks to Dimity Andric and TomTom for the loan of an SMDK2440.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Modifications:
+ *     01-Nov-2004 BJD   Initial version
+ *     12-Nov-2004 BJD   Updated for release
+ *     04-Jan-2005 BJD   Fixes for pre-release
+ *     22-Feb-2005 BJD   Updated for 2.6.11-rc5 relesa
+ *     10-Mar-2005 LCVR  Replaced S3C2410_VA by S3C24XX_VA
+ *     14-Mar-2005 BJD   void __iomem fixes
+*/
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/interrupt.h>
+#include <linux/list.h>
+#include <linux/timer.h>
+#include <linux/init.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <asm/hardware.h>
+#include <asm/hardware/iomd.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+
+//#include <asm/debug-ll.h>
+#include <asm/arch/regs-serial.h>
+#include <asm/arch/regs-gpio.h>
+#include <asm/arch/idle.h>
+
+#include "s3c2410.h"
+#include "s3c2440.h"
+#include "clock.h"
+#include "devs.h"
+#include "cpu.h"
+#include "pm.h"
+
+static struct map_desc smdk2440_iodesc[] __initdata = {
+       /* ISA IO Space map (memory space selected by A24) */
+
+       { (u32)S3C24XX_VA_ISA_WORD, S3C2410_CS2, SZ_16M, MT_DEVICE },
+       { (u32)S3C24XX_VA_ISA_BYTE, S3C2410_CS2, SZ_16M, MT_DEVICE },
+};
+
+#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
+#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
+#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
+
+static struct s3c2410_uartcfg smdk2440_uartcfgs[] = {
+       [0] = {
+               .hwport      = 0,
+               .flags       = 0,
+               .ucon        = 0x3c5,
+               .ulcon       = 0x03,
+               .ufcon       = 0x51,
+       },
+       [1] = {
+               .hwport      = 1,
+               .flags       = 0,
+               .ucon        = 0x3c5,
+               .ulcon       = 0x03,
+               .ufcon       = 0x51,
+       },
+       /* IR port */
+       [2] = {
+               .hwport      = 2,
+               .flags       = 0,
+               .ucon        = 0x3c5,
+               .ulcon       = 0x43,
+               .ufcon       = 0x51,
+       }
+};
+
+static struct platform_device *smdk2440_devices[] __initdata = {
+       &s3c_device_usb,
+       &s3c_device_lcd,
+       &s3c_device_wdt,
+       &s3c_device_i2c,
+       &s3c_device_iis,
+};
+
+static struct s3c24xx_board smdk2440_board __initdata = {
+       .devices       = smdk2440_devices,
+       .devices_count = ARRAY_SIZE(smdk2440_devices)
+};
+
+void __init smdk2440_map_io(void)
+{
+       s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
+       s3c24xx_init_clocks(16934400);
+       s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
+       s3c24xx_set_board(&smdk2440_board);
+}
+
+void __init smdk2440_machine_init(void)
+{
+       /* Configure the LEDs (even if we have no LED support)*/
+
+       s3c2410_gpio_cfgpin(S3C2410_GPF4, S3C2410_GPF4_OUTP);
+       s3c2410_gpio_cfgpin(S3C2410_GPF5, S3C2410_GPF5_OUTP);
+       s3c2410_gpio_cfgpin(S3C2410_GPF6, S3C2410_GPF6_OUTP);
+       s3c2410_gpio_cfgpin(S3C2410_GPF7, S3C2410_GPF7_OUTP);
+
+       s3c2410_gpio_setpin(S3C2410_GPF4, 0);
+       s3c2410_gpio_setpin(S3C2410_GPF5, 0);
+       s3c2410_gpio_setpin(S3C2410_GPF6, 0);
+       s3c2410_gpio_setpin(S3C2410_GPF7, 0);
+
+       s3c2410_pm_init();
+}
+
+MACHINE_START(S3C2440, "SMDK2440")
+       MAINTAINER("Ben Dooks <ben@fluff.org>")
+       BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
+       BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
+
+       .init_irq       = s3c24xx_init_irq,
+       .map_io         = smdk2440_map_io,
+       .init_machine   = smdk2440_machine_init,
+       .timer          = &s3c24xx_timer,
+MACHINE_END
diff -urN linux/arch/arm/mach-s3c2410/Kconfig 
linux/arch/arm/mach-s3c2410/Kconfig
--- linux/arch/arm/mach-s3c2410/Kconfig 2005/01/25 04:27:53     1.9
+++ linux/arch/arm/mach-s3c2410/Kconfig 2005/03/18 17:36:46     1.10
@@ -19,6 +19,14 @@
 
          <http://www.handhelds.org/projects/h1940.html>.
 
+config MACH_N30
+       bool "Acer N30"
+       select CPU_S3C2410
+       help
+         Say Y here if you are using the Acer N30
+
+         <http://zoo.weinigel.se/n30>.
+
 config ARCH_SMDK2410
        bool "SMDK2410/A9M2410"
        select CPU_S3C2410
@@ -26,6 +34,12 @@
           Say Y here if you are using the SMDK2410 or the derived module 
A9M2410
            <http://www.fsforth.de>
 
+config ARCH_S3C2440
+       bool "SMDK2440"
+       select CPU_S3C2440
+       help
+         Say Y here if you are using the SMDK2440.
+
 config MACH_VR1000
        bool "Thorcom VR1000"
        select CPU_S3C2410
@@ -44,6 +58,18 @@
          See <http://www.handhelds.org/projects/rx3715.html> for more
          information on this project
 
+config MACH_OTOM
+       bool "NexVision OTOM Board"
+       select CPU_S3C2410
+       help
+         Say Y here if you are using the Nex Vision OTOM board
+
+config MACH_NEXCODER_2440
+       bool "NexVision NEXCODER 2440 Light Board"
+       select CPU_S3C2440
+       help
+         Say Y here if you are using the Nex Vision NEXCODER 2440 Light Board
+
 endmenu
 
 config CPU_S3C2410
@@ -59,6 +85,26 @@
        help
          Support for S3C2440 Samsung Mobile CPU based systems.
 
+comment "S3C2410 Boot"
+
+config S3C2410_BOOT_WATCHDOG
+       bool "S3C2410 Initialisation watchdog"
+       depends on ARCH_S3C2410 && S3C2410_WATCHDOG
+       help
+         Say y to enable the watchdog during the kernel decompression
+         stage. If the kernel fails to uncompress, then the watchdog
+         will trigger a reset and the system should restart.
+
+         Although this uses the same hardware unit as the kernel watchdog
+         driver, it is not a replacement for it. If you use this option,
+         you will have to use the watchdg driver to either stop the timeout
+         or restart it. If you do not, then your kernel will reboot after
+         startup.
+
+         The driver uses a fixed timeout value, so the exact time till the
+         system resets depends on the value of PCLK. The timeout on an
+         200MHz s3c2410 should be about 30 seconds.
+
 comment "S3C2410 Setup"
 
 config S3C2410_DMA
diff -urN linux/arch/arm/mach-s3c2410/Makefile 
linux/arch/arm/mach-s3c2410/Makefile
--- linux/arch/arm/mach-s3c2410/Makefile        2004/11/15 11:49:14     1.8
+++ linux/arch/arm/mach-s3c2410/Makefile        2005/03/18 17:36:46     1.9
@@ -27,6 +27,10 @@
 
 obj-$(CONFIG_ARCH_BAST)                += mach-bast.o usb-simtec.o
 obj-$(CONFIG_ARCH_H1940)       += mach-h1940.o
+obj-$(CONFIG_MACH_N30)         += mach-n30.o
 obj-$(CONFIG_ARCH_SMDK2410)    += mach-smdk2410.o
+obj-$(CONFIG_ARCH_S3C2440)     += mach-smdk2440.o
 obj-$(CONFIG_MACH_VR1000)      += mach-vr1000.o usb-simtec.o
 obj-$(CONFIG_MACH_RX3715)      += mach-rx3715.o
+obj-$(CONFIG_MACH_OTOM)                += mach-otom.o
+obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
diff -urN linux/arch/arm/mach-s3c2410/clock.c 
linux/arch/arm/mach-s3c2410/clock.c
--- linux/arch/arm/mach-s3c2410/clock.c 2005/01/25 04:27:53     1.6
+++ linux/arch/arm/mach-s3c2410/clock.c 2005/03/18 17:36:46     1.7
@@ -1,7 +1,7 @@
 /* linux/arch/arm/mach-s3c2410/clock.c
  *
- * Copyright (c) 2004 Simtec Electronics
- * Ben Dooks <ben@simtec.co.uk>
+ * Copyright (c) 2004-2005 Simtec Electronics
+ *     Ben Dooks <ben@simtec.co.uk>
  *
  * S3C2410 Clock control support
  *
@@ -33,6 +33,7 @@
 #include <linux/errno.h>
 #include <linux/err.h>
 #include <linux/device.h>
+#include <linux/sysdev.h>
 
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
@@ -46,18 +47,13 @@
 #include <asm/arch/regs-clock.h>
 
 #include "clock.h"
+#include "cpu.h"
 
 /* clock information */
 
-unsigned long s3c24xx_xtal = 12*1000*1000;     /* default 12MHz */
-unsigned long s3c24xx_fclk;
-unsigned long s3c24xx_hclk;
-unsigned long s3c24xx_pclk;
-
 static LIST_HEAD(clocks);
 static DECLARE_MUTEX(clocks_sem);
 
-
 /* old functions */
 
 void inline s3c24xx_clk_enable(unsigned int clocks, unsigned int enable)
@@ -206,6 +202,14 @@
 
 /* base clocks */
 
+static struct clk clk_xtal = {
+       .name           = "xtal",
+       .id             = -1,
+       .rate           = 0,
+       .parent         = NULL,
+       .ctrlbit        = 0,
+};
+
 static struct clk clk_f = {
        .name           = "fclk",
        .id             = -1,
@@ -286,6 +290,7 @@
          .ctrlbit = S3C2410_CLKCON_USBD
        },
        { .name    = "timers",
+         .id      = -1,
          .parent  = &clk_p,
          .enable  = s3c24xx_clkcon_enable,
          .ctrlbit = S3C2410_CLKCON_PWMT
@@ -378,19 +383,24 @@
 
 /* initalise all the clocks */
 
-int __init s3c24xx_setup_clocks(void)
+int __init s3c24xx_setup_clocks(unsigned long xtal,
+                               unsigned long fclk,
+                               unsigned long hclk,
+                               unsigned long pclk)
 {
        struct clk *clkp = init_clocks;
        int ptr;
        int ret;
 
-       printk(KERN_INFO "S3C2410 Clock control, (c) 2004 Simtec 
Electronics\n");
+       printk(KERN_INFO "S3C2410 Clocks, (c) 2004 Simtec Electronics\n");
 
        /* initialise the main system clocks */
 
-       clk_h.rate = s3c24xx_hclk;
-       clk_p.rate = s3c24xx_pclk;
-       clk_f.rate = s3c24xx_fclk;
+       clk_xtal.rate = xtal;
+
+       clk_h.rate = hclk;
+       clk_p.rate = pclk;
+       clk_f.rate = fclk;
 
        /* it looks like just setting the register here is not good
         * enough, and causes the odd hang at initial boot time, so
@@ -414,6 +424,9 @@
 
        /* register our clocks */
 
+       if (s3c24xx_register_clock(&clk_xtal) < 0)
+               printk(KERN_ERR "failed to register master xtal\n");
+
        if (s3c24xx_register_clock(&clk_f) < 0)
                printk(KERN_ERR "failed to register cpu fclk\n");
 
@@ -423,6 +436,8 @@
        if (s3c24xx_register_clock(&clk_p) < 0)
                printk(KERN_ERR "failed to register cpu pclk\n");
 
+       /* register clocks from clock array */
+
        for (ptr = 0; ptr < ARRAY_SIZE(init_clocks); ptr++, clkp++) {
                ret = s3c24xx_register_clock(clkp);
                if (ret < 0) {
@@ -434,4 +449,59 @@
        return 0;
 }
 
+/* S3C2440 extended clock support */
+
+#ifdef CONFIG_CPU_S3C2440
+
+static struct clk s3c2440_clk_upll = {
+       .name           = "upll",
+       .id             = -1,
+};
+
+static struct clk s3c2440_clk_cam = {
+       .name           = "camif",
+       .parent         = &clk_h,
+       .id             = -1,
+       .enable         = s3c24xx_clkcon_enable,
+       .ctrlbit        = S3C2440_CLKCON_CAMERA,
+};
+
+static struct clk s3c2440_clk_ac97 = {
+       .name           = "ac97",
+       .parent         = &clk_p,
+       .id             = -1,
+       .enable         = s3c24xx_clkcon_enable,
+       .ctrlbit        = S3C2440_CLKCON_CAMERA,
+};
+
+static int s3c2440_clk_add(struct sys_device *sysdev)
+{
+       unsigned long upllcon = __raw_readl(S3C2410_UPLLCON);
+
+       s3c2440_clk_upll.rate = s3c2410_get_pll(upllcon, clk_xtal.rate) * 2;
+
+       printk("S3C2440: Clock Support, UPLL %ld.%03ld MHz\n",
+              print_mhz(s3c2440_clk_upll.rate));
+
+       s3c24xx_register_clock(&s3c2440_clk_ac97);
+       s3c24xx_register_clock(&s3c2440_clk_cam);
+       s3c24xx_register_clock(&s3c2440_clk_upll);
+
+       clk_disable(&s3c2440_clk_ac97);
+       clk_disable(&s3c2440_clk_cam);
+
+       return 0;
+}
+
+static struct sysdev_driver s3c2440_clk_driver = {
+       .add    = s3c2440_clk_add,
+};
+
+static int s3c24xx_clk_driver(void)
+{
+       return sysdev_driver_register(&s3c2440_sysclass, &s3c2440_clk_driver);
+}
+
+arch_initcall(s3c24xx_clk_driver);
 
+#endif /* CONFIG_CPU_S3C2440 */
diff -urN linux/arch/arm/mach-s3c2410/clock.h 
linux/arch/arm/mach-s3c2410/clock.h
--- linux/arch/arm/mach-s3c2410/clock.h 2005/01/25 04:27:53     1.4
+++ linux/arch/arm/mach-s3c2410/clock.h 2005/03/18 17:36:46     1.5
@@ -1,7 +1,8 @@
 /*
  * linux/arch/arm/mach-s3c2410/clock.h
  *
- * Copyright (c) 2004 Simtec Electronics
+ * Copyright (c) 2004-2005 Simtec Electronics
+ *     http://www.simtec.co.uk/products/SWLINUX/
  *     Written by Ben Dooks, <ben@simtec.co.uk>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -29,13 +30,6 @@
 extern struct clk s3c24xx_clkout1;
 extern struct clk s3c24xx_uclk;
 
-/* processor clock settings, in Hz */
-
-extern unsigned long s3c24xx_xtal;
-extern unsigned long s3c24xx_pclk;
-extern unsigned long s3c24xx_hclk;
-extern unsigned long s3c24xx_fclk;
-
 /* exports for arch/arm/mach-s3c2410
  *
  * Please DO NOT use these outside of arch/arm/mach-s3c2410
@@ -44,4 +38,7 @@
 extern int s3c24xx_clkcon_enable(struct clk *clk, int enable);
 extern int s3c24xx_register_clock(struct clk *clk);
 
-extern int s3c24xx_setup_clocks(void);
+extern int s3c24xx_setup_clocks(unsigned long xtal,
+                               unsigned long fclk,
+                               unsigned long hclk,
+                               unsigned long pclk);
diff -urN linux/arch/arm/mach-s3c2410/cpu.c linux/arch/arm/mach-s3c2410/cpu.c
--- linux/arch/arm/mach-s3c2410/cpu.c   2005/01/25 04:27:53     1.6
+++ linux/arch/arm/mach-s3c2410/cpu.c   2005/03/18 17:36:46     1.7
@@ -1,7 +1,8 @@
 /* linux/arch/arm/mach-s3c2410/cpu.c
  *
- * Copyright (c) 2004 Simtec Electronics
- * Ben Dooks <ben@simtec.co.uk>
+ * Copyright (c) 2004-2005 Simtec Electronics
+ *     http://www.simtec.co.uk/products/SWLINUX/
+ *     Ben Dooks <ben@simtec.co.uk>
  *
  * S3C24XX CPU Support
  *
@@ -181,8 +182,8 @@
 
 void __init s3c24xx_init_clocks(int xtal)
 {
-       if (xtal != 0)
-               s3c24xx_xtal = xtal;
+       if (xtal == 0)
+               xtal = 12*1000*1000;
 
        if (cpu == NULL)
                panic("s3c24xx_init_clocks: no cpu setup?\n");
diff -urN linux/arch/arm/mach-s3c2410/cpu.h linux/arch/arm/mach-s3c2410/cpu.h
--- linux/arch/arm/mach-s3c2410/cpu.h   2005/01/25 04:27:53     1.5
+++ linux/arch/arm/mach-s3c2410/cpu.h   2005/03/18 17:36:46     1.6
@@ -15,9 +15,13 @@
  *     04-Jan-2005 BJD  New uart initialisation
  *     10-Jan-2005 BJD  Moved generic init here, specific to cpu headers
  *     14-Jan-2005 BJD  Added s3c24xx_init_clocks() call
+ *     10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ} & IODESC_ENT
+ *     14-Mar-2005 BJD  Updated for __iomem
 */
 
-#define IODESC_ENT(x) { S3C2410_VA_##x, S3C2410_PA_##x, S3C2410_SZ_##x, 
MT_DEVICE }
+/* todo - fix when rmk changes iodescs to use `void __iomem *` */
+
+#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, S3C2410_PA_##x, 
S3C24XX_SZ_##x, MT_DEVICE }
 
 #ifndef MHZ
 #define MHZ (1000*1000)
@@ -27,6 +31,7 @@
 
 /* forward declaration */
 struct s3c2410_uartcfg;
+struct map_desc;
 
 /* core initialisation functions */
 
@@ -58,3 +63,7 @@
 
 struct sys_timer;
 extern struct sys_timer s3c24xx_timer;
+
+/* system device classes */
+
+extern struct sysdev_class s3c2440_sysclass;
diff -urN linux/arch/arm/mach-s3c2410/devs.c linux/arch/arm/mach-s3c2410/devs.c
--- linux/arch/arm/mach-s3c2410/devs.c  2004/11/15 11:49:14     1.4
+++ linux/arch/arm/mach-s3c2410/devs.c  2005/03/18 17:36:46     1.5
@@ -10,6 +10,8 @@
  * published by the Free Software Foundation.
  *
  * Modifications:
+ *     10-Mar-2005 LCVR Changed S3C2410_{VA,SZ} to S3C24XX_{VA,SZ}
+ *     10-Feb-2005 BJD  Added camera from guillaume.gourat@nexvision.tv
  *     29-Aug-2004 BJD  Added timers 0 through 3
  *     29-Aug-2004 BJD  Changed index of devices we only have one of to -1
  *     21-Aug-2004 BJD  Added IRQ_TICK to RTC resources
@@ -45,7 +47,7 @@
 static struct resource s3c_usb_resource[] = {
        [0] = {
                .start = S3C2410_PA_USBHOST,
-               .end   = S3C2410_PA_USBHOST + S3C2410_SZ_USBHOST,
+               .end   = S3C2410_PA_USBHOST + S3C24XX_SZ_USBHOST,
                .flags = IORESOURCE_MEM,
        },
        [1] = {
@@ -75,7 +77,7 @@
 static struct resource s3c_lcd_resource[] = {
        [0] = {
                .start = S3C2410_PA_LCD,
-               .end   = S3C2410_PA_LCD + S3C2410_SZ_LCD,
+               .end   = S3C2410_PA_LCD + S3C24XX_SZ_LCD,
                .flags = IORESOURCE_MEM,
        },
        [1] = {
@@ -106,7 +108,7 @@
 static struct resource s3c_nand_resource[] = {
        [0] = {
                .start = S3C2410_PA_NAND,
-               .end   = S3C2410_PA_NAND + S3C2410_SZ_NAND,
+               .end   = S3C2410_PA_NAND + S3C24XX_SZ_NAND,
                .flags = IORESOURCE_MEM,
        }
 };
@@ -125,7 +127,7 @@
 static struct resource s3c_usbgadget_resource[] = {
        [0] = {
                .start = S3C2410_PA_USBDEV,
-               .end   = S3C2410_PA_USBDEV + S3C2410_SZ_USBDEV,
+               .end   = S3C2410_PA_USBDEV + S3C24XX_SZ_USBDEV,
                .flags = IORESOURCE_MEM,
        },
        [1] = {
@@ -150,7 +152,7 @@
 static struct resource s3c_wdt_resource[] = {
        [0] = {
                .start = S3C2410_PA_WATCHDOG,
-               .end   = S3C2410_PA_WATCHDOG + S3C2410_SZ_WATCHDOG,
+               .end   = S3C2410_PA_WATCHDOG + S3C24XX_SZ_WATCHDOG,
                .flags = IORESOURCE_MEM,
        },
        [1] = {
@@ -175,7 +177,7 @@
 static struct resource s3c_i2c_resource[] = {
        [0] = {
                .start = S3C2410_PA_IIC,
-               .end   = S3C2410_PA_IIC + S3C2410_SZ_IIC,
+               .end   = S3C2410_PA_IIC + S3C24XX_SZ_IIC,
                .flags = IORESOURCE_MEM,
        },
        [1] = {
@@ -200,7 +202,7 @@
 static struct resource s3c_iis_resource[] = {
        [0] = {
                .start = S3C2410_PA_IIS,
-               .end   = S3C2410_PA_IIS + S3C2410_SZ_IIS,
+               .end   = S3C2410_PA_IIS + S3C24XX_SZ_IIS,
                .flags = IORESOURCE_MEM,
        }
 };
@@ -254,7 +256,7 @@
 static struct resource s3c_adc_resource[] = {
        [0] = {
                .start = S3C2410_PA_ADC,
-               .end   = S3C2410_PA_ADC + S3C2410_SZ_ADC,
+               .end   = S3C2410_PA_ADC + S3C24XX_SZ_ADC,
                .flags = IORESOURCE_MEM,
        },
        [1] = {
@@ -277,7 +279,7 @@
 static struct resource s3c_sdi_resource[] = {
        [0] = {
                .start = S3C2410_PA_SDI,
-               .end   = S3C2410_PA_SDI + S3C2410_SZ_SDI,
+               .end   = S3C2410_PA_SDI + S3C24XX_SZ_SDI,
                .flags = IORESOURCE_MEM,
        },
        [1] = {
@@ -446,3 +448,38 @@
 };
 
 EXPORT_SYMBOL(s3c_device_timer3);
+
+#ifdef CONFIG_CPU_S3C2440
+
+/* Camif Controller */
+
+static struct resource s3c_camif_resource[] = {
+       [0] = {
+               .start = S3C2440_PA_CAMIF,
+               .end   = S3C2440_PA_CAMIF + S3C2440_SZ_CAMIF,
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start = IRQ_CAM,
+               .end   = IRQ_CAM,
+               .flags = IORESOURCE_IRQ,
+       }
+
+};
+
+static u64 s3c_device_camif_dmamask = 0xffffffffUL;
+
+struct platform_device s3c_device_camif = {
+       .name             = "s3c2440-camif",
+       .id               = -1,
+       .num_resources    = ARRAY_SIZE(s3c_camif_resource),
+       .resource         = s3c_camif_resource,
+       .dev              = {
+               .dma_mask = &s3c_device_camif_dmamask,
+               .coherent_dma_mask = 0xffffffffUL
+       }
+};
+
+EXPORT_SYMBOL(s3c_device_camif);
+
+#endif // CONFIG_CPU_S32440
diff -urN linux/arch/arm/mach-s3c2410/devs.h linux/arch/arm/mach-s3c2410/devs.h
--- linux/arch/arm/mach-s3c2410/devs.h  2004/09/19 12:30:02     1.2
+++ linux/arch/arm/mach-s3c2410/devs.h  2005/03/18 17:36:46     1.3
@@ -12,7 +12,11 @@
  * Modifications:
  *      18-Aug-2004 BJD  Created initial version
  *     27-Aug-2004 BJD  Added timers 0 through 3
+ *     10-Feb-2005 BJD  Added camera from guillaume.gourat@nexvision.tv
 */
+#include <linux/config.h>
+
+extern struct platform_device *s3c24xx_uart_devs[];
 
 extern struct platform_device s3c_device_usb;
 extern struct platform_device s3c_device_lcd;
@@ -34,3 +38,11 @@
 extern struct platform_device s3c_device_timer3;
 
 extern struct platform_device s3c_device_usbgadget;
+
+/* s3c2440 specific devices */
+
+#ifdef CONFIG_CPU_S3C2440
+
+extern struct platform_device s3c_device_camif;
+
+#endif
diff -urN linux/arch/arm/mach-s3c2410/dma.c linux/arch/arm/mach-s3c2410/dma.c
--- linux/arch/arm/mach-s3c2410/dma.c   2005/01/25 04:27:53     1.4
+++ linux/arch/arm/mach-s3c2410/dma.c   2005/03/18 17:36:46     1.5
@@ -1,6 +1,6 @@
 /* linux/arch/arm/mach-bast/dma.c
  *
- * (c) 2003,2004 Simtec Electronics
+ * (c) 2003-2005 Simtec Electronics
  *     Ben Dooks <ben@simtec.co.uk>
  *
  * S3C2410 DMA core
@@ -12,6 +12,7 @@
  * published by the Free Software Foundation.
  *
  * Changelog:
+ *  27-Feb-2005 BJD  Added kmem cache for dma descriptors
  *  18-Nov-2004 BJD  Removed error for loading onto stopped channel
  *  10-Nov-2004 BJD  Ensure all external symbols exported for modules
  *  10-Nov-2004 BJD  Use sys_device and sysdev_class for power management
@@ -57,6 +58,7 @@
 
 /* io map for dma */
 static void __iomem *dma_base;
+static kmem_cache_t *dma_kmem;
 
 /* dma channel state information */
 s3c2410_dma_chan_t s3c2410_chans[S3C2410_DMA_CHANNELS];
@@ -432,7 +434,7 @@
        pr_debug("%s: id=%p, data=%08x, size=%d\n",
                 __FUNCTION__, id, (unsigned int)data, size);
 
-       buf = (s3c2410_dma_buf_t *)kmalloc(sizeof(*buf), GFP_ATOMIC);
+       buf = kmem_cache_alloc(dma_kmem, GFP_ATOMIC);
        if (buf == NULL) {
                pr_debug("%s: out of memory (%d alloc)\n",
                         __FUNCTION__, sizeof(*buf));
@@ -511,7 +513,7 @@
        buf->magic = -1;
 
        if (magicok) {
-               kfree(buf);
+               kmem_cache_free(dma_kmem, buf);
        } else {
                printk("s3c2410_dma_freebuf: buff %p with bad magic\n", buf);
        }
@@ -1128,6 +1130,14 @@
        .resume         = s3c2410_dma_resume,
 };
 
+/* kmem cache implementation */
+
+static void s3c2410_dma_cache_ctor(void *p, kmem_cache_t *c, unsigned long f)
+{
+       memset(p, 0, sizeof(s3c2410_dma_buf_t));
+}
+
+
 /* initialisation code */
 
 static int __init s3c2410_init_dma(void)
@@ -1150,6 +1160,16 @@
                goto err;
        }
 
+       dma_kmem = kmem_cache_create("dma_desc", sizeof(s3c2410_dma_buf_t), 0,
+                                    SLAB_HWCACHE_ALIGN,
+                                    s3c2410_dma_cache_ctor, NULL);
+
+       if (dma_kmem == NULL) {
+               printk(KERN_ERR "dma failed to make kmem cache\n");
+               ret = -ENOMEM;
+               goto err;
+       }
+
        for (channel = 0; channel < S3C2410_DMA_CHANNELS; channel++) {
                cp = &s3c2410_chans[channel];
 
@@ -1181,6 +1201,7 @@
        return 0;
 
  err:
+       kmem_cache_destroy(dma_kmem);
        iounmap(dma_base);
        dma_base = NULL;
        return ret;
diff -urN linux/arch/arm/mach-s3c2410/gpio.c linux/arch/arm/mach-s3c2410/gpio.c
--- linux/arch/arm/mach-s3c2410/gpio.c  2004/11/15 11:49:14     1.4
+++ linux/arch/arm/mach-s3c2410/gpio.c  2005/03/18 17:36:46     1.5
@@ -1,7 +1,7 @@
 /* linux/arch/arm/mach-s3c2410/gpio.c
  *
- * Copyright (c) 2004 Simtec Electronics
- * Ben Dooks <ben@simtec.co.uk>
+ * Copyright (c) 2004-2005 Simtec Electronics
+ *     Ben Dooks <ben@simtec.co.uk>
  *
  * S3C2410 GPIO support
  *
@@ -29,9 +29,11 @@
  *     01-Oct-2004  BJD  Added getirq() to turn pin into irqno
  *     04-Oct-2004  BJD  Added irq filter controls for GPIO
  *     05-Nov-2004  BJD  EXPORT_SYMBOL() added for all code
+ *     13-Mar-2005  BJD  Updates for __iomem
  */
 
 
+#include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
@@ -45,7 +47,7 @@
 
 void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)
 {
-       unsigned long base = S3C2410_GPIO_BASE(pin);
+       void __iomem *base = S3C2410_GPIO_BASE(pin);
        unsigned long mask;
        unsigned long con;
        unsigned long flags;
@@ -71,7 +73,7 @@
 
 unsigned int s3c2410_gpio_getcfg(unsigned int pin)
 {
-       unsigned long base = S3C2410_GPIO_BASE(pin);
+       void __iomem *base = S3C2410_GPIO_BASE(pin);
        unsigned long mask;
 
        if (pin < S3C2410_GPIO_BANKB) {
@@ -87,7 +89,7 @@
 
 void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
 {
-       unsigned long base = S3C2410_GPIO_BASE(pin);
+       void __iomem *base = S3C2410_GPIO_BASE(pin);
        unsigned long offs = S3C2410_GPIO_OFFSET(pin);
        unsigned long flags;
        unsigned long up;
@@ -109,7 +111,7 @@
 
 void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
 {
-       unsigned long base = S3C2410_GPIO_BASE(pin);
+       void __iomem *base = S3C2410_GPIO_BASE(pin);
        unsigned long offs = S3C2410_GPIO_OFFSET(pin);
        unsigned long flags;
        unsigned long dat;
@@ -128,7 +130,7 @@
 
 unsigned int s3c2410_gpio_getpin(unsigned int pin)
 {
-       unsigned long base = S3C2410_GPIO_BASE(pin);
+       void __iomem *base = S3C2410_GPIO_BASE(pin);
        unsigned long offs = S3C2410_GPIO_OFFSET(pin);
 
        return __raw_readl(base + 0x04) & (1<< offs);
@@ -175,7 +177,7 @@
 int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,
                           unsigned int config)
 {
-       unsigned long reg = S3C2410_EINFLT0;
+       void __iomem *reg = S3C2410_EINFLT0;
        unsigned long flags;
        unsigned long val;
 
diff -urN linux/arch/arm/mach-s3c2410/irq.c linux/arch/arm/mach-s3c2410/irq.c
--- linux/arch/arm/mach-s3c2410/irq.c   2005/01/25 04:27:53     1.5
+++ linux/arch/arm/mach-s3c2410/irq.c   2005/03/18 17:36:46     1.6
@@ -39,6 +39,9 @@
  *
  *   04-Nov-2004  Ben Dooks
  *               Fix standard IRQ wake for EINT0..4 and RTC
+ *
+ *   22-Feb-2004  Ben Dooks
+ *               Fixed edge-triggering on ADC IRQ
 */
 
 #include <linux/init.h>
@@ -57,6 +60,7 @@
 #include <asm/arch/regs-irq.h>
 #include <asm/arch/regs-gpio.h>
 
+#include "cpu.h"
 #include "pm.h"
 
 #define irqdbf(x...)
@@ -261,8 +265,8 @@
 static int
 s3c_irqext_type(unsigned int irq, unsigned int type)
 {
-       unsigned long extint_reg;
-       unsigned long gpcon_reg;
+       void __iomem *extint_reg;
+       void __iomem *gpcon_reg;
        unsigned long gpcon_offset, extint_offset;
        unsigned long newvalue = 0, value;
 
@@ -425,6 +429,23 @@
        }
 }
 
+static inline void
+s3c_irqsub_ack(unsigned int irqno, unsigned int parentmask, unsigned int group)
+{
+       unsigned int bit = 1UL << (irqno - IRQ_S3CUART_RX0);
+
+       __raw_writel(bit, S3C2410_SUBSRCPND);
+
+       /* only ack parent if we've got all the irqs (seems we must
+        * ack, all and hope that the irq system retriggers ok when
+        * the interrupt goes off again)
+        */
+
+       if (1) {
+               __raw_writel(parentmask, S3C2410_SRCPND);
+               __raw_writel(parentmask, S3C2410_INTPND);
+       }
+}
 
 /* UART0 */
 
@@ -521,7 +542,7 @@
 static void
 s3c_irq_adc_ack(unsigned int irqno)
 {
-       s3c_irqsub_maskack(irqno, INTMSK_ADCPARENT, 3 << 9);
+       s3c_irqsub_ack(irqno, INTMSK_ADCPARENT, 3 << 9);
 }
 
 static struct irqchip s3c_irq_adc = {
@@ -628,6 +649,7 @@
        s3c_irq_demux_uart(IRQ_S3CUART_RX2, regs);
 }
 
+
 /* s3c24xx_init_irq
  *
  * Initialise S3C2410 IRQ system
@@ -771,3 +793,174 @@
 
        irqdbf("s3c2410: registered interrupt handlers\n");
 }
+
+/* s3c2440 irq code
+*/
+
+#ifdef CONFIG_CPU_S3C2440
+
+/* WDT/AC97 */
+
+static void s3c_irq_demux_wdtac97(unsigned int irq,
+                                 struct irqdesc *desc,
+                                 struct pt_regs *regs)
+{
+       unsigned int subsrc, submsk;
+       struct irqdesc *mydesc;
+
+       /* read the current pending interrupts, and the mask
+        * for what it is available */
+
+       subsrc = __raw_readl(S3C2410_SUBSRCPND);
+       submsk = __raw_readl(S3C2410_INTSUBMSK);
+
+       subsrc &= ~submsk;
+       subsrc >>= 13;
+       subsrc &= 3;
+
+       if (subsrc != 0) {
+               if (subsrc & 1) {
+                       mydesc = irq_desc + IRQ_S3C2440_WDT;
+                       mydesc->handle( IRQ_S3C2440_WDT, mydesc, regs);
+               }
+               if (subsrc & 2) {
+                       mydesc = irq_desc + IRQ_S3C2440_AC97;
+                       mydesc->handle(IRQ_S3C2440_AC97, mydesc, regs);
+               }
+       }
+}
+
+
+#define INTMSK_WDT      (1UL << (IRQ_WDT - IRQ_EINT0))
+
+static void
+s3c_irq_wdtac97_mask(unsigned int irqno)
+{
+       s3c_irqsub_mask(irqno, INTMSK_WDT, 3<<13);
+}
+
+static void
+s3c_irq_wdtac97_unmask(unsigned int irqno)
+{
+       s3c_irqsub_unmask(irqno, INTMSK_WDT);
+}
+
+static void
+s3c_irq_wdtac97_ack(unsigned int irqno)
+{
+       s3c_irqsub_maskack(irqno, INTMSK_WDT, 3<<13);
+}
+
+static struct irqchip s3c_irq_wdtac97 = {
+       .mask       = s3c_irq_wdtac97_mask,
+       .unmask     = s3c_irq_wdtac97_unmask,
+       .ack        = s3c_irq_wdtac97_ack,
+};
+
+/* camera irq */
+
+static void s3c_irq_demux_cam(unsigned int irq,
+                             struct irqdesc *desc,
+                             struct pt_regs *regs)
+{
+       unsigned int subsrc, submsk;
+       struct irqdesc *mydesc;
+
+       /* read the current pending interrupts, and the mask
+        * for what it is available */
+
+       subsrc = __raw_readl(S3C2410_SUBSRCPND);
+       submsk = __raw_readl(S3C2410_INTSUBMSK);
+
+       subsrc &= ~submsk;
+       subsrc >>= 11;
+       subsrc &= 3;
+
+       if (subsrc != 0) {
+               if (subsrc & 1) {
+                       mydesc = irq_desc + IRQ_S3C2440_CAM_C;
+                       mydesc->handle( IRQ_S3C2440_WDT, mydesc, regs);
+               }
+               if (subsrc & 2) {
+                       mydesc = irq_desc + IRQ_S3C2440_CAM_P;
+                       mydesc->handle(IRQ_S3C2440_AC97, mydesc, regs);
+               }
+       }
+}
+
+#define INTMSK_CAM (1UL << (IRQ_CAM - IRQ_EINT0))
+
+static void
+s3c_irq_cam_mask(unsigned int irqno)
+{
+       s3c_irqsub_mask(irqno, INTMSK_CAM, 3<<11);
+}
+
+static void
+s3c_irq_cam_unmask(unsigned int irqno)
+{
+       s3c_irqsub_unmask(irqno, INTMSK_CAM);
+}
+
+static void
+s3c_irq_cam_ack(unsigned int irqno)
+{
+       s3c_irqsub_maskack(irqno, INTMSK_CAM, 3<<11);
+}
+
+static struct irqchip s3c_irq_cam = {
+       .mask       = s3c_irq_cam_mask,
+       .unmask     = s3c_irq_cam_unmask,
+       .ack        = s3c_irq_cam_ack,
+};
+
+static int s3c2440_irq_add(struct sys_device *sysdev)
+{
+       unsigned int irqno;
+
+       printk("S3C2440: IRQ Support\n");
+
+       set_irq_chip(IRQ_NFCON, &s3c_irq_level_chip);
+       set_irq_handler(IRQ_NFCON, do_level_IRQ);
+       set_irq_flags(IRQ_NFCON, IRQF_VALID);
+
+       /* add new chained handler for wdt, ac7 */
+
+       set_irq_chip(IRQ_WDT, &s3c_irq_level_chip);
+       set_irq_handler(IRQ_WDT, do_level_IRQ);
+       set_irq_chained_handler(IRQ_WDT, s3c_irq_demux_wdtac97);
+
+       for (irqno = IRQ_S3C2440_WDT; irqno <= IRQ_S3C2440_AC97; irqno++) {
+               set_irq_chip(irqno, &s3c_irq_wdtac97);
+               set_irq_handler(irqno, do_level_IRQ);
+               set_irq_flags(irqno, IRQF_VALID);
+       }
+
+       /* add chained handler for camera */
+
+       set_irq_chip(IRQ_CAM, &s3c_irq_level_chip);
+       set_irq_handler(IRQ_CAM, do_level_IRQ);
+       set_irq_chained_handler(IRQ_CAM, s3c_irq_demux_cam);
+
+       for (irqno = IRQ_S3C2440_CAM_C; irqno <= IRQ_S3C2440_CAM_P; irqno++) {
+               set_irq_chip(irqno, &s3c_irq_cam);
+               set_irq_handler(irqno, do_level_IRQ);
+               set_irq_flags(irqno, IRQF_VALID);
+       }
+
+       return 0;
+}
+
+static struct sysdev_driver s3c2440_irq_driver = {
+       .add    = s3c2440_irq_add,
+};
+
+static int s3c24xx_irq_driver(void)
+{
+       return sysdev_driver_register(&s3c2440_sysclass, &s3c2440_irq_driver);
+}
+
+arch_initcall(s3c24xx_irq_driver);
+
+#endif /* CONFIG_CPU_S3C2440 */
+
diff -urN linux/arch/arm/mach-s3c2410/mach-bast.c 
linux/arch/arm/mach-s3c2410/mach-bast.c
--- linux/arch/arm/mach-s3c2410/mach-bast.c     2005/01/25 04:27:53     1.9
+++ linux/arch/arm/mach-s3c2410/mach-bast.c     2005/03/18 17:36:46     1.10
@@ -23,6 +23,9 @@
  *     04-Jan-2005 BJD  New uart init call
  *     10-Jan-2005 BJD  Removed include of s3c2410.h
  *     14-Jan-2005 BJD  Add support for muitlple NAND devices
+ *     03-Mar-2005 BJD  Ensured that bast-cpld.h is included
+ *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
+ *     14-Mar-2006 BJD  Updated for __iomem changes
 */
 
 #include <linux/kernel.h>
@@ -39,6 +42,7 @@
 
 #include <asm/arch/bast-map.h>
 #include <asm/arch/bast-irq.h>
+#include <asm/arch/bast-cpld.h>
 
 #include <asm/hardware.h>
 #include <asm/io.h>
@@ -65,10 +69,10 @@
 #define COPYRIGHT ", (c) 2004-2005 Simtec Electronics"
 
 /* macros for virtual address mods for the io space entries */
-#define VA_C5(item) ((item) + BAST_VAM_CS5)
-#define VA_C4(item) ((item) + BAST_VAM_CS4)
-#define VA_C3(item) ((item) + BAST_VAM_CS3)
-#define VA_C2(item) ((item) + BAST_VAM_CS2)
+#define VA_C5(item) ((unsigned long)(item) + BAST_VAM_CS5)
+#define VA_C4(item) ((unsigned long)(item) + BAST_VAM_CS4)
+#define VA_C3(item) ((unsigned long)(item) + BAST_VAM_CS3)
+#define VA_C2(item) ((unsigned long)(item) + BAST_VAM_CS2)
 
 /* macros to modify the physical addresses for io space */
 
@@ -80,8 +84,8 @@
 static struct map_desc bast_iodesc[] __initdata = {
   /* ISA IO areas */
 
-  { S3C2410_VA_ISA_BYTE, PA_CS2(BAST_PA_ISAIO),           SZ_16M, MT_DEVICE },
-  { S3C2410_VA_ISA_WORD, PA_CS3(BAST_PA_ISAIO),           SZ_16M, MT_DEVICE },
+  { (u32)S3C24XX_VA_ISA_BYTE, PA_CS2(BAST_PA_ISAIO),   SZ_16M, MT_DEVICE },
+  { (u32)S3C24XX_VA_ISA_WORD, PA_CS3(BAST_PA_ISAIO),   SZ_16M, MT_DEVICE },
 
   /* we could possibly compress the next set down into a set of smaller tables
    * pagetables, but that would mean using an L2 section, and it still means
@@ -89,26 +93,15 @@
    */
 
   /* bast CPLD control registers, and external interrupt controls */
-  { BAST_VA_CTRL1, BAST_PA_CTRL1,                 SZ_1M, MT_DEVICE },
-  { BAST_VA_CTRL2, BAST_PA_CTRL2,                 SZ_1M, MT_DEVICE },
-  { BAST_VA_CTRL3, BAST_PA_CTRL3,                 SZ_1M, MT_DEVICE },
-  { BAST_VA_CTRL4, BAST_PA_CTRL4,                 SZ_1M, MT_DEVICE },
+  { (u32)BAST_VA_CTRL1, BAST_PA_CTRL1,            SZ_1M, MT_DEVICE },
+  { (u32)BAST_VA_CTRL2, BAST_PA_CTRL2,            SZ_1M, MT_DEVICE },
+  { (u32)BAST_VA_CTRL3, BAST_PA_CTRL3,            SZ_1M, MT_DEVICE },
+  { (u32)BAST_VA_CTRL4, BAST_PA_CTRL4,            SZ_1M, MT_DEVICE },
 
   /* PC104 IRQ mux */
-  { BAST_VA_PC104_IRQREQ,  BAST_PA_PC104_IRQREQ,   SZ_1M, MT_DEVICE },
-  { BAST_VA_PC104_IRQRAW,  BAST_PA_PC104_IRQRAW,   SZ_1M, MT_DEVICE },
-  { BAST_VA_PC104_IRQMASK, BAST_PA_PC104_IRQMASK,  SZ_1M, MT_DEVICE },
-
-  /* onboard 8bit lcd port */
-
-  { BAST_VA_LCD_RCMD1,  BAST_PA_LCD_RCMD1,        SZ_1M, MT_DEVICE },
-  { BAST_VA_LCD_WCMD1,  BAST_PA_LCD_WCMD1,        SZ_1M, MT_DEVICE },
-  { BAST_VA_LCD_RDATA1, BAST_PA_LCD_RDATA1,       SZ_1M, MT_DEVICE },
-  { BAST_VA_LCD_WDATA1, BAST_PA_LCD_WDATA1,       SZ_1M, MT_DEVICE },
-  { BAST_VA_LCD_RCMD2,  BAST_PA_LCD_RCMD2,        SZ_1M, MT_DEVICE },
-  { BAST_VA_LCD_WCMD2,  BAST_PA_LCD_WCMD2,        SZ_1M, MT_DEVICE },
-  { BAST_VA_LCD_RDATA2, BAST_PA_LCD_RDATA2,       SZ_1M, MT_DEVICE },
-  { BAST_VA_LCD_WDATA2, BAST_PA_LCD_WDATA2,       SZ_1M, MT_DEVICE },
+  { (u32)BAST_VA_PC104_IRQREQ,  BAST_PA_PC104_IRQREQ,   SZ_1M, MT_DEVICE },
+  { (u32)BAST_VA_PC104_IRQRAW,  BAST_PA_PC104_IRQRAW,   SZ_1M, MT_DEVICE },
+  { (u32)BAST_VA_PC104_IRQMASK, BAST_PA_PC104_IRQMASK,  SZ_1M, MT_DEVICE },
 
   /* peripheral space... one for each of fast/slow/byte/16bit */
   /* note, ide is only decoded in word space, even though some registers
@@ -407,7 +400,7 @@
 
 MACHINE_START(BAST, "Simtec-BAST")
      MAINTAINER("Ben Dooks <ben@simtec.co.uk>")
-     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C2410_VA_UART)
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
      BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
      MAPIO(bast_map_io)
      INITIRQ(bast_init_irq)
diff -urN linux/arch/arm/mach-s3c2410/mach-h1940.c 
linux/arch/arm/mach-s3c2410/mach-h1940.c
--- linux/arch/arm/mach-s3c2410/mach-h1940.c    2005/01/25 04:27:53     1.8
+++ linux/arch/arm/mach-s3c2410/mach-h1940.c    2005/03/18 17:36:47     1.9
@@ -23,6 +23,7 @@
  *     04-Jan-2005 BJD  Updated uart init call
  *     10-Jan-2005 BJD  Removed include of s3c2410.h
  *     14-Jan-2005 BJD  Added clock init
+ *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
 */
 
 #include <linux/kernel.h>
@@ -117,7 +118,7 @@
 
 MACHINE_START(H1940, "IPAQ-H1940")
      MAINTAINER("Ben Dooks <ben@fluff.org>")
-     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C2410_VA_UART)
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
      BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
      MAPIO(h1940_map_io)
      INITIRQ(h1940_init_irq)
diff -urN linux/arch/arm/mach-s3c2410/mach-rx3715.c 
linux/arch/arm/mach-s3c2410/mach-rx3715.c
--- linux/arch/arm/mach-s3c2410/mach-rx3715.c   2005/01/25 04:27:53     1.3
+++ linux/arch/arm/mach-s3c2410/mach-rx3715.c   2005/03/18 17:36:47     1.4
@@ -10,10 +10,12 @@
  * published by the Free Software Foundation.
  *
  * Modifications:
- *     16-Sep-2004 BJD Copied from mach-h1940.c
- *     25-Oct-2004 BJD Updates for 2.6.10-rc1
- *     10-Jan-2005 BJD Removed include of s3c2410.h s3c2440.h
- *     14-Jan-2005 BJD Added new clock init
+ *     16-Sep-2004 BJD  Copied from mach-h1940.c
+ *     25-Oct-2004 BJD  Updates for 2.6.10-rc1
+ *     10-Jan-2005 BJD  Removed include of s3c2410.h s3c2440.h
+ *     14-Jan-2005 BJD  Added new clock init
+ *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
+ *     14-Mar-2005 BJD  Fixed __iomem warnings
 */
 
 #include <linux/kernel.h>
@@ -48,8 +50,8 @@
 static struct map_desc rx3715_iodesc[] __initdata = {
        /* dump ISA space somewhere unused */
 
-       { S3C2410_VA_ISA_WORD, S3C2410_CS3, SZ_16M, MT_DEVICE },
-       { S3C2410_VA_ISA_BYTE, S3C2410_CS3, SZ_16M, MT_DEVICE },
+       { (u32)S3C24XX_VA_ISA_WORD, S3C2410_CS3, SZ_16M, MT_DEVICE },
+       { (u32)S3C24XX_VA_ISA_BYTE, S3C2410_CS3, SZ_16M, MT_DEVICE },
 };
 
 static struct s3c2410_uartcfg rx3715_uartcfgs[] = {
@@ -114,7 +116,7 @@
 
 MACHINE_START(RX3715, "IPAQ-RX3715")
      MAINTAINER("Ben Dooks <ben@fluff.org>")
-     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C2410_VA_UART)
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
      BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
      MAPIO(rx3715_map_io)
      INITIRQ(rx3715_init_irq)
diff -urN linux/arch/arm/mach-s3c2410/mach-smdk2410.c 
linux/arch/arm/mach-s3c2410/mach-smdk2410.c
--- linux/arch/arm/mach-s3c2410/mach-smdk2410.c 2005/01/25 04:27:53     1.8
+++ linux/arch/arm/mach-s3c2410/mach-smdk2410.c 2005/03/18 17:36:47     1.9
@@ -26,6 +26,9 @@
  * @History:
  * derived from linux/arch/arm/mach-s3c2410/mach-bast.c, written by
  * Ben Dooks <ben@simtec.co.uk>
+ *
+ * 10-Mar-2005 LCVR  Changed S3C2410_VA to S3C24XX_VA
+ *
  ***********************************************************************/
 
 #include <linux/kernel.h>
@@ -110,7 +113,7 @@
 MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and 
switch
                                    * to SMDK2410 */
      MAINTAINER("Jonas Dietsche")
-     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C2410_VA_UART)
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
      BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
      MAPIO(smdk2410_map_io)
      INITIRQ(smdk2410_init_irq)
diff -urN linux/arch/arm/mach-s3c2410/mach-vr1000.c 
linux/arch/arm/mach-s3c2410/mach-vr1000.c
--- linux/arch/arm/mach-s3c2410/mach-vr1000.c   2005/01/25 04:27:53     1.10
+++ linux/arch/arm/mach-s3c2410/mach-vr1000.c   2005/03/18 17:36:47     1.11
@@ -24,6 +24,9 @@
  *     14-Jan-2005 BJD  Added clock init
  *     15-Jan-2005 BJD  Add serial port device definition
  *     20-Jan-2005 BJD  Use UPF_IOREMAP for ports
+ *     10-Feb-2005 BJD  Added power-off capability
+ *     10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
+ *     14-Mar-2006 BJD  void __iomem fixes
 */
 
 #include <linux/kernel.h>
@@ -52,8 +55,8 @@
 #include <asm/irq.h>
 #include <asm/mach-types.h>
 
-//#include <asm/debug-ll.h>
 #include <asm/arch/regs-serial.h>
+#include <asm/arch/regs-gpio.h>
 
 #include "clock.h"
 #include "devs.h"
@@ -61,10 +64,10 @@
 #include "usb-simtec.h"
 
 /* macros for virtual address mods for the io space entries */
-#define VA_C5(item) ((item) + BAST_VAM_CS5)
-#define VA_C4(item) ((item) + BAST_VAM_CS4)
-#define VA_C3(item) ((item) + BAST_VAM_CS3)
-#define VA_C2(item) ((item) + BAST_VAM_CS2)
+#define VA_C5(item) ((unsigned long)(item) + BAST_VAM_CS5)
+#define VA_C4(item) ((unsigned long)(item) + BAST_VAM_CS4)
+#define VA_C3(item) ((unsigned long)(item) + BAST_VAM_CS3)
+#define VA_C2(item) ((unsigned long)(item) + BAST_VAM_CS2)
 
 /* macros to modify the physical addresses for io space */
 
@@ -76,8 +79,8 @@
 static struct map_desc vr1000_iodesc[] __initdata = {
   /* ISA IO areas */
 
-  { S3C2410_VA_ISA_BYTE, PA_CS2(BAST_PA_ISAIO),           SZ_16M, MT_DEVICE },
-  { S3C2410_VA_ISA_WORD, PA_CS3(BAST_PA_ISAIO),           SZ_16M, MT_DEVICE },
+  { (u32)S3C24XX_VA_ISA_BYTE, PA_CS2(BAST_PA_ISAIO),      SZ_16M, MT_DEVICE },
+  { (u32)S3C24XX_VA_ISA_WORD, PA_CS3(BAST_PA_ISAIO),      SZ_16M, MT_DEVICE },
 
   /* we could possibly compress the next set down into a set of smaller tables
    * pagetables, but that would mean using an L2 section, and it still means
@@ -85,10 +88,10 @@
    */
 
   /* bast CPLD control registers, and external interrupt controls */
-  { VR1000_VA_CTRL1, VR1000_PA_CTRL1,                 SZ_1M, MT_DEVICE },
-  { VR1000_VA_CTRL2, VR1000_PA_CTRL2,                 SZ_1M, MT_DEVICE },
-  { VR1000_VA_CTRL3, VR1000_PA_CTRL3,                 SZ_1M, MT_DEVICE },
-  { VR1000_VA_CTRL4, VR1000_PA_CTRL4,                 SZ_1M, MT_DEVICE },
+  { (u32)VR1000_VA_CTRL1, VR1000_PA_CTRL1,            SZ_1M, MT_DEVICE },
+  { (u32)VR1000_VA_CTRL2, VR1000_PA_CTRL2,            SZ_1M, MT_DEVICE },
+  { (u32)VR1000_VA_CTRL3, VR1000_PA_CTRL3,            SZ_1M, MT_DEVICE },
+  { (u32)VR1000_VA_CTRL4, VR1000_PA_CTRL4,            SZ_1M, MT_DEVICE },
 
   /* peripheral space... one for each of fast/slow/byte/16bit */
   /* note, ide is only decoded in word space, even though some registers
@@ -269,6 +272,11 @@
        .clocks_count  = ARRAY_SIZE(vr1000_clocks),
 };
 
+static void vr1000_power_off(void)
+{
+       s3c2410_gpio_cfgpin(S3C2410_GPB9, S3C2410_GPB9_OUTP);
+       s3c2410_gpio_setpin(S3C2410_GPB9, 1);
+}
 
 void __init vr1000_map_io(void)
 {
@@ -285,6 +293,8 @@
 
        s3c24xx_uclk.parent  = &s3c24xx_clkout1;
 
+       pm_power_off = vr1000_power_off;
+
        s3c24xx_init_io(vr1000_iodesc, ARRAY_SIZE(vr1000_iodesc));
        s3c24xx_init_clocks(0);
        s3c24xx_init_uarts(vr1000_uartcfgs, ARRAY_SIZE(vr1000_uartcfgs));
@@ -299,7 +309,7 @@
 
 MACHINE_START(VR1000, "Thorcom-VR1000")
      MAINTAINER("Ben Dooks <ben@simtec.co.uk>")
-     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C2410_VA_UART)
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
      BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
      MAPIO(vr1000_map_io)
      INITIRQ(vr1000_init_irq)
diff -urN linux/arch/arm/mach-s3c2410/pm.c linux/arch/arm/mach-s3c2410/pm.c
--- linux/arch/arm/mach-s3c2410/pm.c    2004/12/27 02:15:48     1.2
+++ linux/arch/arm/mach-s3c2410/pm.c    2005/03/18 17:36:47     1.3
@@ -24,6 +24,9 @@
  * Parts based on arch/arm/mach-pxa/pm.c
  *
  * Thanks to Dimitry Andric for debugging
+ *
+ * Modifications:
+ *     10-Mar-2005 LCVR  Changed S3C2410_VA_UART to S3C24XX_VA_UART
 */
 
 #include <linux/config.h>
@@ -144,9 +147,11 @@
        SAVE_ITEM((va) + S3C2410_UBRDIV)
 
 static struct sleep_save uart_save[] = {
-       SAVE_UART(S3C2410_VA_UART0),
-       SAVE_UART(S3C2410_VA_UART1),
-       SAVE_UART(S3C2410_VA_UART2),
+       SAVE_UART(S3C24XX_VA_UART0),
+       SAVE_UART(S3C24XX_VA_UART1),
+#ifndef CONFIG_CPU_S3C2400
+       SAVE_UART(S3C24XX_VA_UART2),
+#endif
 };
 
 /* debug
@@ -391,7 +396,7 @@
 {
        for (; count > 0; count--, ptr++) {
                ptr->val = __raw_readl(ptr->reg);
-               DBG("saved %08lx value %08lx\n", ptr->reg, ptr->val);
+               DBG("saved %p value %08lx\n", ptr->reg, ptr->val);
        }
 }
 
@@ -406,7 +411,7 @@
 void s3c2410_pm_do_restore(struct sleep_save *ptr, int count)
 {
        for (; count > 0; count--, ptr++) {
-               printk(KERN_DEBUG "restore %08lx (restore %08lx, was %08x)\n",
+               printk(KERN_DEBUG "restore %p (restore %08lx, was %08x)\n",
                       ptr->reg, ptr->val, __raw_readl(ptr->reg));
 
                __raw_writel(ptr->val, ptr->reg);
diff -urN linux/arch/arm/mach-s3c2410/pm.h linux/arch/arm/mach-s3c2410/pm.h
--- linux/arch/arm/mach-s3c2410/pm.h    2004/11/15 11:49:14     1.1
+++ linux/arch/arm/mach-s3c2410/pm.h    2005/03/18 17:36:47     1.2
@@ -48,7 +48,7 @@
 /* sleep save info */
 
 struct sleep_save {
-       unsigned long   reg;
+       void __iomem    *reg;
        unsigned long   val;
 };
 
diff -urN linux/arch/arm/mach-s3c2410/s3c2410.c 
linux/arch/arm/mach-s3c2410/s3c2410.c
--- linux/arch/arm/mach-s3c2410/s3c2410.c       2005/01/25 04:27:53     1.7
+++ linux/arch/arm/mach-s3c2410/s3c2410.c       2005/03/18 17:36:47     1.8
@@ -17,7 +17,7 @@
  *     21-Aug-2004 BJD  Added new struct s3c2410_board handler
  *     28-Sep-2004 BJD  Updates for new serial port bits
  *     04-Nov-2004 BJD  Updated UART configuration process
- *     10-Jan-2004 BJD  Removed s3c2410_clock_tick_rate
+ *     10-Jan-2005 BJD  Removed s3c2410_clock_tick_rate
 */
 
 #include <linux/kernel.h>
@@ -164,31 +164,32 @@
 void __init s3c2410_init_clocks(int xtal)
 {
        unsigned long tmp;
+       unsigned long fclk;
+       unsigned long hclk;
+       unsigned long pclk;
 
        /* now we've got our machine bits initialised, work out what
         * clocks we've got */
 
-       s3c24xx_fclk = s3c2410_get_pll(__raw_readl(S3C2410_MPLLCON),
-                                      s3c24xx_xtal);
+       fclk = s3c2410_get_pll(__raw_readl(S3C2410_MPLLCON), xtal);
 
        tmp = __raw_readl(S3C2410_CLKDIVN);
 
        /* work out clock scalings */
 
-       s3c24xx_hclk = s3c24xx_fclk / ((tmp & S3C2410_CLKDIVN_HDIVN) ? 2 : 1);
-       s3c24xx_pclk = s3c24xx_hclk / ((tmp & S3C2410_CLKDIVN_PDIVN) ? 2 : 1);
+       hclk = fclk / ((tmp & S3C2410_CLKDIVN_HDIVN) ? 2 : 1);
+       pclk = hclk / ((tmp & S3C2410_CLKDIVN_PDIVN) ? 2 : 1);
 
        /* print brieft summary of clocks, etc */
 
        printk("S3C2410: core %ld.%03ld MHz, memory %ld.%03ld MHz, peripheral 
%ld.%03ld MHz\n",
-              print_mhz(s3c24xx_fclk), print_mhz(s3c24xx_hclk),
-              print_mhz(s3c24xx_pclk));
+              print_mhz(fclk), print_mhz(hclk), print_mhz(pclk));
 
        /* initialise the clocks here, to allow other things like the
         * console to use them
         */
 
-       s3c24xx_setup_clocks();
+       s3c24xx_setup_clocks(xtal, fclk, hclk, pclk);
 }
 
 int __init s3c2410_init(void)
diff -urN linux/arch/arm/mach-s3c2410/s3c2440-dsc.c 
linux/arch/arm/mach-s3c2410/s3c2440-dsc.c
--- linux/arch/arm/mach-s3c2410/s3c2440-dsc.c   2005/01/25 04:27:53     1.3
+++ linux/arch/arm/mach-s3c2410/s3c2440-dsc.c   2005/03/18 17:36:47     1.4
@@ -37,7 +37,7 @@
 
 int s3c2440_set_dsc(unsigned int pin, unsigned int value)
 {
-       unsigned long base;
+       void __iomem *base;
        unsigned long val;
        unsigned long flags;
        unsigned long mask;
diff -urN linux/arch/arm/mach-s3c2410/s3c2440.c 
linux/arch/arm/mach-s3c2410/s3c2440.c
--- linux/arch/arm/mach-s3c2410/s3c2440.c       2005/01/25 04:27:53     1.6
+++ linux/arch/arm/mach-s3c2410/s3c2440.c       2005/03/18 17:36:47     1.7
@@ -109,7 +109,6 @@
        .resource         = s3c_uart0_resource,
 };
 
-
 static struct platform_device s3c_uart1 = {
        .name             = "s3c2440-uart",
        .id               = 1,
@@ -149,19 +148,6 @@
        s3c2440_uart_count = uart;
 }
 
-/* s3c2440 specific clock sources */
-
-static struct clk s3c2440_clk_cam = {
-       .name           = "camera",
-       .enable         = s3c24xx_clkcon_enable,
-       .ctrlbit        = S3C2440_CLKCON_CAMERA
-};
-
-static struct clk s3c2440_clk_ac97 = {
-       .name           = "ac97",
-       .enable         = s3c24xx_clkcon_enable,
-       .ctrlbit        = S3C2440_CLKCON_CAMERA
-};
 
 #ifdef CONFIG_PM
 
@@ -190,7 +176,7 @@
 #define s3c2440_resume  NULL
 #endif
 
-static struct sysdev_class s3c2440_sysclass = {
+struct sysdev_class s3c2440_sysclass = {
        set_kset_name("s3c2440-core"),
        .suspend        = s3c2440_suspend,
        .resume         = s3c2440_resume
@@ -209,19 +195,24 @@
        /* rename any peripherals used differing from the s3c2410 */
 
        s3c_device_i2c.name = "s3c2440-i2c";
+
+       /* change irq for watchdog */
+
+       s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT;
+       s3c_device_wdt.resource[1].end   = IRQ_S3C2440_WDT;
 }
 
 void __init s3c2440_init_clocks(int xtal)
 {
        unsigned long clkdiv;
        unsigned long camdiv;
-       int s3c2440_hdiv = 1;
+       unsigned long hclk, fclk, pclk;
+       int hdiv = 1;
 
        /* now we've got our machine bits initialised, work out what
         * clocks we've got */
 
-       s3c24xx_fclk = s3c2410_get_pll(__raw_readl(S3C2410_MPLLCON),
-                                      s3c24xx_xtal) * 2;
+       fclk = s3c2410_get_pll(__raw_readl(S3C2410_MPLLCON), xtal) * 2;
 
        clkdiv = __raw_readl(S3C2410_CLKDIVN);
        camdiv = __raw_readl(S3C2440_CAMDIVN);
@@ -230,63 +221,60 @@
 
        switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {
        case S3C2440_CLKDIVN_HDIVN_1:
-               s3c2440_hdiv = 1;
+               hdiv = 1;
                break;
 
        case S3C2440_CLKDIVN_HDIVN_2:
-               s3c2440_hdiv = 1;
+               hdiv = 1;
                break;
 
        case S3C2440_CLKDIVN_HDIVN_4_8:
-               s3c2440_hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;
+               hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;
                break;
 
        case S3C2440_CLKDIVN_HDIVN_3_6:
-               s3c2440_hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;
+               hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;
                break;
        }
 
-       s3c24xx_hclk = s3c24xx_fclk / s3c2440_hdiv;
-       s3c24xx_pclk = s3c24xx_hclk / ((clkdiv & S3C2440_CLKDIVN_PDIVN)? 2:1);
+       hclk = fclk / hdiv;
+       pclk = hclk / ((clkdiv & S3C2440_CLKDIVN_PDIVN)? 2:1);
 
        /* print brief summary of clocks, etc */
 
        printk("S3C2440: core %ld.%03ld MHz, memory %ld.%03ld MHz, peripheral 
%ld.%03ld MHz\n",
-              print_mhz(s3c24xx_fclk), print_mhz(s3c24xx_hclk),
-              print_mhz(s3c24xx_pclk));
+              print_mhz(fclk), print_mhz(hclk), print_mhz(pclk));
 
        /* initialise the clocks here, to allow other things like the
         * console to use them, and to add new ones after the initialisation
         */
 
-       s3c24xx_setup_clocks();
-
-       /* add s3c2440 specific clocks */
-
-       s3c2440_clk_cam.parent = clk_get(NULL, "hclk");
-       s3c2440_clk_ac97.parent = clk_get(NULL, "pclk");
+       s3c24xx_setup_clocks(xtal, fclk, hclk, pclk);
+}
 
-       s3c24xx_register_clock(&s3c2440_clk_ac97);
-       s3c24xx_register_clock(&s3c2440_clk_cam);
+/* need to register class before we actually register the device, and
+ * we also need to ensure that it has been initialised before any of the
+ * drivers even try to use it (even if not on an s3c2440 based system)
+ * as a driver which may support both 2410 and 2440 may try and use it.
+*/
 
-       clk_disable(&s3c2440_clk_ac97);
-       clk_disable(&s3c2440_clk_cam);
+int __init s3c2440_core_init(void)
+{
+       return sysdev_class_register(&s3c2440_sysclass);
 }
 
+core_initcall(s3c2440_core_init);
+
 int __init s3c2440_init(void)
 {
        int ret;
 
        printk("S3C2440: Initialising architecture\n");
 
-       ret = sysdev_class_register(&s3c2440_sysclass);
-       if (ret == 0)
-               ret = sysdev_register(&s3c2440_sysdev);
-
+       ret = sysdev_register(&s3c2440_sysdev);
        if (ret != 0)
                printk(KERN_ERR "failed to register sysdev for s3c2440\n");
-
-       if (ret == 0)
+       else
                ret = platform_add_devices(s3c24xx_uart_devs, 
s3c2440_uart_count);
 
        return ret;
diff -urN linux/arch/arm/mach-s3c2410/time.c linux/arch/arm/mach-s3c2410/time.c
--- linux/arch/arm/mach-s3c2410/time.c  2005/01/25 04:27:53     1.7
+++ linux/arch/arm/mach-s3c2410/time.c  2005/03/18 17:36:47     1.8
@@ -1,6 +1,6 @@
 /* linux/arch/arm/mach-s3c2410/time.c
  *
- * Copyright (C) 2003,2004 Simtec Electronics
+ * Copyright (C) 2003-2005 Simtec Electronics
  *     Ben Dooks, <ben@simtec.co.uk>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,8 @@
 #include <linux/sched.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
+#include <linux/err.h>
+
 #include <asm/system.h>
 #include <asm/leds.h>
 #include <asm/mach-types.h>
@@ -33,6 +35,7 @@
 #include <asm/arch/regs-timer.h>
 #include <asm/arch/regs-irq.h>
 #include <asm/mach/time.h>
+#include <asm/hardware/clock.h>
 
 #include "clock.h"
 
@@ -169,6 +172,9 @@
                tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
                tcfg1 |= S3C2410_TCFG1_MUX4_TCLK1;
        } else {
+               unsigned long pclk;
+               struct clk *clk;
+
                /* for the h1940 (and others), we use the pclk from the core
                 * to generate the timer values. since values around 50 to
                 * 70MHz are not values we can directly generate the timer
@@ -180,7 +186,18 @@
 
                /* this is used as default if no other timer can be found */
 
-               timer_usec_ticks = timer_mask_usec_ticks(6, s3c24xx_pclk);
+               clk = clk_get(NULL, "timers");
+               if (IS_ERR(clk))
+                       panic("failed to get clock for system timer");
+
+               clk_use(clk);
+               clk_enable(clk);
+
+               pclk = clk_get_rate(clk);
+
+               /* configure clock tick */
+
+               timer_usec_ticks = timer_mask_usec_ticks(6, pclk);
 
                tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
                tcfg1 |= S3C2410_TCFG1_MUX4_DIV2;
@@ -188,7 +205,7 @@
                tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
                tcfg0 |= ((6 - 1) / 2) << S3C2410_TCFG_PRESCALER1_SHIFT;
 
-               tcnt = (s3c24xx_pclk / 6) / HZ;
+               tcnt = (pclk / 6) / HZ;
        }
 
        /* timers reload after counting zero, so reduce the count by 1 */
diff -urN linux/arch/arm/mach-sa1100/assabet.c 
linux/arch/arm/mach-sa1100/assabet.c
--- linux/arch/arm/mach-sa1100/assabet.c        2004/12/27 02:15:48     1.21
+++ linux/arch/arm/mach-sa1100/assabet.c        2005/03/18 17:36:47     1.22
@@ -259,9 +259,11 @@
        unsigned long phys = __PREG(GPLR) & PMD_MASK;
        unsigned long virt = io_p2v(phys);
        int prot = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_DOMAIN(DOMAIN_IO);
-       pmd_t pmd;
-       pmd_val(pmd) = phys | prot;
-       set_pmd(pmd_offset(pgd_offset_k(virt), virt), pmd);
+       pmd_t *pmd;
+
+       pmd = pmd_offset(pgd_offset_k(virt), virt);
+       *pmd = __pmd(phys | prot);
+       flush_pmd_entry(pmd);
 }
 
 /*
diff -urN linux/arch/arm/mach-sa1100/collie.c 
linux/arch/arm/mach-sa1100/collie.c
--- linux/arch/arm/mach-sa1100/collie.c 2005/01/25 04:27:53     1.6
+++ linux/arch/arm/mach-sa1100/collie.c 2005/03/18 17:36:47     1.7
@@ -55,7 +55,7 @@
        .io_out         = COLLIE_SCOOP_IO_OUT,
 };
 
-static struct platform_device colliescoop_device = {
+struct platform_device colliescoop_device = {
        .name           = "sharp-scoop",
        .id             = -1,
        .dev            = {
diff -urN linux/arch/arm/mach-sa1100/neponset.c 
linux/arch/arm/mach-sa1100/neponset.c
--- linux/arch/arm/mach-sa1100/neponset.c       2005/01/13 14:05:19     1.20
+++ linux/arch/arm/mach-sa1100/neponset.c       2005/03/18 17:36:47     1.21
@@ -266,6 +266,7 @@
 
 static struct resource smc91x_resources[] = {
        [0] = {
+               .name   = "smc91x-regs",
                .start  = SA1100_CS3_PHYS,
                .end    = SA1100_CS3_PHYS + 0x01ffffff,
                .flags  = IORESOURCE_MEM,
@@ -276,6 +277,7 @@
                .flags  = IORESOURCE_IRQ,
        },
        [2] = {
+               .name   = "smc91x-attrib",
                .start  = SA1100_CS3_PHYS + 0x02000000,
                .end    = SA1100_CS3_PHYS + 0x03ffffff,
                .flags  = IORESOURCE_MEM,
diff -urN linux/arch/arm/mm/consistent.c linux/arch/arm/mm/consistent.c
--- linux/arch/arm/mm/consistent.c      2005/03/02 19:58:00     1.26
+++ linux/arch/arm/mm/consistent.c      2005/03/18 17:36:47     1.27
@@ -323,7 +323,7 @@
 void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, 
dma_addr_t handle)
 {
        struct vm_region *c;
-       unsigned long flags;
+       unsigned long flags, addr;
        pte_t *ptep;
 
        size = PAGE_ALIGN(size);
@@ -342,11 +342,13 @@
        }
 
        ptep = consistent_pte + CONSISTENT_OFFSET(c->vm_start);
+       addr = c->vm_start;
        do {
-               pte_t pte = ptep_get_and_clear(ptep);
+               pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep);
                unsigned long pfn;
 
                ptep++;
+               addr += PAGE_SIZE;
 
                if (!pte_none(pte) && pte_present(pte)) {
                        pfn = pte_pfn(pte);
diff -urN linux/arch/arm/mm/fault-armv.c linux/arch/arm/mm/fault-armv.c
--- linux/arch/arm/mm/fault-armv.c      2004/09/19 12:30:02     1.40
+++ linux/arch/arm/mm/fault-armv.c      2005/03/18 17:36:47     1.41
@@ -54,7 +54,7 @@
         * fault (ie, is old), we can safely ignore any issues.
         */
        if (pte_present(entry) && pte_val(entry) & shared_pte_mask) {
-               flush_cache_page(vma, address);
+               flush_cache_page(vma, address, pte_pfn(entry));
                pte_val(entry) &= ~shared_pte_mask;
                set_pte(pte, entry);
                flush_tlb_page(vma, address);
@@ -115,7 +115,7 @@
        if (aliases)
                adjust_pte(vma, addr);
        else
-               flush_cache_page(vma, addr);
+               flush_cache_page(vma, addr, page_to_pfn(page));
 }
 
 /*
diff -urN linux/arch/arm/mm/flush.c linux/arch/arm/mm/flush.c
--- linux/arch/arm/mm/flush.c   2004/09/19 12:30:02     1.1
+++ linux/arch/arm/mm/flush.c   2005/03/18 17:36:47     1.2
@@ -56,7 +56,7 @@
                if (!(mpnt->vm_flags & VM_MAYSHARE))
                        continue;
                offset = (pgoff - mpnt->vm_pgoff) << PAGE_SHIFT;
-               flush_cache_page(mpnt, mpnt->vm_start + offset);
+               flush_cache_page(mpnt, mpnt->vm_start + offset, 
page_to_pfn(page));
                if (cache_is_vipt())
                        break;
        }
diff -urN linux/arch/arm/mm/init.c linux/arch/arm/mm/init.c
--- linux/arch/arm/mm/init.c    2005/01/13 14:05:19     1.55
+++ linux/arch/arm/mm/init.c    2005/03/18 17:36:47     1.56
@@ -501,10 +501,6 @@
                                bdata->node_boot_start >> PAGE_SHIFT, 
zhole_size);
        }
 
-#ifndef CONFIG_DISCONTIGMEM
-       mem_map = contig_page_data.node_mem_map;
-#endif
-
        /*
         * finish off the bad pages once
         * the mem_map is initialised
diff -urN linux/arch/arm/mm/mm-armv.c linux/arch/arm/mm/mm-armv.c
--- linux/arch/arm/mm/mm-armv.c 2005/01/13 14:05:19     1.44
+++ linux/arch/arm/mm/mm-armv.c 2005/03/18 17:36:47     1.45
@@ -252,7 +252,25 @@
        if (virt & (1 << 20))
                pmdp++;
 
-       set_pmd(pmdp, __pmd(phys | prot));
+       *pmdp = __pmd(phys | prot);
+       flush_pmd_entry(pmdp);
+}
+
+/*
+ * Create a SUPER SECTION PGD between VIRT and PHYS with protection PROT
+ */
+static inline void
+alloc_init_supersection(unsigned long virt, unsigned long phys, int prot)
+{
+       int i;
+
+       for (i = 0; i < 16; i += 1) {
+               alloc_init_section(virt, phys & SUPERSECTION_MASK,
+                                  prot | PMD_SECT_SUPER);
+
+               virt += (PGDIR_SIZE / 2);
+               phys += (PGDIR_SIZE / 2);
+       }
 }
 
 /*
@@ -436,7 +454,8 @@
  * Create the page directory entries and any necessary
  * page tables for the mapping specified by `md'.  We
  * are able to cope here with varying sizes and address
- * offsets, and we take full advantage of sections.
+ * offsets, and we take full advantage of sections and
+ * supersections.
  */
 static void __init create_mapping(struct map_desc *md)
 {
@@ -483,6 +502,30 @@
                length -= PAGE_SIZE;
        }
 
+       /* N.B. ARMv6 supersections are only defined to work with domain 0.
+        *      Since domain assignments can in fact be arbitrary, the
+        *      'domain == 0' check below is required to insure that ARMv6
+        *      supersections are only allocated for domain 0 regardless
+        *      of the actual domain assignments in use.
+        */
+       if (cpu_architecture() >= CPU_ARCH_ARMv6 && domain == 0) {
+               /* Align to supersection boundary */
+               while ((virt & ~SUPERSECTION_MASK || (virt + off) &
+                       ~SUPERSECTION_MASK) && length >= (PGDIR_SIZE / 2)) {
+                       alloc_init_section(virt, virt + off, prot_sect);
+
+                       virt   += (PGDIR_SIZE / 2);
+                       length -= (PGDIR_SIZE / 2);
+               }
+
+               while (length >= SUPERSECTION_SIZE) {
+                       alloc_init_supersection(virt, virt + off, prot_sect);
+
+                       virt   += SUPERSECTION_SIZE;
+                       length -= SUPERSECTION_SIZE;
+               }
+       }
+
        /*
         * A section mapping covers half a "pgdir" entry.
         */
@@ -526,8 +569,9 @@
                if (cpu_arch <= CPU_ARCH_ARMv5)
                        pmdval |= PMD_BIT4;
                pmd = pmd_offset(pgd + i, i << PGDIR_SHIFT);
-               set_pmd(pmd, __pmd(pmdval));
-               set_pmd(pmd + 1, __pmd(pmdval + (1 << (PGDIR_SHIFT - 1))));
+               pmd[0] = __pmd(pmdval);
+               pmd[1] = __pmd(pmdval + (1 << (PGDIR_SHIFT - 1)));
+               flush_pmd_entry(pmd);
        }
 }
 
diff -urN linux/arch/arm/tools/mach-types linux/arch/arm/tools/mach-types
--- linux/arch/arm/tools/mach-types     2005/01/13 14:05:20     1.41
+++ linux/arch/arm/tools/mach-types     2005/03/18 17:36:47     1.42
@@ -6,7 +6,7 @@
 # To add an entry into this database, please see Documentation/arm/README,
 # or contact rmk@arm.linux.org.uk
 #
-# Last update: Thu Jan 6 00:10:23 2005
+# Last update: Wed Mar 2 11:32:53 2005
 #
 # machine_is_xxx       CONFIG_xxxx             MACH_TYPE_xxx           number
 #
@@ -226,7 +226,7 @@
 pnp1110                        SA1100_PNP1110          PNP1110                 
215
 csb226                 ARCH_CSB226             CSB226                  216
 arnold                 SA1100_ARNOLD           ARNOLD                  217
-voiceblue              SA1100_PSIBOARD         PSIBOARD                218
+voiceblue              MACH_VOICEBLUE          VOICEBLUE               218
 jz8028                 ARCH_JZ8028             JZ8028                  219
 h5400                  ARCH_H5400              H5400                   220
 forte                  SA1100_FORTE            FORTE                   221
@@ -381,7 +381,7 @@
 spearhead              ARCH_SPEARHEAD          SPEARHEAD               370
 pantera                        ARCH_PANTERA            PANTERA                 
371
 prayoglite             ARCH_PRAYOGLITE         PRAYOGLITE              372
-gumstik                        ARCH_GUMSTIK            GUMSTIK                 
373
+gumstix                        ARCH_GUMSTIK            GUMSTIK                 
373
 rcube                  ARCH_RCUBE              RCUBE                   374
 rea_olv                        ARCH_REA_OLV            REA_OLV                 
375
 pxa_iphone             ARCH_PXA_IPHONE         PXA_IPHONE              376
@@ -667,3 +667,44 @@
 manga_ks8695           MACH_MANGA_KS8695       MANGA_KS8695            657
 ajax                   MACH_AJAX               AJAX                    658
 nec_mp900              MACH_NEC_MP900          NEC_MP900               659
+vvtk1000               MACH_VVTK1000           VVTK1000                661
+kafa                   MACH_KAFA               KAFA                    662
+vvtk3000               MACH_VVTK3000           VVTK3000                663
+pimx1                  MACH_PIMX1              PIMX1                   664
+ollie                  MACH_OLLIE              OLLIE                   665
+skymax                 MACH_SKYMAX             SKYMAX                  666
+jazz                   MACH_JAZZ               JAZZ                    667
+tel_t3                 MACH_TEL_T3             TEL_T3                  668
+aisino_fcr255          MACH_AISINO_FCR255      AISINO_FCR255           669
+btweb                  MACH_BTWEB              BTWEB                   670
+dbg_lh79520            MACH_DBG_LH79520        DBG_LH79520             671
+cm41xx                 MACH_CM41XX             CM41XX                  672
+ts72xx                 MACH_TS72XX             TS72XX                  673
+nggpxa                 MACH_NGGPXA             NGGPXA                  674
+csb535                 MACH_CSB535             CSB535                  675
+csb536                 MACH_CSB536             CSB536                  676
+pxa_trakpod            MACH_PXA_TRAKPOD        PXA_TRAKPOD             677
+praxis                 MACH_PRAXIS             PRAXIS                  678
+lh75411                        MACH_LH75411            LH75411                 
679
+otom                   MACH_OTOM               OTOM                    680
+nexcoder_2440          MACH_NEXCODER_2440      NEXCODER_2440           681
+loox410                        MACH_LOOX410            LOOX410                 
682
+westlake               MACH_WESTLAKE           WESTLAKE                683
+nsb                    MACH_NSB                NSB                     684
+esl_sarva_stn          MACH_ESL_SARVA_STN      ESL_SARVA_STN           685
+esl_sarva_tft          MACH_ESL_SARVA_TFT      ESL_SARVA_TFT           686
+esl_sarva_iad          MACH_ESL_SARVA_IAD      ESL_SARVA_IAD           687
+esl_sarva_acc          MACH_ESL_SARVA_ACC      ESL_SARVA_ACC           688
+typhoon                        MACH_TYPHOON            TYPHOON                 
689
+cnav                   MACH_CNAV               CNAV                    690
+a730                   MACH_A730               A730                    691
+netstar                        MACH_NETSTAR            NETSTAR                 
692
+supercon               MACH_PHASEFALE_SUPERCON PHASEFALE_SUPERCON      693
+shiva1100              MACH_SHIVA1100          SHIVA1100               694
+etexsc                 MACH_ETEXSC             ETEXSC                  695
+ixdpg465               MACH_IXDPG465           IXDPG465                696
+a9m2410                        MACH_A9M2410            A9M2410                 
697
+a9m2440                        MACH_A9M2440            A9M2440                 
698
+a9m9750                        MACH_A9M9750            A9M9750                 
699
+a9m9360                        MACH_A9M9360            A9M9360                 
700
+unc90                  MACH_UNC90              UNC90                   701
diff -urN linux/arch/arm26/Kconfig.debug linux/arch/arm26/Kconfig.debug
--- linux/arch/arm26/Kconfig.debug      2004/08/24 15:10:04     1.1
+++ linux/arch/arm26/Kconfig.debug      2005/03/18 17:36:47     1.2
@@ -38,16 +38,6 @@
          you are concerned with the code size or don't want to see these
          messages.
 
-config DEBUG_INFO
-       bool "Include GDB debugging information in kernel binary"
-       help
-         Say Y here to include source-level debugging information in the
-         `vmlinux' binary image. This is handy if you want to use gdb or
-         addr2line to debug the kernel. It has no impact on the in-memory
-         footprint of the running kernel but it can increase the amount of
-         time and disk space needed for compilation of the kernel. If in
-         doubt say N.
-
 # These options are only for real kernel hackers who want to get their hands 
dirty.
 config DEBUG_LL
        bool "Kernel low-level debugging functions"
diff -urN linux/arch/arm26/kernel/setup.c linux/arch/arm26/kernel/setup.c
--- linux/arch/arm26/kernel/setup.c     2005/01/25 04:27:54     1.8
+++ linux/arch/arm26/kernel/setup.c     2005/03/18 17:36:47     1.9
@@ -74,7 +74,6 @@
 
 struct processor processor;
 
-unsigned char aux_device_present;
 char elf_platform[ELF_PLATFORM_SIZE];
 
 unsigned long phys_initrd_start __initdata = 0;
diff -urN linux/arch/arm26/kernel/signal.c linux/arch/arm26/kernel/signal.c
--- linux/arch/arm26/kernel/signal.c    2004/09/19 12:30:02     1.2
+++ linux/arch/arm26/kernel/signal.c    2005/03/18 17:36:48     1.3
@@ -102,7 +102,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
@@ -114,7 +114,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
@@ -186,7 +186,7 @@
 
        frame = (struct sigframe *)regs->ARM_sp;
 
-       if (verify_area(VERIFY_READ, frame, sizeof (*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof (*frame)))
                goto badframe;
        if (__get_user(set.sig[0], &frame->sc.oldmask)
            || (_NSIG_WORDS > 1
@@ -231,7 +231,7 @@
 
        frame = (struct rt_sigframe *)regs->ARM_sp;
 
-       if (verify_area(VERIFY_READ, frame, sizeof (*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof (*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/arm26/mm/init.c linux/arch/arm26/mm/init.c
--- linux/arch/arm26/mm/init.c  2005/01/13 14:05:21     1.8
+++ linux/arch/arm26/mm/init.c  2005/03/18 17:36:48     1.9
@@ -309,8 +309,6 @@
        free_area_init_node(0, pgdat, zone_size,
                        bdata->node_boot_start >> PAGE_SHIFT, zhole_size);
 
-       mem_map = NODE_DATA(0)->node_mem_map;
-
        /*
         * finish off the bad pages once
         * the mem_map is initialised
diff -urN linux/arch/cris/arch-v10/drivers/eeprom.c 
linux/arch/cris/arch-v10/drivers/eeprom.c
--- linux/arch/cris/arch-v10/drivers/eeprom.c   2004/06/09 14:12:04     1.3
+++ linux/arch/cris/arch-v10/drivers/eeprom.c   2005/03/18 17:36:48     1.4
@@ -599,7 +599,7 @@
   int i, written, restart=1;
   unsigned long p;
 
-  if (verify_area(VERIFY_READ, buf, count))
+  if (!access_ok(VERIFY_READ, buf, count))
   {
     return -EFAULT;
   }
diff -urN linux/arch/cris/arch-v10/drivers/gpio.c 
linux/arch/cris/arch-v10/drivers/gpio.c
--- linux/arch/cris/arch-v10/drivers/gpio.c     2004/11/15 11:49:15     1.4
+++ linux/arch/cris/arch-v10/drivers/gpio.c     2005/03/18 17:36:48     1.5
@@ -355,7 +355,7 @@
                return -EFAULT;
        }
     
-       if (verify_area(VERIFY_READ, buf, count)) {
+       if (!access_ok(VERIFY_READ, buf, count)) {
                return -EFAULT;
        }
        clk_mask = priv->clk_mask;
diff -urN linux/arch/cris/arch-v10/kernel/signal.c 
linux/arch/cris/arch-v10/kernel/signal.c
--- linux/arch/cris/arch-v10/kernel/signal.c    2004/11/15 11:49:15     1.4
+++ linux/arch/cris/arch-v10/kernel/signal.c    2005/03/18 17:36:48     1.5
@@ -125,7 +125,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
@@ -137,7 +137,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
@@ -231,7 +231,7 @@
         if (((long)frame) & 3)
                 goto badframe;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__get_user(set.sig[0], &frame->sc.oldmask)
            || (_NSIG_WORDS > 1
@@ -273,7 +273,7 @@
         if (((long)frame) & 3)
                 goto badframe;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/cris/arch-v10/mm/init.c linux/arch/cris/arch-v10/mm/init.c
--- linux/arch/cris/arch-v10/mm/init.c  2004/09/19 12:30:02     1.2
+++ linux/arch/cris/arch-v10/mm/init.c  2005/03/18 17:36:48     1.3
@@ -184,7 +184,6 @@
         */
 
        free_area_init_node(0, &contig_page_data, zones_size, PAGE_OFFSET >> 
PAGE_SHIFT, 0);
-       mem_map = contig_page_data.node_mem_map;
 }
 
 /* Initialize remaps of some I/O-ports. It is important that this
diff -urN linux/arch/cris/kernel/setup.c linux/arch/cris/kernel/setup.c
--- linux/arch/cris/kernel/setup.c      2004/06/28 21:04:11     1.15
+++ linux/arch/cris/kernel/setup.c      2005/03/18 17:36:48     1.16
@@ -26,8 +26,6 @@
 struct drive_info_struct { char dummy[32]; } drive_info;
 struct screen_info screen_info;
 
-unsigned char aux_device_present;
-
 extern int root_mountflags;
 extern char _etext, _edata, _end;
 
diff -urN linux/arch/frv/kernel/signal.c linux/arch/frv/kernel/signal.c
--- linux/arch/frv/kernel/signal.c      2005/02/13 20:16:15     1.2
+++ linux/arch/frv/kernel/signal.c      2005/03/18 17:36:48     1.3
@@ -114,7 +114,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
@@ -126,7 +126,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
@@ -197,7 +197,7 @@
        sigset_t set;
        int gr8;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__get_user(set.sig[0], &frame->sc.sc_oldmask))
                goto badframe;
@@ -228,7 +228,7 @@
        stack_t st;
        int gr8;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/frv/mb93090-mb00/pci-frv.c 
linux/arch/frv/mb93090-mb00/pci-frv.c
--- linux/arch/frv/mb93090-mb00/pci-frv.c       2005/01/13 14:05:23     1.1
+++ linux/arch/frv/mb93090-mb00/pci-frv.c       2005/03/18 17:36:48     1.2
@@ -43,7 +43,7 @@
        pci_read_config_dword(dev, reg, &check);
        if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ? 
PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) {
                printk(KERN_ERR "PCI: Error while updating region "
-                      "%s/%d (%08x != %08x)\n", dev->slot_name, resource,
+                      "%s/%d (%08x != %08x)\n", pci_name(dev), resource,
                       new, check);
        }
 }
@@ -128,7 +128,7 @@
                                        continue;
                                pr = pci_find_parent_resource(dev, r);
                                if (!pr || request_resource(pr, r) < 0)
-                                       printk(KERN_ERR "PCI: Cannot allocate 
resource region %d of bridge %s\n", idx, dev->slot_name);
+                                       printk(KERN_ERR "PCI: Cannot allocate 
resource region %d of bridge %s\n", idx, pci_name(dev));
                        }
                }
                pcibios_allocate_bus_resources(&bus->children);
diff -urN linux/arch/frv/mb93090-mb00/pci-vdk.c 
linux/arch/frv/mb93090-mb00/pci-vdk.c
--- linux/arch/frv/mb93090-mb00/pci-vdk.c       2005/01/13 14:05:23     1.1
+++ linux/arch/frv/mb93090-mb00/pci-vdk.c       2005/03/18 17:36:48     1.2
@@ -294,7 +294,7 @@
         */
        int i;
 
-       printk("PCI: Fixing base address flags for device %s\n", d->slot_name);
+       printk("PCI: Fixing base address flags for device %s\n", pci_name(d));
        for(i=0; i<4; i++)
                d->resource[i].flags |= PCI_BASE_ADDRESS_SPACE_IO;
 }
@@ -308,7 +308,7 @@
         */
        if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE)
                return;
-       printk("PCI: IDE base address fixup for %s\n", d->slot_name);
+       printk("PCI: IDE base address fixup for %s\n", pci_name(d));
        for(i=0; i<4; i++) {
                struct resource *r = &d->resource[i];
                if ((r->start & ~0x80) == 0x374) {
@@ -326,7 +326,7 @@
         * There exist PCI IDE controllers which have utter garbage
         * in first four base registers. Ignore that.
         */
-       printk("PCI: IDE base address trash cleared for %s\n", d->slot_name);
+       printk("PCI: IDE base address trash cleared for %s\n", pci_name(d));
        for(i=0; i<4; i++)
                d->resource[i].start = d->resource[i].end = 
d->resource[i].flags = 0;
 }
diff -urN linux/arch/h8300/kernel/signal.c linux/arch/h8300/kernel/signal.c
--- linux/arch/h8300/kernel/signal.c    2004/12/04 18:15:58     1.8
+++ linux/arch/h8300/kernel/signal.c    2005/03/18 17:36:48     1.9
@@ -113,7 +113,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
@@ -125,7 +125,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
@@ -222,7 +222,7 @@
        sigset_t set;
        int er0;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__get_user(set.sig[0], &frame->sc.sc_mask) ||
            (_NSIG_WORDS > 1 &&
@@ -253,7 +253,7 @@
        sigset_t set;
        int er0;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/i386/Kconfig linux/arch/i386/Kconfig
--- linux/arch/i386/Kconfig     2005/01/25 04:27:55     1.52
+++ linux/arch/i386/Kconfig     2005/03/18 17:36:48     1.53
@@ -183,6 +183,7 @@
          - "Winchip-C6" for original IDT Winchip.
          - "Winchip-2" for IDT Winchip 2.
          - "Winchip-2A" for IDT Winchips with 3dNow! capabilities.
+         - "MediaGX/Geode" for Cyrix MediaGX aka Geode.
          - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3.
          - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above).
 
@@ -310,6 +311,13 @@
          stores for this CPU, which can increase performance of some
          operations.
 
+config MGEODE
+       bool "MediaGX/Geode"
+       help
+         Select this for a Cyrix MediaGX aka Geode chip. Linux and GCC
+          treat this chip as a 586TSC with some extended instructions
+          and alignment reqirements.
+
 config MCYRIXIII
        bool "CyrixIII/VIA-C3"
        help
@@ -360,7 +368,7 @@
        int
        default "7" if MPENTIUM4 || X86_GENERIC
        default "4" if X86_ELAN || M486 || M386
-       default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || 
MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX 
|| M586TSC || M586 || MVIAC3_2
+       default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || 
MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX 
|| M586TSC || M586 || MVIAC3_2 || MGEODE
        default "6" if MK7 || MK8 || MPENTIUMM
 
 config RWSEM_GENERIC_SPINLOCK
@@ -379,7 +387,7 @@
 
 config X86_PPRO_FENCE
        bool
-       depends on M686 || M586MMX || M586TSC || M586 || M486 || M386
+       depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODE
        default y
 
 config X86_F00F_BUG
@@ -409,7 +417,7 @@
 
 config X86_ALIGNMENT_16
        bool
-       depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || 
X86_ELAN || MK6 || M586MMX || M586TSC || M586 || M486 || MVIAC3_2
+       depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || 
X86_ELAN || MK6 || M586MMX || M586TSC || M586 || M486 || MVIAC3_2 || MGEODE
        default y
 
 config X86_GOOD_APIC
@@ -434,7 +442,7 @@
 
 config X86_OOSTORE
        bool
-       depends on (MWINCHIP3D || MWINCHIP2 || MWINCHIPC6) && MTRR
+       depends on (MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MGEODE) && MTRR
        default y
 
 config HPET_TIMER
@@ -529,9 +537,9 @@
          Say N if you are unsure.
 
 config X86_UP_APIC
-       bool "Local APIC support on uniprocessors" if !SMP
-       depends on !(X86_VISWS || X86_VOYAGER)
-       ---help---
+       bool "Local APIC support on uniprocessors"
+       depends on !SMP && !(X86_VISWS || X86_VOYAGER)
+       help
          A local APIC (Advanced Programmable Interrupt Controller) is an
          integrated interrupt controller in the CPU. If you have a single-CPU
          system which has a processor with a local APIC, you can say Y here to
@@ -541,36 +549,36 @@
          performance counters), and the NMI watchdog which detects hard
          lockups.
 
-         If you have a system with several CPUs, you do not need to say Y
-         here: the local APIC will be used automatically.
-
 config X86_UP_IOAPIC
        bool "IO-APIC support on uniprocessors"
-       depends on !SMP && X86_UP_APIC
+       depends on X86_UP_APIC
        help
          An IO-APIC (I/O Advanced Programmable Interrupt Controller) is an
          SMP-capable replacement for PC-style interrupt controllers. Most
-         SMP systems and a small number of uniprocessor systems have one.
+         SMP systems and many recent uniprocessor systems have one.
+
          If you have a single-CPU system with an IO-APIC, you can say Y here
          to use it. If you say Y here even though your machine doesn't have
          an IO-APIC, then the kernel will still run with no slowdown at all.
 
-         If you have a system with several CPUs, you do not need to say Y
-         here: the IO-APIC will be used automatically.
-
 config X86_LOCAL_APIC
        bool
-       depends on !SMP && X86_UP_APIC
+       depends on X86_UP_APIC || ((X86_VISWS || SMP) && !X86_VOYAGER)
        default y
 
 config X86_IO_APIC
        bool
-       depends on !SMP && X86_UP_IOAPIC
+       depends on X86_UP_IOAPIC || (SMP && !(X86_VISWS || X86_VOYAGER))
+       default y
+
+config X86_VISWS_APIC
+       bool
+       depends on X86_VISWS
        default y
 
 config X86_TSC
        bool
-       depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || 
MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII 
|| M686 || M586MMX || M586TSC || MK8 || MVIAC3_2) && !X86_NUMAQ
+       depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || 
MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII 
|| M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODE) && !X86_NUMAQ
        default y
 
 config X86_MCE
@@ -769,6 +777,16 @@
        depends on NUMA
        default y
 
+config HAVE_MEMORY_PRESENT
+       bool
+       depends on DISCONTIGMEM
+       default y
+
+config NEED_NODE_MEMMAP_SIZE
+       bool
+       depends on DISCONTIGMEM
+       default y
+
 config HIGHPTE
        bool "Allocate 3rd-level pagetables from highmem"
        depends on HIGHMEM4G || HIGHMEM64G
@@ -888,6 +906,23 @@
        generate incorrect output with certain kernel constructs when
        -mregparm=3 is used.
 
+config SECCOMP
+       bool "Enable seccomp to safely compute untrusted bytecode"
+       depends on PROC_FS
+       default y
+       help
+         This kernel feature is useful for number crunching applications
+         that may need to compute untrusted bytecode during their
+         execution. By using pipes or other transports made available to
+         the process as file descriptors supporting the read/write
+         syscalls, it's possible to isolate those applications in
+         their own address space using seccomp. Once seccomp is
+         enabled via /proc/<pid>/seccomp, it cannot be disabled
+         and the task is only allowed to execute a few safe syscalls
+         defined by each seccomp mode.
+
+         If unsure, say Y. Only embedded should say N here.
+
 endmenu
 
 
@@ -1052,21 +1087,6 @@
 
 menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
 
-config X86_VISWS_APIC
-       bool
-       depends on X86_VISWS
-       default y
-
-config X86_LOCAL_APIC
-       bool
-       depends on (X86_VISWS || SMP) && !X86_VOYAGER
-       default y
-
-config X86_IO_APIC
-       bool
-       depends on SMP && !(X86_VISWS || X86_VOYAGER)
-       default y
-
 config PCI
        bool "PCI support" if !X86_VISWS
        depends on !X86_VOYAGER
@@ -1164,18 +1184,14 @@
 source "drivers/eisa/Kconfig"
 
 config MCA
-       bool "MCA support"
-       depends on !(X86_VISWS || X86_VOYAGER)
+       bool "MCA support" if !(X86_VISWS || X86_VOYAGER)
+       default y if X86_VOYAGER
        help
          MicroChannel Architecture is found in some IBM PS/2 machines and
          laptops.  It is a bus system similar to PCI or ISA. See
          <file:Documentation/mca.txt> (and especially the web page given
          there) before attempting to build an MCA bus kernel.
 
-config MCA
-       depends on X86_VOYAGER
-       default y if X86_VOYAGER
-
 source "drivers/mca/Kconfig"
 
 config SCx200
diff -urN linux/arch/i386/Kconfig.debug linux/arch/i386/Kconfig.debug
--- linux/arch/i386/Kconfig.debug       2004/10/25 20:44:13     1.3
+++ linux/arch/i386/Kconfig.debug       2005/03/18 17:36:48     1.4
@@ -3,7 +3,7 @@
 source "lib/Kconfig.debug"
 
 config EARLY_PRINTK
-       bool "Early printk" if EMBEDDED
+       bool "Early printk" if EMBEDDED && DEBUG_KERNEL
        default y
        help
          Write kernel log output directly into the VGA buffer or to a serial
@@ -38,9 +38,12 @@
 
          This option will slow down process creation somewhat.
 
+comment "Page alloc debug is incompatible with Software Suspend on i386"
+       depends on DEBUG_KERNEL && SOFTWARE_SUSPEND
+
 config DEBUG_PAGEALLOC
        bool "Page alloc debugging"
-       depends on DEBUG_KERNEL
+       depends on DEBUG_KERNEL && !SOFTWARE_SUSPEND
        help
          Unmap pages from the kernel linear mapping after free_pages().
          This results in a large slowdown, but helps to find certain types
@@ -48,6 +51,7 @@
 
 config 4KSTACKS
        bool "Use 4Kb for kernel stacks instead of 8Kb"
+       depends on DEBUG_KERNEL
        help
          If you say Y here the kernel will use a 4Kb stacksize for the
          kernel stack attached to each process/thread. This facilitates
diff -urN linux/arch/i386/Makefile linux/arch/i386/Makefile
--- linux/arch/i386/Makefile    2004/12/27 02:15:49     1.68
+++ linux/arch/i386/Makefile    2005/03/18 17:36:48     1.69
@@ -14,6 +14,8 @@
 # 19990713  Artur Skawina <skawina@geocities.com>
 #           Added '-march' and '-mpreferred-stack-boundary' support
 #
+#           Kianusch Sayah Karadji <kianusch@sk-tech.net>
+#           Added support for GEODE CPU
 
 LDFLAGS                := -m elf_i386
 OBJCOPYFLAGS   := -O binary -R .note -R .comment -S
@@ -52,6 +54,9 @@
 # AMD Elan support
 cflags-$(CONFIG_X86_ELAN)      += -march=i486
 
+# MediaGX aka Geode support
+cflags-$(CONFIG_MGEODE)                += $(call 
cc-option,-march=pentium-mmx,-march=i586)
+
 # -mregparm=3 works ok on gcc-3.0 and later
 #
 GCC_VERSION                    := $(call cc-version)
@@ -137,7 +142,10 @@
 zdisk bzdisk: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) zdisk
 
-install fdimage fdimage144 fdimage288: vmlinux
+fdimage fdimage144 fdimage288: vmlinux
+       $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
+
+install:
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
 
 prepare: include/asm-$(ARCH)/asm_offsets.h
diff -urN linux/arch/i386/defconfig linux/arch/i386/defconfig
--- linux/arch/i386/defconfig   2005/01/13 14:05:23     1.108
+++ linux/arch/i386/defconfig   2005/03/18 17:36:48     1.109
@@ -802,7 +802,6 @@
 # CONFIG_AGP_AMD is not set
 # CONFIG_AGP_AMD64 is not set
 CONFIG_AGP_INTEL=y
-CONFIG_AGP_INTEL_MCH=m
 # CONFIG_AGP_NVIDIA is not set
 # CONFIG_AGP_SIS is not set
 # CONFIG_AGP_SWORKS is not set
diff -urN linux/arch/i386/kernel/Makefile linux/arch/i386/kernel/Makefile
--- linux/arch/i386/kernel/Makefile     2004/11/15 11:49:16     1.69
+++ linux/arch/i386/kernel/Makefile     2005/03/18 17:36:48     1.70
@@ -46,7 +46,7 @@
 
 # The DSO images are built using a special linker script.
 quiet_cmd_syscall = SYSCALL $@
-      cmd_syscall = $(CC) -nostdlib $(SYSCFLAGS_$(@F)) \
+      cmd_syscall = $(CC) -m elf_i386 -nostdlib $(SYSCFLAGS_$(@F)) \
                          -Wl,-T,$(filter-out FORCE,$^) -o $@
 
 export CPPFLAGS_vsyscall.lds += -P -C -U$(ARCH)
diff -urN linux/arch/i386/kernel/apic.c linux/arch/i386/kernel/apic.c
--- linux/arch/i386/kernel/apic.c       2005/03/02 19:58:00     1.61
+++ linux/arch/i386/kernel/apic.c       2005/03/18 17:36:48     1.62
@@ -909,7 +909,7 @@
 
 #define APIC_DIVISOR 16
 
-void __setup_APIC_LVTT(unsigned int clocks)
+static void __setup_APIC_LVTT(unsigned int clocks)
 {
        unsigned int lvtt_value, tmp_value, ver;
 
@@ -959,7 +959,7 @@
  * APIC irq that way.
  */
 
-int __init calibrate_APIC_clock(void)
+static int __init calibrate_APIC_clock(void)
 {
        unsigned long long t1 = 0, t2 = 0;
        long tt1, tt2;
diff -urN linux/arch/i386/kernel/apm.c linux/arch/i386/kernel/apm.c
--- linux/arch/i386/kernel/apm.c        2005/01/25 04:27:55     1.74
+++ linux/arch/i386/kernel/apm.c        2005/03/18 17:36:48     1.75
@@ -166,14 +166,14 @@
  *         If an APM idle fails log it and idle sensibly
  *   1.15: Don't queue events to clients who open the device O_WRONLY.
  *         Don't expect replies from clients who open the device O_RDONLY.
- *         (Idea from Thomas Hood <jdthood@mail.com>)
+ *         (Idea from Thomas Hood)
  *         Minor waitqueue cleanups. (John Fremlin <chief@bandits.org>)
  *   1.16: Fix idle calling. (Andreas Steinmetz <ast@domdv.de> et al.)
  *         Notify listeners of standby or suspend events before notifying
  *         drivers. Return EBUSY to ioctl() if suspend is rejected.
  *         (Russell King <rmk@arm.linux.org.uk> and Thomas Hood)
  *         Ignore first resume after we generate our own resume event
- *         after a suspend (Thomas Hood <jdthood@mail.com>)
+ *         after a suspend (Thomas Hood)
  *         Daemonize now gets rid of our controlling terminal (sfr).
  *         CONFIG_APM_CPU_IDLE now just affects the default value of
  *         idle_threshold (sfr).
diff -urN linux/arch/i386/kernel/asm-offsets.c 
linux/arch/i386/kernel/asm-offsets.c
--- linux/arch/i386/kernel/asm-offsets.c        2004/09/19 12:30:02     1.4
+++ linux/arch/i386/kernel/asm-offsets.c        2005/03/18 17:36:48     1.5
@@ -7,6 +7,7 @@
 #include <linux/sched.h>
 #include <linux/signal.h>
 #include <linux/personality.h>
+#include <linux/suspend.h>
 #include <asm/ucontext.h>
 #include "sigframe.h"
 #include <asm/fixmap.h>
@@ -56,6 +57,11 @@
 
        OFFSET(EXEC_DOMAIN_handler, exec_domain, handler);
        OFFSET(RT_SIGFRAME_sigcontext, rt_sigframe, uc.uc_mcontext);
+       BLANK();
+
+       OFFSET(pbe_address, pbe, address);
+       OFFSET(pbe_orig_address, pbe, orig_address);
+       OFFSET(pbe_next, pbe, next);
 
        /* Offset from the sysenter stack to tss.esp0 */
        DEFINE(TSS_sysenter_esp0, offsetof(struct tss_struct, esp0) -
diff -urN linux/arch/i386/kernel/cpuid.c linux/arch/i386/kernel/cpuid.c
--- linux/arch/i386/kernel/cpuid.c      2004/06/26 15:15:08     1.16
+++ linux/arch/i386/kernel/cpuid.c      2005/03/18 17:36:48     1.17
@@ -189,7 +189,7 @@
        .notifier_call = cpuid_class_cpu_callback,
 };
 
-int __init cpuid_init(void)
+static int __init cpuid_init(void)
 {
        int i, err = 0;
        i = 0;
@@ -227,7 +227,7 @@
        return err;
 }
 
-void __exit cpuid_exit(void)
+static void __exit cpuid_exit(void)
 {
        int cpu = 0;
 
diff -urN linux/arch/i386/kernel/dmi_scan.c linux/arch/i386/kernel/dmi_scan.c
--- linux/arch/i386/kernel/dmi_scan.c   2005/01/25 04:27:55     1.48
+++ linux/arch/i386/kernel/dmi_scan.c   2005/03/18 17:36:48     1.49
@@ -487,4 +487,3 @@
        return dmi_ident[field];
 }
 
-EXPORT_SYMBOL(dmi_get_system_info);
diff -urN linux/arch/i386/kernel/efi.c linux/arch/i386/kernel/efi.c
--- linux/arch/i386/kernel/efi.c        2005/01/25 04:27:55     1.5
+++ linux/arch/i386/kernel/efi.c        2005/03/18 17:36:48     1.6
@@ -46,7 +46,7 @@
 
 struct efi efi;
 EXPORT_SYMBOL(efi);
-struct efi efi_phys __initdata;
+static struct efi efi_phys __initdata;
 struct efi_memory_map memmap __initdata;
 
 /*
@@ -151,7 +151,7 @@
        return status;
 }
 
-efi_status_t
+static efi_status_t
 phys_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc)
 {
        efi_status_t status;
@@ -240,7 +240,8 @@
                printk(KERN_ERR PFX "Could not remap the EFI memmap!\n");
 }
 
-void __init print_efi_memmap(void)
+#if EFI_DEBUG
+static void __init print_efi_memmap(void)
 {
        efi_memory_desc_t *md;
        int i;
@@ -254,6 +255,7 @@
                        (md->num_pages >> (20 - EFI_PAGE_SHIFT)));
        }
 }
+#endif  /*  EFI_DEBUG  */
 
 /*
  * Walks the EFI memory map and calls CALLBACK once for each EFI
diff -urN linux/arch/i386/kernel/entry.S linux/arch/i386/kernel/entry.S
--- linux/arch/i386/kernel/entry.S      2005/02/07 02:54:31     1.97
+++ linux/arch/i386/kernel/entry.S      2005/03/18 17:36:48     1.98
@@ -219,7 +219,8 @@
        SAVE_ALL
        GET_THREAD_INFO(%ebp)
 
-       testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
+       /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not 
testb */
+       testw 
$(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),TI_flags(%ebp)
        jnz syscall_trace_entry
        cmpl $(nr_syscalls), %eax
        jae syscall_badsys
@@ -243,7 +244,8 @@
        SAVE_ALL
        GET_THREAD_INFO(%ebp)
                                        # system call tracing in operation
-       testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
+       /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not 
testb */
+       testw 
$(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),TI_flags(%ebp)
        jnz syscall_trace_entry
        cmpl $(nr_syscalls), %eax
        jae syscall_badsys
diff -urN linux/arch/i386/kernel/i386_ksyms.c 
linux/arch/i386/kernel/i386_ksyms.c
--- linux/arch/i386/kernel/i386_ksyms.c 2005/01/25 04:27:55     1.80
+++ linux/arch/i386/kernel/i386_ksyms.c 2005/03/18 17:36:48     1.81
@@ -97,6 +97,11 @@
 EXPORT_SYMBOL(__get_user_2);
 EXPORT_SYMBOL(__get_user_4);
 
+EXPORT_SYMBOL(__put_user_1);
+EXPORT_SYMBOL(__put_user_2);
+EXPORT_SYMBOL(__put_user_4);
+EXPORT_SYMBOL(__put_user_8);
+
 EXPORT_SYMBOL(strpbrk);
 EXPORT_SYMBOL(strstr);
 
@@ -112,7 +117,6 @@
 EXPORT_SYMBOL(dma_free_coherent);
 
 #ifdef CONFIG_PCI
-EXPORT_SYMBOL(pcibios_penalize_isa_irq);
 EXPORT_SYMBOL(pci_mem_start);
 #endif
 
@@ -144,7 +148,6 @@
 
 /* TLB flushing */
 EXPORT_SYMBOL(flush_tlb_page);
-EXPORT_SYMBOL_GPL(flush_tlb_all);
 #endif
 
 #ifdef CONFIG_X86_IO_APIC
diff -urN linux/arch/i386/kernel/i387.c linux/arch/i386/kernel/i387.c
--- linux/arch/i386/kernel/i387.c       2005/02/07 02:54:31     1.20
+++ linux/arch/i386/kernel/i387.c       2005/03/18 17:36:48     1.21
@@ -24,7 +24,7 @@
 #define HAVE_HWFP 1
 #endif
 
-unsigned long mxcsr_feature_mask = 0xffffffff;
+static unsigned long mxcsr_feature_mask = 0xffffffff;
 
 void mxcsr_feature_mask_init(void)
 {
@@ -177,6 +177,7 @@
        }
 }
 
+#if 0
 unsigned short get_fpu_twd( struct task_struct *tsk )
 {
        if ( cpu_has_fxsr ) {
@@ -185,6 +186,7 @@
                return (unsigned short)tsk->thread.i387.fsave.twd;
        }
 }
+#endif  /*  0  */
 
 unsigned short get_fpu_mxcsr( struct task_struct *tsk )
 {
@@ -195,6 +197,8 @@
        }
 }
 
+#if 0
+
 void set_fpu_cwd( struct task_struct *tsk, unsigned short cwd )
 {
        if ( cpu_has_fxsr ) {
@@ -222,6 +226,8 @@
        }
 }
 
+#endif  /*  0  */
+
 /*
  * FXSR floating point environment conversions.
  */
diff -urN linux/arch/i386/kernel/i8259.c linux/arch/i386/kernel/i8259.c
--- linux/arch/i386/kernel/i8259.c      2005/01/25 04:27:55     1.47
+++ linux/arch/i386/kernel/i8259.c      2005/03/18 17:36:48     1.48
@@ -49,7 +49,7 @@
 
 #define shutdown_8259A_irq     disable_8259A_irq
 
-void mask_and_ack_8259A(unsigned int);
+static void mask_and_ack_8259A(unsigned int);
 
 unsigned int startup_8259A_irq(unsigned int irq)
 { 
@@ -58,14 +58,13 @@
 }
 
 static struct hw_interrupt_type i8259A_irq_type = {
-       "XT-PIC",
-       startup_8259A_irq,
-       shutdown_8259A_irq,
-       enable_8259A_irq,
-       disable_8259A_irq,
-       mask_and_ack_8259A,
-       end_8259A_irq,
-       NULL
+       .typename = "XT-PIC",
+       .startup = startup_8259A_irq,
+       .shutdown = shutdown_8259A_irq,
+       .enable = enable_8259A_irq,
+       .disable = disable_8259A_irq,
+       .ack = mask_and_ack_8259A,
+       .end = end_8259A_irq,
 };
 
 /*
@@ -169,7 +168,7 @@
  * first, _then_ send the EOI, and the order of EOI
  * to the two 8259s is important!
  */
-void mask_and_ack_8259A(unsigned int irq)
+static void mask_and_ack_8259A(unsigned int irq)
 {
        unsigned int irqmask = 1 << irq;
        unsigned long flags;
diff -urN linux/arch/i386/kernel/io_apic.c linux/arch/i386/kernel/io_apic.c
--- linux/arch/i386/kernel/io_apic.c    2005/01/25 04:27:55     1.86
+++ linux/arch/i386/kernel/io_apic.c    2005/03/18 17:36:48     1.87
@@ -188,7 +188,7 @@
        spin_unlock_irqrestore(&ioapic_lock, flags);
 }
 
-void clear_IO_APIC_pin(unsigned int apic, unsigned int pin)
+static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin)
 {
        struct IO_APIC_route_entry entry;
        unsigned long flags;
@@ -264,7 +264,7 @@
 static int irqbalance_disabled = IRQBALANCE_CHECK_ARCH;
 static int physical_balance = 0;
 
-struct irq_cpu_info {
+static struct irq_cpu_info {
        unsigned long * last_irq;
        unsigned long * irq_delta;
        unsigned long irq;
@@ -286,7 +286,7 @@
 #define BALANCED_IRQ_MORE_DELTA                (HZ/10)
 #define BALANCED_IRQ_LESS_DELTA                (HZ)
 
-long balanced_irq_interval = MAX_BALANCED_IRQ_INTERVAL;
+static long balanced_irq_interval = MAX_BALANCED_IRQ_INTERVAL;
 
 static unsigned long move(int curr_cpu, cpumask_t allowed_mask,
                        unsigned long now, int direction)
@@ -685,8 +685,8 @@
  */
 
 #define MAX_PIRQS 8
-int pirq_entries [MAX_PIRQS];
-int pirqs_enabled;
+static int pirq_entries [MAX_PIRQS];
+static int pirqs_enabled;
 int skip_ioapic_setup;
 
 static int __init ioapic_setup(char *str)
@@ -1179,7 +1179,7 @@
        }
 }
 
-void __init setup_IO_APIC_irqs(void)
+static void __init setup_IO_APIC_irqs(void)
 {
        struct IO_APIC_route_entry entry;
        int apic, pin, idx, irq, first_notcon = 1, vector;
@@ -1258,7 +1258,7 @@
 /*
  * Set up the 8259A-master output pin:
  */
-void __init setup_ExtINT_IRQ0_pin(unsigned int pin, int vector)
+static void __init setup_ExtINT_IRQ0_pin(unsigned int pin, int vector)
 {
        struct IO_APIC_route_entry entry;
        unsigned long flags;
@@ -1452,6 +1452,8 @@
        return;
 }
 
+#if 0
+
 static void print_APIC_bitfield (int base)
 {
        unsigned int v;
@@ -1594,6 +1596,8 @@
        printk(KERN_DEBUG "... PIC ELCR: %04x\n", v);
 }
 
+#endif  /*  0  */
+
 static void __init enable_IO_APIC(void)
 {
        union IO_APIC_reg_01 reg_01;
diff -urN linux/arch/i386/kernel/mpparse.c linux/arch/i386/kernel/mpparse.c
--- linux/arch/i386/kernel/mpparse.c    2005/01/13 14:05:24     1.58
+++ linux/arch/i386/kernel/mpparse.c    2005/03/18 17:36:48     1.59
@@ -49,7 +49,7 @@
 int mp_bus_id_to_local [MAX_MP_BUSSES];
 int quad_local_to_mp_bus_id [NR_CPUS/4][4];
 int mp_bus_id_to_pci_bus [MAX_MP_BUSSES] = { [0 ... MAX_MP_BUSSES-1] = -1 };
-int mp_current_pci_id;
+static int mp_current_pci_id;
 
 /* I/O APIC entries */
 struct mpc_config_ioapic mp_ioapics[MAX_IO_APICS];
@@ -119,7 +119,7 @@
 }
 #endif
 
-void __init MP_processor_info (struct mpc_config_processor *m)
+static void __init MP_processor_info (struct mpc_config_processor *m)
 {
        int ver, apicid;
        physid_mask_t tmp;
@@ -863,7 +863,7 @@
 #define MP_ISA_BUS             0
 #define MP_MAX_IOAPIC_PIN      127
 
-struct mp_ioapic_routing {
+static struct mp_ioapic_routing {
        int                     apic_id;
        int                     gsi_base;
        int                     gsi_end;
diff -urN linux/arch/i386/kernel/msr.c linux/arch/i386/kernel/msr.c
--- linux/arch/i386/kernel/msr.c        2004/06/26 15:15:08     1.19
+++ linux/arch/i386/kernel/msr.c        2005/03/18 17:36:48     1.20
@@ -291,7 +291,7 @@
        .notifier_call = msr_class_cpu_callback,
 };
 
-int __init msr_init(void)
+static int __init msr_init(void)
 {
        int i, err = 0;
        i = 0;
@@ -328,7 +328,7 @@
        return err;
 }
 
-void __exit msr_exit(void)
+static void __exit msr_exit(void)
 {
        int cpu = 0;
        for_each_online_cpu(cpu)
diff -urN linux/arch/i386/kernel/numaq.c linux/arch/i386/kernel/numaq.c
--- linux/arch/i386/kernel/numaq.c      2005/01/13 14:05:24     1.10
+++ linux/arch/i386/kernel/numaq.c      2005/03/18 17:36:48     1.11
@@ -30,9 +30,7 @@
 #include <linux/module.h>
 #include <linux/nodemask.h>
 #include <asm/numaq.h>
-
-/* These are needed before the pgdat's are created */
-extern long node_start_pfn[], node_end_pfn[];
+#include <asm/topology.h>
 
 #define        MB_TO_PAGES(addr) ((addr) << (20 - PAGE_SHIFT))
 
@@ -59,6 +57,12 @@
                                eq->hi_shrd_mem_start - eq->priv_mem_size);
                        node_end_pfn[node] = MB_TO_PAGES(
                                eq->hi_shrd_mem_start + eq->hi_shrd_mem_size);
+
+                       memory_present(node,
+                               node_start_pfn[node], node_end_pfn[node]);
+                       node_remap_size[node] = node_memmap_size_bytes(node,
+                                                       node_start_pfn[node],
+                                                       node_end_pfn[node]);
                }
        }
 }
diff -urN linux/arch/i386/kernel/process.c linux/arch/i386/kernel/process.c
--- linux/arch/i386/kernel/process.c    2005/02/07 02:54:31     1.95
+++ linux/arch/i386/kernel/process.c    2005/03/18 17:36:48     1.96
@@ -36,6 +36,7 @@
 #include <linux/module.h>
 #include <linux/kallsyms.h>
 #include <linux/ptrace.h>
+#include <linux/random.h>
 
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
@@ -55,7 +56,7 @@
 
 asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
 
-int hlt_counter;
+static int hlt_counter;
 
 unsigned long boot_option_idle_override = 0;
 EXPORT_SYMBOL(boot_option_idle_override);
@@ -828,3 +829,9 @@
        return 0;
 }
 
+unsigned long arch_align_stack(unsigned long sp)
+{
+       if (randomize_va_space)
+               sp -= get_random_int() % 8192;
+       return sp & ~0xf;
+}
diff -urN linux/arch/i386/kernel/ptrace.c linux/arch/i386/kernel/ptrace.c
--- linux/arch/i386/kernel/ptrace.c     2005/02/07 02:54:31     1.48
+++ linux/arch/i386/kernel/ptrace.c     2005/03/18 17:36:48     1.49
@@ -15,6 +15,7 @@
 #include <linux/user.h>
 #include <linux/security.h>
 #include <linux/audit.h>
+#include <linux/seccomp.h>
 
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
@@ -678,6 +679,9 @@
 __attribute__((regparm(3)))
 void do_syscall_trace(struct pt_regs *regs, int entryexit)
 {
+       /* do the secure computing check first */
+       secure_computing(regs->orig_eax);
+
        if (unlikely(current->audit_context)) {
                if (!entryexit)
                        audit_syscall_entry(current, regs->orig_eax,
diff -urN linux/arch/i386/kernel/quirks.c linux/arch/i386/kernel/quirks.c
--- linux/arch/i386/kernel/quirks.c     2004/12/27 02:15:49     1.2
+++ linux/arch/i386/kernel/quirks.c     2005/03/18 17:36:48     1.3
@@ -7,7 +7,7 @@
 
 #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_SMP) && defined(CONFIG_PCI)
 
-void __devinit quirk_intel_irqbalance(struct pci_dev *dev)
+static void __devinit quirk_intel_irqbalance(struct pci_dev *dev)
 {
        u8 config, rev;
        u32 word;
diff -urN linux/arch/i386/kernel/scx200.c linux/arch/i386/kernel/scx200.c
--- linux/arch/i386/kernel/scx200.c     2005/01/25 04:27:55     1.5
+++ linux/arch/i386/kernel/scx200.c     2005/03/18 17:36:48     1.6
@@ -13,6 +13,9 @@
 
 #include <linux/scx200.h>
 
+/* Verify that the configuration block really is there */
+#define scx200_cb_probe(base) (inw((base) + SCx200_CBA) == (base))
+
 #define NAME "scx200"
 
 MODULE_AUTHOR("Christer Weinigel <wingel@nano-system.com>");
@@ -22,9 +25,13 @@
 unsigned scx200_gpio_base = 0;
 long scx200_gpio_shadow[2];
 
+unsigned scx200_cb_base = 0;
+
 static struct pci_device_id scx200_tbl[] = {
        { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SCx200_BRIDGE) },
        { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SC1100_BRIDGE) },
+       { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SCx200_XBUS)   },
+       { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SC1100_XBUS)   },
        { },
 };
 MODULE_DEVICE_TABLE(pci,scx200_tbl);
@@ -37,7 +44,6 @@
        .probe = scx200_probe,
 };
 
-DEFINE_SPINLOCK(scx200_gpio_lock);
 static DEFINE_SPINLOCK(scx200_gpio_config_lock);
 
 static int __devinit scx200_probe(struct pci_dev *pdev, const struct 
pci_device_id *ent)
@@ -45,22 +51,39 @@
        int bank;
        unsigned base;
 
-       base = pci_resource_start(pdev, 0);
-       printk(KERN_INFO NAME ": GPIO base 0x%x\n", base);
-
-       if (request_region(base, SCx200_GPIO_SIZE, "NatSemi SCx200 GPIO") == 0) 
{
-               printk(KERN_ERR NAME ": can't allocate I/O for GPIOs\n");
-               return -EBUSY;
+       if (pdev->device == PCI_DEVICE_ID_NS_SCx200_BRIDGE ||
+           pdev->device == PCI_DEVICE_ID_NS_SC1100_BRIDGE) {
+               base = pci_resource_start(pdev, 0);
+               printk(KERN_INFO NAME ": GPIO base 0x%x\n", base);
+
+               if (request_region(base, SCx200_GPIO_SIZE, "NatSemi SCx200 
GPIO") == 0) {
+                       printk(KERN_ERR NAME ": can't allocate I/O for 
GPIOs\n");
+                       return -EBUSY;
+               }
+
+               scx200_gpio_base = base;
+
+               /* read the current values driven on the GPIO signals */
+               for (bank = 0; bank < 2; ++bank)
+                       scx200_gpio_shadow[bank] = inl(scx200_gpio_base + 0x10 
* bank);
+
+       } else {
+               /* find the base of the Configuration Block */
+               if (scx200_cb_probe(SCx200_CB_BASE_FIXED)) {
+                       scx200_cb_base = SCx200_CB_BASE_FIXED;
+               } else {
+                       pci_read_config_dword(pdev, SCx200_CBA_SCRATCH, &base);
+                       if (scx200_cb_probe(base)) {
+                               scx200_cb_base = base;
+                       } else {
+                               printk(KERN_WARNING NAME ": Configuration Block 
not found\n");
+                               return -ENODEV;
+                       }
+               }
+               printk(KERN_INFO NAME ": Configuration Block base 0x%x\n", 
scx200_cb_base);
        }
 
-       scx200_gpio_base = base;
-
-       /* read the current values driven on the GPIO signals */
-       for (bank = 0; bank < 2; ++bank)
-               scx200_gpio_shadow[bank] = inl(scx200_gpio_base + 0x10 * bank);
-
        return 0;
-
 }
 
 u32 scx200_gpio_configure(int index, u32 mask, u32 bits)
@@ -81,6 +104,7 @@
        return config;
 }
 
+#if 0
 void scx200_gpio_dump(unsigned index)
 {
        u32 config = scx200_gpio_configure(index, ~0, 0);
@@ -112,15 +136,16 @@
                printk(" DEBOUNCE"); /* debounce */
        printk("\n");
 }
+#endif  /*  0  */
 
-int __init scx200_init(void)
+static int __init scx200_init(void)
 {
        printk(KERN_INFO NAME ": NatSemi SCx200 Driver\n");
 
        return pci_module_init(&scx200_pci_driver);
 }
 
-void __exit scx200_cleanup(void)
+static void __exit scx200_cleanup(void)
 {
        pci_unregister_driver(&scx200_pci_driver);
        release_region(scx200_gpio_base, SCx200_GPIO_SIZE);
@@ -131,9 +156,8 @@
 
 EXPORT_SYMBOL(scx200_gpio_base);
 EXPORT_SYMBOL(scx200_gpio_shadow);
-EXPORT_SYMBOL(scx200_gpio_lock);
 EXPORT_SYMBOL(scx200_gpio_configure);
-EXPORT_SYMBOL(scx200_gpio_dump);
+EXPORT_SYMBOL(scx200_cb_base);
 
 /*
     Local variables:
diff -urN linux/arch/i386/kernel/semaphore.c linux/arch/i386/kernel/semaphore.c
--- linux/arch/i386/kernel/semaphore.c  2004/11/15 11:49:16     1.14
+++ linux/arch/i386/kernel/semaphore.c  2005/03/18 17:36:48     1.15
@@ -10,7 +10,7 @@
  *     as published by the Free Software Foundation; either version
  *     2 of the License, or (at your option) any later version.
  *
- * rw semaphores implemented November 1999 by Benjamin LaHaise 
<bcrl@redhat.com>
+ * rw semaphores implemented November 1999 by Benjamin LaHaise <bcrl@kvack.org>
  */
 #include <linux/config.h>
 #include <linux/sched.h>
@@ -49,12 +49,12 @@
  *    we cannot lose wakeup events.
  */
 
-fastcall void __up(struct semaphore *sem)
+static fastcall void __attribute_used__  __up(struct semaphore *sem)
 {
        wake_up(&sem->wait);
 }
 
-fastcall void __sched __down(struct semaphore * sem)
+static fastcall void __attribute_used__ __sched __down(struct semaphore * sem)
 {
        struct task_struct *tsk = current;
        DECLARE_WAITQUEUE(wait, tsk);
@@ -91,7 +91,7 @@
        tsk->state = TASK_RUNNING;
 }
 
-fastcall int __sched __down_interruptible(struct semaphore * sem)
+static fastcall int __attribute_used__ __sched __down_interruptible(struct 
semaphore * sem)
 {
        int retval = 0;
        struct task_struct *tsk = current;
@@ -154,7 +154,7 @@
  * single "cmpxchg" without failure cases,
  * but then it wouldn't work on a 386.
  */
-fastcall int __down_trylock(struct semaphore * sem)
+static fastcall int __attribute_used__ __down_trylock(struct semaphore * sem)
 {
        int sleepers;
        unsigned long flags;
diff -urN linux/arch/i386/kernel/setup.c linux/arch/i386/kernel/setup.c
--- linux/arch/i386/kernel/setup.c      2005/02/28 15:45:10     1.108
+++ linux/arch/i386/kernel/setup.c      2005/03/18 17:36:48     1.109
@@ -40,6 +40,7 @@
 #include <linux/efi.h>
 #include <linux/init.h>
 #include <linux/edd.h>
+#include <linux/nodemask.h>
 #include <video/edid.h>
 #include <asm/e820.h>
 #include <asm/mpspec.h>
@@ -74,7 +75,6 @@
 struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
 
 unsigned long mmu_cr4_features;
-EXPORT_SYMBOL_GPL(mmu_cr4_features);
 
 #ifdef CONFIG_ACPI_INTERPRETER
        int acpi_disabled = 0;
@@ -117,8 +117,6 @@
 struct ist_info ist_info;
 struct e820map e820;
 
-unsigned char aux_device_present;
-
 extern void early_cpu_init(void);
 extern void dmi_scan_machine(void);
 extern void generic_apic_probe(char *);
@@ -427,10 +425,10 @@
        struct e820entry *pbios; /* pointer to original bios entry */
        unsigned long long addr; /* address for this change point */
 };
-struct change_member change_point_list[2*E820MAX] __initdata;
-struct change_member *change_point[2*E820MAX] __initdata;
-struct e820entry *overlap_list[E820MAX] __initdata;
-struct e820entry new_bios[E820MAX] __initdata;
+static struct change_member change_point_list[2*E820MAX] __initdata;
+static struct change_member *change_point[2*E820MAX] __initdata;
+static struct e820entry *overlap_list[E820MAX] __initdata;
+static struct e820entry new_bios[E820MAX] __initdata;
 
 static int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
 {
@@ -951,8 +949,6 @@
        return max_low_pfn;
 }
 
-#ifndef CONFIG_DISCONTIGMEM
-
 /*
  * Free all available memory for boot time allocation.  Used
  * as a callback function by efi_memory_walk()
@@ -1026,15 +1022,15 @@
                reserve_bootmem(addr, PAGE_SIZE);       
 }
 
+#ifndef CONFIG_DISCONTIGMEM
+void __init setup_bootmem_allocator(void);
 static unsigned long __init setup_memory(void)
 {
-       unsigned long bootmap_size, start_pfn, max_low_pfn;
-
        /*
         * partially used pages are not usable - thus
         * we are rounding upwards:
         */
-       start_pfn = PFN_UP(init_pg_tables_end);
+       min_low_pfn = PFN_UP(init_pg_tables_end);
 
        find_max_pfn();
 
@@ -1050,10 +1046,43 @@
 #endif
        printk(KERN_NOTICE "%ldMB LOWMEM available.\n",
                        pages_to_mb(max_low_pfn));
+
+       setup_bootmem_allocator();
+
+       return max_low_pfn;
+}
+
+void __init zone_sizes_init(void)
+{
+       unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
+       unsigned int max_dma, low;
+
+       max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
+       low = max_low_pfn;
+
+       if (low < max_dma)
+               zones_size[ZONE_DMA] = low;
+       else {
+               zones_size[ZONE_DMA] = max_dma;
+               zones_size[ZONE_NORMAL] = low - max_dma;
+#ifdef CONFIG_HIGHMEM
+               zones_size[ZONE_HIGHMEM] = highend_pfn - low;
+#endif
+       }
+       free_area_init(zones_size);
+}
+#else
+extern unsigned long setup_memory(void);
+extern void zone_sizes_init(void);
+#endif /* !CONFIG_DISCONTIGMEM */
+
+void __init setup_bootmem_allocator(void)
+{
+       unsigned long bootmap_size;
        /*
         * Initialize the boot-time allocator (with low memory only):
         */
-       bootmap_size = init_bootmem(start_pfn, max_low_pfn);
+       bootmap_size = init_bootmem(min_low_pfn, max_low_pfn);
 
        register_bootmem_low_pages(max_low_pfn);
 
@@ -1063,7 +1092,7 @@
         * the (very unlikely) case of us accidentally initializing the
         * bootmem allocator with an invalid RAM area.
         */
-       reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(start_pfn) +
+       reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(min_low_pfn) +
                         bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY));
 
        /*
@@ -1120,11 +1149,25 @@
                }
        }
 #endif
-       return max_low_pfn;
 }
-#else
-extern unsigned long setup_memory(void);
-#endif /* !CONFIG_DISCONTIGMEM */
+
+/*
+ * The node 0 pgdat is initialized before all of these because
+ * it's needed for bootmem.  node>0 pgdats have their virtual
+ * space allocated before the pagetables are in place to access
+ * them, so they can't be cleared then.
+ *
+ * This should all compile down to nothing when NUMA is off.
+ */
+void __init remapped_pgdat_init(void)
+{
+       int nid;
+
+       for_each_online_node(nid) {
+               if (nid != 0)
+                       memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
+       }
+}
 
 /*
  * Request address space for all standard RAM and ROM resources
@@ -1384,7 +1427,6 @@
                machine_submodel_id = SYS_DESC_TABLE.table[1];
                BIOS_revision = SYS_DESC_TABLE.table[2];
        }
-       aux_device_present = AUX_DEVICE_INFO;
        bootloader_type = LOADER_TYPE;
 
 #ifdef CONFIG_BLK_DEV_RAM
@@ -1432,6 +1474,8 @@
        smp_alloc_memory(); /* AP processor realmode stacks in low memory*/
 #endif
        paging_init();
+       remapped_pgdat_init();
+       zone_sizes_init();
 
        /*
         * NOTE: at this point the bootmem allocator is fully available.
diff -urN linux/arch/i386/kernel/signal.c linux/arch/i386/kernel/signal.c
--- linux/arch/i386/kernel/signal.c     2005/02/07 02:54:31     1.59
+++ linux/arch/i386/kernel/signal.c     2005/03/18 17:36:48     1.60
@@ -93,7 +93,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
@@ -105,7 +105,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
@@ -187,7 +187,7 @@
                struct _fpstate __user * buf;
                err |= __get_user(buf, &sc->fpstate);
                if (buf) {
-                       if (verify_area(VERIFY_READ, buf, sizeof(*buf)))
+                       if (!access_ok(VERIFY_READ, buf, sizeof(*buf)))
                                goto badframe;
                        err |= restore_i387(buf);
                } else {
@@ -213,7 +213,7 @@
        sigset_t set;
        int eax;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__get_user(set.sig[0], &frame->sc.oldmask)
            || (_NSIG_WORDS > 1
@@ -243,7 +243,7 @@
        sigset_t set;
        int eax;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
@@ -557,6 +557,16 @@
                }
        }
 
+       /*
+        * If TF is set due to a debugger (PT_DTRACE), clear the TF flag so
+        * that register information in the sigcontext is correct.
+        */
+       if (unlikely(regs->eflags & TF_MASK)
+           && likely(current->ptrace & PT_DTRACE)) {
+               current->ptrace &= ~PT_DTRACE;
+               regs->eflags &= ~TF_MASK;
+       }
+
        /* Set up the stack frame */
        if (ka->sa.sa_flags & SA_SIGINFO)
                setup_rt_frame(sig, ka, info, oldset, regs);
diff -urN linux/arch/i386/kernel/smpboot.c linux/arch/i386/kernel/smpboot.c
--- linux/arch/i386/kernel/smpboot.c    2005/02/07 02:54:31     1.66
+++ linux/arch/i386/kernel/smpboot.c    2005/03/18 17:36:48     1.67
@@ -77,9 +77,6 @@
                        { [0 ... NR_CPUS-1] = 0xff };
 EXPORT_SYMBOL(x86_cpu_to_apicid);
 
-/* Set when the idlers are all forked */
-int smp_threads_ready;
-
 /*
  * Trampoline 80x86 program as an array.
  */
@@ -89,6 +86,8 @@
 static unsigned char *trampoline_base;
 static int trampoline_exec;
 
+static void map_cpu_to_logical_apicid(void);
+
 /*
  * Currently trivial. Write the real->protected mode
  * bootstrap into the page concerned. The caller
@@ -319,7 +318,7 @@
 
 static atomic_t init_deasserted;
 
-void __init smp_callin(void)
+static void __init smp_callin(void)
 {
        int cpuid, phys_id;
        unsigned long timeout;
@@ -408,7 +407,7 @@
                synchronize_tsc_ap();
 }
 
-int cpucount;
+static int cpucount;
 
 /*
  * Activate a secondary processor.
@@ -506,7 +505,7 @@
 
 u8 cpu_2_logical_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
 
-void map_cpu_to_logical_apicid(void)
+static void map_cpu_to_logical_apicid(void)
 {
        int cpu = smp_processor_id();
        int apicid = logical_smp_processor_id();
@@ -515,7 +514,7 @@
        map_cpu_to_node(cpu, apicid_to_node(apicid));
 }
 
-void unmap_cpu_to_logical_apicid(int cpu)
+static void unmap_cpu_to_logical_apicid(int cpu)
 {
        cpu_2_logical_apicid[cpu] = BAD_APICID;
        unmap_cpu_to_node(cpu);
@@ -847,9 +846,6 @@
        return boot_error;
 }
 
-cycles_t cacheflush_time;
-unsigned long cache_decay_ticks;
-
 static void smp_tune_scheduling (void)
 {
        unsigned long cachesize;       /* kB   */
@@ -870,7 +866,6 @@
                 * this basically disables processor-affinity
                 * scheduling on SMP without a TSC.
                 */
-               cacheflush_time = 0;
                return;
        } else {
                cachesize = boot_cpu_data.x86_cache_size;
@@ -878,17 +873,7 @@
                        cachesize = 16; /* Pentiums, 2x8kB cache */
                        bandwidth = 100;
                }
-
-               cacheflush_time = (cpu_khz>>10) * (cachesize<<10) / bandwidth;
        }
-
-       cache_decay_ticks = (long)cacheflush_time/cpu_khz + 1;
-
-       printk("per-CPU timeslice cutoff: %ld.%02ld usecs.\n",
-               (long)cacheflush_time/(cpu_khz/1000),
-               ((long)cacheflush_time*100/(cpu_khz/1000)) % 100);
-       printk("task migration cache decay timeout: %ld msecs.\n",
-               cache_decay_ticks);
 }
 
 /*
diff -urN linux/arch/i386/kernel/srat.c linux/arch/i386/kernel/srat.c
--- linux/arch/i386/kernel/srat.c       2005/01/13 14:05:24     1.7
+++ linux/arch/i386/kernel/srat.c       2005/03/18 17:36:48     1.8
@@ -30,6 +30,7 @@
 #include <linux/acpi.h>
 #include <linux/nodemask.h>
 #include <asm/srat.h>
+#include <asm/topology.h>
 
 /*
  * proximity macros and definitions
@@ -58,8 +59,6 @@
 static int zholes_size_init;
 static unsigned long zholes_size[MAX_NUMNODES * MAX_NR_ZONES];
 
-extern unsigned long node_start_pfn[], node_end_pfn[];
-
 extern void * boot_ioremap(unsigned long, unsigned long);
 
 /* Identify CPU proximity domains */
@@ -182,6 +181,38 @@
        }
 }
 
+/*
+ * The SRAT table always lists ascending addresses, so can always
+ * assume that the first "start" address that you see is the real
+ * start of the node, and that the current "end" address is after
+ * the previous one.
+ */
+static __init void node_read_chunk(int nid, struct node_memory_chunk_s 
*memory_chunk)
+{
+       /*
+        * Only add present memory as told by the e820.
+        * There is no guarantee from the SRAT that the memory it
+        * enumerates is present at boot time because it represents
+        * *possible* memory hotplug areas the same as normal RAM.
+        */
+       if (memory_chunk->start_pfn >= max_pfn) {
+               printk (KERN_INFO "Ignoring SRAT pfns: 0x%08lx -> %08lx\n",
+                       memory_chunk->start_pfn, memory_chunk->end_pfn);
+               return;
+       }
+       if (memory_chunk->nid != nid)
+               return;
+
+       if (!node_has_online_mem(nid))
+               node_start_pfn[nid] = memory_chunk->start_pfn;
+
+       if (node_start_pfn[nid] > memory_chunk->start_pfn)
+               node_start_pfn[nid] = memory_chunk->start_pfn;
+
+       if (node_end_pfn[nid] < memory_chunk->end_pfn)
+               node_end_pfn[nid] = memory_chunk->end_pfn;
+}
+
 /* Parse the ACPI Static Resource Affinity Table */
 static int __init acpi20_parse_srat(struct acpi_table_srat *sratp)
 {
@@ -262,29 +293,18 @@
        printk("Number of memory chunks in system = %d\n", num_memory_chunks);
 
        for (j = 0; j < num_memory_chunks; j++){
+               struct node_memory_chunk_s * chunk = &node_memory_chunk[j];
                printk("chunk %d nid %d start_pfn %08lx end_pfn %08lx\n",
-                      j, node_memory_chunk[j].nid,
-                      node_memory_chunk[j].start_pfn,
-                      node_memory_chunk[j].end_pfn);
+                      j, chunk->nid, chunk->start_pfn, chunk->end_pfn);
+               node_read_chunk(chunk->nid, chunk);
        }
  
-       /*calculate node_start_pfn/node_end_pfn arrays*/
        for_each_online_node(nid) {
-               int been_here_before = 0;
+               unsigned long start = node_start_pfn[nid];
+               unsigned long end = node_end_pfn[nid];
 
-               for (j = 0; j < num_memory_chunks; j++){
-                       if (node_memory_chunk[j].nid == nid) {
-                               if (been_here_before == 0) {
-                                       node_start_pfn[nid] = 
node_memory_chunk[j].start_pfn;
-                                       node_end_pfn[nid] = 
node_memory_chunk[j].end_pfn;
-                                       been_here_before = 1;
-                               } else { /* We've found another chunk of memory 
for the node */
-                                       if (node_start_pfn[nid] < 
node_memory_chunk[j].start_pfn) {
-                                               node_end_pfn[nid] = 
node_memory_chunk[j].end_pfn;
-                                       }
-                               }
-                       }
-               }
+               memory_present(nid, start, end);
+               node_remap_size[nid] = node_memmap_size_bytes(nid, start, end);
        }
        return 1;
 out_fail:
diff -urN linux/arch/i386/kernel/time.c linux/arch/i386/kernel/time.c
--- linux/arch/i386/kernel/time.c       2005/01/25 04:27:55     1.59
+++ linux/arch/i386/kernel/time.c       2005/03/18 17:36:48     1.60
@@ -89,6 +89,35 @@
 struct timer_opts *cur_timer = &timer_none;
 
 /*
+ * This is a special lock that is owned by the CPU and holds the index
+ * register we are working with.  It is required for NMI access to the
+ * CMOS/RTC registers.  See include/asm-i386/mc146818rtc.h for details.
+ */
+volatile unsigned long cmos_lock = 0;
+EXPORT_SYMBOL(cmos_lock);
+
+/* Routines for accessing the CMOS RAM/RTC. */
+unsigned char rtc_cmos_read(unsigned char addr)
+{
+       unsigned char val;
+       lock_cmos_prefix(addr);
+       outb_p(addr, RTC_PORT(0));
+       val = inb_p(RTC_PORT(1));
+       lock_cmos_suffix(addr);
+       return val;
+}
+EXPORT_SYMBOL(rtc_cmos_read);
+
+void rtc_cmos_write(unsigned char val, unsigned char addr)
+{
+       lock_cmos_prefix(addr);
+       outb_p(addr, RTC_PORT(0));
+       outb_p(val, RTC_PORT(1));
+       lock_cmos_suffix(addr);
+}
+EXPORT_SYMBOL(rtc_cmos_write);
+
+/*
  * This version of gettimeofday has microsecond resolution
  * and better than microsecond precision on fast x86 machines with TSC.
  */
@@ -250,16 +279,12 @@
                        >= USEC_AFTER - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000)
                        <= USEC_BEFORE + ((unsigned) TICK_SIZE) / 2) {
-               /* horrible...FIXME */
+               last_rtc_update = xtime.tv_sec;
                if (efi_enabled) {
-                       if (efi_set_rtc_mmss(xtime.tv_sec) == 0)
-                               last_rtc_update = xtime.tv_sec;
-                       else
-                               last_rtc_update = xtime.tv_sec - 600;
-               } else if (set_rtc_mmss(xtime.tv_sec) == 0)
-                       last_rtc_update = xtime.tv_sec;
-               else
-                       last_rtc_update = xtime.tv_sec - 600; /* do it again in 
60 s */
+                   if (efi_set_rtc_mmss(xtime.tv_sec))
+                       last_rtc_update -= 600;
+               } else if (set_rtc_mmss(xtime.tv_sec))
+                       last_rtc_update -= 600;
        }
 
        if (MCA_bus) {
@@ -378,7 +403,7 @@
 #ifdef CONFIG_HPET_TIMER
 extern void (*late_time_init)(void);
 /* Duplicate of time_init() below, with hpet_enable part added */
-void __init hpet_time_init(void)
+static void __init hpet_time_init(void)
 {
        xtime.tv_sec = get_cmos_time();
        xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
diff -urN linux/arch/i386/kernel/time_hpet.c linux/arch/i386/kernel/time_hpet.c
--- linux/arch/i386/kernel/time_hpet.c  2005/02/13 20:16:15     1.8
+++ linux/arch/i386/kernel/time_hpet.c  2005/03/18 17:36:48     1.9
@@ -23,9 +23,9 @@
 #include <asm/hpet.h>
 #include <linux/hpet.h>
 
-unsigned long hpet_period;     /* fsecs / HPET clock */
-unsigned long hpet_tick;       /* hpet clks count per tick */
-unsigned long hpet_address;    /* hpet memory map physical address */
+static unsigned long hpet_period;      /* fsecs / HPET clock */
+unsigned long hpet_tick;               /* hpet clks count per tick */
+unsigned long hpet_address;            /* hpet memory map physical address */
 
 static int use_hpet;           /* can be used for runtime check of hpet */
 static int boot_hpet_disable;  /* boottime override for HPET timer */
@@ -38,7 +38,7 @@
        return readl(hpet_virt_address + a);
 }
 
-void hpet_writel(unsigned long d, unsigned long a)
+static void hpet_writel(unsigned long d, unsigned long a)
 {
        writel(d, hpet_virt_address + a);
 }
@@ -49,7 +49,7 @@
  * comparator value and continue. Next tick can be caught by checking
  * for a change in the comparator value. Used in apic.c.
  */
-void __init wait_hpet_tick(void)
+static void __init wait_hpet_tick(void)
 {
        unsigned int start_cmp_val, end_cmp_val;
 
@@ -81,9 +81,10 @@
        cfg |= HPET_TN_ENABLE | HPET_TN_PERIODIC |
               HPET_TN_SETVAL | HPET_TN_32BIT;
        hpet_writel(cfg, HPET_T0_CFG);
+
        /*
-        * Some systems seems to need two writes to HPET_T0_CMP,
-        * to get interrupts working
+        * The first write after writing TN_SETVAL to the config register sets
+        * the counter value, the second write sets the threshold.
         */
        hpet_writel(tick, HPET_T0_CMP);
        hpet_writel(tick, HPET_T0_CMP);
@@ -121,11 +122,16 @@
        id = hpet_readl(HPET_ID);
 
        /*
-        * We are checking for value '1' or more in number field.
-        * So, we are OK with HPET_EMULATE_RTC part too, where we need
-        * to have atleast 2 timers.
+        * We are checking for value '1' or more in number field if
+        * CONFIG_HPET_EMULATE_RTC is set because we will need an
+        * additional timer for RTC emulation.
+        * However, we can do with one timer otherwise using the
+        * the single HPET timer for system time.
         */
-       if (!(id & HPET_ID_NUMBER) ||
+       if (
+#ifdef CONFIG_HPET_EMULATE_RTC
+               !(id & HPET_ID_NUMBER) ||
+#endif
            !(id & HPET_ID_LEGSUP))
                return -1;
 
diff -urN linux/arch/i386/kernel/traps.c linux/arch/i386/kernel/traps.c
--- linux/arch/i386/kernel/traps.c      2005/02/07 02:54:31     1.100
+++ linux/arch/i386/kernel/traps.c      2005/03/18 17:36:48     1.101
@@ -345,8 +345,7 @@
 
        if (panic_on_oops) {
                printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
-               set_current_state(TASK_UNINTERRUPTIBLE);
-               schedule_timeout(5 * HZ);
+               ssleep(5);
                panic("Fatal exception");
        }
        do_exit(SIGSEGV);
@@ -707,8 +706,6 @@
        /*
         * Single-stepping through TF: make sure we ignore any events in
         * kernel space (but re-enable TF when returning to user mode).
-        * And if the event was due to a debugger (PT_DTRACE), clear the
-        * TF flag so that register information is correct.
         */
        if (condition & DR_STEP) {
                /*
@@ -718,11 +715,6 @@
                 */
                if ((regs->xcs & 3) == 0)
                        goto clear_TF_reenable;
-
-               if (likely(tsk->ptrace & PT_DTRACE)) {
-                       tsk->ptrace &= ~PT_DTRACE;
-                       regs->eflags &= ~TF_MASK;
-               }
        }
 
        /* Ok, finally something we can handle */
@@ -814,7 +806,7 @@
        math_error((void __user *)regs->eip);
 }
 
-void simd_math_error(void __user *eip)
+static void simd_math_error(void __user *eip)
 {
        struct task_struct * task;
        siginfo_t info;
diff -urN linux/arch/i386/kernel/vm86.c linux/arch/i386/kernel/vm86.c
--- linux/arch/i386/kernel/vm86.c       2005/01/25 04:27:55     1.47
+++ linux/arch/i386/kernel/vm86.c       2005/03/18 17:36:48     1.48
@@ -145,29 +145,14 @@
        preempt_disable();
        spin_lock(&tsk->mm->page_table_lock);
        pgd = pgd_offset(tsk->mm, 0xA0000);
-       if (pgd_none(*pgd))
+       if (pgd_none_or_clear_bad(pgd))
                goto out;
-       if (pgd_bad(*pgd)) {
-               pgd_ERROR(*pgd);
-               pgd_clear(pgd);
-               goto out;
-       }
        pud = pud_offset(pgd, 0xA0000);
-       if (pud_none(*pud))
-               goto out;
-       if (pud_bad(*pud)) {
-               pud_ERROR(*pud);
-               pud_clear(pud);
+       if (pud_none_or_clear_bad(pud))
                goto out;
-       }
        pmd = pmd_offset(pud, 0xA0000);
-       if (pmd_none(*pmd))
-               goto out;
-       if (pmd_bad(*pmd)) {
-               pmd_ERROR(*pmd);
-               pmd_clear(pmd);
+       if (pmd_none_or_clear_bad(pmd))
                goto out;
-       }
        pte = mapped = pte_offset_map(pmd, 0xA0000);
        for (i = 0; i < 32; i++) {
                if (pte_present(*pte))
diff -urN linux/arch/i386/kernel/acpi/sleep.c 
linux/arch/i386/kernel/acpi/sleep.c
--- linux/arch/i386/kernel/acpi/sleep.c 2004/10/25 20:44:13     1.6
+++ linux/arch/i386/kernel/acpi/sleep.c 2005/03/18 17:36:49     1.7
@@ -46,15 +46,6 @@
        return 0;
 }
 
-/**
- * acpi_save_state_disk - save kernel state to disk
- *
- */
-int acpi_save_state_disk (void)
-{
-       return 1;
-}
-
 /*
  * acpi_restore_state - undo effects of acpi_save_state_mem
  */
diff -urN linux/arch/i386/kernel/cpu/common.c 
linux/arch/i386/kernel/cpu/common.c
--- linux/arch/i386/kernel/cpu/common.c 2005/02/07 02:54:31     1.28
+++ linux/arch/i386/kernel/cpu/common.c 2005/03/18 17:36:49     1.29
@@ -199,7 +199,7 @@
 
 
 /* Probe for the CPUID instruction */
-int __init have_cpuid_p(void)
+static int __init have_cpuid_p(void)
 {
        return flag_is_changeable_p(X86_EFLAGS_ID);
 }
@@ -207,7 +207,7 @@
 /* Do minimum CPU detection early.
    Fields really needed: vendor, cpuid_level, family, model, mask, cache 
alignment.
    The others are not touched to avoid unwanted side effects. */
-void __init early_cpu_detect(void)
+static void __init early_cpu_detect(void)
 {
        struct cpuinfo_x86 *c = &boot_cpu_data;
 
@@ -426,16 +426,6 @@
        mcheck_init(c);
 #endif
 }
-/*
- *     Perform early boot up checks for a valid TSC. See 
arch/i386/kernel/time.c
- */
- 
-void __init dodgy_tsc(void)
-{
-       if (( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) ||
-           ( boot_cpu_data.x86_vendor == X86_VENDOR_NSC   ))
-               cpu_devs[X86_VENDOR_CYRIX]->c_init(&boot_cpu_data);
-}
 
 #ifdef CONFIG_X86_HT
 void __init detect_ht(struct cpuinfo_x86 *c)
@@ -523,7 +513,6 @@
 extern int rise_init_cpu(void);
 extern int nexgen_init_cpu(void);
 extern int umc_init_cpu(void);
-void early_cpu_detect(void);
 
 void __init early_cpu_init(void)
 {
diff -urN linux/arch/i386/kernel/cpu/cpu.h linux/arch/i386/kernel/cpu/cpu.h
--- linux/arch/i386/kernel/cpu/cpu.h    2004/06/06 02:12:35     1.2
+++ linux/arch/i386/kernel/cpu/cpu.h    2005/03/18 17:36:49     1.3
@@ -25,7 +25,6 @@
 extern void display_cacheinfo(struct cpuinfo_x86 *c);
 
 extern void generic_identify(struct cpuinfo_x86 * c);
-extern int have_cpuid_p(void);
 
 extern void early_intel_workaround(struct cpuinfo_x86 *c);
 
diff -urN linux/arch/i386/kernel/cpu/cyrix.c linux/arch/i386/kernel/cpu/cyrix.c
--- linux/arch/i386/kernel/cpu/cyrix.c  2004/10/25 20:44:13     1.11
+++ linux/arch/i386/kernel/cpu/cyrix.c  2005/03/18 17:36:49     1.12
@@ -12,7 +12,7 @@
 /*
  * Read NSC/Cyrix DEVID registers (DIR) to get more detailed info. about the 
CPU
  */
-void __init do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
+static void __init do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
 {
        unsigned char ccr2, ccr3;
        unsigned long flags;
diff -urN linux/arch/i386/kernel/cpu/cpufreq/Kconfig 
linux/arch/i386/kernel/cpu/cpufreq/Kconfig
--- linux/arch/i386/kernel/cpu/cpufreq/Kconfig  2005/01/25 04:27:55     1.13
+++ linux/arch/i386/kernel/cpu/cpufreq/Kconfig  2005/03/18 17:36:49     1.14
@@ -6,22 +6,14 @@
 
 source "drivers/cpufreq/Kconfig"
 
-config CPU_FREQ_TABLE
-       tristate "CPU frequency table helpers"
-       depends on CPU_FREQ
-       default y
-       help
-         Many CPUFreq drivers use these helpers, so only say N here if
-        the CPUFreq driver of your choice doesn't need these helpers.
-
-        If in doubt, say Y.
+if CPU_FREQ
 
 comment "CPUFreq processor drivers"
-       depends on CPU_FREQ
 
 config X86_ACPI_CPUFREQ
        tristate "ACPI Processor P-States driver"
-       depends on CPU_FREQ_TABLE && ACPI_PROCESSOR
+       select CPU_FREQ_TABLE
+       depends on ACPI_PROCESSOR
        help
          This driver adds a CPUFreq driver which utilizes the ACPI
          Processor Performance States.
@@ -32,7 +24,8 @@
 
 config ELAN_CPUFREQ
        tristate "AMD Elan"
-       depends on CPU_FREQ_TABLE && X86_ELAN
+       select CPU_FREQ_TABLE
+       depends on X86_ELAN
        ---help---
          This adds the CPUFreq driver for AMD Elan SC400 and SC410
          processors.
@@ -47,7 +40,7 @@
 
 config X86_POWERNOW_K6
        tristate "AMD Mobile K6-2/K6-3 PowerNow!"
-       depends on CPU_FREQ_TABLE
+       select CPU_FREQ_TABLE
        help
          This adds the CPUFreq driver for mobile AMD K6-2+ and mobile
          AMD K6-3+ processors.
@@ -58,7 +51,7 @@
 
 config X86_POWERNOW_K7
        tristate "AMD Mobile Athlon/Duron PowerNow!"
-       depends on CPU_FREQ_TABLE
+       select CPU_FREQ_TABLE
        help
          This adds the CPUFreq driver for mobile AMD K7 mobile processors.
 
@@ -68,12 +61,14 @@
 
 config X86_POWERNOW_K7_ACPI
        bool
-       depends on ((X86_POWERNOW_K7 = "m" && ACPI_PROCESSOR) || 
(X86_POWERNOW_K7 = "y" && ACPI_PROCESSOR = "y"))
+       depends on X86_POWERNOW_K7 && ACPI_PROCESSOR
+       depends on !(X86_POWERNOW_K7 = y && ACPI_PROCESSOR = m)
        default y
 
 config X86_POWERNOW_K8
        tristate "AMD Opteron/Athlon64 PowerNow!"
-       depends on CPU_FREQ_TABLE && EXPERIMENTAL
+       select CPU_FREQ_TABLE
+       depends on EXPERIMENTAL
        help
          This adds the CPUFreq driver for mobile AMD Opteron/Athlon64 
processors.
 
@@ -83,12 +78,12 @@
 
 config X86_POWERNOW_K8_ACPI
        bool
-       depends on ((X86_POWERNOW_K8 = "m" && ACPI_PROCESSOR) || 
(X86_POWERNOW_K8 = "y" && ACPI_PROCESSOR = "y"))
+       depends on X86_POWERNOW_K8 && ACPI_PROCESSOR
+       depends on !(X86_POWERNOW_K8 = y && ACPI_PROCESSOR = m)
        default y
 
 config X86_GX_SUSPMOD
        tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation"
-       depends on CPU_FREQ
        help
         This add the CPUFreq driver for NatSemi Geode processors which
         support suspend modulation.
@@ -99,7 +94,7 @@
 
 config X86_SPEEDSTEP_CENTRINO
        tristate "Intel Enhanced SpeedStep"
-       depends on CPU_FREQ_TABLE
+       select CPU_FREQ_TABLE
        select X86_SPEEDSTEP_CENTRINO_TABLE if (!X86_SPEEDSTEP_CENTRINO_ACPI)
        help
          This adds the CPUFreq driver for Enhanced SpeedStep enabled
@@ -114,8 +109,8 @@
 
 config X86_SPEEDSTEP_CENTRINO_ACPI
        bool "Use ACPI tables to decode valid frequency/voltage pairs"
-       depends on X86_SPEEDSTEP_CENTRINO
-       depends on ((X86_SPEEDSTEP_CENTRINO = "m" && ACPI_PROCESSOR) || 
(X86_SPEEDSTEP_CENTRINO = "y" && ACPI_PROCESSOR = "y"))
+       depends on X86_SPEEDSTEP_CENTRINO && ACPI_PROCESSOR
+       depends on !(X86_SPEEDSTEP_CENTRINO = y && ACPI_PROCESSOR = m)
        default y
        help
          Use primarily the information provided in the BIOS ACPI tables
@@ -136,7 +131,7 @@
 
 config X86_SPEEDSTEP_ICH
        tristate "Intel Speedstep on ICH-M chipsets (ioport interface)"
-       depends on CPU_FREQ_TABLE
+       select CPU_FREQ_TABLE
        help
          This adds the CPUFreq driver for certain mobile Intel Pentium III
          (Coppermine), all mobile Intel Pentium III-M (Tualatin) and all
@@ -149,7 +144,8 @@
 
 config X86_SPEEDSTEP_SMI
        tristate "Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)"
-       depends on CPU_FREQ_TABLE && EXPERIMENTAL
+       select CPU_FREQ_TABLE
+       depends on EXPERIMENTAL
        help
          This adds the CPUFreq driver for certain mobile Intel Pentium III
          (Coppermine), all mobile Intel Pentium III-M (Tualatin)  
@@ -161,7 +157,7 @@
 
 config X86_P4_CLOCKMOD
        tristate "Intel Pentium 4 clock modulation"
-       depends on CPU_FREQ_TABLE
+       select CPU_FREQ_TABLE
        help
          This adds the CPUFreq driver for Intel Pentium 4 / XEON
          processors.
@@ -172,7 +168,7 @@
 
 config X86_CPUFREQ_NFORCE2
        tristate "nVidia nForce2 FSB changing"
-       depends on CPU_FREQ && EXPERIMENTAL
+       depends on EXPERIMENTAL
        help
          This adds the CPUFreq driver for FSB changing on nVidia nForce2
          platforms.
@@ -183,7 +179,6 @@
 
 config X86_LONGRUN
        tristate "Transmeta LongRun"
-       depends on CPU_FREQ
        help
          This adds the CPUFreq driver for Transmeta Crusoe and Efficeon 
processors
          which support LongRun.
@@ -194,7 +189,7 @@
 
 config X86_LONGHAUL
        tristate "VIA Cyrix III Longhaul"
-       depends on CPU_FREQ_TABLE
+       select CPU_FREQ_TABLE
        help
          This adds the CPUFreq driver for VIA Samuel/CyrixIII, 
          VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T 
@@ -205,7 +200,6 @@
          If in doubt, say N.
 
 comment "shared options"
-       depends on CPU_FREQ
 
 config X86_ACPI_CPUFREQ_PROC_INTF
         bool "/proc/acpi/processor/../performance interface (deprecated)"
@@ -220,8 +214,7 @@
 
 config X86_SPEEDSTEP_LIB
        tristate
-       depends on (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI || X86_P4_CLOCKMOD)
-       default (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI || X86_P4_CLOCKMOD)
+       default X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI || X86_P4_CLOCKMOD
 
 config X86_SPEEDSTEP_RELAXED_CAP_CHECK
        bool "Relaxed speedstep capability checks"
@@ -233,5 +226,6 @@
          option lets the probing code bypass some of those checks if the
          parameter "relaxed_check=1" is passed to the module.
 
+endif  # CPU_FREQ
 
 endmenu
diff -urN linux/arch/i386/kernel/cpu/mtrr/centaur.c 
linux/arch/i386/kernel/cpu/mtrr/centaur.c
--- linux/arch/i386/kernel/cpu/mtrr/centaur.c   2003/06/02 12:08:51     1.2
+++ linux/arch/i386/kernel/cpu/mtrr/centaur.c   2005/03/18 17:36:49     1.3
@@ -86,6 +86,8 @@
        centaur_mcr[reg].low = low;
        wrmsr(MSR_IDT_MCR0 + reg, low, high);
 }
+
+#if 0
 /*
  *     Initialise the later (saner) Winchip MCR variant. In this version
  *     the BIOS can pass us the registers it has used (but not their values)
@@ -183,6 +185,7 @@
 
        set_mtrr_done(&ctxt);
 }
+#endif
 
 static int centaur_validate_add_page(unsigned long base, 
                                     unsigned long size, unsigned int type)
@@ -203,7 +206,7 @@
 
 static struct mtrr_ops centaur_mtrr_ops = {
        .vendor            = X86_VENDOR_CENTAUR,
-       .init              = centaur_mcr_init,
+//     .init              = centaur_mcr_init,
        .set               = centaur_set_mcr,
        .get               = centaur_get_mcr,
        .get_free_region   = centaur_get_free_region,
diff -urN linux/arch/i386/kernel/cpu/mtrr/cyrix.c 
linux/arch/i386/kernel/cpu/mtrr/cyrix.c
--- linux/arch/i386/kernel/cpu/mtrr/cyrix.c     2003/07/29 14:26:22     1.4
+++ linux/arch/i386/kernel/cpu/mtrr/cyrix.c     2005/03/18 17:36:49     1.5
@@ -218,12 +218,12 @@
        mtrr_type type;
 } arr_state_t;
 
-arr_state_t arr_state[8] __initdata = {
+static arr_state_t arr_state[8] __initdata = {
        {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL},
        {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}, {0UL, 0UL, 0UL}
 };
 
-unsigned char ccr_state[7] __initdata = { 0, 0, 0, 0, 0, 0, 0 };
+static unsigned char ccr_state[7] __initdata = { 0, 0, 0, 0, 0, 0, 0 };
 
 static void cyrix_set_all(void)
 {
@@ -243,6 +243,7 @@
        post_set();
 }
 
+#if 0
 /*
  * On Cyrix 6x86(MX) and M II the ARR3 is special: it has connection
  * with the SMM (System Management Mode) mode. So we need the following:
@@ -341,10 +342,11 @@
        if (ccrc[6])
                printk(KERN_INFO "mtrr: ARR3 was write protected, 
unprotected\n");
 }
+#endif
 
 static struct mtrr_ops cyrix_mtrr_ops = {
        .vendor            = X86_VENDOR_CYRIX,
-       .init              = cyrix_arr_init,
+//     .init              = cyrix_arr_init,
        .set_all           = cyrix_set_all,
        .set               = cyrix_set_arr,
        .get               = cyrix_get_arr,
diff -urN linux/arch/i386/kernel/cpu/mtrr/generic.c 
linux/arch/i386/kernel/cpu/mtrr/generic.c
--- linux/arch/i386/kernel/cpu/mtrr/generic.c   2005/01/25 04:27:56     1.10
+++ linux/arch/i386/kernel/cpu/mtrr/generic.c   2005/03/18 17:36:49     1.11
@@ -19,8 +19,7 @@
 };
 
 static unsigned long smp_changes_mask;
-struct mtrr_state mtrr_state = {};
-
+static struct mtrr_state mtrr_state = {};
 
 /*  Get the MSR pair relating to a var range  */
 static void __init
@@ -383,7 +382,7 @@
 }
 
 
-int generic_have_wrcomb(void)
+static int generic_have_wrcomb(void)
 {
        unsigned long config, dummy;
        rdmsr(MTRRcap_MSR, config, dummy);
diff -urN linux/arch/i386/kernel/cpu/mtrr/main.c 
linux/arch/i386/kernel/cpu/mtrr/main.c
--- linux/arch/i386/kernel/cpu/mtrr/main.c      2004/12/04 18:15:58     1.12
+++ linux/arch/i386/kernel/cpu/mtrr/main.c      2005/03/18 17:36:49     1.13
@@ -57,10 +57,6 @@
 
 struct mtrr_ops * mtrr_if = NULL;
 
-__initdata char *mtrr_if_name[] = {
-    "none", "Intel", "AMD K6", "Cyrix ARR", "Centaur MCR"
-};
-
 static void set_mtrr(unsigned int reg, unsigned long base,
                     unsigned long size, mtrr_type type);
 
@@ -100,7 +96,7 @@
 }
 
 /*  This function returns the number of variable MTRRs  */
-void __init set_num_var_ranges(void)
+static void __init set_num_var_ranges(void)
 {
        unsigned long config = 0, dummy;
 
diff -urN linux/arch/i386/kernel/cpu/mtrr/mtrr.h 
linux/arch/i386/kernel/cpu/mtrr/mtrr.h
--- linux/arch/i386/kernel/cpu/mtrr/mtrr.h      2004/08/24 15:10:04     1.6
+++ linux/arch/i386/kernel/cpu/mtrr/mtrr.h      2005/03/18 17:36:49     1.7
@@ -37,7 +37,7 @@
 struct mtrr_ops {
        u32     vendor;
        u32     use_intel_if;
-       void    (*init)(void);
+//     void    (*init)(void);
        void    (*set)(unsigned int reg, unsigned long base,
                       unsigned long size, mtrr_type type);
        void    (*set_all)(void);
@@ -57,7 +57,6 @@
 
 extern struct mtrr_ops generic_mtrr_ops;
 
-extern int generic_have_wrcomb(void);
 extern int positive_have_wrcomb(void);
 
 /* library functions for processor-specific routines */
@@ -96,4 +95,3 @@
 void mtrr_state_warn(void);
 char *mtrr_attrib_to_str(int x);
 
-extern char * mtrr_if_name[];
diff -urN linux/arch/i386/kernel/timers/timer_hpet.c 
linux/arch/i386/kernel/timers/timer_hpet.c
--- linux/arch/i386/kernel/timers/timer_hpet.c  2004/11/15 11:49:16     1.5
+++ linux/arch/i386/kernel/timers/timer_hpet.c  2005/03/18 17:36:49     1.6
@@ -118,7 +118,7 @@
        write_sequnlock(&monotonic_lock);
 }
 
-void delay_hpet(unsigned long loops)
+static void delay_hpet(unsigned long loops)
 {
        unsigned long hpet_start, hpet_end;
        unsigned long eax;
diff -urN linux/arch/i386/lib/putuser.S linux/arch/i386/lib/putuser.S
--- linux/arch/i386/lib/putuser.S       2001/08/23 22:35:52     1.3
+++ linux/arch/i386/lib/putuser.S       2005/03/18 17:36:50     1.4
@@ -0,0 +1,87 @@
+/*
+ * __put_user functions.
+ *
+ * (C) Copyright 2005 Linus Torvalds
+ *
+ * These functions have a non-standard call interface
+ * to make them more efficient, especially as they
+ * return an error value in addition to the "real"
+ * return value.
+ */
+#include <asm/thread_info.h>
+
+
+/*
+ * __put_user_X
+ *
+ * Inputs:     %eax[:%edx] contains the data
+ *             %ecx contains the address
+ *
+ * Outputs:    %eax is error code (0 or -EFAULT)
+ *
+ * These functions should not modify any other registers,
+ * as they get called from within inline assembly.
+ */
+
+#define ENTER  pushl %ebx ; GET_THREAD_INFO(%ebx)
+#define EXIT   popl %ebx ; ret
+
+.text
+.align 4
+.globl __put_user_1
+__put_user_1:
+       ENTER
+       cmpl TI_addr_limit(%ebx),%ecx
+       jae bad_put_user
+1:     movb %al,(%ecx)
+       xorl %eax,%eax
+       EXIT
+
+.align 4
+.globl __put_user_2
+__put_user_2:
+       ENTER
+       movl TI_addr_limit(%ebx),%ebx
+       subl $1,%ebx
+       cmpl %ebx,%ecx
+       jae bad_put_user
+2:     movw %ax,(%ecx)
+       xorl %eax,%eax
+       EXIT
+
+.align 4
+.globl __put_user_4
+__put_user_4:
+       ENTER
+       movl TI_addr_limit(%ebx),%ebx
+       subl $3,%ebx
+       cmpl %ebx,%ecx
+       jae bad_put_user
+3:     movl %eax,(%ecx)
+       xorl %eax,%eax
+       EXIT
+
+.align 4
+.globl __put_user_8
+__put_user_8:
+       ENTER
+       movl TI_addr_limit(%ebx),%ebx
+       subl $7,%ebx
+       cmpl %ebx,%ecx
+       jae bad_put_user
+4:     movl %eax,(%ecx)
+5:     movl %edx,4(%ecx)
+       xorl %eax,%eax
+       EXIT
+
+bad_put_user:
+       movl $-14,%eax
+       EXIT
+
+.section __ex_table,"a"
+       .long 1b,bad_put_user
+       .long 2b,bad_put_user
+       .long 3b,bad_put_user
+       .long 4b,bad_put_user
+       .long 5b,bad_put_user
+.previous
diff -urN linux/arch/i386/lib/Makefile linux/arch/i386/lib/Makefile
--- linux/arch/i386/lib/Makefile        2004/06/26 15:15:09     1.23
+++ linux/arch/i386/lib/Makefile        2005/03/18 17:36:50     1.24
@@ -3,7 +3,7 @@
 #
 
 
-lib-y = checksum.o delay.o usercopy.o getuser.o memcpy.o strstr.o \
+lib-y = checksum.o delay.o usercopy.o getuser.o putuser.o memcpy.o strstr.o \
        bitops.o
 
 lib-$(CONFIG_X86_USE_3DNOW) += mmx.o
diff -urN linux/arch/i386/mach-default/topology.c 
linux/arch/i386/mach-default/topology.c
--- linux/arch/i386/mach-default/topology.c     2005/01/13 14:05:25     1.5
+++ linux/arch/i386/mach-default/topology.c     2005/03/18 17:36:50     1.6
@@ -30,7 +30,7 @@
 #include <linux/nodemask.h>
 #include <asm/cpu.h>
 
-struct i386_cpu cpu_devices[NR_CPUS];
+static struct i386_cpu cpu_devices[NR_CPUS];
 
 int arch_register_cpu(int num){
        struct node *parent = NULL;
diff -urN linux/arch/i386/mach-visws/mpparse.c 
linux/arch/i386/mach-visws/mpparse.c
--- linux/arch/i386/mach-visws/mpparse.c        2004/06/26 15:15:09     1.7
+++ linux/arch/i386/mach-visws/mpparse.c        2005/03/18 17:36:50     1.8
@@ -36,7 +36,7 @@
  * No problem for Linux.
  */
 
-void __init MP_processor_info (struct mpc_config_processor *m)
+static void __init MP_processor_info (struct mpc_config_processor *m)
 {
        int ver, logical_apicid;
        physid_mask_t apic_cpus;
diff -urN linux/arch/i386/mach-voyager/voyager_smp.c 
linux/arch/i386/mach-voyager/voyager_smp.c
--- linux/arch/i386/mach-voyager/voyager_smp.c  2005/02/07 02:54:31     1.21
+++ linux/arch/i386/mach-voyager/voyager_smp.c  2005/03/18 17:36:50     1.22
@@ -37,10 +37,6 @@
 /* CPU IRQ affinity -- set to all ones initially */
 static unsigned long cpu_irq_affinity[NR_CPUS] __cacheline_aligned = { [0 ... 
NR_CPUS-1]  = ~0UL };
 
-/* Set when the idlers are all forked - Set in main.c but not actually
- * used by any other parts of the kernel */
-int smp_threads_ready = 0;
-
 /* per CPU data structure (for /proc/cpuinfo et al), visible externally
  * indexed physically */
 struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
@@ -81,14 +77,6 @@
  * by scheduler but indexed physically */
 cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
 
-/* estimate of time used to flush the SMP-local cache - used in
- * processor affinity calculations */
-cycles_t cacheflush_time = 0;
-
-/* cache decay ticks for scheduler---a fairly useless quantity for the
-   voyager system with its odd affinity and huge L3 cache */
-unsigned long cache_decay_ticks = 20;
-
 
 /* The internal functions */
 static void send_CPI(__u32 cpuset, __u8 cpi);
@@ -210,14 +198,14 @@
  * 8259 IRQs except that masks and things must be kept per processor
  */
 static struct hw_interrupt_type vic_irq_type = {
-       "VIC-level",
-       startup_vic_irq,        /* startup */
-       disable_vic_irq,        /* shutdown */
-       enable_vic_irq,         /* enable */
-       disable_vic_irq,        /* disable */
-       before_handle_vic_irq,  /* ack */
-       after_handle_vic_irq,   /* end */
-       set_vic_irq_affinity,   /* affinity */
+       .typename = "VIC-level",
+       .startup = startup_vic_irq,
+       .shutdown = disable_vic_irq,
+       .enable = enable_vic_irq,
+       .disable = disable_vic_irq,
+       .ack = before_handle_vic_irq,
+       .end = after_handle_vic_irq,
+       .set_affinity = set_vic_irq_affinity,
 };
 
 /* used to count up as CPUs are brought on line (starts at 0) */
diff -urN linux/arch/i386/math-emu/errors.c linux/arch/i386/math-emu/errors.c
--- linux/arch/i386/math-emu/errors.c   2004/06/26 15:15:09     1.6
+++ linux/arch/i386/math-emu/errors.c   2005/03/18 17:36:50     1.7
@@ -34,13 +34,14 @@
 /* */
 
 
+#if 0
 void Un_impl(void)
 {
   u_char byte1, FPU_modrm;
   unsigned long address = FPU_ORIG_EIP;
 
   RE_ENTRANT_CHECK_OFF;
-  /* No need to verify_area(), we have previously fetched these bytes. */
+  /* No need to check access_ok(), we have previously fetched these bytes. */
   printk("Unimplemented FPU Opcode at eip=%p : ", (void __user *) address);
   if ( FPU_CS == __USER_CS )
     {
@@ -69,6 +70,7 @@
   EXCEPTION(EX_Invalid);
 
 }
+#endif  /*  0  */
 
 
 /*
@@ -91,7 +93,7 @@
   unsigned long address = FPU_ORIG_EIP;
 
   RE_ENTRANT_CHECK_OFF;
-  /* No need to verify_area(), we have previously fetched these bytes. */
+  /* No need to check access_ok(), we have previously fetched these bytes. */
   printk("At %p:", (void *) address);
   if ( FPU_CS == __USER_CS )
     {
diff -urN linux/arch/i386/math-emu/fpu_aux.c linux/arch/i386/math-emu/fpu_aux.c
--- linux/arch/i386/math-emu/fpu_aux.c  2004/06/26 15:15:09     1.3
+++ linux/arch/i386/math-emu/fpu_aux.c  2005/03/18 17:36:50     1.4
@@ -21,7 +21,7 @@
 {
 }
 
-void fclex(void)
+static void fclex(void)
 {
   partial_status &= ~(SW_Backward|SW_Summary|SW_Stack_Fault|SW_Precision|
                   SW_Underflow|SW_Overflow|SW_Zero_Div|SW_Denorm_Op|
diff -urN linux/arch/i386/math-emu/fpu_proto.h 
linux/arch/i386/math-emu/fpu_proto.h
--- linux/arch/i386/math-emu/fpu_proto.h        2004/08/24 15:10:05     1.6
+++ linux/arch/i386/math-emu/fpu_proto.h        2005/03/18 17:36:50     1.7
@@ -2,7 +2,6 @@
 #define _FPU_PROTO_H
 
 /* errors.c */
-extern void Un_impl(void);
 extern void FPU_illegal(void);
 extern void FPU_printall(void);
 asmlinkage void FPU_exception(int n);
@@ -41,7 +40,6 @@
 extern void fdivrp(void);
 extern void fdivp_(void);
 /* fpu_aux.c */
-extern void fclex(void);
 extern void finit(void);
 extern void finit_(void);
 extern void fstsw_(void);
diff -urN linux/arch/i386/math-emu/fpu_system.h 
linux/arch/i386/math-emu/fpu_system.h
--- linux/arch/i386/math-emu/fpu_system.h       2004/06/26 15:15:09     1.8
+++ linux/arch/i386/math-emu/fpu_system.h       2005/03/18 17:36:50     1.9
@@ -66,18 +66,18 @@
 #define instruction_address    (*(struct address *)&I387.soft.fip)
 #define operand_address                (*(struct address *)&I387.soft.foo)
 
-#define FPU_verify_area(x,y,z) if ( verify_area(x,y,z) ) \
+#define FPU_verify_area(x,y,z) if ( !access_ok(x,y,z) ) \
                                math_abort(FPU_info,SIGSEGV)
 
 #undef FPU_IGNORE_CODE_SEGV
 #ifdef FPU_IGNORE_CODE_SEGV
-/* verify_area() is very expensive, and causes the emulator to run
+/* access_ok() is very expensive, and causes the emulator to run
    about 20% slower if applied to the code. Anyway, errors due to bad
    code addresses should be much rarer than errors due to bad data
    addresses. */
 #define        FPU_code_verify_area(z)
 #else
-/* A simpler test than verify_area() can probably be done for
+/* A simpler test than access_ok() can probably be done for
    FPU_code_verify_area() because the only possible error is to step
    past the upper boundary of a legal code area. */
 #define        FPU_code_verify_area(z) FPU_verify_area(VERIFY_READ,(void 
__user *)FPU_EIP,z)
diff -urN linux/arch/i386/math-emu/load_store.c 
linux/arch/i386/math-emu/load_store.c
--- linux/arch/i386/math-emu/load_store.c       2004/06/26 15:15:09     1.4
+++ linux/arch/i386/math-emu/load_store.c       2005/03/18 17:36:50     1.5
@@ -53,7 +53,7 @@
   14, 0, 94, 10,  2, 10,  2,  8
 };
 
-u_char const data_sizes_32[32] = {
+static u_char const data_sizes_32[32] = {
   4,  4,  8,  2,  0,  0,  0,  0,
   4,  4,  8,  2,  4,  4,  8,  2,
   28, 0,108, 10,  2, 10,  0,  8,  
diff -urN linux/arch/i386/math-emu/reg_constant.c 
linux/arch/i386/math-emu/reg_constant.c
--- linux/arch/i386/math-emu/reg_constant.c     1998/03/03 01:22:38     1.2
+++ linux/arch/i386/math-emu/reg_constant.c     2005/03/18 17:36:50     1.3
@@ -21,15 +21,17 @@
                             ((EXTENDED_Ebias+(e)) | ((SIGN_##s != 0)*0x8000)) }
 
 FPU_REG const CONST_1    = MAKE_REG(POS, 0, 0x00000000, 0x80000000);
+#if 0
 FPU_REG const CONST_2    = MAKE_REG(POS, 1, 0x00000000, 0x80000000);
 FPU_REG const CONST_HALF = MAKE_REG(POS, -1, 0x00000000, 0x80000000);
-FPU_REG const CONST_L2T  = MAKE_REG(POS, 1, 0xcd1b8afe, 0xd49a784b);
-FPU_REG const CONST_L2E  = MAKE_REG(POS, 0, 0x5c17f0bc, 0xb8aa3b29);
+#endif  /*  0  */
+static FPU_REG const CONST_L2T  = MAKE_REG(POS, 1, 0xcd1b8afe, 0xd49a784b);
+static FPU_REG const CONST_L2E  = MAKE_REG(POS, 0, 0x5c17f0bc, 0xb8aa3b29);
 FPU_REG const CONST_PI   = MAKE_REG(POS, 1, 0x2168c235, 0xc90fdaa2);
 FPU_REG const CONST_PI2  = MAKE_REG(POS, 0, 0x2168c235, 0xc90fdaa2);
 FPU_REG const CONST_PI4  = MAKE_REG(POS, -1, 0x2168c235, 0xc90fdaa2);
-FPU_REG const CONST_LG2  = MAKE_REG(POS, -2, 0xfbcff799, 0x9a209a84);
-FPU_REG const CONST_LN2  = MAKE_REG(POS, -1, 0xd1cf79ac, 0xb17217f7);
+static FPU_REG const CONST_LG2  = MAKE_REG(POS, -2, 0xfbcff799, 0x9a209a84);
+static FPU_REG const CONST_LN2  = MAKE_REG(POS, -1, 0xd1cf79ac, 0xb17217f7);
 
 /* Extra bits to take pi/2 to more than 128 bits precision. */
 FPU_REG const CONST_PI2extra = MAKE_REG(NEG, -66,
diff -urN linux/arch/i386/math-emu/reg_constant.h 
linux/arch/i386/math-emu/reg_constant.h
--- linux/arch/i386/math-emu/reg_constant.h     2001/06/13 17:27:39     1.2
+++ linux/arch/i386/math-emu/reg_constant.h     2005/03/18 17:36:50     1.3
@@ -12,16 +12,10 @@
 #include "fpu_emu.h"
 
 extern FPU_REG const CONST_1;
-extern FPU_REG const CONST_2;
-extern FPU_REG const CONST_HALF;
-extern FPU_REG const CONST_L2T;
-extern FPU_REG const CONST_L2E;
 extern FPU_REG const CONST_PI;
 extern FPU_REG const CONST_PI2;
 extern FPU_REG const CONST_PI2extra;
 extern FPU_REG const CONST_PI4;
-extern FPU_REG const CONST_LG2;
-extern FPU_REG const CONST_LN2;
 extern FPU_REG const CONST_Z;
 extern FPU_REG const CONST_PINF;
 extern FPU_REG const CONST_INF;
diff -urN linux/arch/i386/mm/boot_ioremap.c linux/arch/i386/mm/boot_ioremap.c
--- linux/arch/i386/mm/boot_ioremap.c   2003/06/05 11:24:13     1.2
+++ linux/arch/i386/mm/boot_ioremap.c   2005/03/18 17:36:50     1.3
@@ -61,8 +61,8 @@
 /* the virtual space we're going to remap comes from this array */
 #define BOOT_IOREMAP_PAGES 4
 #define BOOT_IOREMAP_SIZE (BOOT_IOREMAP_PAGES*PAGE_SIZE)
-__initdata char boot_ioremap_space[BOOT_IOREMAP_SIZE] 
-               __attribute__ ((aligned (PAGE_SIZE)));
+static __initdata char boot_ioremap_space[BOOT_IOREMAP_SIZE]
+                      __attribute__ ((aligned (PAGE_SIZE)));
 
 /*
  * This only applies to things which need to ioremap before paging_init()
diff -urN linux/arch/i386/mm/discontig.c linux/arch/i386/mm/discontig.c
--- linux/arch/i386/mm/discontig.c      2005/01/13 14:05:25     1.20
+++ linux/arch/i386/mm/discontig.c      2005/03/18 17:36:50     1.21
@@ -60,6 +60,32 @@
  */
 s8 physnode_map[MAX_ELEMENTS] = { [0 ... (MAX_ELEMENTS - 1)] = -1};
 
+void memory_present(int nid, unsigned long start, unsigned long end)
+{
+       unsigned long pfn;
+
+       printk(KERN_INFO "Node: %d, start_pfn: %ld, end_pfn: %ld\n",
+                       nid, start, end);
+       printk(KERN_DEBUG "  Setting physnode_map array to node %d for 
pfns:\n", nid);
+       printk(KERN_DEBUG "  ");
+       for (pfn = start; pfn < end; pfn += PAGES_PER_ELEMENT) {
+               physnode_map[pfn / PAGES_PER_ELEMENT] = nid;
+               printk("%ld ", pfn);
+       }
+       printk("\n");
+}
+
+unsigned long node_memmap_size_bytes(int nid, unsigned long start_pfn,
+                                             unsigned long end_pfn)
+{
+       unsigned long nr_pages = end_pfn - start_pfn;
+
+       if (!nr_pages)
+               return 0;
+
+       return (nr_pages + 1) * sizeof(struct page);
+}
+
 unsigned long node_start_pfn[MAX_NUMNODES];
 unsigned long node_end_pfn[MAX_NUMNODES];
 
@@ -95,6 +121,7 @@
        find_max_pfn();
        node_start_pfn[0] = 0;
        node_end_pfn[0] = max_pfn;
+       memory_present(0, 0, max_pfn);
 
         /* Indicate there is one node available. */
        nodes_clear(node_online_map);
@@ -128,52 +155,11 @@
  */
 static void __init allocate_pgdat(int nid)
 {
-       if (nid)
+       if (nid && node_has_online_mem(nid))
                NODE_DATA(nid) = (pg_data_t *)node_remap_start_vaddr[nid];
        else {
                NODE_DATA(nid) = (pg_data_t *)(__va(min_low_pfn << PAGE_SHIFT));
                min_low_pfn += PFN_UP(sizeof(pg_data_t));
-               memset(NODE_DATA(nid), 0, sizeof(pg_data_t));
-       }
-}
-
-/*
- * Register fully available low RAM pages with the bootmem allocator.
- */
-static void __init register_bootmem_low_pages(unsigned long system_max_low_pfn)
-{
-       int i;
-
-       for (i = 0; i < e820.nr_map; i++) {
-               unsigned long curr_pfn, last_pfn, size;
-               /*
-                * Reserve usable low memory
-                */
-               if (e820.map[i].type != E820_RAM)
-                       continue;
-               /*
-                * We are rounding up the start address of usable memory:
-                */
-               curr_pfn = PFN_UP(e820.map[i].addr);
-               if (curr_pfn >= system_max_low_pfn)
-                       continue;
-               /*
-                * ... and at the end of the usable range downwards:
-                */
-               last_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
-
-               if (last_pfn > system_max_low_pfn)
-                       last_pfn = system_max_low_pfn;
-
-               /*
-                * .. finally, did all the rounding and playing
-                * around just make the area go away?
-                */
-               if (last_pfn <= curr_pfn)
-                       continue;
-
-               size = last_pfn - curr_pfn;
-               free_bootmem_node(NODE_DATA(0), PFN_PHYS(curr_pfn), 
PFN_PHYS(size));
        }
 }
 
@@ -203,9 +189,21 @@
        for_each_online_node(nid) {
                if (nid == 0)
                        continue;
-               /* calculate the size of the mem_map needed in bytes */
-               size = (node_end_pfn[nid] - node_start_pfn[nid] + 1) 
-                       * sizeof(struct page) + sizeof(pg_data_t);
+               if (!node_remap_size[nid])
+                       continue;
+
+               /*
+                * The acpi/srat node info can show hot-add memroy zones
+                * where memory could be added but not currently present.
+                */
+               if (node_start_pfn[nid] > max_pfn)
+                       continue;
+               if (node_end_pfn[nid] > max_pfn)
+                       node_end_pfn[nid] = max_pfn;
+
+               /* ensure the remap includes space for the pgdat. */
+               size = node_remap_size[nid] + sizeof(pg_data_t);
+
                /* convert size to large (pmd size) pages, rounding up */
                size = (size + LARGE_PAGE_BYTES - 1) / LARGE_PAGE_BYTES;
                /* now the roundup is correct, convert to PAGE_SIZE pages */
@@ -225,22 +223,12 @@
        return reserve_pages;
 }
 
-/*
- * workaround for Dell systems that neglect to reserve EBDA
- */
-static void __init reserve_ebda_region_node(void)
-{
-       unsigned int addr;
-       addr = get_bios_ebda();
-       if (addr)
-               reserve_bootmem_node(NODE_DATA(0), addr, PAGE_SIZE);
-}
-
+extern void setup_bootmem_allocator(void);
 unsigned long __init setup_memory(void)
 {
        int nid;
-       unsigned long bootmap_size, system_start_pfn, system_max_low_pfn;
-       unsigned long reserve_pages, pfn;
+       unsigned long system_start_pfn, system_max_low_pfn;
+       unsigned long reserve_pages;
 
        /*
         * When mapping a NUMA machine we allocate the node_mem_map arrays
@@ -249,28 +237,14 @@
         * this space and use it to adjust the boundry between ZONE_NORMAL
         * and ZONE_HIGHMEM.
         */
+       find_max_pfn();
        get_memcfg_numa();
 
-       /* Fill in the physnode_map */
-       for_each_online_node(nid) {
-               printk("Node: %d, start_pfn: %ld, end_pfn: %ld\n",
-                               nid, node_start_pfn[nid], node_end_pfn[nid]);
-               printk("  Setting physnode_map array to node %d for pfns:\n  ",
-                               nid);
-               for (pfn = node_start_pfn[nid]; pfn < node_end_pfn[nid];
-                                       pfn += PAGES_PER_ELEMENT) {
-                       physnode_map[pfn / PAGES_PER_ELEMENT] = nid;
-                       printk("%ld ", pfn);
-               }
-               printk("\n");
-       }
-
        reserve_pages = calculate_numa_remap_pages();
 
        /* partially used pages are not usable - thus round upwards */
        system_start_pfn = min_low_pfn = PFN_UP(init_pg_tables_end);
 
-       find_max_pfn();
        system_max_low_pfn = max_low_pfn = find_max_low_pfn() - reserve_pages;
        printk("reserve_pages = %ld find_max_low_pfn() ~ %ld\n",
                        reserve_pages, max_low_pfn + reserve_pages);
@@ -304,70 +278,10 @@
        for_each_online_node(nid)
                find_max_pfn_node(nid);
 
+       memset(NODE_DATA(0), 0, sizeof(struct pglist_data));
        NODE_DATA(0)->bdata = &node0_bdata;
-
-       /*
-        * Initialize the boot-time allocator (with low memory only):
-        */
-       bootmap_size = init_bootmem_node(NODE_DATA(0), min_low_pfn, 0, 
system_max_low_pfn);
-
-       register_bootmem_low_pages(system_max_low_pfn);
-
-       /*
-        * Reserve the bootmem bitmap itself as well. We do this in two
-        * steps (first step was init_bootmem()) because this catches
-        * the (very unlikely) case of us accidentally initializing the
-        * bootmem allocator with an invalid RAM area.
-        */
-       reserve_bootmem_node(NODE_DATA(0), HIGH_MEMORY, (PFN_PHYS(min_low_pfn) +
-                bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY));
-
-       /*
-        * reserve physical page 0 - it's a special BIOS page on many boxes,
-        * enabling clean reboots, SMP operation, laptop functions.
-        */
-       reserve_bootmem_node(NODE_DATA(0), 0, PAGE_SIZE);
-
-       /*
-        * But first pinch a few for the stack/trampoline stuff
-        * FIXME: Don't need the extra page at 4K, but need to fix
-        * trampoline before removing it. (see the GDT stuff)
-        */
-       reserve_bootmem_node(NODE_DATA(0), PAGE_SIZE, PAGE_SIZE);
-
-       /* reserve EBDA region, it's a 4K region */
-       reserve_ebda_region_node();
-
-#ifdef CONFIG_ACPI_SLEEP
-       /*
-        * Reserve low memory region for sleep support.
-        */
-       acpi_reserve_bootmem();
-#endif
-
-       /*
-        * Find and reserve possible boot-time SMP configuration:
-        */
-       find_smp_config();
-
-#ifdef CONFIG_BLK_DEV_INITRD
-       if (LOADER_TYPE && INITRD_START) {
-               if (INITRD_START + INITRD_SIZE <= (system_max_low_pfn << 
PAGE_SHIFT)) {
-                       reserve_bootmem_node(NODE_DATA(0), INITRD_START, 
INITRD_SIZE);
-                       initrd_start =
-                               INITRD_START ? INITRD_START + PAGE_OFFSET : 0;
-                       initrd_end = initrd_start+INITRD_SIZE;
-               }
-               else {
-                       printk(KERN_ERR "initrd extends beyond end of memory "
-                           "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
-                           INITRD_START + INITRD_SIZE,
-                           system_max_low_pfn << PAGE_SHIFT);
-                       initrd_start = 0;
-               }
-       }
-#endif
-       return system_max_low_pfn;
+       setup_bootmem_allocator();
+       return max_low_pfn;
 }
 
 void __init zone_sizes_init(void)
@@ -382,8 +296,6 @@
        for (nid = MAX_NUMNODES - 1; nid >= 0; nid--) {
                if (!node_online(nid))
                        continue;
-               if (nid)
-                       memset(NODE_DATA(nid), 0, sizeof(pg_data_t));
                NODE_DATA(nid)->pgdat_next = pgdat_list;
                pgdat_list = NODE_DATA(nid);
        }
@@ -399,24 +311,27 @@
 
                max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
 
-               if (start > low) {
+               if (node_has_online_mem(nid)){
+                       if (start > low) {
 #ifdef CONFIG_HIGHMEM
-                       BUG_ON(start > high);
-                       zones_size[ZONE_HIGHMEM] = high - start;
+                               BUG_ON(start > high);
+                               zones_size[ZONE_HIGHMEM] = high - start;
 #endif
-               } else {
-                       if (low < max_dma)
-                               zones_size[ZONE_DMA] = low;
-                       else {
-                               BUG_ON(max_dma > low);
-                               BUG_ON(low > high);
-                               zones_size[ZONE_DMA] = max_dma;
-                               zones_size[ZONE_NORMAL] = low - max_dma;
+                       } else {
+                               if (low < max_dma)
+                                       zones_size[ZONE_DMA] = low;
+                               else {
+                                       BUG_ON(max_dma > low);
+                                       BUG_ON(low > high);
+                                       zones_size[ZONE_DMA] = max_dma;
+                                       zones_size[ZONE_NORMAL] = low - max_dma;
 #ifdef CONFIG_HIGHMEM
-                               zones_size[ZONE_HIGHMEM] = high - low;
+                                       zones_size[ZONE_HIGHMEM] = high - low;
 #endif
+                               }
                        }
                }
+
                zholes_size = get_zholes_size(nid);
                /*
                 * We let the lmem_map for node 0 be allocated from the
@@ -466,12 +381,3 @@
        totalram_pages += totalhigh_pages;
 #endif
 }
-
-void __init set_max_mapnr_init(void)
-{
-#ifdef CONFIG_HIGHMEM
-       num_physpages = highend_pfn;
-#else
-       num_physpages = max_low_pfn;
-#endif
-}
diff -urN linux/arch/i386/mm/highmem.c linux/arch/i386/mm/highmem.c
--- linux/arch/i386/mm/highmem.c        2005/01/13 14:05:25     1.6
+++ linux/arch/i386/mm/highmem.c        2005/03/18 17:36:50     1.7
@@ -66,7 +66,7 @@
         * force other mappings to Oops if they'll try to access
         * this pte without first remap it
         */
-       pte_clear(kmap_pte-idx);
+       pte_clear(&init_mm, vaddr, kmap_pte-idx);
        __flush_tlb_one(vaddr);
 #endif
 
diff -urN linux/arch/i386/mm/hugetlbpage.c linux/arch/i386/mm/hugetlbpage.c
--- linux/arch/i386/mm/hugetlbpage.c    2005/01/13 14:05:25     1.30
+++ linux/arch/i386/mm/hugetlbpage.c    2005/03/18 17:36:50     1.31
@@ -216,7 +216,7 @@
        BUG_ON(end & (HPAGE_SIZE - 1));
 
        for (address = start; address < end; address += HPAGE_SIZE) {
-               pte = ptep_get_and_clear(huge_pte_offset(mm, address));
+               pte = ptep_get_and_clear(mm, address, huge_pte_offset(mm, 
address));
                if (pte_none(pte))
                        continue;
                page = pte_page(pte);
diff -urN linux/arch/i386/mm/init.c linux/arch/i386/mm/init.c
--- linux/arch/i386/mm/init.c   2005/01/13 14:05:25     1.79
+++ linux/arch/i386/mm/init.c   2005/03/18 17:36:50     1.80
@@ -233,13 +233,10 @@
 pte_t *kmap_pte;
 pgprot_t kmap_prot;
 
-EXPORT_SYMBOL(kmap_prot);
-EXPORT_SYMBOL(kmap_pte);
-
 #define kmap_get_fixmap_pte(vaddr)                                     \
        pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), vaddr), 
(vaddr)), (vaddr))
 
-void __init kmap_init(void)
+static void __init kmap_init(void)
 {
        unsigned long kmap_vstart;
 
@@ -250,7 +247,7 @@
        kmap_prot = PAGE_KERNEL;
 }
 
-void __init permanent_kmaps_init(pgd_t *pgd_base)
+static void __init permanent_kmaps_init(pgd_t *pgd_base)
 {
        pgd_t *pgd;
        pud_t *pud;
@@ -281,7 +278,7 @@
 }
 
 #ifndef CONFIG_DISCONTIGMEM
-void __init set_highmem_pages_init(int bad_ppro) 
+static void __init set_highmem_pages_init(int bad_ppro)
 {
        int pfn;
        for (pfn = highstart_pfn; pfn < highend_pfn; pfn++)
@@ -394,31 +391,6 @@
        flush_tlb_all();
 }
 
-#ifndef CONFIG_DISCONTIGMEM
-void __init zone_sizes_init(void)
-{
-       unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
-       unsigned int max_dma, high, low;
-       
-       max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
-       low = max_low_pfn;
-       high = highend_pfn;
-       
-       if (low < max_dma)
-               zones_size[ZONE_DMA] = low;
-       else {
-               zones_size[ZONE_DMA] = max_dma;
-               zones_size[ZONE_NORMAL] = low - max_dma;
-#ifdef CONFIG_HIGHMEM
-               zones_size[ZONE_HIGHMEM] = high - low;
-#endif
-       }
-       free_area_init(zones_size);     
-}
-#else
-extern void zone_sizes_init(void);
-#endif /* !CONFIG_DISCONTIGMEM */
-
 static int disable_nx __initdata = 0;
 u64 __supported_pte_mask = ~_PAGE_NX;
 
@@ -519,7 +491,6 @@
        __flush_tlb_all();
 
        kmap_init();
-       zone_sizes_init();
 }
 
 /*
@@ -529,7 +500,7 @@
  * but fortunately the switch to using exceptions got rid of all that.
  */
 
-void __init test_wp_bit(void)
+static void __init test_wp_bit(void)
 {
        printk("Checking if this processor honours the WP bit even in 
supervisor mode... ");
 
@@ -548,20 +519,17 @@
        }
 }
 
-#ifndef CONFIG_DISCONTIGMEM
 static void __init set_max_mapnr_init(void)
 {
 #ifdef CONFIG_HIGHMEM
-       max_mapnr = num_physpages = highend_pfn;
+       num_physpages = highend_pfn;
 #else
-       max_mapnr = num_physpages = max_low_pfn;
+       num_physpages = max_low_pfn;
+#endif
+#ifndef CONFIG_DISCONTIGMEM
+       max_mapnr = num_physpages;
 #endif
 }
-#define __free_all_bootmem() free_all_bootmem()
-#else
-#define __free_all_bootmem() free_all_bootmem_node(NODE_DATA(0))
-extern void set_max_mapnr_init(void);
-#endif /* !CONFIG_DISCONTIGMEM */
 
 static struct kcore_list kcore_mem, kcore_vmalloc; 
 
@@ -592,13 +560,13 @@
        set_max_mapnr_init();
 
 #ifdef CONFIG_HIGHMEM
-       high_memory = (void *) __va(highstart_pfn * PAGE_SIZE);
+       high_memory = (void *) __va(highstart_pfn * PAGE_SIZE - 1) + 1;
 #else
-       high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
+       high_memory = (void *) __va(max_low_pfn * PAGE_SIZE - 1) + 1;
 #endif
 
        /* this will put all low memory onto the freelists */
-       totalram_pages += __free_all_bootmem();
+       totalram_pages += free_all_bootmem();
 
        reservedpages = 0;
        for (tmp = 0; tmp < max_low_pfn; tmp++)
diff -urN linux/arch/i386/mm/ioremap.c linux/arch/i386/mm/ioremap.c
--- linux/arch/i386/mm/ioremap.c        2005/02/07 02:54:32     1.29
+++ linux/arch/i386/mm/ioremap.c        2005/03/18 17:36:50     1.30
@@ -17,89 +17,85 @@
 #include <asm/tlbflush.h>
 #include <asm/pgtable.h>
 
-static inline void remap_area_pte(pte_t * pte, unsigned long address, unsigned 
long size,
-       unsigned long phys_addr, unsigned long flags)
+#define ISA_START_ADDRESS      0xa0000
+#define ISA_END_ADDRESS                0x100000
+
+static int ioremap_pte_range(pmd_t *pmd, unsigned long addr,
+               unsigned long end, unsigned long phys_addr, unsigned long flags)
 {
-       unsigned long end;
+       pte_t *pte;
        unsigned long pfn;
 
-       address &= ~PMD_MASK;
-       end = address + size;
-       if (end > PMD_SIZE)
-               end = PMD_SIZE;
-       if (address >= end)
-               BUG();
        pfn = phys_addr >> PAGE_SHIFT;
+       pte = pte_alloc_kernel(&init_mm, pmd, addr);
+       if (!pte)
+               return -ENOMEM;
        do {
-               if (!pte_none(*pte)) {
-                       printk("remap_area_pte: page already exists\n");
-                       BUG();
-               }
+               BUG_ON(!pte_none(*pte));
                set_pte(pte, pfn_pte(pfn, __pgprot(_PAGE_PRESENT | _PAGE_RW | 
                                        _PAGE_DIRTY | _PAGE_ACCESSED | flags)));
-               address += PAGE_SIZE;
                pfn++;
-               pte++;
-       } while (address && (address < end));
+       } while (pte++, addr += PAGE_SIZE, addr != end);
+       return 0;
+}
+
+static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr,
+               unsigned long end, unsigned long phys_addr, unsigned long flags)
+{
+       pmd_t *pmd;
+       unsigned long next;
+
+       phys_addr -= addr;
+       pmd = pmd_alloc(&init_mm, pud, addr);
+       if (!pmd)
+               return -ENOMEM;
+       do {
+               next = pmd_addr_end(addr, end);
+               if (ioremap_pte_range(pmd, addr, next, phys_addr + addr, flags))
+                       return -ENOMEM;
+       } while (pmd++, addr = next, addr != end);
+       return 0;
 }
 
-static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned 
long size,
-       unsigned long phys_addr, unsigned long flags)
+static inline int ioremap_pud_range(pgd_t *pgd, unsigned long addr,
+               unsigned long end, unsigned long phys_addr, unsigned long flags)
 {
-       unsigned long end;
+       pud_t *pud;
+       unsigned long next;
 
-       address &= ~PGDIR_MASK;
-       end = address + size;
-       if (end > PGDIR_SIZE)
-               end = PGDIR_SIZE;
-       phys_addr -= address;
-       if (address >= end)
-               BUG();
+       phys_addr -= addr;
+       pud = pud_alloc(&init_mm, pgd, addr);
+       if (!pud)
+               return -ENOMEM;
        do {
-               pte_t * pte = pte_alloc_kernel(&init_mm, pmd, address);
-               if (!pte)
+               next = pud_addr_end(addr, end);
+               if (ioremap_pmd_range(pud, addr, next, phys_addr + addr, flags))
                        return -ENOMEM;
-               remap_area_pte(pte, address, end - address, address + 
phys_addr, flags);
-               address = (address + PMD_SIZE) & PMD_MASK;
-               pmd++;
-       } while (address && (address < end));
+       } while (pud++, addr = next, addr != end);
        return 0;
 }
 
-static int remap_area_pages(unsigned long address, unsigned long phys_addr,
-                                unsigned long size, unsigned long flags)
+static int ioremap_page_range(unsigned long addr,
+               unsigned long end, unsigned long phys_addr, unsigned long flags)
 {
-       int error;
-       pgd_t * dir;
-       unsigned long end = address + size;
+       pgd_t *pgd;
+       unsigned long next;
+       int err;
 
-       phys_addr -= address;
-       dir = pgd_offset(&init_mm, address);
+       BUG_ON(addr >= end);
        flush_cache_all();
-       if (address >= end)
-               BUG();
+       phys_addr -= addr;
+       pgd = pgd_offset_k(addr);
        spin_lock(&init_mm.page_table_lock);
        do {
-               pud_t *pud;
-               pmd_t *pmd;
-               
-               error = -ENOMEM;
-               pud = pud_alloc(&init_mm, dir, address);
-               if (!pud)
-                       break;
-               pmd = pmd_alloc(&init_mm, pud, address);
-               if (!pmd)
-                       break;
-               if (remap_area_pmd(pmd, address, end - address,
-                                        phys_addr + address, flags))
+               next = pgd_addr_end(addr, end);
+               err = ioremap_pud_range(pgd, addr, next, phys_addr+addr, flags);
+               if (err)
                        break;
-               error = 0;
-               address = (address + PGDIR_SIZE) & PGDIR_MASK;
-               dir++;
-       } while (address && (address < end));
+       } while (pgd++, addr = next, addr != end);
        spin_unlock(&init_mm.page_table_lock);
        flush_tlb_all();
-       return error;
+       return err;
 }
 
 /*
@@ -129,7 +125,7 @@
        /*
         * Don't remap the low PCI/ISA area, it's always mapped..
         */
-       if (phys_addr >= 0xA0000 && last_addr < 0x100000)
+       if (phys_addr >= ISA_START_ADDRESS && last_addr < ISA_END_ADDRESS)
                return (void __iomem *) phys_to_virt(phys_addr);
 
        /*
@@ -162,7 +158,8 @@
                return NULL;
        area->phys_addr = phys_addr;
        addr = (void __iomem *) area->addr;
-       if (remap_area_pages((unsigned long) addr, phys_addr, size, flags)) {
+       if (ioremap_page_range((unsigned long) addr,
+                       (unsigned long) addr + size, phys_addr, flags)) {
                vunmap((void __force *) addr);
                return NULL;
        }
@@ -230,7 +227,17 @@
 {
        struct vm_struct *p;
        if ((void __force *) addr <= high_memory) 
-               return; 
+               return;
+
+       /*
+        * __ioremap special-cases the PCI/ISA range by not instantiating a
+        * vm_area and by simply returning an address into the kernel mapping
+        * of ISA space.   So handle that here.
+        */
+       if (addr >= phys_to_virt(ISA_START_ADDRESS) &&
+                       addr < phys_to_virt(ISA_END_ADDRESS))
+               return;
+
        p = remove_vm_area((void *) (PAGE_MASK & (unsigned long __force) addr));
        if (!p) { 
                printk("__iounmap: bad address %p\n", addr);
@@ -240,8 +247,8 @@
        if ((p->flags >> 20) && p->phys_addr < virt_to_phys(high_memory) - 1) {
                /* p->size includes the guard page, but cpa doesn't like that */
                change_page_attr(virt_to_page(__va(p->phys_addr)),
-                                (p->size - PAGE_SIZE) >> PAGE_SHIFT,
-                                PAGE_KERNEL);                           
+                                p->size >> PAGE_SHIFT,
+                                PAGE_KERNEL);
                global_flush_tlb();
        } 
        kfree(p); 
@@ -261,7 +268,7 @@
        /*
         * Don't remap the low PCI/ISA area, it's always mapped..
         */
-       if (phys_addr >= 0xA0000 && last_addr < 0x100000)
+       if (phys_addr >= ISA_START_ADDRESS && last_addr < ISA_END_ADDRESS)
                return phys_to_virt(phys_addr);
 
        /*
diff -urN linux/arch/i386/mm/mmap.c linux/arch/i386/mm/mmap.c
--- linux/arch/i386/mm/mmap.c   2004/10/25 20:44:14     1.2
+++ linux/arch/i386/mm/mmap.c   2005/03/18 17:36:50     1.3
@@ -26,6 +26,7 @@
 
 #include <linux/personality.h>
 #include <linux/mm.h>
+#include <linux/random.h>
 
 /*
  * Top of mmap area (just below the process stack).
@@ -38,13 +39,17 @@
 static inline unsigned long mmap_base(struct mm_struct *mm)
 {
        unsigned long gap = current->signal->rlim[RLIMIT_STACK].rlim_cur;
+       unsigned long random_factor = 0;
+
+       if (current->flags & PF_RANDOMIZE)
+               random_factor = get_random_int() % (1024*1024);
 
        if (gap < MIN_GAP)
                gap = MIN_GAP;
        else if (gap > MAX_GAP)
                gap = MAX_GAP;
 
-       return TASK_SIZE - (gap & PAGE_MASK);
+       return PAGE_ALIGN(TASK_SIZE - gap - random_factor);
 }
 
 /*
diff -urN linux/arch/i386/mm/pageattr.c linux/arch/i386/mm/pageattr.c
--- linux/arch/i386/mm/pageattr.c       2005/01/25 04:27:56     1.13
+++ linux/arch/i386/mm/pageattr.c       2005/03/18 17:36:50     1.14
@@ -189,7 +189,7 @@
 void global_flush_tlb(void)
 { 
        LIST_HEAD(l);
-       struct list_head* n;
+       struct page *pg, *next;
 
        BUG_ON(irqs_disabled());
 
@@ -197,12 +197,8 @@
        list_splice_init(&df_list, &l);
        spin_unlock_irq(&cpa_lock);
        flush_map();
-       n = l.next;
-       while (n != &l) {
-               struct page *pg = list_entry(n, struct page, lru);
-               n = n->next;
+       list_for_each_entry_safe(pg, next, &l, lru)
                __free_page(pg);
-       }
 } 
 
 #ifdef CONFIG_DEBUG_PAGEALLOC
diff -urN linux/arch/i386/oprofile/backtrace.c 
linux/arch/i386/oprofile/backtrace.c
--- linux/arch/i386/oprofile/backtrace.c        2005/01/13 14:05:25     1.1
+++ linux/arch/i386/oprofile/backtrace.c        2005/03/18 17:36:50     1.2
@@ -27,7 +27,7 @@
        /* frame pointers should strictly progress back up the stack
         * (towards higher addresses) */
        if (head >= head->ebp)
-               return 0;
+               return NULL;
 
        return head->ebp;
 }
diff -urN linux/arch/i386/pci/acpi.c linux/arch/i386/pci/acpi.c
--- linux/arch/i386/pci/acpi.c  2004/11/15 11:49:16     1.10
+++ linux/arch/i386/pci/acpi.c  2005/03/18 17:36:50     1.11
@@ -37,21 +37,12 @@
                 * also do it here in case there are still broken drivers that
                 * don't use pci_enable_device().
                 */
-               printk(KERN_INFO "** Routing PCI interrupts for all devices 
because \"pci=routeirq\"\n");
-               printk(KERN_INFO "** was specified.  If this was required to 
make a driver work,\n");
-               printk(KERN_INFO "** please email the output of \"lspci\" to 
bjorn.helgaas@hp.com\n");
-               printk(KERN_INFO "** so I can fix the driver.\n");
+               printk(KERN_INFO "PCI: Routing PCI interrupts for all devices 
because \"pci=routeirq\" specified\n");
                while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != 
NULL)
                        acpi_pci_irq_enable(dev);
-       } else {
-               printk(KERN_INFO "** PCI interrupts are no longer routed 
automatically.  If this\n");
-               printk(KERN_INFO "** causes a device to stop working, it is 
probably because the\n");
-               printk(KERN_INFO "** driver failed to call pci_enable_device(). 
 As a temporary\n");
-               printk(KERN_INFO "** workaround, the \"pci=routeirq\" argument 
restores the old\n");
-               printk(KERN_INFO "** behavior.  If this argument makes the 
device work again,\n");
-               printk(KERN_INFO "** please email the output of \"lspci\" to 
bjorn.helgaas@hp.com\n");
-               printk(KERN_INFO "** so I can fix the driver.\n");
-       }
+       } else
+               printk(KERN_INFO "PCI: If a device doesn't work, try 
\"pci=routeirq\".  If it helps, post a report\n");
+
 #ifdef CONFIG_X86_IO_APIC
        if (acpi_ioapic)
                print_IO_APIC();
diff -urN linux/arch/i386/pci/direct.c linux/arch/i386/pci/direct.c
--- linux/arch/i386/pci/direct.c        2004/02/05 02:39:52     1.10
+++ linux/arch/i386/pci/direct.c        2005/03/18 17:36:50     1.11
@@ -13,7 +13,8 @@
 #define PCI_CONF1_ADDRESS(bus, devfn, reg) \
        (0x80000000 | (bus << 16) | (devfn << 8) | (reg & ~3))
 
-static int pci_conf1_read (int seg, int bus, int devfn, int reg, int len, u32 
*value)
+static int pci_conf1_read(unsigned int seg, unsigned int bus,
+                         unsigned int devfn, int reg, int len, u32 *value)
 {
        unsigned long flags;
 
@@ -41,7 +42,8 @@
        return 0;
 }
 
-static int pci_conf1_write (int seg, int bus, int devfn, int reg, int len, u32 
value)
+static int pci_conf1_write(unsigned int seg, unsigned int bus,
+                          unsigned int devfn, int reg, int len, u32 value)
 {
        unsigned long flags;
 
@@ -83,7 +85,8 @@
 
 #define PCI_CONF2_ADDRESS(dev, reg)    (u16)(0xC000 | (dev << 8) | reg)
 
-static int pci_conf2_read(int seg, int bus, int devfn, int reg, int len, u32 
*value)
+static int pci_conf2_read(unsigned int seg, unsigned int bus,
+                         unsigned int devfn, int reg, int len, u32 *value)
 {
        unsigned long flags;
        int dev, fn;
@@ -121,7 +124,8 @@
        return 0;
 }
 
-static int pci_conf2_write (int seg, int bus, int devfn, int reg, int len, u32 
value)
+static int pci_conf2_write(unsigned int seg, unsigned int bus,
+                          unsigned int devfn, int reg, int len, u32 value)
 {
        unsigned long flags;
        int dev, fn;
diff -urN linux/arch/i386/pci/irq.c linux/arch/i386/pci/irq.c
--- linux/arch/i386/pci/irq.c   2005/01/13 14:05:25     1.22
+++ linux/arch/i386/pci/irq.c   2005/03/18 17:36:50     1.23
@@ -1031,56 +1031,55 @@
 
        pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
        if (pin && !pcibios_lookup_irq(dev, 1) && !dev->irq) {
-               char *msg;
-               msg = "";
+               char *msg = "";
+
+               pin--;          /* interrupt pins are numbered starting from 1 
*/
+
                if (io_apic_assign_pci_irqs) {
                        int irq;
 
-                       if (pin) {
-                               pin--;          /* interrupt pins are numbered 
starting from 1 */
-                               irq = 
IO_APIC_get_PCI_irq_vector(dev->bus->number, PCI_SLOT(dev->devfn), pin);
-                               /*
-                                * Busses behind bridges are typically not 
listed in the MP-table.
-                                * In this case we have to look up the IRQ 
based on the parent bus,
-                                * parent slot, and pin number. The SMP code 
detects such bridged
-                                * busses itself so we should get into this 
branch reliably.
-                                */
-                               temp_dev = dev;
-                               while (irq < 0 && dev->bus->parent) { /* go 
back to the bridge */
-                                       struct pci_dev * bridge = 
dev->bus->self;
-
-                                       pin = (pin + PCI_SLOT(dev->devfn)) % 4;
-                                       irq = 
IO_APIC_get_PCI_irq_vector(bridge->bus->number, 
-                                                       
PCI_SLOT(bridge->devfn), pin);
-                                       if (irq >= 0)
-                                               printk(KERN_WARNING "PCI: using 
PPB %s[%c] to get irq %d\n",
-                                                       pci_name(bridge), 'A' + 
pin, irq);
-                                       dev = bridge;
-                               }
-                               dev = temp_dev;
-                               if (irq >= 0) {
+                       irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, 
PCI_SLOT(dev->devfn), pin);
+                       /*
+                        * Busses behind bridges are typically not listed in 
the MP-table.
+                        * In this case we have to look up the IRQ based on the 
parent bus,
+                        * parent slot, and pin number. The SMP code detects 
such bridged
+                        * busses itself so we should get into this branch 
reliably.
+                        */
+                       temp_dev = dev;
+                       while (irq < 0 && dev->bus->parent) { /* go back to the 
bridge */
+                               struct pci_dev * bridge = dev->bus->self;
+
+                               pin = (pin + PCI_SLOT(dev->devfn)) % 4;
+                               irq = 
IO_APIC_get_PCI_irq_vector(bridge->bus->number, 
+                                               PCI_SLOT(bridge->devfn), pin);
+                               if (irq >= 0)
+                                       printk(KERN_WARNING "PCI: using PPB 
%s[%c] to get irq %d\n",
+                                               pci_name(bridge), 'A' + pin, 
irq);
+                               dev = bridge;
+                       }
+                       dev = temp_dev;
+                       if (irq >= 0) {
 #ifdef CONFIG_PCI_MSI
-                                       if (!platform_legacy_irq(irq))
-                                               irq = IO_APIC_VECTOR(irq);
+                               if (!platform_legacy_irq(irq))
+                                       irq = IO_APIC_VECTOR(irq);
 #endif
-                                       printk(KERN_INFO "PCI->APIC IRQ 
transform: %s[%c] -> IRQ %d\n",
-                                               pci_name(dev), 'A' + pin, irq);
-                                       dev->irq = irq;
-                                       return 0;
-                               } else
-                                       msg = " Probably buggy MP table.";
-                       }
+                               printk(KERN_INFO "PCI->APIC IRQ transform: 
%s[%c] -> IRQ %d\n",
+                                       pci_name(dev), 'A' + pin, irq);
+                               dev->irq = irq;
+                               return 0;
+                       } else
+                               msg = " Probably buggy MP table.";
                } else if (pci_probe & PCI_BIOS_IRQ_SCAN)
                        msg = "";
                else
                        msg = " Please try using pci=biosirq.";
-                       
+
                /* With IDE legacy devices the IRQ lookup failure is not a 
problem.. */
                if (dev->class >> 8 == PCI_CLASS_STORAGE_IDE && !(dev->class & 
0x5))
                        return 0;
-                       
+
                printk(KERN_WARNING "PCI: No IRQ known for interrupt pin %c of 
device %s.%s\n",
-                      'A' + pin - 1, pci_name(dev), msg);
+                      'A' + pin, pci_name(dev), msg);
        }
        /* VIA bridges use interrupt line for apic/pci steering across
           the V-Link */
diff -urN linux/arch/i386/pci/mmconfig.c linux/arch/i386/pci/mmconfig.c
--- linux/arch/i386/pci/mmconfig.c      2004/12/04 18:15:59     1.5
+++ linux/arch/i386/pci/mmconfig.c      2005/03/18 17:36:50     1.6
@@ -34,7 +34,8 @@
        }
 }
 
-static int pci_mmcfg_read(int seg, int bus, int devfn, int reg, int len, u32 
*value)
+static int pci_mmcfg_read(unsigned int seg, unsigned int bus,
+                         unsigned int devfn, int reg, int len, u32 *value)
 {
        unsigned long flags;
 
@@ -62,7 +63,8 @@
        return 0;
 }
 
-static int pci_mmcfg_write(int seg, int bus, int devfn, int reg, int len, u32 
value)
+static int pci_mmcfg_write(unsigned int seg, unsigned int bus,
+                          unsigned int devfn, int reg, int len, u32 value)
 {
        unsigned long flags;
 
diff -urN linux/arch/i386/pci/numa.c linux/arch/i386/pci/numa.c
--- linux/arch/i386/pci/numa.c  2005/01/25 04:27:56     1.13
+++ linux/arch/i386/pci/numa.c  2005/03/18 17:36:50     1.14
@@ -14,11 +14,12 @@
 #define PCI_CONF1_MQ_ADDRESS(bus, devfn, reg) \
        (0x80000000 | (BUS2LOCAL(bus) << 16) | (devfn << 8) | (reg & ~3))
 
-static int pci_conf1_mq_read (int seg, int bus, int devfn, int reg, int len, 
u32 *value)
+static int pci_conf1_mq_read(unsigned int seg, unsigned int bus,
+                            unsigned int devfn, int reg, int len, u32 *value)
 {
        unsigned long flags;
 
-       if (!value || (bus > MAX_MP_BUSSES) || (devfn > 255) || (reg > 255))
+       if (!value || (bus >= MAX_MP_BUSSES) || (devfn > 255) || (reg > 255))
                return -EINVAL;
 
        spin_lock_irqsave(&pci_config_lock, flags);
@@ -42,11 +43,12 @@
        return 0;
 }
 
-static int pci_conf1_mq_write (int seg, int bus, int devfn, int reg, int len, 
u32 value)
+static int pci_conf1_mq_write(unsigned int seg, unsigned int bus,
+                             unsigned int devfn, int reg, int len, u32 value)
 {
        unsigned long flags;
 
-       if ((bus > MAX_MP_BUSSES) || (devfn > 255) || (reg > 255)) 
+       if ((bus >= MAX_MP_BUSSES) || (devfn > 255) || (reg > 255)) 
                return -EINVAL;
 
        spin_lock_irqsave(&pci_config_lock, flags);
diff -urN linux/arch/i386/pci/pcbios.c linux/arch/i386/pci/pcbios.c
--- linux/arch/i386/pci/pcbios.c        2005/01/25 04:27:56     1.11
+++ linux/arch/i386/pci/pcbios.c        2005/03/18 17:36:50     1.12
@@ -172,7 +172,8 @@
        return (int) (ret & 0xff00) >> 8;
 }
 
-static int pci_bios_read (int seg, int bus, int devfn, int reg, int len, u32 
*value)
+static int pci_bios_read(unsigned int seg, unsigned int bus,
+                        unsigned int devfn, int reg, int len, u32 *value)
 {
        unsigned long result = 0;
        unsigned long flags;
@@ -227,7 +228,8 @@
        return (int)((result & 0xff00) >> 8);
 }
 
-static int pci_bios_write (int seg, int bus, int devfn, int reg, int len, u32 
value)
+static int pci_bios_write(unsigned int seg, unsigned int bus,
+                         unsigned int devfn, int reg, int len, u32 value)
 {
        unsigned long result = 0;
        unsigned long flags;
diff -urN linux/arch/i386/power/cpu.c linux/arch/i386/power/cpu.c
--- linux/arch/i386/power/cpu.c 2004/10/25 20:44:14     1.5
+++ linux/arch/i386/power/cpu.c 2005/03/18 17:36:50     1.6
@@ -28,8 +28,7 @@
 
 static struct saved_context saved_context;
 
-unsigned long saved_context_eax, saved_context_ebx;
-unsigned long saved_context_ecx, saved_context_edx;
+unsigned long saved_context_ebx;
 unsigned long saved_context_esp, saved_context_ebp;
 unsigned long saved_context_esi, saved_context_edi;
 unsigned long saved_context_eflags;
diff -urN linux/arch/i386/power/swsusp.S linux/arch/i386/power/swsusp.S
--- linux/arch/i386/power/swsusp.S      2004/10/12 01:45:40     1.5
+++ linux/arch/i386/power/swsusp.S      2005/03/18 17:36:50     1.6
@@ -12,6 +12,7 @@
 #include <linux/linkage.h>
 #include <asm/segment.h>
 #include <asm/page.h>
+#include <asm/asm_offsets.h>
 
        .text
 
@@ -28,28 +29,28 @@
        ret
 
 ENTRY(swsusp_arch_resume)
-       movl $swsusp_pg_dir-__PAGE_OFFSET,%ecx
-       movl %ecx,%cr3
+       movl    $swsusp_pg_dir-__PAGE_OFFSET, %ecx
+       movl    %ecx, %cr3
 
-       movl    pagedir_nosave, %ebx
-       xorl    %eax, %eax
-       xorl    %edx, %edx
+       movl    pagedir_nosave, %edx
        .p2align 4,,7
 
 copy_loop:
-       movl    4(%ebx,%edx),%edi
-       movl    (%ebx,%edx),%esi
+       testl   %edx, %edx
+       jz      done
+
+       movl    pbe_address(%edx), %esi
+       movl    pbe_orig_address(%edx), %edi
 
        movl    $1024, %ecx
        rep
        movsl
 
-       incl    %eax
-       addl    $16, %edx
-       cmpl    nr_copy_pages,%eax
-       jb copy_loop
+       movl    pbe_next(%edx), %edx
+       jmp     copy_loop
        .p2align 4,,7
 
+done:
        movl saved_context_esp, %esp
        movl saved_context_ebp, %ebp
        movl saved_context_ebx, %ebx
diff -urN linux/arch/ia64/configs/sn2_defconfig 
linux/arch/ia64/configs/sn2_defconfig
--- linux/arch/ia64/configs/sn2_defconfig       2005/01/25 04:27:56     1.13
+++ linux/arch/ia64/configs/sn2_defconfig       2005/03/18 17:36:51     1.14
@@ -31,6 +31,7 @@
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
+CONFIG_CPUSETS=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
diff -urN linux/arch/ia64/hp/common/sba_iommu.c 
linux/arch/ia64/hp/common/sba_iommu.c
--- linux/arch/ia64/hp/common/sba_iommu.c       2005/01/25 04:27:56     1.26
+++ linux/arch/ia64/hp/common/sba_iommu.c       2005/03/18 17:36:51     1.27
@@ -157,6 +157,7 @@
 #define DELAYED_RESOURCE_CNT   64
 
 #define ZX1_IOC_ID     ((PCI_DEVICE_ID_HP_ZX1_IOC << 16) | PCI_VENDOR_ID_HP)
+#define ZX2_IOC_ID     ((PCI_DEVICE_ID_HP_ZX2_IOC << 16) | PCI_VENDOR_ID_HP)
 #define REO_IOC_ID     ((PCI_DEVICE_ID_HP_REO_IOC << 16) | PCI_VENDOR_ID_HP)
 #define SX1000_IOC_ID  ((PCI_DEVICE_ID_HP_SX1000_IOC << 16) | PCI_VENDOR_ID_HP)
 
@@ -1707,6 +1708,7 @@
 
 static struct ioc_iommu ioc_iommu_info[] __initdata = {
        { ZX1_IOC_ID, "zx1", ioc_zx1_init },
+       { ZX2_IOC_ID, "zx2", NULL },
        { SX1000_IOC_ID, "sx1000", NULL },
 };
 
diff -urN linux/arch/ia64/ia32/ia32_entry.S linux/arch/ia64/ia32/ia32_entry.S
--- linux/arch/ia64/ia32/ia32_entry.S   2005/01/25 04:27:57     1.38
+++ linux/arch/ia64/ia32/ia32_entry.S   2005/03/18 17:36:51     1.39
@@ -494,7 +494,7 @@
        data8 compat_sys_mq_notify
        data8 compat_sys_mq_getsetattr
        data8 sys_ni_syscall            /* reserved for kexec */
-       data8 sys32_waitid
+       data8 compat_sys_waitid
 
        // guard against failures to increase IA32_NR_syscalls
        .org ia32_syscall_table + 8*IA32_NR_syscalls
diff -urN linux/arch/ia64/ia32/ia32_signal.c linux/arch/ia64/ia32/ia32_signal.c
--- linux/arch/ia64/ia32/ia32_signal.c  2005/02/13 20:16:16     1.27
+++ linux/arch/ia64/ia32/ia32_signal.c  2005/03/18 17:36:51     1.28
@@ -778,7 +778,7 @@
                struct _fpstate * buf;
                err |= __get_user(buf, &sc->fpstate);
                if (buf) {
-                       if (verify_area(VERIFY_READ, buf, sizeof(*buf)))
+                       if (!access_ok(VERIFY_READ, buf, sizeof(*buf)))
                                goto badframe;
                        err |= restore_i387(buf);
                }
@@ -978,7 +978,7 @@
        sigset_t set;
        int eax;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
 
        if (__get_user(set.sig[0], &frame->sc.oldmask)
@@ -1010,7 +1010,7 @@
        sigset_t set;
        int eax;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/ia64/ia32/ia32priv.h linux/arch/ia64/ia32/ia32priv.h
--- linux/arch/ia64/ia32/ia32priv.h     2005/01/13 14:05:26     1.13
+++ linux/arch/ia64/ia32/ia32priv.h     2005/03/18 17:36:51     1.14
@@ -225,13 +225,6 @@
        unsigned int    st_ino_hi;
 };
 
-typedef union sigval32 {
-       int sival_int;
-       unsigned int sival_ptr;
-} sigval_t32;
-
-#define SIGEV_PAD_SIZE32 ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
-
 typedef struct compat_siginfo {
        int si_signo;
        int si_errno;
@@ -251,7 +244,7 @@
                        timer_t _tid;           /* timer id */
                        int _overrun;           /* overrun count */
                        char _pad[sizeof(unsigned int) - sizeof(int)];
-                       sigval_t32 _sigval;     /* same as below */
+                       compat_sigval_t _sigval;        /* same as below */
                        int _sys_private;       /* not to be passed to user */
                } _timer;
 
@@ -259,7 +252,7 @@
                struct {
                        unsigned int _pid;      /* sender's pid */
                        unsigned int _uid;      /* sender's uid */
-                       sigval_t32 _sigval;
+                       compat_sigval_t _sigval;
                } _rt;
 
                /* SIGCHLD */
@@ -284,19 +277,6 @@
        } _sifields;
 } compat_siginfo_t;
 
-typedef struct sigevent32 {
-       sigval_t32 sigev_value;
-       int sigev_signo;
-       int sigev_notify;
-       union {
-               int _pad[SIGEV_PAD_SIZE32];
-               struct {
-                       u32 _function;
-                       u32 _attribute; /* really pthread_attr_t */
-               } _sigev_thread;
-       } _sigev_un;
-} sigevent_t32;
-
 struct old_linux32_dirent {
        u32     d_ino;
        u32     d_offset;
diff -urN linux/arch/ia64/ia32/sys_ia32.c linux/arch/ia64/ia32/sys_ia32.c
--- linux/arch/ia64/ia32/sys_ia32.c     2005/02/13 20:16:16     1.72
+++ linux/arch/ia64/ia32/sys_ia32.c     2005/03/18 17:36:51     1.73
@@ -2402,12 +2402,11 @@
 {
        mm_segment_t old_fs = get_fs();
        struct epoll_event event64;
-       int error = -EFAULT;
+       int error;
        u32 data_halfword;
 
-       if ((error = verify_area(VERIFY_READ, event,
-                                sizeof(struct epoll_event32))))
-               return error;
+       if (!access_ok(VERIFY_READ, event, sizeof(struct epoll_event32)))
+               return -EFAULT;
 
        __get_user(event64.events, &event->events);
        __get_user(data_halfword, &event->data[0]);
@@ -2437,9 +2436,8 @@
        }
 
        /* Verify that the area passed by the user is writeable */
-       if ((error = verify_area(VERIFY_WRITE, events,
-                                maxevents * sizeof(struct epoll_event32))))
-               return error;
+       if (!access_ok(VERIFY_WRITE, events, maxevents * sizeof(struct 
epoll_event32)))
+               return -EFAULT;
 
        /*
         * Allocate space for the intermediate copy.  If the space needed
@@ -2592,7 +2590,7 @@
 }
 
 asmlinkage long
-sys32_timer_create(u32 clock, struct sigevent32 __user *se32, timer_t __user 
*timer_id)
+sys32_timer_create(u32 clock, struct compat_sigevent __user *se32, timer_t 
__user *timer_id)
 {
        struct sigevent se;
        mm_segment_t oldfs;
@@ -2602,12 +2600,7 @@
        if (se32 == NULL)
                return sys_timer_create(clock, NULL, timer_id);
 
-       memset(&se, 0, sizeof(struct sigevent));
-       if (get_user(se.sigev_value.sival_int,  &se32->sigev_value.sival_int) ||
-           __get_user(se.sigev_signo, &se32->sigev_signo) ||
-           __get_user(se.sigev_notify, &se32->sigev_notify) ||
-           __copy_from_user(&se._sigev_un._pad, &se32->_sigev_un._pad,
-           sizeof(se._sigev_un._pad)))
+       if (get_compat_sigevent(&se, se32))
                return -EFAULT;
 
        if (!access_ok(VERIFY_WRITE,timer_id,sizeof(timer_t)))
@@ -2633,32 +2626,6 @@
                               advice); 
 } 
 
-asmlinkage long sys32_waitid(int which, compat_pid_t pid,
-                            compat_siginfo_t __user *uinfo, int options,
-                            struct compat_rusage __user *uru)
-{
-       siginfo_t info;
-       struct rusage ru;
-       long ret;
-       mm_segment_t old_fs = get_fs();
-
-       info.si_signo = 0;
-       set_fs (KERNEL_DS);
-       ret = sys_waitid(which, pid, (siginfo_t __user *) &info, options,
-                        uru ? (struct rusage __user *) &ru : NULL);
-       set_fs (old_fs);
-
-       if (ret < 0 || info.si_signo == 0)
-               return ret;
-
-       if (uru && (ret = put_compat_rusage(&ru, uru)))
-               return ret;
-
-       BUG_ON(info.si_code & __SI_MASK);
-       info.si_code |= __SI_CHLD;
-       return copy_siginfo_to_user32(uinfo, &info);
-}
-
 #ifdef NOTYET  /* UNTESTED FOR IA64 FROM HERE DOWN */
 
 asmlinkage long sys32_setreuid(compat_uid_t ruid, compat_uid_t euid)
diff -urN linux/arch/ia64/kernel/ptrace.c linux/arch/ia64/kernel/ptrace.c
--- linux/arch/ia64/kernel/ptrace.c     2005/03/02 19:58:00     1.35
+++ linux/arch/ia64/kernel/ptrace.c     2005/03/18 17:36:51     1.36
@@ -1074,15 +1074,12 @@
        struct ia64_fpreg fpval;
        struct switch_stack *sw;
        struct pt_regs *pt;
-       long ret, retval;
+       long ret, retval = 0;
        char nat = 0;
        int i;
 
-       retval = verify_area(VERIFY_WRITE, ppr,
-                            sizeof(struct pt_all_user_regs));
-       if (retval != 0) {
+       if (!access_ok(VERIFY_WRITE, ppr, sizeof(struct pt_all_user_regs)))
                return -EIO;
-       }
 
        pt = ia64_task_regs(child);
        sw = (struct switch_stack *) (child->thread.ksp + 16);
@@ -1105,8 +1102,6 @@
            || access_uarea(child, PT_NAT_BITS, &nat_bits, 0))
                return -EIO;
 
-       retval = 0;
-
        /* control regs */
 
        retval |= __put_user(pt->cr_iip, &ppr->cr_iip);
@@ -1223,16 +1218,13 @@
        struct switch_stack *sw;
        struct ia64_fpreg fpval;
        struct pt_regs *pt;
-       long ret, retval;
+       long ret, retval = 0;
        int i;
 
        memset(&fpval, 0, sizeof(fpval));
 
-       retval = verify_area(VERIFY_READ, ppr,
-                            sizeof(struct pt_all_user_regs));
-       if (retval != 0) {
+       if (!access_ok(VERIFY_READ, ppr, sizeof(struct pt_all_user_regs)))
                return -EIO;
-       }
 
        pt = ia64_task_regs(child);
        sw = (struct switch_stack *) (child->thread.ksp + 16);
@@ -1246,8 +1238,6 @@
                return -EIO;
        }
 
-       retval = 0;
-
        /* control regs */
 
        retval |= __get_user(pt->cr_iip, &ppr->cr_iip);
diff -urN linux/arch/ia64/kernel/setup.c linux/arch/ia64/kernel/setup.c
--- linux/arch/ia64/kernel/setup.c      2005/02/13 20:16:16     1.46
+++ linux/arch/ia64/kernel/setup.c      2005/03/18 17:36:51     1.47
@@ -75,8 +75,6 @@
 EXPORT_SYMBOL(io_space);
 unsigned int num_io_spaces;
 
-unsigned char aux_device_present = 0xaa;        /* XXX remove this when legacy 
I/O is gone */
-
 /*
  * The merge_mask variable needs to be set to (max(iommu_page_size(iommu)) - 
1).  This
  * mask specifies a mask of address bits that must be 0 in order for two 
buffers to be
diff -urN linux/arch/ia64/kernel/smp.c linux/arch/ia64/kernel/smp.c
--- linux/arch/ia64/kernel/smp.c        2005/01/25 04:27:57     1.36
+++ linux/arch/ia64/kernel/smp.c        2005/03/18 17:36:51     1.37
@@ -227,7 +227,6 @@
 {
        on_each_cpu((void (*)(void *))local_flush_tlb_all, NULL, 1, 1);
 }
-EXPORT_SYMBOL(smp_flush_tlb_all);
 
 void
 smp_flush_tlb_mm (struct mm_struct *mm)
diff -urN linux/arch/ia64/kernel/smpboot.c linux/arch/ia64/kernel/smpboot.c
--- linux/arch/ia64/kernel/smpboot.c    2005/02/07 02:54:32     1.38
+++ linux/arch/ia64/kernel/smpboot.c    2005/03/18 17:36:51     1.39
@@ -427,26 +427,12 @@
 {
        int ticks;
        get_option (&str, &ticks);
-       cache_decay_ticks = ticks;
        return 1;
 }
 
 __setup("decay=", decay);
 
 /*
- * # of ticks an idle task is considered cache-hot.  Highly 
application-dependent.  There
- * are apps out there which are known to suffer significantly with values >= 4.
- */
-unsigned long cache_decay_ticks = 10;  /* equal to MIN_TIMESLICE */
-
-static void
-smp_tune_scheduling (void)
-{
-       printk(KERN_INFO "task migration cache decay timeout: %ld msecs.\n",
-              (cache_decay_ticks + 1) * 1000 / HZ);
-}
-
-/*
  * Initialize the logical CPU number to SAPICID mapping
  */
 void __init
@@ -544,7 +530,6 @@
        printk(KERN_INFO "Boot processor id 0x%x/0x%x\n", 0, boot_cpu_id);
 
        current_thread_info()->cpu = 0;
-       smp_tune_scheduling();
 
        /*
         * If SMP should be disabled, then really disable it!
diff -urN linux/arch/ia64/mm/contig.c linux/arch/ia64/mm/contig.c
--- linux/arch/ia64/mm/contig.c 2005/02/13 20:16:16     1.11
+++ linux/arch/ia64/mm/contig.c 2005/03/18 17:36:51     1.12
@@ -280,7 +280,7 @@
                vmem_map = (struct page *) vmalloc_end;
                efi_memmap_walk(create_mem_map_page_table, NULL);
 
-               mem_map = contig_page_data.node_mem_map = vmem_map;
+               NODE_DATA(0)->node_mem_map = vmem_map;
                free_area_init_node(0, &contig_page_data, zones_size,
                                    0, zholes_size);
 
diff -urN linux/arch/ia64/mm/extable.c linux/arch/ia64/mm/extable.c
--- linux/arch/ia64/mm/extable.c        2004/10/12 14:36:32     1.8
+++ linux/arch/ia64/mm/extable.c        2005/03/18 17:36:51     1.9
@@ -6,29 +6,29 @@
  */
 
 #include <linux/config.h>
+#include <linux/sort.h>
 
 #include <asm/uaccess.h>
 #include <asm/module.h>
 
-static inline int
-compare_entries (struct exception_table_entry *l, struct exception_table_entry 
*r)
+static int cmp_ex(const void *a, const void *b)
 {
+       const struct exception_table_entry *l = a, *r = b;
        u64 lip = (u64) &l->addr + l->addr;
        u64 rip = (u64) &r->addr + r->addr;
 
+       /* avoid overflow */
+       if (lip > rip)
+               return 1;
        if (lip < rip)
                return -1;
-       if (lip == rip)
-               return 0;
-       else
-               return 1;
+       return 0;
 }
 
-static inline void
-swap_entries (struct exception_table_entry *l, struct exception_table_entry *r)
+static void swap_ex(void *a, void *b, int size)
 {
+       struct exception_table_entry *l = a, *r = b, tmp;
        u64 delta = (u64) r - (u64) l;
-       struct exception_table_entry tmp;
 
        tmp = *l;
        l->addr = r->addr + delta;
@@ -38,23 +38,20 @@
 }
 
 /*
- * Sort the exception table.  It's usually already sorted, but there may be 
unordered
- * entries due to multiple text sections (such as the .init text section).  
Note that the
- * exception-table-entries contain location-relative addresses, which requires 
a bit of
- * care during sorting to avoid overflows in the offset members (e.g., it 
would not be
- * safe to make a temporary copy of an exception-table entry on the stack, 
because the
- * stack may be more than 2GB away from the exception-table).
+ * Sort the exception table. It's usually already sorted, but there
+ * may be unordered entries due to multiple text sections (such as the
+ * .init text section). Note that the exception-table-entries contain
+ * location-relative addresses, which requires a bit of care during
+ * sorting to avoid overflows in the offset members (e.g., it would
+ * not be safe to make a temporary copy of an exception-table entry on
+ * the stack, because the stack may be more than 2GB away from the
+ * exception-table).
  */
-void
-sort_extable (struct exception_table_entry *start, struct 
exception_table_entry *finish)
+void sort_extable (struct exception_table_entry *start,
+                  struct exception_table_entry *finish)
 {
-       struct exception_table_entry *p, *q;
-
-       /* insertion sort */
-       for (p = start + 1; p < finish; ++p)
-               /* start .. p-1 is sorted; push p down to it's proper place */
-               for (q = p; q > start && compare_entries(&q[0], &q[-1]) < 0; 
--q)
-                       swap_entries(&q[0], &q[-1]);
+       sort(start, finish - start, sizeof(struct exception_table_entry),
+            cmp_ex, swap_ex);
 }
 
 const struct exception_table_entry *
diff -urN linux/arch/ia64/mm/hugetlbpage.c linux/arch/ia64/mm/hugetlbpage.c
--- linux/arch/ia64/mm/hugetlbpage.c    2005/01/13 14:05:26     1.20
+++ linux/arch/ia64/mm/hugetlbpage.c    2005/03/18 17:36:51     1.21
@@ -244,7 +244,7 @@
                        continue;
                page = pte_page(*pte);
                put_page(page);
-               pte_clear(pte);
+               pte_clear(mm, address, pte);
        }
        mm->rss -= (end - start) >> PAGE_SHIFT;
        flush_tlb_range(vma, start, end);
diff -urN linux/arch/ia64/mm/tlb.c linux/arch/ia64/mm/tlb.c
--- linux/arch/ia64/mm/tlb.c    2005/01/25 04:27:57     1.24
+++ linux/arch/ia64/mm/tlb.c    2005/03/18 17:36:51     1.25
@@ -127,7 +127,6 @@
        local_irq_restore(flags);
        ia64_srlz_i();                  /* srlz.i implies srlz.d */
 }
-EXPORT_SYMBOL(local_flush_tlb_all);
 
 void
 flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned 
long end)
diff -urN linux/arch/ia64/pci/pci.c linux/arch/ia64/pci/pci.c
--- linux/arch/ia64/pci/pci.c   2005/02/13 20:16:16     1.29
+++ linux/arch/ia64/pci/pci.c   2005/03/18 17:36:51     1.30
@@ -3,9 +3,9 @@
  *
  * Derived from bios32.c of i386 tree.
  *
- * Copyright (C) 2002 Hewlett-Packard Co
+ * (c) Copyright 2002, 2005 Hewlett-Packard Development Company, L.P.
  *     David Mosberger-Tang <davidm@hpl.hp.com>
- *     Bjorn Helgaas <bjorn_helgaas@hp.com>
+ *     Bjorn Helgaas <bjorn.helgaas@hp.com>
  * Copyright (C) 2004 Silicon Graphics, Inc.
  *
  * Note: Above list of copyright holders is incomplete...
@@ -27,26 +27,12 @@
 #include <asm/segment.h>
 #include <asm/system.h>
 #include <asm/io.h>
-
 #include <asm/sal.h>
-
-
-#ifdef CONFIG_SMP
-# include <asm/smp.h>
-#endif
+#include <asm/smp.h>
 #include <asm/irq.h>
 #include <asm/hw_irq.h>
 
 
-#undef DEBUG
-#define DEBUG
-
-#ifdef DEBUG
-#define DBG(x...) printk(x)
-#else
-#define DBG(x...)
-#endif
-
 static int pci_routeirq;
 
 /*
@@ -55,23 +41,22 @@
  * synchronization mechanism here.
  */
 
-#define PCI_SAL_ADDRESS(seg, bus, devfn, reg)  \
-       ((u64)(seg << 24) | (u64)(bus << 16) |  \
-        (u64)(devfn << 8) | (u64)(reg))
+#define PCI_SAL_ADDRESS(seg, bus, devfn, reg)          \
+       (((u64) seg << 24) | (bus << 16) | (devfn << 8) | (reg))
 
 /* SAL 3.2 adds support for extended config space. */
 
 #define PCI_SAL_EXT_ADDRESS(seg, bus, devfn, reg)      \
-       ((u64)(seg << 28) | (u64)(bus << 20) |          \
-        (u64)(devfn << 12) | (u64)(reg))
+       (((u64) seg << 28) | (bus << 20) | (devfn << 12) | (reg))
 
 static int
-pci_sal_read (int seg, int bus, int devfn, int reg, int len, u32 *value)
+pci_sal_read (unsigned int seg, unsigned int bus, unsigned int devfn,
+             int reg, int len, u32 *value)
 {
-       u64 addr, mode, data = 0;
-       int result = 0;
+       u64 addr, data = 0;
+       int mode, result;
 
-       if ((seg > 65535) || (bus > 255) || (devfn > 255) || (reg > 4095))
+       if (!value || (seg > 65535) || (bus > 255) || (devfn > 255) || (reg > 
4095))
                return -EINVAL;
 
        if ((seg | reg) <= 255) {
@@ -82,16 +67,19 @@
                mode = 1;
        }
        result = ia64_sal_pci_config_read(addr, mode, len, &data);
+       if (result != 0)
+               return -EINVAL;
 
        *value = (u32) data;
-
-       return result;
+       return 0;
 }
 
 static int
-pci_sal_write (int seg, int bus, int devfn, int reg, int len, u32 value)
+pci_sal_write (unsigned int seg, unsigned int bus, unsigned int devfn,
+              int reg, int len, u32 value)
 {
-       u64 addr, mode;
+       u64 addr;
+       int mode, result;
 
        if ((seg > 65535) || (bus > 255) || (devfn > 255) || (reg > 4095))
                return -EINVAL;
@@ -103,7 +91,10 @@
                addr = PCI_SAL_EXT_ADDRESS(seg, bus, devfn, reg);
                mode = 1;
        }
-       return ia64_sal_pci_config_write(addr, mode, len, value);
+       result = ia64_sal_pci_config_write(addr, mode, len, value);
+       if (result != 0)
+               return -EINVAL;
+       return 0;
 }
 
 static struct pci_raw_ops pci_sal_ops = {
@@ -160,21 +151,11 @@
                 * also do it here in case there are still broken drivers that
                 * don't use pci_enable_device().
                 */
-               printk(KERN_INFO "** Routing PCI interrupts for all devices 
because \"pci=routeirq\"\n");
-               printk(KERN_INFO "** was specified.  If this was required to 
make a driver work,\n");
-               printk(KERN_INFO "** please email the output of \"lspci\" to 
bjorn.helgaas@hp.com\n");
-               printk(KERN_INFO "** so I can fix the driver.\n");
+               printk(KERN_INFO "PCI: Routing interrupts for all devices 
because \"pci=routeirq\" specified\n");
                for_each_pci_dev(dev)
                        acpi_pci_irq_enable(dev);
-       } else {
-               printk(KERN_INFO "** PCI interrupts are no longer routed 
automatically.  If this\n");
-               printk(KERN_INFO "** causes a device to stop working, it is 
probably because the\n");
-               printk(KERN_INFO "** driver failed to call pci_enable_device(). 
 As a temporary\n");
-               printk(KERN_INFO "** workaround, the \"pci=routeirq\" argument 
restores the old\n");
-               printk(KERN_INFO "** behavior.  If this argument makes the 
device work again,\n");
-               printk(KERN_INFO "** please email the output of \"lspci\" to 
bjorn.helgaas@hp.com\n");
-               printk(KERN_INFO "** so I can fix the driver.\n");
-       }
+       } else
+               printk(KERN_INFO "PCI: If a device doesn't work, try 
\"pci=routeirq\".  If it helps, post a report\n");
 
        return 0;
 }
diff -urN linux/arch/m32r/kernel/m32r_ksyms.c 
linux/arch/m32r/kernel/m32r_ksyms.c
--- linux/arch/m32r/kernel/m32r_ksyms.c 2004/10/12 01:45:41     1.1
+++ linux/arch/m32r/kernel/m32r_ksyms.c 2005/03/18 17:36:51     1.2
@@ -76,7 +76,6 @@
 
 /* TLB flushing */
 EXPORT_SYMBOL(smp_flush_tlb_page);
-EXPORT_SYMBOL_GPL(smp_flush_tlb_all);
 #endif
 
 /* compiler generated symbol */
diff -urN linux/arch/m32r/kernel/semaphore.c linux/arch/m32r/kernel/semaphore.c
--- linux/arch/m32r/kernel/semaphore.c  2004/10/12 01:45:41     1.1
+++ linux/arch/m32r/kernel/semaphore.c  2005/03/18 17:36:51     1.2
@@ -19,7 +19,7 @@
  *     as published by the Free Software Foundation; either version
  *     2 of the License, or (at your option) any later version.
  *
- * rw semaphores implemented November 1999 by Benjamin LaHaise 
<bcrl@redhat.com>
+ * rw semaphores implemented November 1999 by Benjamin LaHaise <bcrl@kvack.org>
  */
 #include <linux/config.h>
 #include <linux/sched.h>
diff -urN linux/arch/m32r/kernel/signal.c linux/arch/m32r/kernel/signal.c
--- linux/arch/m32r/kernel/signal.c     2005/01/13 14:05:27     1.3
+++ linux/arch/m32r/kernel/signal.c     2005/03/18 17:36:51     1.4
@@ -147,7 +147,7 @@
        stack_t st;
        int result;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/m32r/kernel/smpboot.c linux/arch/m32r/kernel/smpboot.c
--- linux/arch/m32r/kernel/smpboot.c    2005/01/13 14:05:27     1.3
+++ linux/arch/m32r/kernel/smpboot.c    2005/03/18 17:36:51     1.4
@@ -81,9 +81,6 @@
 /* Per CPU bogomips and other parameters */
 struct cpuinfo_m32r cpu_data[NR_CPUS] __cacheline_aligned;
 
-/* Set when the idlers are all forked */
-int smp_threads_ready;
-
 static int cpucount;
 static cpumask_t smp_commenced_mask;
 
@@ -106,8 +103,6 @@
 
 static unsigned int calibration_result;
 
-unsigned long cache_decay_ticks = HZ / 100;
-
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
 /* Function Prototypes                                                       */
 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
diff -urN linux/arch/m32r/kernel/sys_m32r.c linux/arch/m32r/kernel/sys_m32r.c
--- linux/arch/m32r/kernel/sys_m32r.c   2005/01/25 04:27:58     1.4
+++ linux/arch/m32r/kernel/sys_m32r.c   2005/03/18 17:36:51     1.5
@@ -171,9 +171,9 @@
        case SHMAT: {
                ulong raddr;
 
-               if ((ret = verify_area(VERIFY_WRITE, (ulong __user *) third,
-                                     sizeof(ulong))))
-                       return ret;
+               if (!access_ok(VERIFY_WRITE, (ulong __user *) third,
+                                     sizeof(ulong)))
+                       return -EFAULT;
                ret = do_shmat (first, (char __user *) ptr, second, &raddr);
                if (ret)
                        return ret;
diff -urN linux/arch/m32r/mm/init.c linux/arch/m32r/mm/init.c
--- linux/arch/m32r/mm/init.c   2005/01/13 14:05:27     1.3
+++ linux/arch/m32r/mm/init.c   2005/03/18 17:36:51     1.4
@@ -121,8 +121,6 @@
 
        free_area_init_node(0, NODE_DATA(0), zones_size, start_pfn, 0);
 
-       mem_map = contig_page_data.node_mem_map;
-
        return 0;
 }
 #else  /* CONFIG_DISCONTIGMEM */
diff -urN linux/arch/m68k/kernel/signal.c linux/arch/m68k/kernel/signal.c
--- linux/arch/m68k/kernel/signal.c     2004/09/19 12:30:04     1.31
+++ linux/arch/m68k/kernel/signal.c     2005/03/18 17:36:51     1.32
@@ -130,7 +130,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
@@ -142,7 +142,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
@@ -510,7 +510,7 @@
        sigset_t set;
        int d0;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__get_user(set.sig[0], &frame->sc.sc_mask) ||
            (_NSIG_WORDS > 1 &&
@@ -540,7 +540,7 @@
        sigset_t set;
        int d0;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/m68knommu/kernel/signal.c 
linux/arch/m68knommu/kernel/signal.c
--- linux/arch/m68knommu/kernel/signal.c        2004/11/15 11:49:18     1.11
+++ linux/arch/m68knommu/kernel/signal.c        2005/03/18 17:36:52     1.12
@@ -116,7 +116,7 @@
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
@@ -128,7 +128,7 @@
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
@@ -360,7 +360,7 @@
        sigset_t set;
        int d0;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__get_user(set.sig[0], &frame->sc.sc_mask) ||
            (_NSIG_WORDS > 1 &&
@@ -392,7 +392,7 @@
        sigset_t set;
        int d0;
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
                goto badframe;
diff -urN linux/arch/mips/Kconfig linux/arch/mips/Kconfig
--- linux/arch/mips/Kconfig     2005/03/04 17:24:32     1.144
+++ linux/arch/mips/Kconfig     2005/03/18 17:36:52     1.145
@@ -1419,6 +1419,23 @@
        bool
        default y if MIPS32_O32 || MIPS32_N32
 
+config SECCOMP
+       bool "Enable seccomp to safely compute untrusted bytecode"
+       depends on PROC_FS && BROKEN
+       default y
+       help
+         This kernel feature is useful for number crunching applications
+         that may need to compute untrusted bytecode during their
+         execution. By using pipes or other transports made available to
+         the process as file descriptors supporting the read/write
+         syscalls, it's possible to isolate those applications in
+         their own address space using seccomp. Once seccomp is
+         enabled via /proc/<pid>/seccomp, it cannot be disabled
+         and the task is only allowed to execute a few safe syscalls
+         defined by each seccomp mode.
+
+         If unsure, say Y. Only embedded should say N here.
+
 config PM
        bool "Power Management support (EXPERIMENTAL)"
        depends on EXPERIMENTAL && SOC_AU1X00
diff -urN linux/arch/mips/defconfig linux/arch/mips/defconfig
--- linux/arch/mips/defconfig   2005/03/02 18:12:08     1.285
+++ linux/arch/mips/defconfig   2005/03/18 17:36:52     1.286
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:17 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:23 2005
 #
 CONFIG_MIPS=y
 
@@ -22,7 +22,6 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
@@ -30,6 +29,7 @@
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -39,6 +39,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -177,10 +178,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -442,7 +439,7 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 
 #
-# IPv6: Netfilter Configuration
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
 #
 CONFIG_IP6_NF_QUEUE=m
 CONFIG_IP6_NF_IPTABLES=m
@@ -511,6 +508,7 @@
 CONFIG_NET_QOS=y
 CONFIG_NET_ESTIMATOR=y
 CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
 CONFIG_NET_CLS_TCINDEX=m
 CONFIG_NET_CLS_ROUTE4=m
 CONFIG_NET_CLS_ROUTE=y
@@ -521,6 +519,7 @@
 # CONFIG_CLS_U32_MARK is not set
 CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
 # CONFIG_NET_CLS_ACT is not set
 CONFIG_NET_CLS_POLICE=y
 
@@ -601,18 +600,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=y
-# CONFIG_SERIO_CT82C710 is not set
-CONFIG_SERIO_LIBPS2=y
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -630,6 +617,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -681,6 +679,11 @@
 CONFIG_MAX_RAW_DEVS=256
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -738,10 +741,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -944,7 +943,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -967,6 +968,7 @@
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=m
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
diff -urN linux/arch/mips/configs/atlas_defconfig 
linux/arch/mips/configs/atlas_defconfig
--- linux/arch/mips/configs/atlas_defconfig     2005/03/02 18:12:08     1.49
+++ linux/arch/mips/configs/atlas_defconfig     2005/03/18 17:36:52     1.50
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:19 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:24 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -177,10 +178,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -324,7 +321,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
@@ -336,7 +332,6 @@
 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
 # CONFIG_SCSI_SYM53C8XX_IOMAPPED 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
@@ -368,6 +363,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
@@ -536,7 +533,7 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 
 #
-# IPv6: Netfilter Configuration
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
 #
 CONFIG_IP6_NF_QUEUE=m
 CONFIG_IP6_NF_IPTABLES=m
@@ -635,6 +632,7 @@
 CONFIG_NET_QOS=y
 CONFIG_NET_ESTIMATOR=y
 CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
 CONFIG_NET_CLS_TCINDEX=m
 CONFIG_NET_CLS_ROUTE4=m
 CONFIG_NET_CLS_ROUTE=y
@@ -645,6 +643,7 @@
 # CONFIG_CLS_U32_MARK is not set
 CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
 # CONFIG_NET_CLS_ACT is not set
 CONFIG_NET_CLS_POLICE=y
 
@@ -774,19 +773,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-CONFIG_SERIO_RAW=y
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -799,6 +785,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -845,6 +843,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -887,13 +890,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
@@ -1088,7 +1087,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -1110,6 +1111,7 @@
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=m
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
diff -urN linux/arch/mips/configs/capcella_defconfig 
linux/arch/mips/configs/capcella_defconfig
--- linux/arch/mips/configs/capcella_defconfig  2005/03/02 18:12:08     1.49
+++ linux/arch/mips/configs/capcella_defconfig  2005/03/18 17:36:52     1.50
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:19 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:25 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -111,6 +112,7 @@
 # CONFIG_VICTOR_MPC30X is not set
 CONFIG_ZAO_CAPCELLA=y
 CONFIG_PCI_VR41XX=y
+# CONFIG_GPIO_VR41XX is not set
 CONFIG_VRC4173=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
@@ -176,10 +178,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -460,19 +458,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=m
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -482,6 +467,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=m
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -502,6 +499,7 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_VR41XX is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -540,6 +538,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -582,13 +585,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
@@ -710,7 +709,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/cobalt_defconfig 
linux/arch/mips/configs/cobalt_defconfig
--- linux/arch/mips/configs/cobalt_defconfig    2005/03/02 18:12:08     1.46
+++ linux/arch/mips/configs/cobalt_defconfig    2005/03/18 17:36:52     1.47
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:20 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:26 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -165,10 +166,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -446,19 +443,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=y
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -468,6 +452,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -514,6 +510,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -556,13 +557,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
@@ -684,7 +681,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/db1000_defconfig 
linux/arch/mips/configs/db1000_defconfig
--- linux/arch/mips/configs/db1000_defconfig    2005/03/02 18:12:08     1.52
+++ linux/arch/mips/configs/db1000_defconfig    2005/03/18 17:36:52     1.53
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:20 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:27 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -202,8 +203,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -502,18 +503,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -523,6 +512,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -574,6 +574,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -616,12 +621,9 @@
 #
 # USB support
 #
-# CONFIG_USB_ARCH_HAS_HCD is not set
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
 # USB Gadget Support
@@ -799,7 +801,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -822,6 +826,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_BLOWFISH is not set
 CONFIG_CRYPTO_TWOFISH=y
diff -urN linux/arch/mips/configs/db1100_defconfig 
linux/arch/mips/configs/db1100_defconfig
--- linux/arch/mips/configs/db1100_defconfig    2005/03/02 18:12:08     1.50
+++ linux/arch/mips/configs/db1100_defconfig    2005/03/18 17:36:52     1.51
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:21 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:27 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -200,8 +201,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -500,18 +501,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=y
-# CONFIG_SERIO_CT82C710 is not set
-CONFIG_SERIO_LIBPS2=m
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -521,6 +510,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=m
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -569,6 +569,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -611,12 +616,9 @@
 #
 # USB support
 #
-# CONFIG_USB_ARCH_HAS_HCD is not set
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
 # USB Gadget Support
@@ -794,7 +796,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -817,6 +821,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_BLOWFISH is not set
 CONFIG_CRYPTO_TWOFISH=y
diff -urN linux/arch/mips/configs/db1500_defconfig 
linux/arch/mips/configs/db1500_defconfig
--- linux/arch/mips/configs/db1500_defconfig    2005/03/02 18:12:08     1.54
+++ linux/arch/mips/configs/db1500_defconfig    2005/03/18 17:36:52     1.55
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:22 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:28 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -210,8 +211,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -564,19 +565,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -586,6 +574,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -636,6 +636,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -704,6 +709,8 @@
 #
 # USB support
 #
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB=y
 # CONFIG_USB_DEBUG is not set
 
@@ -714,14 +721,14 @@
 # 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
 #
 # CONFIG_USB_EHCI_HCD 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
 
@@ -777,6 +784,7 @@
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
 # CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=m
 
 #
 # USB port drivers
@@ -982,7 +990,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -1005,6 +1015,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_BLOWFISH is not set
 CONFIG_CRYPTO_TWOFISH=y
diff -urN linux/arch/mips/configs/db1550_defconfig 
linux/arch/mips/configs/db1550_defconfig
--- linux/arch/mips/configs/db1550_defconfig    2005/03/02 18:12:08     1.29
+++ linux/arch/mips/configs/db1550_defconfig    2005/03/18 17:36:52     1.30
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:22 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:29 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -210,8 +211,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -603,19 +604,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -625,6 +613,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -675,6 +675,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -711,13 +716,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
@@ -895,7 +896,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -918,6 +921,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_BLOWFISH is not set
 CONFIG_CRYPTO_TWOFISH=y
diff -urN linux/arch/mips/configs/ddb5476_defconfig 
linux/arch/mips/configs/ddb5476_defconfig
--- linux/arch/mips/configs/ddb5476_defconfig   2005/03/02 18:12:08     1.46
+++ linux/arch/mips/configs/ddb5476_defconfig   2005/03/18 17:36:52     1.47
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:23 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:30 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -167,11 +168,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-CONFIG_PCMCIA_PROBE=y
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -466,19 +462,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=y
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -488,6 +471,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -534,6 +529,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -561,6 +561,10 @@
 # Graphics support
 #
 CONFIG_FB=y
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SOFT_CURSOR is not set
 # CONFIG_FB_MODE_HELPERS is not set
 # CONFIG_FB_TILEBLITTING is not set
 # CONFIG_FB_CIRRUS is not set
@@ -568,6 +572,7 @@
 # CONFIG_FB_CYBER2000 is not set
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
+# CONFIG_FB_NVIDIA is not set
 # CONFIG_FB_RIVA is not set
 # CONFIG_FB_MATROX is not set
 # CONFIG_FB_RADEON_OLD is not set
@@ -606,13 +611,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
@@ -731,7 +732,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE="ip=any"
 
diff -urN linux/arch/mips/configs/ddb5477_defconfig 
linux/arch/mips/configs/ddb5477_defconfig
--- linux/arch/mips/configs/ddb5477_defconfig   2005/03/02 18:12:08     1.46
+++ linux/arch/mips/configs/ddb5477_defconfig   2005/03/18 17:36:52     1.47
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:23 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:30 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -166,10 +167,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -447,19 +444,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=y
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -469,6 +453,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -515,6 +511,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -557,13 +558,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
@@ -685,7 +682,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE="ip=any"
 
diff -urN linux/arch/mips/configs/decstation_defconfig 
linux/arch/mips/configs/decstation_defconfig
--- linux/arch/mips/configs/decstation_defconfig        2005/03/02 18:12:08     
1.47
+++ linux/arch/mips/configs/decstation_defconfig        2005/03/18 17:36:52     
1.48
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:24 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:31 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -165,10 +166,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -422,18 +419,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -443,6 +428,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -487,6 +483,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -533,10 +534,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -663,7 +660,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/e55_defconfig 
linux/arch/mips/configs/e55_defconfig
--- linux/arch/mips/configs/e55_defconfig       2005/03/02 18:12:08     1.48
+++ linux/arch/mips/configs/e55_defconfig       2005/03/18 17:36:52     1.49
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:24 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:32 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -110,6 +111,7 @@
 # CONFIG_TANBAC_TB0229 is not set
 # CONFIG_VICTOR_MPC30X is not set
 # CONFIG_ZAO_CAPCELLA is not set
+# CONFIG_GPIO_VR41XX is not set
 # CONFIG_VRC4171 is not set
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
@@ -172,11 +174,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-CONFIG_PCMCIA_PROBE=y
-
-#
 # PCI Hotplug Support
 #
 
@@ -440,18 +437,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -461,6 +446,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -481,6 +477,7 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_VR41XX is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -519,6 +516,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -566,10 +568,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -688,7 +686,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/ev64120_defconfig 
linux/arch/mips/configs/ev64120_defconfig
--- linux/arch/mips/configs/ev64120_defconfig   2005/03/02 18:12:08     1.45
+++ linux/arch/mips/configs/ev64120_defconfig   2005/03/18 17:36:52     1.46
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:25 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:33 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -174,10 +175,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -441,19 +438,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -463,6 +447,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -509,6 +505,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -551,13 +552,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
@@ -676,7 +673,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs rw 
nfsroot=192.168.1.1:/mnt/disk2/fs.gal ip=192.168.1.211:192.168.1.1:::gt::"
 
diff -urN linux/arch/mips/configs/ev96100_defconfig 
linux/arch/mips/configs/ev96100_defconfig
--- linux/arch/mips/configs/ev96100_defconfig   2005/03/02 18:12:08     1.46
+++ linux/arch/mips/configs/ev96100_defconfig   2005/03/18 17:36:52     1.47
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:26 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:33 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -174,10 +175,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -398,18 +395,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -419,6 +404,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -464,6 +460,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -510,10 +511,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -630,7 +627,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/ip22_defconfig 
linux/arch/mips/configs/ip22_defconfig
--- linux/arch/mips/configs/ip22_defconfig      2005/03/02 18:12:08     1.55
+++ linux/arch/mips/configs/ip22_defconfig      2005/03/18 17:36:52     1.56
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:26 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:34 2005
 #
 CONFIG_MIPS=y
 
@@ -22,7 +22,6 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
@@ -30,6 +29,7 @@
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -39,6 +39,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -177,10 +178,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -442,7 +439,7 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 
 #
-# IPv6: Netfilter Configuration
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
 #
 CONFIG_IP6_NF_QUEUE=m
 CONFIG_IP6_NF_IPTABLES=m
@@ -511,6 +508,7 @@
 CONFIG_NET_QOS=y
 CONFIG_NET_ESTIMATOR=y
 CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
 CONFIG_NET_CLS_TCINDEX=m
 CONFIG_NET_CLS_ROUTE4=m
 CONFIG_NET_CLS_ROUTE=y
@@ -521,6 +519,7 @@
 # CONFIG_CLS_U32_MARK is not set
 CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
 # CONFIG_NET_CLS_ACT is not set
 CONFIG_NET_CLS_POLICE=y
 
@@ -601,18 +600,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=y
-# CONFIG_SERIO_CT82C710 is not set
-CONFIG_SERIO_LIBPS2=y
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -630,6 +617,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -681,6 +679,11 @@
 CONFIG_MAX_RAW_DEVS=256
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -738,10 +741,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -944,7 +943,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -967,6 +968,7 @@
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=m
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
@@ -981,7 +983,7 @@
 CONFIG_CRYPTO_DEFLATE=y
 CONFIG_CRYPTO_MICHAEL_MIC=m
 CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_TEST is not set
 
 #
 # Hardware crypto devices
diff -urN linux/arch/mips/configs/ip27_defconfig 
linux/arch/mips/configs/ip27_defconfig
--- linux/arch/mips/configs/ip27_defconfig      2005/03/02 18:12:08     1.59
+++ linux/arch/mips/configs/ip27_defconfig      2005/03/18 17:36:52     1.60
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:27 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:35 2005
 #
 CONFIG_MIPS=y
 
@@ -22,14 +22,15 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=15
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+CONFIG_CPUSETS=y
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -39,6 +40,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -183,10 +185,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -307,7 +305,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
@@ -315,7 +312,6 @@
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_SYM53C8XX_2 is not set
 # CONFIG_SCSI_IPR is not set
-CONFIG_SCSI_QLOGIC_ISP=y
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 CONFIG_SCSI_QLA2XXX=y
@@ -346,6 +342,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
@@ -437,6 +435,7 @@
 CONFIG_NET_QOS=y
 CONFIG_NET_ESTIMATOR=y
 CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
 CONFIG_NET_CLS_TCINDEX=m
 CONFIG_NET_CLS_ROUTE4=m
 CONFIG_NET_CLS_ROUTE=y
@@ -446,6 +445,7 @@
 # CONFIG_NET_CLS_IND is not set
 CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
 # CONFIG_NET_CLS_ACT is not set
 CONFIG_NET_CLS_POLICE=y
 
@@ -546,25 +546,16 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 CONFIG_SERIO=y
 # CONFIG_SERIO_I8042 is not set
 CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
 # CONFIG_SERIO_PCIPS2 is not set
 CONFIG_SERIO_LIBPS2=m
 CONFIG_SERIO_RAW=m
-
-#
-# Input Device Drivers
-#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
@@ -617,6 +608,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -653,13 +649,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
@@ -811,7 +803,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=15
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -834,6 +828,7 @@
 CONFIG_CRYPTO_SHA256=y
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_BLOWFISH=y
 CONFIG_CRYPTO_TWOFISH=y
@@ -848,7 +843,7 @@
 CONFIG_CRYPTO_DEFLATE=y
 CONFIG_CRYPTO_MICHAEL_MIC=y
 CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_TEST is not set
 
 #
 # Hardware crypto devices
diff -urN linux/arch/mips/configs/ip32_defconfig 
linux/arch/mips/configs/ip32_defconfig
--- linux/arch/mips/configs/ip32_defconfig      2005/03/02 18:12:08     1.49
+++ linux/arch/mips/configs/ip32_defconfig      2005/03/18 17:36:52     1.50
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:27 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:36 2005
 #
 CONFIG_MIPS=y
 
@@ -23,13 +23,13 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -39,6 +39,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -171,10 +172,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -301,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
@@ -309,7 +305,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
@@ -507,27 +502,26 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
 #
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 CONFIG_SERIO=y
 # CONFIG_SERIO_I8042 is not set
 CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
 # CONFIG_SERIO_PCIPS2 is not set
 # CONFIG_SERIO_MACEPS2 is not set
 # CONFIG_SERIO_LIBPS2 is not set
 CONFIG_SERIO_RAW=y
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
@@ -576,6 +570,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -618,13 +617,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
@@ -755,7 +750,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/it8172_defconfig 
linux/arch/mips/configs/it8172_defconfig
--- linux/arch/mips/configs/it8172_defconfig    2005/03/02 18:12:08     1.45
+++ linux/arch/mips/configs/it8172_defconfig    2005/03/18 17:36:52     1.46
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:28 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:36 2005
 #
 CONFIG_MIPS=y
 
@@ -23,13 +23,13 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -39,6 +39,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -171,10 +172,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -201,8 +198,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_PARTITIONS is not set
 # CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
 
 #
 # User Modules And Translation Layers
@@ -486,18 +483,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -507,6 +492,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -556,6 +552,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -622,10 +623,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -744,7 +741,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/ivr_defconfig 
linux/arch/mips/configs/ivr_defconfig
--- linux/arch/mips/configs/ivr_defconfig       2005/03/02 18:12:08     1.45
+++ linux/arch/mips/configs/ivr_defconfig       2005/03/18 17:36:52     1.46
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:28 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:37 2005
 #
 CONFIG_MIPS=y
 
@@ -23,13 +23,13 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -39,6 +39,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -171,10 +172,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -454,19 +451,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -476,6 +460,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -523,6 +519,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -565,13 +566,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
@@ -690,7 +687,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/jaguar-atx_defconfig 
linux/arch/mips/configs/jaguar-atx_defconfig
--- linux/arch/mips/configs/jaguar-atx_defconfig        2005/03/02 18:12:08     
1.50
+++ linux/arch/mips/configs/jaguar-atx_defconfig        2005/03/18 17:36:52     
1.51
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:29 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:38 2005
 #
 CONFIG_MIPS=y
 
@@ -21,7 +21,6 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
@@ -29,6 +28,7 @@
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -180,10 +181,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -303,7 +300,14 @@
 # CONFIG_INET_IPCOMP is not set
 CONFIG_INET_TUNNEL=m
 CONFIG_IP_TCPDIAG=m
-# CONFIG_IP_TCPDIAG_IPV6 is not set
+CONFIG_IP_TCPDIAG_IPV6=y
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
@@ -428,20 +432,11 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
+# CONFIG_SERIO is not set
 # CONFIG_GAMEPORT is not set
 CONFIG_SOUND_GAMEPORT=y
-# CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
-# Input Device Drivers
-#
 
 #
 # Character devices
@@ -488,6 +483,10 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -524,13 +523,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
@@ -630,7 +625,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -644,7 +641,31 @@
 #
 # Cryptographic options
 #
-# CONFIG_CRYPTO is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
 
 #
 # Hardware crypto devices
@@ -655,6 +676,8 @@
 #
 # CONFIG_CRC_CCITT is not set
 # CONFIG_CRC32 is not set
-# CONFIG_LIBCRC32C is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
diff -urN linux/arch/mips/configs/jmr3927_defconfig 
linux/arch/mips/configs/jmr3927_defconfig
--- linux/arch/mips/configs/jmr3927_defconfig   2005/03/04 17:24:32     1.46
+++ linux/arch/mips/configs/jmr3927_defconfig   2005/03/18 17:36:52     1.47
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:29 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:39 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -162,10 +163,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -423,19 +420,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=y
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -445,6 +429,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -455,7 +451,6 @@
 # CONFIG_ROCKETPORT is not set
 # CONFIG_CYCLADES is not set
 # CONFIG_DIGIEPCA is not set
-# CONFIG_DIGI is not set
 # CONFIG_MOXA_INTELLIO is not set
 # CONFIG_MOXA_SMARTIO is not set
 # CONFIG_ISI is not set
@@ -508,6 +503,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -535,6 +535,10 @@
 # Graphics support
 #
 CONFIG_FB=y
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SOFT_CURSOR is not set
 # CONFIG_FB_MODE_HELPERS is not set
 # CONFIG_FB_TILEBLITTING is not set
 # CONFIG_FB_CIRRUS is not set
@@ -542,6 +546,7 @@
 # CONFIG_FB_CYBER2000 is not set
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
+# CONFIG_FB_NVIDIA is not set
 # CONFIG_FB_RIVA is not set
 # CONFIG_FB_MATROX is not set
 # CONFIG_FB_RADEON_OLD is not set
@@ -579,13 +584,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
@@ -701,7 +702,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/lasat200_defconfig 
linux/arch/mips/configs/lasat200_defconfig
--- linux/arch/mips/configs/lasat200_defconfig  2005/03/02 18:12:08     1.46
+++ linux/arch/mips/configs/lasat200_defconfig  2005/03/18 17:36:52     1.47
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:30 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:39 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -177,10 +178,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -208,8 +205,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -553,19 +550,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -575,6 +559,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -621,6 +617,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -663,13 +664,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
@@ -795,7 +792,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/malta_defconfig 
linux/arch/mips/configs/malta_defconfig
--- linux/arch/mips/configs/malta_defconfig     2005/03/02 18:12:08     1.48
+++ linux/arch/mips/configs/malta_defconfig     2005/03/18 17:36:52     1.49
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:31 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:40 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -178,10 +179,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -359,7 +356,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
@@ -367,7 +363,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=m
@@ -399,6 +394,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
@@ -567,7 +564,7 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 
 #
-# IPv6: Netfilter Configuration
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
 #
 CONFIG_IP6_NF_QUEUE=m
 CONFIG_IP6_NF_IPTABLES=m
@@ -666,6 +663,7 @@
 CONFIG_NET_QOS=y
 CONFIG_NET_ESTIMATOR=y
 CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
 CONFIG_NET_CLS_TCINDEX=m
 CONFIG_NET_CLS_ROUTE4=m
 CONFIG_NET_CLS_ROUTE=y
@@ -676,6 +674,7 @@
 # CONFIG_CLS_U32_MARK is not set
 CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
 # CONFIG_NET_CLS_ACT is not set
 CONFIG_NET_CLS_POLICE=y
 
@@ -805,19 +804,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -827,6 +813,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -872,6 +870,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -914,13 +917,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
@@ -1115,7 +1114,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -1137,6 +1138,7 @@
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=m
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
diff -urN linux/arch/mips/configs/mpc30x_defconfig 
linux/arch/mips/configs/mpc30x_defconfig
--- linux/arch/mips/configs/mpc30x_defconfig    2005/03/02 18:12:08     1.50
+++ linux/arch/mips/configs/mpc30x_defconfig    2005/03/18 17:36:52     1.51
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:32 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:41 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -111,6 +112,7 @@
 CONFIG_VICTOR_MPC30X=y
 # CONFIG_ZAO_CAPCELLA is not set
 CONFIG_PCI_VR41XX=y
+# CONFIG_GPIO_VR41XX is not set
 CONFIG_VRC4173=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
@@ -176,10 +178,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -438,19 +436,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -460,6 +445,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -480,6 +477,7 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_VR41XX is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -506,6 +504,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -548,13 +551,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
@@ -673,7 +672,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -696,6 +697,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_BLOWFISH is not set
 CONFIG_CRYPTO_TWOFISH=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/03/02 18:12:08     1.18
+++ linux/arch/mips/configs/ocelot_3_defconfig  2005/03/18 17:36:52     1.19
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:32 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:42 2005
 #
 CONFIG_MIPS=y
 
@@ -22,7 +22,6 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
@@ -30,6 +29,7 @@
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -39,6 +39,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -181,10 +182,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -300,7 +297,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
@@ -308,7 +304,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=m
@@ -397,7 +392,7 @@
 # CONFIG_IP_NF_ARPTABLES is not set
 
 #
-# IPv6: Netfilter Configuration
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
 #
 # CONFIG_IP6_NF_QUEUE is not set
 # CONFIG_IP6_NF_IPTABLES is not set
@@ -471,7 +466,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
@@ -562,19 +556,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_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -584,6 +565,18 @@
 # 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_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -629,6 +622,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -656,6 +654,10 @@
 # Graphics support
 #
 CONFIG_FB=y
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SOFT_CURSOR is not set
 CONFIG_FB_MODE_HELPERS=y
 # CONFIG_FB_TILEBLITTING is not set
 # CONFIG_FB_CIRRUS is not set
@@ -663,6 +665,7 @@
 # CONFIG_FB_CYBER2000 is not set
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
+# CONFIG_FB_NVIDIA is not set
 # CONFIG_FB_RIVA is not set
 # CONFIG_FB_MATROX is not set
 # CONFIG_FB_RADEON_OLD is not set
@@ -706,13 +709,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
@@ -892,7 +891,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE="ip=any root=nfs"
 
diff -urN linux/arch/mips/configs/ocelot_c_defconfig 
linux/arch/mips/configs/ocelot_c_defconfig
--- linux/arch/mips/configs/ocelot_c_defconfig  2005/03/02 18:12:08     1.44
+++ linux/arch/mips/configs/ocelot_c_defconfig  2005/03/18 17:36:52     1.45
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:33 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:43 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -168,10 +169,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -433,19 +430,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=y
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -455,6 +439,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -501,6 +497,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -543,13 +544,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
@@ -671,7 +668,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/ocelot_defconfig 
linux/arch/mips/configs/ocelot_defconfig
--- linux/arch/mips/configs/ocelot_defconfig    2005/03/02 18:12:08     1.46
+++ linux/arch/mips/configs/ocelot_defconfig    2005/03/18 17:36:52     1.47
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:33 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:44 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -171,10 +172,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -394,18 +391,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=y
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -415,6 +400,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -460,6 +456,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -506,10 +507,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -629,7 +626,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/ocelot_g_defconfig 
linux/arch/mips/configs/ocelot_g_defconfig
--- linux/arch/mips/configs/ocelot_g_defconfig  2005/03/02 18:12:08     1.39
+++ linux/arch/mips/configs/ocelot_g_defconfig  2005/03/18 17:36:52     1.40
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:34 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:45 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -171,10 +172,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -436,19 +433,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=y
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -458,6 +442,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -504,6 +500,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -546,13 +547,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
@@ -674,7 +671,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/osprey_defconfig 
linux/arch/mips/configs/osprey_defconfig
--- linux/arch/mips/configs/osprey_defconfig    2005/03/02 18:12:08     1.45
+++ linux/arch/mips/configs/osprey_defconfig    2005/03/18 17:36:52     1.46
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:34 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:46 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -164,10 +165,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -388,18 +385,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -409,6 +394,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -429,6 +425,7 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_VR41XX is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -454,6 +451,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -500,10 +502,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -623,7 +621,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE="ip=bootp ether=46,0x03fe0300,eth0"
 
diff -urN linux/arch/mips/configs/pb1100_defconfig 
linux/arch/mips/configs/pb1100_defconfig
--- linux/arch/mips/configs/pb1100_defconfig    2005/03/02 18:12:08     1.48
+++ linux/arch/mips/configs/pb1100_defconfig    2005/03/18 17:36:52     1.49
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:35 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:47 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -204,8 +205,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -496,18 +497,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -517,6 +506,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -565,6 +565,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -607,12 +612,9 @@
 #
 # USB support
 #
-# CONFIG_USB_ARCH_HAS_HCD is not set
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
 # USB Gadget Support
@@ -790,7 +792,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -813,6 +817,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_BLOWFISH is not set
 CONFIG_CRYPTO_TWOFISH=y
diff -urN linux/arch/mips/configs/pb1500_defconfig 
linux/arch/mips/configs/pb1500_defconfig
--- linux/arch/mips/configs/pb1500_defconfig    2005/03/02 18:12:08     1.54
+++ linux/arch/mips/configs/pb1500_defconfig    2005/03/18 17:36:52     1.55
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:36 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:48 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -211,8 +212,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -599,19 +600,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -621,6 +609,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -671,6 +671,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -707,13 +712,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
@@ -891,7 +892,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -914,6 +917,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_BLOWFISH is not set
 CONFIG_CRYPTO_TWOFISH=y
diff -urN linux/arch/mips/configs/pb1550_defconfig 
linux/arch/mips/configs/pb1550_defconfig
--- linux/arch/mips/configs/pb1550_defconfig    2005/03/02 18:12:08     1.44
+++ linux/arch/mips/configs/pb1550_defconfig    2005/03/18 17:36:52     1.45
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:36 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:49 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -211,8 +212,8 @@
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -591,19 +592,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -613,6 +601,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -663,6 +663,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -699,13 +704,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
@@ -883,7 +884,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -906,6 +909,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_BLOWFISH is not set
 CONFIG_CRYPTO_TWOFISH=y
diff -urN linux/arch/mips/configs/rm200_defconfig 
linux/arch/mips/configs/rm200_defconfig
--- linux/arch/mips/configs/rm200_defconfig     2005/03/02 18:12:08     1.55
+++ linux/arch/mips/configs/rm200_defconfig     2005/03/18 17:36:52     1.56
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:37 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:50 2005
 #
 CONFIG_MIPS=y
 
@@ -23,7 +23,6 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
@@ -31,6 +30,7 @@
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -40,6 +40,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -184,11 +185,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-CONFIG_PCMCIA_PROBE=y
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -221,11 +217,11 @@
 #
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
 CONFIG_PARPORT_SERIAL=m
 # CONFIG_PARPORT_PC_FIFO is not set
 # CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_OTHER is not set
+CONFIG_PARPORT_NOT_PC=y
+# CONFIG_PARPORT_GSC is not set
 CONFIG_PARPORT_1284=y
 
 #
@@ -355,7 +351,6 @@
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_DTC3280 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_GENERIC_NCR5380 is not set
@@ -377,7 +372,6 @@
 # CONFIG_SCSI_PAS16 is not set
 # CONFIG_SCSI_PSI240I is not set
 # CONFIG_SCSI_QLOGIC_FAS 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
@@ -417,6 +411,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
@@ -549,7 +545,7 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 
 #
-# IPv6: Netfilter Configuration
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
 #
 CONFIG_IP6_NF_QUEUE=m
 CONFIG_IP6_NF_IPTABLES=m
@@ -644,6 +640,7 @@
 CONFIG_NET_QOS=y
 CONFIG_NET_ESTIMATOR=y
 CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
 CONFIG_NET_CLS_TCINDEX=m
 CONFIG_NET_CLS_ROUTE4=m
 CONFIG_NET_CLS_ROUTE=y
@@ -654,6 +651,7 @@
 # CONFIG_CLS_U32_MARK is not set
 CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
 # CONFIG_NET_CLS_ACT is not set
 CONFIG_NET_CLS_POLICE=y
 
@@ -827,20 +825,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=y
-# CONFIG_SERIO_CT82C710 is not set
-CONFIG_SERIO_PARKBD=m
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -861,6 +845,19 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_PARKBD=m
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -914,6 +911,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -962,6 +964,8 @@
 #
 # USB support
 #
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB=m
 # CONFIG_USB_DEBUG is not set
 
@@ -972,8 +976,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
@@ -982,6 +984,8 @@
 # CONFIG_USB_EHCI_SPLIT_ISO is not set
 # CONFIG_USB_EHCI_ROOT_HUB_TT is not set
 CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_UHCI_HCD=m
 # CONFIG_USB_SL811_HCD is not set
 
@@ -1001,7 +1005,7 @@
 CONFIG_USB_STORAGE_DATAFAB=y
 CONFIG_USB_STORAGE_FREECOM=y
 CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_HP8200e=y
+# CONFIG_USB_STORAGE_USBAT is not set
 CONFIG_USB_STORAGE_SDDR09=y
 CONFIG_USB_STORAGE_SDDR55=y
 CONFIG_USB_STORAGE_JUMPSHOT=y
@@ -1078,6 +1082,7 @@
 # USB Network Adapters
 #
 CONFIG_USB_AX8817X=y
+CONFIG_USB_MON=m
 
 #
 # USB port drivers
@@ -1142,6 +1147,7 @@
 CONFIG_USB_PHIDGETKIT=m
 CONFIG_USB_PHIDGETSERVO=m
 # CONFIG_USB_IDMOUSE is not set
+CONFIG_USB_SISUSBVGA=m
 CONFIG_USB_TEST=m
 
 #
@@ -1366,7 +1372,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
@@ -1389,6 +1397,7 @@
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=m
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
@@ -1403,7 +1412,7 @@
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_MICHAEL_MIC=m
 # CONFIG_CRYPTO_CRC32C is not set
-CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_TEST is not set
 
 #
 # Hardware crypto devices
diff -urN linux/arch/mips/configs/sb1250-swarm_defconfig 
linux/arch/mips/configs/sb1250-swarm_defconfig
--- linux/arch/mips/configs/sb1250-swarm_defconfig      2005/03/02 18:12:08     
1.52
+++ linux/arch/mips/configs/sb1250-swarm_defconfig      2005/03/18 17:36:52     
1.53
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:37 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:51 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,14 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=15
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
+CONFIG_CPUSETS=y
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +39,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -191,10 +193,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -470,25 +468,16 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 CONFIG_SERIO=y
 # CONFIG_SERIO_I8042 is not set
 CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
 # CONFIG_SERIO_PCIPS2 is not set
 # CONFIG_SERIO_LIBPS2 is not set
 CONFIG_SERIO_RAW=m
-
-#
-# Input Device Drivers
-#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
 
 #
 # Character devices
@@ -540,6 +529,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -576,13 +570,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
@@ -705,7 +695,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=15
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 # CONFIG_SB1XXX_CORELIS is not set
@@ -729,6 +721,7 @@
 CONFIG_CRYPTO_SHA256=y
 CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_BLOWFISH=y
 CONFIG_CRYPTO_TWOFISH=y
diff -urN linux/arch/mips/configs/sead_defconfig 
linux/arch/mips/configs/sead_defconfig
--- linux/arch/mips/configs/sead_defconfig      2005/03/02 18:12:08     1.44
+++ linux/arch/mips/configs/sead_defconfig      2005/03/18 17:36:52     1.45
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:38 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:52 2005
 #
 CONFIG_MIPS=y
 
@@ -21,12 +21,12 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -36,6 +36,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -159,10 +160,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -270,20 +267,11 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
+# CONFIG_SERIO is not set
 # CONFIG_GAMEPORT is not set
 CONFIG_SOUND_GAMEPORT=y
-# CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
-# Input Device Drivers
-#
 
 #
 # Character devices
@@ -329,6 +317,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -368,10 +361,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -478,7 +467,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/tb0226_defconfig 
linux/arch/mips/configs/tb0226_defconfig
--- linux/arch/mips/configs/tb0226_defconfig    2005/03/02 18:12:08     1.48
+++ linux/arch/mips/configs/tb0226_defconfig    2005/03/18 17:36:52     1.49
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:38 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:53 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -110,6 +111,7 @@
 # CONFIG_TANBAC_TB0229 is not set
 # CONFIG_VICTOR_MPC30X is not set
 # CONFIG_ZAO_CAPCELLA is not set
+# CONFIG_GPIO_VR41XX is not set
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_HAVE_DEC_LOCK=y
@@ -172,10 +174,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -462,18 +460,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -483,6 +469,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -503,6 +500,7 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_VR41XX is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -528,6 +526,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -555,6 +558,10 @@
 # Graphics support
 #
 CONFIG_FB=y
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SOFT_CURSOR is not set
 # CONFIG_FB_MODE_HELPERS is not set
 # CONFIG_FB_TILEBLITTING is not set
 # CONFIG_FB_VIRTUAL is not set
@@ -594,10 +601,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -767,7 +770,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/tb0229_defconfig 
linux/arch/mips/configs/tb0229_defconfig
--- linux/arch/mips/configs/tb0229_defconfig    2005/03/02 18:12:08     1.51
+++ linux/arch/mips/configs/tb0229_defconfig    2005/03/18 17:36:52     1.52
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:39 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:54 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -108,10 +109,10 @@
 # CONFIG_IBM_WORKPAD is not set
 # CONFIG_TANBAC_TB0226 is not set
 CONFIG_TANBAC_TB0229=y
-CONFIG_TANBAC_TB0219=y
 # CONFIG_VICTOR_MPC30X is not set
 # CONFIG_ZAO_CAPCELLA is not set
 CONFIG_PCI_VR41XX=y
+# CONFIG_GPIO_VR41XX is not set
 # CONFIG_VRC4173 is not set
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
@@ -177,10 +178,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -476,19 +473,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -498,6 +482,18 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -518,6 +514,7 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_VR41XX is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -536,6 +533,7 @@
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
+CONFIG_TANBAC_TB0219=y
 
 #
 # Ftape, the floppy tape device driver
@@ -544,6 +542,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -586,13 +589,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
@@ -779,7 +778,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE="mem=64M console=ttyS0,38400 ip=bootp root=/dev/nfs"
 
diff -urN linux/arch/mips/configs/workpad_defconfig 
linux/arch/mips/configs/workpad_defconfig
--- linux/arch/mips/configs/workpad_defconfig   2005/03/02 18:12:08     1.48
+++ linux/arch/mips/configs/workpad_defconfig   2005/03/18 17:36:52     1.49
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:40 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:54 2005
 #
 CONFIG_MIPS=y
 
@@ -22,13 +22,13 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -38,6 +38,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -110,6 +111,7 @@
 # CONFIG_TANBAC_TB0229 is not set
 # CONFIG_VICTOR_MPC30X is not set
 # CONFIG_ZAO_CAPCELLA is not set
+# CONFIG_GPIO_VR41XX is not set
 CONFIG_VRC4171=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
@@ -172,11 +174,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-CONFIG_PCMCIA_PROBE=y
-
-#
 # PCI Hotplug Support
 #
 
@@ -440,18 +437,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=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -461,6 +446,17 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -481,6 +477,7 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_VR41XX is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -519,6 +516,11 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -566,10 +568,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; 
see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -692,7 +690,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 CONFIG_CROSSCOMPILE=y
 CONFIG_CMDLINE=""
 
diff -urN linux/arch/mips/configs/yosemite_defconfig 
linux/arch/mips/configs/yosemite_defconfig
--- linux/arch/mips/configs/yosemite_defconfig  2005/03/02 18:12:08     1.50
+++ linux/arch/mips/configs/yosemite_defconfig  2005/03/18 17:36:52     1.51
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Wed Mar  2 18:07:40 2005
+# Linux kernel version: 2.6.12-rc1
+# Fri Mar 18 15:41:55 2005
 #
 CONFIG_MIPS=y
 
@@ -21,15 +21,16 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+# CONFIG_CPUSETS is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -39,6 +40,7 @@
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -178,10 +180,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 
@@ -303,7 +301,14 @@
 # CONFIG_INET_IPCOMP is not set
 CONFIG_INET_TUNNEL=m
 CONFIG_IP_TCPDIAG=m
-# CONFIG_IP_TCPDIAG_IPV6 is not set
+CONFIG_IP_TCPDIAG_IPV6=y
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
@@ -409,20 +414,11 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
+# CONFIG_SERIO is not set
 # CONFIG_GAMEPORT is not set
 CONFIG_SOUND_GAMEPORT=y
-# CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
-# Input Device Drivers
-#
 
 #
 # Character devices
@@ -470,6 +466,10 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -506,13 +506,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
@@ -613,8 +609,10 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_MAGIC_SYSRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_DEBUG_SLAB is not set
 # CONFIG_DEBUG_SPINLOCK is not set
@@ -639,7 +637,31 @@
 #
 # Cryptographic options
 #
-# CONFIG_CRYPTO is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
 
 #
 # Hardware crypto devices
@@ -650,6 +672,8 @@
 #
 # CONFIG_CRC_CCITT is not set
 # CONFIG_CRC32 is not set
-# CONFIG_LIBCRC32C is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
diff -urN linux/arch/mips/kernel/ptrace.c linux/arch/mips/kernel/ptrace.c
--- linux/arch/mips/kernel/ptrace.c     2005/03/01 21:20:47     1.59
+++ linux/arch/mips/kernel/ptrace.c     2005/03/18 17:36:53     1.60
@@ -25,6 +25,8 @@
 #include <linux/smp_lock.h>
 #include <linux/user.h>
 #include <linux/security.h>
+#include <linux/audit.h>
+#include <linux/seccomp.h>
 
 #include <asm/cpu.h>
 #include <asm/fpu.h>
@@ -305,6 +307,12 @@
  */
 asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
 {
+       /* There is no ->orig_eax and that's quite intensional for now making
+          this work will require some work in various other place before it's
+          more than a placebo.  */
+       /* do the secure computing check first */
+       secure_computing(regs->orig_eax);
+
        if (unlikely(current->audit_context)) {
                if (!entryexit)
                        audit_syscall_entry(current, regs->orig_eax,
diff -urN linux/arch/mips/kernel/setup.c linux/arch/mips/kernel/setup.c
--- linux/arch/mips/kernel/setup.c      2005/01/08 00:44:19     1.178
+++ linux/arch/mips/kernel/setup.c      2005/03/18 17:36:53     1.179
@@ -86,8 +86,8 @@
 unsigned long isa_slot_offset;
 EXPORT_SYMBOL(isa_slot_offset);
 
-static struct resource code_resource = { "Kernel code" };
-static struct resource data_resource = { "Kernel data" };
+static struct resource code_resource = { .name = "Kernel code", };
+static struct resource data_resource = { .name = "Kernel data", };
 
 void __init add_memory_region(phys_t start, phys_t size, long type)
 {
diff -urN linux/arch/mips/kernel/signal32.c linux/arch/mips/kernel/signal32.c
--- linux/arch/mips/kernel/signal32.c   2005/03/04 19:36:51     1.26
+++ linux/arch/mips/kernel/signal32.c   2005/03/18 17:36:53     1.27
@@ -32,11 +32,6 @@
 
 #define SI_PAD_SIZE32   ((SI_MAX_SIZE/sizeof(int)) - 3)
 
-typedef union sigval32 {
-       int sival_int;
-       s32 sival_ptr;
-} sigval_t32;
-
 typedef struct compat_siginfo {
        int si_signo;
        int si_code;
@@ -83,7 +78,7 @@
                struct {
                        timer_t _tid;           /* timer id */
                        int _overrun;           /* overrun count */
-                       sigval_t32 _sigval;     /* same as below */
+                       compat_sigval_t _sigval;/* same as below */
                        int _sys_private;       /* not to be passed to user */
                } _timer;
 
@@ -91,7 +86,7 @@
                struct {
                        compat_pid_t _pid;      /* sender's pid */
                        compat_uid_t _uid;      /* sender's uid */
-                       sigval_t32 _sigval;
+                       compat_sigval_t _sigval;
                } _rt;
 
        } _sifields;
diff -urN linux/arch/mips/kernel/smp.c linux/arch/mips/kernel/smp.c
--- linux/arch/mips/kernel/smp.c        2005/03/03 12:22:58     1.76
+++ linux/arch/mips/kernel/smp.c        2005/03/18 17:36:53     1.77
@@ -46,9 +46,6 @@
 EXPORT_SYMBOL(phys_cpu_present_map);
 EXPORT_SYMBOL(cpu_online_map);
 
-cycles_t cacheflush_time;
-unsigned long cache_decay_ticks;
-
 static void smp_tune_scheduling (void)
 {
        struct cache_desc *cd = &current_cpu_data.scache;
@@ -71,25 +68,10 @@
         *  L1 cache), on PIIs it's around 50-100 usecs, depending on
         *  the cache size)
         */
-       if (!cpu_khz) {
-               /*
-                * This basically disables processor-affinity scheduling on SMP
-                * without a cycle counter.  Currently all SMP capable MIPS
-                * processors have a cycle counter.
-                */
-               cacheflush_time = 0;
+       if (!cpu_khz)
                return;
-       }
 
        cachesize = cd->linesz * cd->sets * cd->ways;
-       cacheflush_time = (cpu_khz>>10) * (cachesize<<10) / bandwidth;
-       cache_decay_ticks = (long)cacheflush_time/cpu_khz * HZ / 1000;
-
-       printk("per-CPU timeslice cutoff: %ld.%02ld usecs.\n",
-               (long)cacheflush_time/(cpu_khz/1000),
-               ((long)cacheflush_time*100/(cpu_khz/1000)) % 100);
-       printk("task migration cache decay timeout: %ld msecs.\n",
-               (cache_decay_ticks + 1) * 1000 / HZ);
 }
 
 extern void __init calibrate_delay(void);
diff -urN linux/arch/mips/math-emu/dsemul.c linux/arch/mips/math-emu/dsemul.c
--- linux/arch/mips/math-emu/dsemul.c   2005/03/17 21:50:49     1.7
+++ linux/arch/mips/math-emu/dsemul.c   2005/03/18 17:36:53     1.8
@@ -139,7 +139,6 @@
 
        if (unlikely(err || (insn != BADINST) || (cookie != BD_COOKIE))) {
                fpuemuprivate.stats.errors++;
-
                return 0;
        }
 
diff -urN linux/arch/mips/mm/c-r3k.c linux/arch/mips/mm/c-r3k.c
--- linux/arch/mips/mm/c-r3k.c  2004/09/10 21:47:50     1.22
+++ linux/arch/mips/mm/c-r3k.c  2005/03/18 17:36:53     1.23
@@ -254,8 +254,7 @@
 {
 }
 
-static void r3k_flush_cache_page(struct vm_area_struct *vma,
-       unsigned long page)
+static void r3k_flush_cache_page(struct vm_area_struct *vma, unsigned long 
page, unsigned long pfn)
 {
 }
 
diff -urN linux/arch/mips/mm/c-r4k.c linux/arch/mips/mm/c-r4k.c
--- linux/arch/mips/mm/c-r4k.c  2005/03/01 21:20:47     1.106
+++ linux/arch/mips/mm/c-r4k.c  2005/03/18 17:36:53     1.107
@@ -435,8 +435,7 @@
        }
 }
 
-static void r4k_flush_cache_page(struct vm_area_struct *vma,
-       unsigned long page)
+static void r4k_flush_cache_page(struct vm_area_struct *vma, unsigned long 
page, unsigned long pfn)
 {
        struct flush_cache_page_args args;
 
diff -urN linux/arch/mips/mm/c-sb1.c linux/arch/mips/mm/c-sb1.c
--- linux/arch/mips/mm/c-sb1.c  2005/03/04 19:36:53     1.56
+++ linux/arch/mips/mm/c-sb1.c  2005/03/18 17:36:53     1.57
@@ -160,8 +160,7 @@
  * dcache first, then invalidate the icache.  If the page isn't
  * executable, nothing is required.
  */
-static void local_sb1_flush_cache_page(struct vm_area_struct *vma,
-       unsigned long addr)
+static void local_sb1_flush_cache_page(struct vm_area_struct *vma, unsigned 
long addr, unsigned long pfn)
 {
        int cpu = smp_processor_id();
 
@@ -183,17 +182,18 @@
 struct flush_cache_page_args {
        struct vm_area_struct *vma;
        unsigned long addr;
+       unsigned long pfn;
 };
 
 static void sb1_flush_cache_page_ipi(void *info)
 {
        struct flush_cache_page_args *args = info;
 
-       local_sb1_flush_cache_page(args->vma, args->addr);
+       local_sb1_flush_cache_page(args->vma, args->addr, args->pfn);
 }
 
 /* Dirty dcache could be on another CPU, so do the IPIs */
-static void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long 
addr)
+static void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long 
addr, unsigned long pfn)
 {
        struct flush_cache_page_args args;
 
@@ -203,10 +203,11 @@
        addr &= PAGE_MASK;
        args.vma = vma;
        args.addr = addr;
+       args.pfn = pfn;
        on_each_cpu(sb1_flush_cache_page_ipi, (void *) &args, 1, 1);
 }
 #else
-void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr)
+void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr, 
unsigned long pfn)
        __attribute__((alias("local_sb1_flush_cache_page")));
 #endif
 
diff -urN linux/arch/mips/mm/c-tx39.c linux/arch/mips/mm/c-tx39.c
--- linux/arch/mips/mm/c-tx39.c 2004/11/03 16:46:18     1.28
+++ linux/arch/mips/mm/c-tx39.c 2005/03/18 17:36:53     1.29
@@ -178,8 +178,7 @@
        }
 }
 
-static void tx39_flush_cache_page(struct vm_area_struct *vma,
-                                  unsigned long page)
+static void tx39_flush_cache_page(struct vm_area_struct *vma, unsigned long 
page, unsigned long pfn)
 {
        int exec = vma->vm_flags & VM_EXEC;
        struct mm_struct *mm = vma->vm_mm;
diff -urN linux/arch/mips/mm/cache.c linux/arch/mips/mm/cache.c
--- linux/arch/mips/mm/cache.c  2005/03/17 21:50:49     1.19
+++ linux/arch/mips/mm/cache.c  2005/03/18 17:36:53     1.20
@@ -23,7 +23,8 @@
 void (*flush_cache_mm)(struct mm_struct *mm);
 void (*flush_cache_range)(struct vm_area_struct *vma, unsigned long start,
        unsigned long end);
-void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page);
+void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page,
+       unsigned long pfn);
 void (*flush_icache_range)(unsigned long __user start,
        unsigned long __user end);
 void (*flush_icache_page)(struct vm_area_struct *vma, struct page *page);
diff -urN linux/arch/mips/mm/highmem.c linux/arch/mips/mm/highmem.c
--- linux/arch/mips/mm/highmem.c        2005/01/13 14:05:30     1.8
+++ linux/arch/mips/mm/highmem.c        2005/03/18 17:36:53     1.9
@@ -75,7 +75,7 @@
         * force other mappings to Oops if they'll try to access
         * this pte without first remap it
         */
-       pte_clear(kmap_pte-idx);
+       pte_clear(&init_mm, vaddr, kmap_pte-idx);
        local_flush_tlb_one(vaddr);
 #endif
 
diff -urN linux/arch/mips/mm/init.c linux/arch/mips/mm/init.c
--- linux/arch/mips/mm/init.c   2005/02/21 10:56:34     1.74
+++ linux/arch/mips/mm/init.c   2005/03/18 17:36:53     1.75
@@ -82,9 +82,6 @@
 pte_t *kmap_pte;
 pgprot_t kmap_prot;
 
-EXPORT_SYMBOL(kmap_prot);
-EXPORT_SYMBOL(kmap_pte);
-
 #define kmap_get_fixmap_pte(vaddr)                                     \
        pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), 
(vaddr)), (vaddr))
 
diff -urN linux/arch/mips/pci/fixup-mpc30x.c linux/arch/mips/pci/fixup-mpc30x.c
--- linux/arch/mips/pci/fixup-mpc30x.c  2004/10/31 16:07:33     1.4
+++ linux/arch/mips/pci/fixup-mpc30x.c  2005/03/18 17:36:53     1.5
@@ -29,7 +29,7 @@
        VRC4173_USB_IRQ,
 };
 
-static char irq_tab_mpc30x[] __initdata = {
+static const int irq_tab_mpc30x[] __initdata = {
  [12] = VRC4173_PCMCIA1_IRQ,
  [13] = VRC4173_PCMCIA2_IRQ,
  [29] = MQ200_IRQ,
diff -urN linux/arch/mips/pmc-sierra/yosemite/ht.c 
linux/arch/mips/pmc-sierra/yosemite/ht.c
--- linux/arch/mips/pmc-sierra/yosemite/ht.c    2004/08/24 15:10:06     1.4
+++ linux/arch/mips/pmc-sierra/yosemite/ht.c    2005/03/18 17:36:53     1.5
@@ -303,7 +303,7 @@
                 if (!r->start && r->end) {
                         printk(KERN_ERR
                                "PCI: Device %s not available because of "
-                               "resource collisions\n", dev->slot_name);
+                               "resource collisions\n", pci_name(dev));
                         return -EINVAL;
                 }
                 if (r->flags & IORESOURCE_IO)
@@ -377,7 +377,7 @@
             ((new & PCI_BASE_ADDRESS_SPACE_IO) ? PCI_BASE_ADDRESS_IO_MASK :
              PCI_BASE_ADDRESS_MEM_MASK)) {
                 printk(KERN_ERR "PCI: Error while updating region "
-                       "%s/%d (%08x != %08x)\n", dev->slot_name, resource,
+                       "%s/%d (%08x != %08x)\n", pci_name(dev), resource,
                        new, check);
         }
 }
@@ -396,7 +396,7 @@
                    addresses kilobyte aligned.  */
                 if (size > 0x100) {
                         printk(KERN_ERR "PCI: I/O Region %s/%d too large"
-                               " (%ld bytes)\n", dev->slot_name,
+                               " (%ld bytes)\n", pci_name(dev),
                                 dev->resource - res, size);
                 }
 
diff -urN linux/arch/mips/vr4181/Kconfig linux/arch/mips/vr4181/Kconfig
--- linux/arch/mips/vr4181/Kconfig      2005/01/30 20:45:36     1.1
+++ linux/arch/mips/vr4181/Kconfig      2005/03/18 17:36:54     1.2
@@ -59,9 +59,3 @@
          The TANBAC TB0229 (VR4131DIMM) is a MIPS-based platform manufactured
          by TANBAC.  Please refer to <http://www.tanbac.co.jp/> about
          VR4131DIMM.
-
-config TANBAC_TB0219
-       bool "Added TANBAC TB0219 Base board support"
-       depends on TANBAC_TB0229
-       select SYS_SUPPORTS_32BIT_KERNEL
-       select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
diff -urN linux/arch/mips/vr41xx/Kconfig linux/arch/mips/vr41xx/Kconfig
--- linux/arch/mips/vr41xx/Kconfig      2005/03/07 18:58:15     1.2
+++ linux/arch/mips/vr41xx/Kconfig      2005/03/18 17:36:54     1.3
@@ -65,13 +65,6 @@
          by TANBAC.  Please refer to <http://www.tanbac.co.jp/> about
          VR4131DIMM.
 
-config TANBAC_TB0219
-       bool "Added TANBAC TB0219 Base board support"
-       depends on TANBAC_TB0229
-       select SYS_SUPPORTS_32BIT_KERNEL
-       select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
-       select SYS_SUPPORTS_LITTLE_ENDIAN
-
 config VICTOR_MPC30X
        bool "Support for Victor MP-C303/304"
        depends on MACH_VR41XX
diff -urN linux/arch/parisc/Kconfig linux/arch/parisc/Kconfig
--- linux/arch/parisc/Kconfig   2005/01/25 04:28:00     1.26
+++ linux/arch/parisc/Kconfig   2005/03/18 17:36:54     1.27
@@ -6,8 +6,7 @@
 mainmenu "Linux/PA-RISC Kernel Configuration"
 
 config PARISC
-       bool
-       default y
+       def_bool y
        help
          The PA-RISC microprocessor is designed by Hewlett-Packard and used
          in many of their workstations & servers (HP9000 700 and 800 series,
@@ -15,19 +14,16 @@
          at <http://www.parisc-linux.org/>.
 
 config MMU
-       bool
-       default y
+       def_bool y
 
 config STACK_GROWSUP
-       bool
-       default y
+       def_bool y
 
 config UID16
        bool
 
 config RWSEM_GENERIC_SPINLOCK
-       bool
-       default y
+       def_bool y
 
 config RWSEM_XCHGADD_ALGORITHM
        bool
@@ -111,7 +107,7 @@
        def_bool y
        depends on PA8X00
 
-config PARISC64
+config 64BIT
        bool "64-bit kernel"
        depends on PA8X00
        help
@@ -124,9 +120,6 @@
          enable this option otherwise. The 64bit kernel is significantly bigger
          and slower than the 32bit one.
 
-config 64BIT
-       def_bool PARISC64
-
 config SMP
        bool "Symmetric multi-processing support"
        ---help---
@@ -166,13 +159,12 @@
        default n
 
 config COMPAT
-       bool
-       depends on PARISC64
-       default y
+       def_bool y
+       depends on 64BIT
 
 config HPUX
        bool "Support for HP-UX binaries"
-       depends on !PARISC64
+       depends on !64BIT
 
 config NR_CPUS
        int "Maximum number of CPUs (2-32)"
diff -urN linux/arch/parisc/Makefile linux/arch/parisc/Makefile
--- linux/arch/parisc/Makefile  2004/11/15 11:49:19     1.19
+++ linux/arch/parisc/Makefile  2005/03/18 17:36:54     1.20
@@ -17,9 +17,12 @@
 # Mike Shaver, Helge Deller and Martin K. Petersen
 #
 NM             = sh $(srctree)/arch/parisc/nm
-ifdef CONFIG_PARISC64
+CHECKFLAGS     += -D__hppa__=1
+
+ifdef CONFIG_64BIT
 CROSS_COMPILE  := hppa64-linux-
 UTS_MACHINE    := parisc64
+CHECKFLAGS     += -D__LP64__=1 -m64
 else
 MACHINE := $(subst 64,,$(shell uname -m))
 ifneq ($(MACHINE),parisc)
@@ -65,8 +68,12 @@
 
 drivers-$(CONFIG_OPROFILE)             += arch/parisc/oprofile/
 
+PALO := $(shell if which palo; then : ; \
+       elif [ -x /sbin/palo ]; then echo /sbin/palo; \
+       fi)
+
 palo: vmlinux
-       @if [ $$(palo -f /dev/null >/dev/null 2>&1 ; echo $$?) != 2 ]; then \
+       @if [ -x $PALO ]; then \
                echo 'ERROR: Please install palo first (apt-get install palo)';\
                echo 'or build it from source and install it somewhere in your 
$$PATH';\
                false; \
@@ -78,7 +85,7 @@
                echo 'WARNING: the "lifimage" file is now placed in this 
directory by default!'; \
                false; \
        fi
-       palo -f ./palo.conf
+       $(PALO) -f ./palo.conf
 
 oldpalo: vmlinux
        export TOPDIR=`pwd`; \
diff -urN linux/arch/parisc/configs/a500_defconfig 
linux/arch/parisc/configs/a500_defconfig
--- linux/arch/parisc/configs/a500_defconfig    2005/01/25 04:28:00     1.7
+++ linux/arch/parisc/configs/a500_defconfig    2005/03/18 17:36:54     1.8
@@ -1,12 +1,15 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.10-pa5
-# Wed Jan  5 13:22:34 2005
+# Linux kernel version: 2.6.11-rc4-pa1
+# Wed Feb 16 11:32:49 2005
 #
 CONFIG_PARISC=y
 CONFIG_MMU=y
 CONFIG_STACK_GROWSUP=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
 
 #
 # Code maturity level options
@@ -68,7 +71,6 @@
 CONFIG_PA8X00=y
 CONFIG_PA20=y
 CONFIG_PREFETCH=y
-CONFIG_PARISC64=y
 CONFIG_64BIT=y
 CONFIG_SMP=y
 CONFIG_HOTPLUG_CPU=y
@@ -87,16 +89,12 @@
 CONFIG_PCI_LBA=y
 CONFIG_IOSAPIC=y
 CONFIG_IOMMU_SBA=y
-# CONFIG_SUPERIO is not set
-# CONFIG_CHASSIS_LCD_LED is not set
-CONFIG_PDC_CHASSIS=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
 #
 CONFIG_PCCARD=m
 # CONFIG_PCMCIA_DEBUG is not set
-# CONFIG_PCMCIA_OBSOLETE is not set
 CONFIG_PCMCIA=m
 CONFIG_CARDBUS=y
 
@@ -107,6 +105,7 @@
 CONFIG_PD6729=m
 CONFIG_I82092=m
 CONFIG_TCIC=m
+CONFIG_PCCARD_NONSTATIC=m
 
 #
 # PCI Hotplug Support
@@ -114,6 +113,14 @@
 # CONFIG_HOTPLUG_PCI is not set
 
 #
+# PA-RISC specific drivers
+#
+# CONFIG_SUPERIO is not set
+# CONFIG_CHASSIS_LCD_LED is not set
+CONFIG_PDC_CHASSIS=y
+CONFIG_PDC_STABLE=y
+
+#
 # Executable file formats
 #
 CONFIG_BINFMT_ELF=y
@@ -153,6 +160,7 @@
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
 CONFIG_BLK_DEV_UMEM=m
+# CONFIG_BLK_DEV_COW_COMMON is not set
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
@@ -171,6 +179,7 @@
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
 CONFIG_IOSCHED_CFQ=y
+# CONFIG_ATA_OVER_ETH is not set
 
 #
 # ATA/ATAPI/MFM/RLL support
@@ -205,6 +214,7 @@
 #
 CONFIG_SCSI_SPI_ATTRS=y
 CONFIG_SCSI_FC_ATTRS=m
+CONFIG_SCSI_ISCSI_ATTRS=m
 
 #
 # SCSI low-level drivers
@@ -231,10 +241,10 @@
 # CONFIG_SCSI_INITIO is not set
 # CONFIG_SCSI_INIA100 is not set
 CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
 CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_IOMAPPED=y
+# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
 # CONFIG_SCSI_IPR is not set
 # CONFIG_SCSI_PCI2000 is not set
 # CONFIG_SCSI_PCI2220I is not set
@@ -249,7 +259,6 @@
 CONFIG_SCSI_QLA2300=m
 CONFIG_SCSI_QLA2322=m
 CONFIG_SCSI_QLA6312=m
-CONFIG_SCSI_QLA6322=m
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 CONFIG_SCSI_DEBUG=m
@@ -399,8 +408,6 @@
 CONFIG_IP_NF_ARPTABLES=m
 CONFIG_IP_NF_ARPFILTER=m
 CONFIG_IP_NF_ARP_MANGLE=m
-# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
 CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
 
@@ -465,7 +472,7 @@
 #
 CONFIG_NET_TULIP=y
 CONFIG_DE2104X=m
-CONFIG_TULIP=m
+CONFIG_TULIP=y
 # CONFIG_TULIP_MWI is not set
 CONFIG_TULIP_MMIO=y
 # CONFIG_TULIP_NAPI is not set
@@ -483,7 +490,6 @@
 # CONFIG_FORCEDETH is not set
 # CONFIG_DGRS is not set
 CONFIG_EEPRO100=m
-# CONFIG_EEPRO100_PIO is not set
 CONFIG_E100=m
 CONFIG_E100_NAPI=y
 # CONFIG_FEALNX is not set
@@ -524,6 +530,7 @@
 CONFIG_IXGB_NAPI=y
 CONFIG_S2IO=m
 CONFIG_S2IO_NAPI=y
+# CONFIG_2BUFF_MODE is not set
 
 #
 # Token Ring devices
@@ -691,7 +698,6 @@
 #
 # Ftape, the floppy tape device driver
 #
-# CONFIG_AGP is not set
 # CONFIG_DRM is not set
 
 #
@@ -733,9 +739,9 @@
 #
 # Console display driver support
 #
+CONFIG_DUMMY_CONSOLE=y
 CONFIG_DUMMY_CONSOLE_COLUMNS=160
 CONFIG_DUMMY_CONSOLE_ROWS=64
-CONFIG_DUMMY_CONSOLE=y
 
 #
 # Sound
@@ -764,6 +770,15 @@
 # CONFIG_MMC is not set
 
 #
+# InfiniBand support
+#
+CONFIG_INFINIBAND=m
+CONFIG_INFINIBAND_MTHCA=m
+# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
+CONFIG_INFINIBAND_IPOIB=m
+# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
+
+#
 # File systems
 #
 CONFIG_EXT2_FS=y
@@ -775,10 +790,16 @@
 # CONFIG_REISERFS_FS is not set
 CONFIG_JFS_FS=m
 # CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
 # CONFIG_JFS_DEBUG is not set
 # CONFIG_JFS_STATISTICS is not set
 CONFIG_FS_POSIX_ACL=y
+
+#
+# XFS support
+#
 CONFIG_XFS_FS=m
+CONFIG_XFS_EXPORT=y
 # CONFIG_XFS_RT is not set
 # CONFIG_XFS_QUOTA is not set
 # CONFIG_XFS_SECURITY is not set
@@ -786,7 +807,7 @@
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
 # CONFIG_QUOTA is not set
-# CONFIG_DNOTIFY is not set
+CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 CONFIG_AUTOFS4_FS=y
 
@@ -817,7 +838,8 @@
 CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 # CONFIG_DEVPTS_FS_XATTR is not set
-# CONFIG_TMPFS is not set
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_XATTR is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
@@ -935,6 +957,8 @@
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_IOREMAP is not set
+# CONFIG_DEBUG_FS is not set
 # CONFIG_DEBUG_RWLOCK is not set
 
 #
@@ -973,6 +997,10 @@
 CONFIG_CRYPTO_TEST=m
 
 #
+# Hardware crypto devices
+#
+
+#
 # Library routines
 #
 CONFIG_CRC_CCITT=m
diff -urN linux/arch/parisc/configs/n4000_defconfig 
linux/arch/parisc/configs/n4000_defconfig
--- linux/arch/parisc/configs/Attic/n4000_defconfig     Fri Mar 18 17:36:54 
2005        1.3
+++ linux/arch/parisc/configs/Attic/n4000_defconfig     1970/01/01 00:00:002002
@@ -1,927 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.10-pa5
-# Wed Jan  5 13:40:36 2005
-#
-CONFIG_PARISC=y
-CONFIG_MMU=y
-CONFIG_STACK_GROWSUP=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_CLEAN_COMPILE is not set
-CONFIG_BROKEN=y
-CONFIG_BROKEN_ON_SMP=y
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-CONFIG_KALLSYMS_ALL=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-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
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Processor type and features
-#
-# CONFIG_PA7000 is not set
-# CONFIG_PA7100LC is not set
-# CONFIG_PA7200 is not set
-# CONFIG_PA7300LC is not set
-CONFIG_PA8X00=y
-CONFIG_PA20=y
-CONFIG_PREFETCH=y
-CONFIG_PARISC64=y
-CONFIG_64BIT=y
-# CONFIG_SMP is not set
-CONFIG_DISCONTIGMEM=y
-# CONFIG_PREEMPT is not set
-CONFIG_COMPAT=y
-
-#
-# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
-#
-# CONFIG_GSC is not set
-CONFIG_PCI=y
-CONFIG_PCI_LEGACY_PROC=y
-CONFIG_PCI_NAMES=y
-CONFIG_PCI_LBA=y
-CONFIG_IOSAPIC=y
-CONFIG_IOMMU_SBA=y
-# CONFIG_SUPERIO is not set
-CONFIG_CHASSIS_LCD_LED=y
-# CONFIG_PDC_CHASSIS is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PC-card bridges
-#
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-# CONFIG_STANDALONE is not set
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-CONFIG_BLK_DEV_UMEM=m
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=6144
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-CONFIG_CHR_DEV_ST=y
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=y
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=y
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=y
-CONFIG_SCSI_FC_ATTRS=m
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_CPQFCTS 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
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_IOMAPPED=y
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_QLOGIC_ISP is not set
-CONFIG_SCSI_QLOGIC_FC=m
-# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
-CONFIG_SCSI_QLOGIC_1280=m
-# CONFIG_SCSI_QLOGIC_1280_1040 is not set
-CONFIG_SCSI_QLA2XXX=y
-# CONFIG_SCSI_QLA21XX is not set
-# CONFIG_SCSI_QLA22XX is not set
-CONFIG_SCSI_QLA2300=m
-CONFIG_SCSI_QLA2322=m
-CONFIG_SCSI_QLA6312=m
-CONFIG_SCSI_QLA6322=m
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-CONFIG_SCSI_DEBUG=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=y
-CONFIG_MD_LINEAR=y
-CONFIG_MD_RAID0=y
-CONFIG_MD_RAID1=y
-# CONFIG_MD_RAID10 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_RAID6 is not set
-# CONFIG_MD_MULTIPATH is not set
-# CONFIG_MD_FAULTY is not set
-# CONFIG_BLK_DEV_DM is not set
-
-#
-# Fusion MPT device support
-#
-CONFIG_FUSION=m
-CONFIG_FUSION_MAX_SGE=40
-CONFIG_FUSION_CTL=m
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_NETLINK_DEV=y
-CONFIG_UNIX=y
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MAC=m
-CONFIG_IP_NF_MATCH_PKTTYPE=m
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-CONFIG_IP_NF_MATCH_HELPER=m
-CONFIG_IP_NF_MATCH_STATE=m
-CONFIG_IP_NF_MATCH_CONNTRACK=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_REALM=m
-CONFIG_IP_NF_MATCH_SCTP=m
-CONFIG_IP_NF_MATCH_COMMENT=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_CLASSIFY=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_TARGET_NOTRACK=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-CONFIG_LLC=m
-CONFIG_LLC2=m
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
-
-#
-# Network testing
-#
-CONFIG_NET_PKTGEN=m
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-CONFIG_BONDING=m
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-CONFIG_NET_VENDOR_3COM=y
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-
-#
-# Tulip family network device support
-#
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=y
-CONFIG_TULIP=y
-# CONFIG_TULIP_MWI is not set
-CONFIG_TULIP_MMIO=y
-# CONFIG_TULIP_NAPI is not set
-# CONFIG_DE4X5 is not set
-# CONFIG_WINBOND_840 is not set
-# CONFIG_DM9102 is not set
-CONFIG_HP100=m
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
-CONFIG_EEPRO100=m
-# CONFIG_EEPRO100_PIO is not set
-CONFIG_E100=m
-CONFIG_E100_NAPI=y
-# CONFIG_FEALNX is not set
-CONFIG_NATSEMI=m
-# CONFIG_NE2K_PCI is not set
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=m
-# CONFIG_8139TOO_PIO is not set
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-CONFIG_EPIC100=m
-# CONFIG_SUNDANCE is not set
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-
-#
-# Ethernet (1000 Mbit)
-#
-CONFIG_ACENIC=m
-CONFIG_ACENIC_OMIT_TIGON_I=y
-CONFIG_DL2K=m
-CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-CONFIG_TIGON3=m
-
-#
-# Ethernet (10000 Mbit)
-#
-CONFIG_IXGB=m
-CONFIG_IXGB_NAPI=y
-CONFIG_S2IO=m
-CONFIG_S2IO_NAPI=y
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-CONFIG_PCI_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
-#
-# CONFIG_PRISM54 is not set
-CONFIG_NET_WIRELESS=y
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-# CONFIG_SERIO is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=8
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_RSA is not set
-
-#
-# Non-8250 serial port support
-#
-# CONFIG_SERIAL_MUX is not set
-CONFIG_PDC_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_GEN_RTC=y
-CONFIG_GEN_RTC_X=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# 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
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-# CONFIG_FB is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE_COLUMNS=160
-CONFIG_DUMMY_CONSOLE_ROWS=64
-CONFIG_DUMMY_CONSOLE=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# 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
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-CONFIG_JFS_FS=m
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_XFS_FS=m
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_SECURITY is not set
-# CONFIG_XFS_POSIX_ACL is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_QUOTA is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-CONFIG_UFS_FS=m
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-CONFIG_NFS_V4=y
-CONFIG_NFS_DIRECTIO=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-CONFIG_NLS_CODEPAGE_863=m
-# CONFIG_NLS_CODEPAGE_864 is not set
-CONFIG_NLS_CODEPAGE_865=m
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-CONFIG_NLS_ISO8859_15=m
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-CONFIG_DEBUG_KERNEL=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_INFO is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-# CONFIG_CRYPTO_ARC4 is not set
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
diff -urN linux/arch/parisc/kernel/Makefile linux/arch/parisc/kernel/Makefile
--- linux/arch/parisc/kernel/Makefile   2004/11/15 11:49:19     1.18
+++ linux/arch/parisc/kernel/Makefile   2005/03/18 17:36:54     1.19
@@ -19,6 +19,6 @@
 obj-$(CONFIG_PA11)     += pci-dma.o
 obj-$(CONFIG_PCI)      += pci.o
 obj-$(CONFIG_MODULES)  += module.o
-obj-$(CONFIG_PARISC64) += binfmt_elf32.o sys_parisc32.o ioctl32.o signal32.o
+obj-$(CONFIG_64BIT)    += binfmt_elf32.o sys_parisc32.o ioctl32.o signal32.o
 # only supported for PCX-W/U in 64-bit mode at the moment
-obj-$(CONFIG_PARISC64) += perf.o perf_asm.o
+obj-$(CONFIG_64BIT)    += perf.o perf_asm.o
diff -urN linux/arch/parisc/kernel/binfmt_elf32.c 
linux/arch/parisc/kernel/binfmt_elf32.c
--- linux/arch/parisc/kernel/binfmt_elf32.c     2005/01/13 14:05:31     1.7
+++ linux/arch/parisc/kernel/binfmt_elf32.c     2005/03/18 17:36:54     1.8
@@ -37,7 +37,6 @@
 #include <linux/spinlock.h>
 #include <asm/processor.h>
 #include <linux/module.h>
-#include <linux/config.h>
 #include <linux/elfcore.h>
 #include <linux/compat.h>              /* struct compat_timeval */
 
diff -urN linux/arch/parisc/kernel/drivers.c linux/arch/parisc/kernel/drivers.c
--- linux/arch/parisc/kernel/drivers.c  2005/01/25 04:28:00     1.12
+++ linux/arch/parisc/kernel/drivers.c  2005/03/18 17:36:54     1.13
@@ -10,7 +10,7 @@
  * Copyright (c) 2001 Matthew Wilcox for Hewlett Packard
  * Copyright (c) 2001 Helge Deller <deller@gmx.de>
  * Copyright (c) 2001,2002 Ryan Bradetich 
- * Copyright (c) 2004 Thibaut VARENE <varenet@parisc-linux.org>
+ * Copyright (c) 2004-2005 Thibaut VARENE <varenet@parisc-linux.org>
  * 
  * The file handles registering devices and drivers, then matching them.
  * It's the closest we get to a dating agency.
@@ -611,6 +611,24 @@
 }
 EXPORT_SYMBOL(hwpath_to_device);
 
+/**
+ * device_to_hwpath - Populates the hwpath corresponding to the given device.
+ * @param dev the target device
+ * @param path pointer to a previously allocated hwpath struct to be filled in
+ */
+void device_to_hwpath(struct device *dev, struct hardware_path *path)
+{
+       struct parisc_device *padev;
+       if (dev->bus == &parisc_bus_type) {
+               padev = to_parisc_device(dev);
+               get_node_path(dev->parent, path);
+               path->mod = padev->hw_path;
+       } else if (is_pci_dev(dev)) {
+               get_node_path(dev, path);
+       }
+}
+EXPORT_SYMBOL(device_to_hwpath);
+
 #define BC_PORT_MASK 0x8
 #define BC_LOWER_PORT 0x8
 
diff -urN linux/arch/parisc/kernel/entry.S linux/arch/parisc/kernel/entry.S
--- linux/arch/parisc/kernel/entry.S    2004/11/15 11:49:19     1.15
+++ linux/arch/parisc/kernel/entry.S    2005/03/18 17:36:54     1.16
@@ -76,13 +76,11 @@
        mtsp    %r0, %sr5
        mtsp    %r0, %sr6
        mtsp    %r0, %sr7
-       ldil    L%KERNEL_PSW, %r1
-       ldo     R%KERNEL_PSW(%r1), %r1
+       load32  KERNEL_PSW, %r1
        mtctl   %r1, %cr22
        mtctl   %r0, %cr17      /* Clear IIASQ tail */
        mtctl   %r0, %cr17      /* Clear IIASQ head */
-       ldil    L%4f, %r1
-       ldo     R%4f(%r1), %r1
+       load32  4f, %r1
        mtctl   %r1, %cr18      /* Set IIAOQ tail */
        ldo     4(%r1), %r1
        mtctl   %r1, %cr18      /* Set IIAOQ head */
@@ -197,8 +195,7 @@
        /* HPMC handler */
        .macro  hpmc code
        nop                     /* must be a NOP, will be patched later */
-       ldil    L%PA(os_hpmc), %r3
-       ldo     R%PA(os_hpmc)(%r3), %r3
+       load32  PA(os_hpmc), %r3
        bv,n    0(%r3)
        nop
        .word   0               /* checksum (will be patched) */
@@ -860,8 +857,7 @@
 
        callee_save
 
-       ldil    L%_switch_to_ret, %r2
-       ldo     R%_switch_to_ret(%r2), %r2
+       load32  _switch_to_ret, %r2
 
        STREG   %r2, TASK_PT_KPC(%r26)
        LDREG   TASK_PT_KPC(%r25), %r2
@@ -914,16 +910,13 @@
        depi    3,31,2,%r19
        STREG   %r19,PT_IAOQ1(%r16)
        LDREG   PT_PSW(%r16),%r19
-       ldil    L%USER_PSW_MASK,%r1
-       ldo     R%USER_PSW_MASK(%r1),%r1
+       load32  USER_PSW_MASK,%r1
 #ifdef __LP64__
-       ldil    L%USER_PSW_HI_MASK,%r20
-       ldo     R%USER_PSW_HI_MASK(%r20),%r20
+       load32  USER_PSW_HI_MASK,%r20
        depd    %r20,31,32,%r1
 #endif
        and     %r19,%r1,%r19 /* Mask out bits that user shouldn't play with */
-       ldil    L%USER_PSW,%r1
-       ldo     R%USER_PSW(%r1),%r1
+       load32  USER_PSW,%r1
        or      %r19,%r1,%r19 /* Make sure default USER_PSW bits are set */
        STREG   %r19,PT_PSW(%r16)
 
@@ -955,8 +948,7 @@
 
        .import irq_stat,data
 
-       ldil    L%irq_stat,%r19
-       ldo     R%irq_stat(%r19),%r19
+       load32  irq_stat,%r19
 #ifdef CONFIG_SMP
        mfctl   %cr30,%r1
        ldw     TI_CPU(%r1),%r1 /* get cpu # - int */
@@ -1079,7 +1071,7 @@
        BL      do_signal,%r2
        copy    %r0, %r26                       /* sigset_t *oldset = NULL */
 
-       b       intr_restore
+       b       intr_check_sig
        nop
 
        /*
@@ -1607,8 +1599,7 @@
 
 #ifdef CONFIG_SMP
        CMPIB=,n        0,spc,dbit_nolock_20w
-       ldil            L%PA(pa_dbit_lock),t0
-       ldo             R%PA(pa_dbit_lock)(t0),t0
+       load32          PA(pa_dbit_lock),t0
 
 dbit_spin_20w:
        ldcw            0(t0),t1
@@ -1644,8 +1635,7 @@
 
 #ifdef CONFIG_SMP
        CMPIB=,n        0,spc,dbit_nolock_11
-       ldil            L%PA(pa_dbit_lock),t0
-       ldo             R%PA(pa_dbit_lock)(t0),t0
+       load32          PA(pa_dbit_lock),t0
 
 dbit_spin_11:
        ldcw            0(t0),t1
@@ -1685,8 +1675,7 @@
 
 #ifdef CONFIG_SMP
        CMPIB=,n        0,spc,dbit_nolock_20
-       ldil            L%PA(pa_dbit_lock),t0
-       ldo             R%PA(pa_dbit_lock)(t0),t0
+       load32          PA(pa_dbit_lock),t0
 
 dbit_spin_20:
        ldcw            0(t0),t1
@@ -2082,8 +2071,7 @@
 
        .import irq_stat,data
 
-       ldil    L%irq_stat,%r19
-       ldo     R%irq_stat(%r19),%r19
+       load32  irq_stat,%r19
 
 #ifdef CONFIG_SMP
        /* sched.h: int processor */
@@ -2282,7 +2270,7 @@
        ldo     TASK_REGS(%r1), %r20            /* reload pt_regs */
        reg_restore %r20
 
-       b,n     syscall_restore
+       b,n     syscall_check_sig
 
        /*
         * get_register is used by the non access tlb miss handlers to
diff -urN linux/arch/parisc/kernel/firmware.c 
linux/arch/parisc/kernel/firmware.c
--- linux/arch/parisc/kernel/firmware.c 2005/01/25 04:28:00     1.9
+++ linux/arch/parisc/kernel/firmware.c 2005/03/18 17:36:54     1.10
@@ -120,10 +120,10 @@
 #ifdef __LP64__
        if(unlikely(parisc_narrow_firmware)) {
                if((address & 0xff000000) == 0xf0000000)
-                       return 0xf0f0f0f000000000 | (u32)address;
+                       return 0xf0f0f0f000000000UL | (u32)address;
 
                if((address & 0xf0000000) == 0xf0000000)
-                       return 0xffffffff00000000 | (u32)address;
+                       return 0xffffffff00000000UL | (u32)address;
        }
 #endif
        return address;
@@ -782,6 +782,8 @@
 {
        int retval;
 
+       BUG_ON((unsigned long)tbl & 0x7);
+
        spin_lock_irq(&pdc_lock);
        pdc_result[0] = num_entries;
        retval = mem_pdc_call(PDC_PCI_INDEX, PDC_PCI_GET_INT_TBL, 
@@ -912,7 +914,7 @@
  *
  * Reset the system.
  */
-int pdc_do_reset()
+int pdc_do_reset(void)
 {
         int retval;
 
diff -urN linux/arch/parisc/kernel/hardware.c 
linux/arch/parisc/kernel/hardware.c
--- linux/arch/parisc/kernel/hardware.c 2004/09/19 12:30:04     1.9
+++ linux/arch/parisc/kernel/hardware.c 2005/03/18 17:36:54     1.10
@@ -1296,18 +1296,18 @@
 };
 
 char *cpu_name_version[][2] = {
-       [pcx]   { "PA7000 (PCX)",       "1.0" },
-       [pcxs]  { "PA7000 (PCX-S)",     "1.1a" },
-       [pcxt]  { "PA7100 (PCX-T)",     "1.1b" },
-       [pcxt_] { "PA7200 (PCX-T')",    "1.1c" },
-       [pcxl]  { "PA7100LC (PCX-L)",   "1.1d" },
-       [pcxl2] { "PA7300LC (PCX-L2)",  "1.1e" },
-       [pcxu]  { "PA8000 (PCX-U)",     "2.0" },
-       [pcxu_] { "PA8200 (PCX-U+)",    "2.0" },
-       [pcxw]  { "PA8500 (PCX-W)",     "2.0" },
-       [pcxw_] { "PA8600 (PCX-W+)",    "2.0" },
-       [pcxw2] { "PA8700 (PCX-W2)",    "2.0" },
-       [mako]  { "PA8800 (Mako)",      "2.0" }
+       [pcx]   = { "PA7000 (PCX)",     "1.0" },
+       [pcxs]  = { "PA7000 (PCX-S)",   "1.1a" },
+       [pcxt]  = { "PA7100 (PCX-T)",   "1.1b" },
+       [pcxt_] = { "PA7200 (PCX-T')",  "1.1c" },
+       [pcxl]  = { "PA7100LC (PCX-L)", "1.1d" },
+       [pcxl2] = { "PA7300LC (PCX-L2)",        "1.1e" },
+       [pcxu]  = { "PA8000 (PCX-U)",   "2.0" },
+       [pcxu_] = { "PA8200 (PCX-U+)",  "2.0" },
+       [pcxw]  = { "PA8500 (PCX-W)",   "2.0" },
+       [pcxw_] = { "PA8600 (PCX-W+)",  "2.0" },
+       [pcxw2] = { "PA8700 (PCX-W2)",  "2.0" },
+       [mako]  = { "PA8800 (Mako)",    "2.0" }
 };
 
 const char * __init
diff -urN linux/arch/parisc/kernel/head.S linux/arch/parisc/kernel/head.S
--- linux/arch/parisc/kernel/head.S     2004/11/15 11:49:19     1.8
+++ linux/arch/parisc/kernel/head.S     2005/03/18 17:36:54     1.9
@@ -71,47 +71,42 @@
        stw,ma          %arg2,4(%r1)
        stw,ma          %arg3,4(%r1)
 
-       /* Initialize startup VM. Just map first 8 MB of memory */
-       load32          PA(pg0),%r1
-
-#ifdef __LP64__
-       load32          PA(pmd0),%r5
-       shrd            %r5,PxD_VALUE_SHIFT,%r3 
-#else
-       shr             %r1,PxD_VALUE_SHIFT,%r3
-#endif
-        ldo             (PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3     
-       
+       /* Initialize startup VM. Just map first 8/16 MB of memory */
        load32          PA(swapper_pg_dir),%r4
        mtctl           %r4,%cr24       /* Initialize kernel root pointer */
        mtctl           %r4,%cr25       /* Initialize user root pointer */
 
 #ifdef __LP64__
+       /* Set pmd in pgd */
+       load32          PA(pmd0),%r5
+       shrd            %r5,PxD_VALUE_SHIFT,%r3 
+        ldo             (PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3     
        stw             %r3,ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4)
-       shrd            %r1,PxD_VALUE_SHIFT,%r3
-       ldo             (PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3
-       ldo             ASM_PMD_ENTRY*ASM_PMD_ENTRY_SIZE(%r5),%r5
+       ldo             ASM_PMD_ENTRY*ASM_PMD_ENTRY_SIZE(%r5),%r4
 #else
+       /* 2-level page table, so pmd == pgd */
         ldo             ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4),%r4
 #endif
+
+       /* Fill in pmd with enough pte directories */
+       load32          PA(pg0),%r1
+       SHRREG          %r1,PxD_VALUE_SHIFT,%r3
+       ldo             (PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3
+
        ldi             ASM_PT_INITIAL,%r1
 
 1:
-#ifdef __LP64__
-       stw             %r3,0(%r5)
-#else
-       stw             %r3,0(%r4)
-#endif
-       
+       stw             %r3,0(%r4)
        ldo             (ASM_PAGE_SIZE >> PxD_VALUE_SHIFT)(%r3),%r3
        addib,>         -1,%r1,1b
-
 #ifdef __LP64__
-       ldo             ASM_PMD_ENTRY_SIZE(%r5),%r5
+       ldo             ASM_PMD_ENTRY_SIZE(%r4),%r4
 #else
-       ldo             ASM_PGD_ENTRY_SIZE(%r4),%r4
+       ldo             ASM_PGD_ENTRY_SIZE(%r4),%r4
 #endif
 
+
+       /* Now initialize the PTEs themselves */
        ldo             _PAGE_KERNEL(%r0),%r3 /* Hardwired 0 phys addr start */
        load32          PA(pg0),%r1
 
@@ -306,7 +301,7 @@
        mtctl           %r11,%cr18      /* IIAOQ head */
        ldo             4(%r11),%r11
        mtctl           %r11,%cr18      /* IIAOQ tail */
-
+       
        /* Jump to hyperspace */
        rfi
        nop
diff -urN linux/arch/parisc/kernel/hpmc.S linux/arch/parisc/kernel/hpmc.S
--- linux/arch/parisc/kernel/hpmc.S     2004/02/19 03:06:23     1.3
+++ linux/arch/parisc/kernel/hpmc.S     2005/03/18 17:36:54     1.4
@@ -121,8 +121,7 @@
 
        /* Setup stack pointer. */
 
-       ldil    L%PA(hpmc_stack),sp
-       ldo     R%PA(hpmc_stack)(sp),sp
+       load32  PA(hpmc_stack),sp
        
        ldo     128(sp),sp /* leave room for arguments */
 
@@ -135,8 +134,7 @@
        mtctl   %r4,ipsw
        mtctl   %r0,pcsq
        mtctl   %r0,pcsq
-       ldil    L%PA(os_hpmc_1),%r4
-       ldo     R%PA(os_hpmc_1)(%r4),%r4
+       load32  PA(os_hpmc_1),%r4
        mtctl   %r4,pcoq
        ldo     4(%r4),%r4
        mtctl   %r4,pcoq
@@ -155,12 +153,9 @@
 
        ldo     PDC_PIM(%r0), arg0
        ldo     PDC_PIM_HPMC(%r0),arg1          /* Transfer HPMC data */
-       ldil    L%PA(hpmc_raddr),arg2
-       ldo     R%PA(hpmc_raddr)(arg2),arg2
-       ldil    L%PA(hpmc_pim_data),arg3
-       ldo     R%PA(hpmc_pim_data)(arg3),arg3
-       ldil    L%HPMC_PIM_DATA_SIZE,%r4
-       ldo     R%HPMC_PIM_DATA_SIZE(%r4),%r4
+       load32  PA(hpmc_raddr),arg2
+       load32  PA(hpmc_pim_data),arg3
+       load32  HPMC_PIM_DATA_SIZE,%r4
        stw     %r4,-52(sp)
 
        ldil    L%PA(os_hpmc_2), rp
@@ -199,16 +194,13 @@
 
        ldo     PDC_IODC(%r0),arg0
        ldo     PDC_IODC_READ(%r0),arg1
-       ldil    L%PA(hpmc_raddr),arg2
-       ldo     R%PA(hpmc_raddr)(arg2),arg2
+       load32  PA(hpmc_raddr),arg2
        ldw     BOOT_CONSOLE_HPA_OFFSET(%r0),arg3 /* console hpa */
        ldo     PDC_IODC_RI_INIT(%r0),%r4
        stw     %r4,-52(sp)
-       ldil    L%PA(hpmc_iodc_buf),%r4
-       ldo     R%PA(hpmc_iodc_buf)(%r4),%r4
+       load32  PA(hpmc_iodc_buf),%r4
        stw     %r4,-56(sp)
-       ldil    L%HPMC_IODC_BUF_SIZE,%r4
-       ldo     R%HPMC_IODC_BUF_SIZE(%r4),%r4
+       load32  HPMC_IODC_BUF_SIZE,%r4
        stw     %r4,-60(sp)
 
        ldil    L%PA(os_hpmc_4),rp
@@ -225,16 +217,14 @@
        ldw     BOOT_CONSOLE_SPA_OFFSET(%r0),arg2  /* console spa */
        depi    0,31,11,arg2                       /* clear bits 21-31    */
        ldo     BOOT_CONSOLE_PATH_OFFSET(%r0),arg3 /* console path */
-       ldil    L%PA(hpmc_raddr),%r4
-       ldo     R%PA(hpmc_raddr)(%r4),%r4
+       load32  PA(hpmc_raddr),%r4
        stw     %r4, -52(sp)
        stw     %r0, -56(sp)                    /* HV                  */
        stw     %r0, -60(sp)                    /* HV                  */
        stw     %r0, -64(sp)                    /* HV                  */
        stw     %r0, -68(sp)                    /* lang, must be zero  */
 
-       ldil    L%PA(hpmc_iodc_buf),%r5
-       ldo     R%PA(hpmc_iodc_buf)(%r5),%r5
+       load32  PA(hpmc_iodc_buf),%r5
        ldil    L%PA(os_hpmc_5),rp
        bv      (%r5)
        ldo     R%PA(os_hpmc_5)(rp),rp
@@ -249,8 +239,7 @@
         * we don't intend to ever return to user land anyway)
         */
 
-       ldil            L%PA(swapper_pg_dir),%r4
-       ldo             R%PA(swapper_pg_dir)(%r4),%r4
+       load32          PA(swapper_pg_dir),%r4
        mtctl           %r4,%cr24       /* Initialize kernel root pointer */
        mtctl           %r4,%cr25       /* Initialize user root pointer */
 
@@ -265,8 +254,7 @@
 
        rsm 8,%r0           /* Clear Q bit */
        ldi     1,%r8       /* Set trap code to "1" for HPMC */
-       ldil    L%PA(intr_save), %r1
-       ldo     R%PA(intr_save)(%r1), %r1
+       load32  PA(intr_save),%r1
        be      0(%sr7,%r1)
        nop
 
diff -urN linux/arch/parisc/kernel/init_task.c 
linux/arch/parisc/kernel/init_task.c
--- linux/arch/parisc/kernel/init_task.c        2004/06/26 15:15:11     1.9
+++ linux/arch/parisc/kernel/init_task.c        2005/03/18 17:36:54     1.10
@@ -55,11 +55,15 @@
 
 #ifdef __LP64__
 /* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout
- * with the first pmd adjacent to the pgd and below it */
-pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, };
+ * with the first pmd adjacent to the pgd and below it. gcc doesn't actually
+ * guarantee that global objects will be laid out in memory in the same order 
+ * as the order of declaration, so put these in different sections and use
+ * the linker script to order them. */
+pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((aligned(PAGE_SIZE))) __attribute__ 
((__section__ (".data.vm0.pmd"))) = { {0}, };
+
 #endif
-pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(PAGE_SIZE))) = { 
{0}, };
-pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(PAGE_SIZE))) = { 
{0}, };
+pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(PAGE_SIZE))) 
__attribute__ ((__section__ (".data.vm0.pgd"))) = { {0}, };
+pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(PAGE_SIZE))) 
__attribute__ ((__section__ (".data.vm0.pte")))  = { {0}, };
 
 /*
  * Initial task structure.
diff -urN linux/arch/parisc/kernel/ioctl32.c linux/arch/parisc/kernel/ioctl32.c
--- linux/arch/parisc/kernel/ioctl32.c  2004/03/11 16:46:43     1.13
+++ linux/arch/parisc/kernel/ioctl32.c  2005/03/18 17:36:54     1.14
@@ -563,7 +563,7 @@
 
 #endif
 
-#define HANDLE_IOCTL(cmd, handler) { cmd, (ioctl_trans_handler_t)handler, 0 },
+#define HANDLE_IOCTL(cmd, handler) { cmd, (ioctl_trans_handler_t)handler, NULL 
},
 #define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL(cmd, sys_ioctl) 
 
 #define IOCTL_TABLE_START  struct ioctl_trans ioctl_start[] = {
diff -urN linux/arch/parisc/kernel/irq.c linux/arch/parisc/kernel/irq.c
--- linux/arch/parisc/kernel/irq.c      2005/01/25 04:28:00     1.18
+++ linux/arch/parisc/kernel/irq.c      2005/03/18 17:36:54     1.19
@@ -5,6 +5,7 @@
  * Copyright (C) 1994, 1995, 1996, 1997, 1998 Ralf Baechle
  * Copyright (C) 1999 SuSE GmbH (Philipp Rumpf, prumpf@tux.org)
  * Copyright (C) 1999-2000 Grant Grundler
+ * Copyright (c) 2005 Matthew Wilcox
  *
  *    This program is free software; you can redistribute it and/or modify
  *    it under the terms of the GNU General Public License as published by
@@ -22,38 +23,19 @@
  */
 #include <linux/bitops.h>
 #include <linux/config.h>
-#include <linux/eisa.h>
 #include <linux/errno.h>
 #include <linux/init.h>
-#include <linux/module.h>
-#include <linux/signal.h>
-#include <linux/types.h>
-#include <linux/ioport.h>
-#include <linux/timex.h>
-#include <linux/slab.h>
-#include <linux/random.h>
-#include <linux/sched.h>
 #include <linux/interrupt.h>
 #include <linux/kernel_stat.h>
-#include <linux/irq.h>
 #include <linux/seq_file.h>
 #include <linux/spinlock.h>
+#include <linux/types.h>
 
-#include <asm/cache.h>
-#include <asm/pdc.h>
-
-#undef DEBUG_IRQ
 #undef PARISC_IRQ_CR16_COUNTS
 
 extern irqreturn_t timer_interrupt(int, void *, struct pt_regs *);
 extern irqreturn_t ipi_interrupt(int, void *, struct pt_regs *);
 
-#ifdef DEBUG_IRQ
-#define DBG_IRQ(irq, x)        if ((irq) != TIMER_IRQ) printk x
-#else /* DEBUG_IRQ */
-#define DBG_IRQ(irq, x)        do { } while (0)
-#endif /* DEBUG_IRQ */
-
 #define EIEM_MASK(irq)       (1UL<<(CPU_IRQ_MAX - irq))
 
 /* Bits in EIEM correlate with cpu_irq_action[].
@@ -120,8 +102,10 @@
        }
 
        if (i < NR_IRQS) {
+               struct irqaction *action;
+
                spin_lock_irqsave(&irq_desc[i].lock, flags);
-               struct irqaction *action = irq_desc[i].action;
+               action = irq_desc[i].action;
                if (!action)
                        goto skip;
                seq_printf(p, "%3d: ", i);
@@ -200,7 +184,25 @@
        return cpu_claim_irq(irq, NULL, NULL) ? -1 : irq;
 }
 
-int txn_alloc_irq(void)
+/*
+ * The bits_wide parameter accommodates the limitations of the HW/SW which
+ * use these bits:
+ * Legacy PA I/O (GSC/NIO): 5 bits (architected EIM register)
+ * V-class (EPIC):          6 bits
+ * N/L/A-class (iosapic):   8 bits
+ * PCI 2.2 MSI:            16 bits
+ * Some PCI devices:       32 bits (Symbios SCSI/ATM/HyperFabric)
+ *
+ * On the service provider side:
+ * o PA 1.1 (and PA2.0 narrow mode)     5-bits (width of EIR register)
+ * o PA 2.0 wide mode                   6-bits (per processor)
+ * o IA64                               8-bits (0-256 total)
+ *
+ * So a Legacy PA I/O device on a PA 2.0 box can't use all the bits supported
+ * by the processor...and the N/L-class I/O subsystem supports more bits than
+ * PA2.0 has. The first case is the problem.
+ */
+int txn_alloc_irq(unsigned int bits_wide)
 {
        int irq;
 
@@ -208,6 +210,8 @@
        for (irq = CPU_IRQ_BASE + 1; irq <= CPU_IRQ_MAX; irq++) {
                if (cpu_claim_irq(irq, NULL, NULL) < 0)
                        continue;
+               if ((irq - CPU_IRQ_BASE) >= (1 << bits_wide))
+                       continue;
                return irq;
        }
 
@@ -215,7 +219,7 @@
        return -1;
 }
 
-unsigned long txn_alloc_addr(int virt_irq)
+unsigned long txn_alloc_addr(unsigned int virt_irq)
 {
        static int next_cpu = -1;
 
@@ -233,36 +237,8 @@
 }
 
 
-/*
-** The alloc process needs to accept a parameter to accommodate limitations
-** of the HW/SW which use these bits:
-** Legacy PA I/O (GSC/NIO): 5 bits (architected EIM register)
-** V-class (EPIC):          6 bits
-** N/L-class/A500:          8 bits (iosapic)
-** PCI 2.2 MSI:             16 bits (I think)
-** Existing PCI devices:    32-bits (all Symbios SCSI/ATM/HyperFabric)
-**
-** On the service provider side:
-** o PA 1.1 (and PA2.0 narrow mode)     5-bits (width of EIR register)
-** o PA 2.0 wide mode                   6-bits (per processor)
-** o IA64                               8-bits (0-256 total)
-**
-** So a Legacy PA I/O device on a PA 2.0 box can't use all
-** the bits supported by the processor...and the N/L-class
-** I/O subsystem supports more bits than PA2.0 has. The first
-** case is the problem.
-*/
-unsigned int txn_alloc_data(int virt_irq, unsigned int bits_wide)
+unsigned int txn_alloc_data(unsigned int virt_irq)
 {
-       /* XXX FIXME : bits_wide indicates how wide the transaction
-       ** data is allowed to be...we may need a different virt_irq
-       ** if this one won't work. Another reason to index virtual
-       ** irq's into a table which can manage CPU/IRQ bit separately.
-       */
-       if ((virt_irq - CPU_IRQ_BASE) > (1 << (bits_wide - 1))) {
-               panic("Sorry -- didn't allocate valid IRQ for this device\n");
-       }
-
        return virt_irq - CPU_IRQ_BASE;
 }
 
@@ -270,42 +246,35 @@
 void do_cpu_irq_mask(struct pt_regs *regs)
 {
        unsigned long eirr_val;
-       unsigned int i=3;       /* limit time in interrupt context */
+
+       irq_enter();
 
        /*
-        * PSW_I or EIEM bits cannot be enabled until after the
-        * interrupts are processed.
-        * timer_interrupt() assumes it won't get interrupted when it
-        * holds the xtime_lock...an unmasked interrupt source could
-        * interrupt and deadlock by trying to grab xtime_lock too.
-        * Keeping PSW_I and EIEM disabled avoids this.
+        * Only allow interrupt processing to be interrupted by the
+        * timer tick
         */
-       set_eiem(0UL);  /* disable all extr interrupt for now */
+       set_eiem(EIEM_MASK(TIMER_IRQ));
 
        /* 1) only process IRQs that are enabled/unmasked (cpu_eiem)
         * 2) We loop here on EIRR contents in order to avoid
         *    nested interrupts or having to take another interrupt
         *    when we could have just handled it right away.
-        * 3) Limit the number of times we loop to make sure other
-        *    processing can occur.
         */
        for (;;) {
                unsigned long bit = (1UL << (BITS_PER_LONG - 1));
                unsigned int irq;
                eirr_val = mfctl(23) & cpu_eiem;
-               if (!eirr_val || !i--)
+               if (!eirr_val)
                        break;
 
-               mtctl(eirr_val, 23); /* reset bits we are going to process */
+               if (eirr_val & EIEM_MASK(TIMER_IRQ))
+                       set_eiem(0);
 
-#ifdef DEBUG_IRQ
-               if (eirr_val != (1UL << MAX_CPU_IRQ))
-                       printk(KERN_DEBUG "do_cpu_irq_mask  0x%x & 0x%x\n", 
eirr_val, cpu_eiem);
-#endif
+               mtctl(eirr_val, 23); /* reset bits we are going to process */
 
                /* Work our way from MSb to LSb...same order we alloc EIRs */
                for (irq = TIMER_IRQ; eirr_val && bit; bit>>=1, irq++) {
-                       if (!(bit & eirr_val & cpu_eiem))
+                       if (!(bit & eirr_val))
                                continue;
 
                        /* clear bit in mask - can exit loop sooner */
@@ -315,6 +284,7 @@
                }
        }
        set_eiem(cpu_eiem);
+       irq_exit();
 }
 
 
diff -urN linux/arch/parisc/kernel/module.c linux/arch/parisc/kernel/module.c
--- linux/arch/parisc/kernel/module.c   2004/04/12 20:23:25     1.9
+++ linux/arch/parisc/kernel/module.c   2005/03/18 17:36:54     1.10
@@ -2,7 +2,7 @@
  *
  *    The best reference for this stuff is probably the Processor-
  *    Specific ELF Supplement for PA-RISC:
- *        http://ftp.parisc-linux.org/docs/elf-pa-hp.pdf
+ *        http://ftp.parisc-linux.org/docs/arch/elf-pa-hp.pdf
  *
  *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
  *    Copyright (C) 2003 Randolph Chung <tausq at debian . org>
@@ -21,6 +21,23 @@
  *    You should have received a copy of the GNU General Public License
  *    along with this program; if not, write to the Free Software
  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *
+ *    Notes:
+ *    - SEGREL32 handling
+ *      We are not doing SEGREL32 handling correctly. According to the ABI, we
+ *      should do a value offset, like this:
+ *                     if (is_init(me, (void *)val))
+ *                             val -= (uint32_t)me->module_init;
+ *                     else
+ *                             val -= (uint32_t)me->module_core;
+ *     However, SEGREL32 is used only for PARISC unwind entries, and we want
+ *     those entries to have an absolute address, and not just an offset.
+ *
+ *     The unwind table mechanism has the ability to specify an offset for 
+ *     the unwind table; however, because we split off the init functions into
+ *     a different piece of memory, it is not possible to do this using a 
+ *     single offset. Instead, we use the above hack for now.
  */
 
 #include <linux/moduleloader.h>
@@ -30,6 +47,8 @@
 #include <linux/string.h>
 #include <linux/kernel.h>
 
+#include <asm/unwind.h>
+
 #if 0
 #define DEBUGP printk
 #else
@@ -248,6 +267,10 @@
                const Elf_Rela *rels = (void *)hdr + sechdrs[i].sh_offset;
                unsigned long nrels = sechdrs[i].sh_size / sizeof(*rels);
 
+               if (strncmp(secstrings + sechdrs[i].sh_name,
+                           ".PARISC.unwind", 14) == 0)
+                       me->arch.unwind_section = i;
+
                if (sechdrs[i].sh_type != SHT_RELA)
                        continue;
 
@@ -499,7 +522,9 @@
                        break;
                case R_PARISC_SEGREL32:
                        /* 32-bit segment relative address */
-                       val -= (uint32_t)me->module_core;
+                       /* See note about special handling of SEGREL32 at
+                        * the beginning of this file.
+                        */
                        *loc = fsel(val, addend); 
                        break;
                case R_PARISC_DPREL21L:
@@ -651,7 +676,9 @@
                        break;
                case R_PARISC_SEGREL32:
                        /* 32-bit segment relative address */
-                       val -= (uint64_t)me->module_core;
+                       /* See note about special handling of SEGREL32 at
+                        * the beginning of this file.
+                        */
                        *loc = fsel(val, addend); 
                        break;
                case R_PARISC_FPTR64:
@@ -682,6 +709,32 @@
 }
 #endif
 
+static void
+register_unwind_table(struct module *me,
+                     const Elf_Shdr *sechdrs)
+{
+       unsigned char *table, *end;
+       unsigned long gp;
+
+       if (!me->arch.unwind_section)
+               return;
+
+       table = (unsigned char *)sechdrs[me->arch.unwind_section].sh_addr;
+       end = table + sechdrs[me->arch.unwind_section].sh_size;
+       gp = (Elf_Addr)me->module_core + me->arch.got_offset;
+
+       DEBUGP("register_unwind_table(), sect = %d at 0x%p - 0x%p (gp=0x%lx)\n",
+              me->arch.unwind_section, table, end, gp);
+       me->arch.unwind = unwind_table_add(me->name, 0, gp, table, end);
+}
+
+static void
+deregister_unwind_table(struct module *me)
+{
+       if (me->arch.unwind)
+               unwind_table_remove(me->arch.unwind);
+}
+
 int module_finalize(const Elf_Ehdr *hdr,
                    const Elf_Shdr *sechdrs,
                    struct module *me)
@@ -711,6 +764,8 @@
               me->arch.fdesc_count, me->arch.fdesc_max);
 #endif
 
+       register_unwind_table(me, sechdrs);
+
        /* haven't filled in me->symtab yet, so have to find it
         * ourselves */
        for (i = 1; i < hdr->e_shnum; i++) {
@@ -763,4 +818,5 @@
 
 void module_arch_cleanup(struct module *mod)
 {
+       deregister_unwind_table(mod);
 }
diff -urN linux/arch/parisc/kernel/pacache.S linux/arch/parisc/kernel/pacache.S
--- linux/arch/parisc/kernel/pacache.S  2004/11/15 11:49:19     1.7
+++ linux/arch/parisc/kernel/pacache.S  2005/03/18 17:36:54     1.8
@@ -27,17 +27,17 @@
  */
 
 #ifdef __LP64__
-#define ADDIB   addib,*
-#define CMPB    cmpb,*
-#define ANDCM   andcm,*
+#define ADDIB  addib,*
+#define CMPB   cmpb,*
+#define ANDCM  andcm,*
 
-       .level 2.0w
+       .level  2.0w
 #else
-#define ADDIB   addib,
-#define CMPB    cmpb,
-#define ANDCM   andcm
+#define ADDIB  addib,
+#define CMPB   cmpb,
+#define ANDCM  andcm
 
-       .level 2.0
+       .level  2.0
 #endif
 
 #include <asm/assembly.h>
@@ -46,7 +46,7 @@
 #include <asm/cache.h>
 
        .text
-       .align 128
+       .align  128
 
        .export flush_tlb_all_local,code
 
@@ -68,7 +68,7 @@
         * consolidated.
         */
 
-       rsm     PSW_SM_I,%r19   /* relied upon translation! PA 2.0 Arch. F-5 */
+       rsm             PSW_SM_I, %r19          /* relied upon translation! PA 
2.0 Arch. F-5 */
        nop
        nop
        nop
@@ -77,127 +77,127 @@
        nop
        nop
        
-       rsm     PSW_SM_Q,%r0       /* Turn off Q bit to load iia queue */
-       ldil    L%REAL_MODE_PSW, %r1
-       ldo     R%REAL_MODE_PSW(%r1), %r1
-       mtctl   %r1, %cr22
-       mtctl   %r0, %cr17      /* Clear IIASQ tail */
-       mtctl   %r0, %cr17      /* Clear IIASQ head */
-       ldil    L%PA(1f),%r1
-       ldo     R%PA(1f)(%r1),%r1
-       mtctl   %r1, %cr18      /* IIAOQ head */
-       ldo     4(%r1), %r1
-       mtctl   %r1, %cr18      /* IIAOQ tail */
+       rsm             PSW_SM_Q, %r0           /* Turn off Q bit to load iia 
queue */
+       ldil            L%REAL_MODE_PSW, %r1
+       ldo             R%REAL_MODE_PSW(%r1), %r1
+       mtctl           %r1, %cr22
+       mtctl           %r0, %cr17              /* Clear IIASQ tail */
+       mtctl           %r0, %cr17              /* Clear IIASQ head */
+       ldil            L%PA(1f), %r1
+       ldo             R%PA(1f)(%r1), %r1
+       mtctl           %r1, %cr18              /* IIAOQ head */
+       ldo             4(%r1), %r1
+       mtctl           %r1, %cr18              /* IIAOQ tail */
        rfi
        nop
 
-1:      ldil            L%PA(cache_info),%r1
-       ldo             R%PA(cache_info)(%r1),%r1
+1:      ldil           L%PA(cache_info), %r1
+       ldo             R%PA(cache_info)(%r1), %r1
 
        /* Flush Instruction Tlb */
 
-       LDREG           ITLB_SID_BASE(%r1),%r20
-       LDREG           ITLB_SID_STRIDE(%r1),%r21
-       LDREG           ITLB_SID_COUNT(%r1),%r22
-       LDREG           ITLB_OFF_BASE(%r1),%arg0
-       LDREG           ITLB_OFF_STRIDE(%r1),%arg1
-       LDREG           ITLB_OFF_COUNT(%r1),%arg2
-       LDREG           ITLB_LOOP(%r1),%arg3
-
-       ADDIB=          -1,%arg3,fitoneloop     /* Preadjust and test */
-       movb,<,n        %arg3,%r31,fitdone      /* If loop < 0, skip */
-       copy            %arg0,%r28              /* Init base addr */
-
-fitmanyloop:                                    /* Loop if LOOP >= 2 */
-       mtsp            %r20,%sr1
-       add             %r21,%r20,%r20          /* increment space */
-       copy            %arg2,%r29              /* Init middle loop count */
-
-fitmanymiddle:                                  /* Loop if LOOP >= 2 */
-       ADDIB>          -1,%r31,fitmanymiddle   /* Adjusted inner loop decr */
-       pitlbe          0(%sr1,%r28)
-       pitlbe,m        %arg1(%sr1,%r28)        /* Last pitlbe and addr adjust 
*/
-       ADDIB>          -1,%r29,fitmanymiddle   /* Middle loop decr */
-       copy            %arg3,%r31              /* Re-init inner loop count */
-
-       movb,tr         %arg0,%r28,fitmanyloop  /* Re-init base addr */
-       ADDIB<=,n       -1,%r22,fitdone         /* Outer loop count decr */
-
-fitoneloop:                                     /* Loop if LOOP = 1 */
-       mtsp            %r20,%sr1
-       copy            %arg0,%r28              /* init base addr */
-       copy            %arg2,%r29              /* init middle loop count */
-
-fitonemiddle:                                   /* Loop if LOOP = 1 */
-       ADDIB>          -1,%r29,fitonemiddle    /* Middle loop count decr */
-       pitlbe,m        %arg1(%sr1,%r28)        /* pitlbe for one loop */
+       LDREG           ITLB_SID_BASE(%r1), %r20
+       LDREG           ITLB_SID_STRIDE(%r1), %r21
+       LDREG           ITLB_SID_COUNT(%r1), %r22
+       LDREG           ITLB_OFF_BASE(%r1), %arg0
+       LDREG           ITLB_OFF_STRIDE(%r1), %arg1
+       LDREG           ITLB_OFF_COUNT(%r1), %arg2
+       LDREG           ITLB_LOOP(%r1), %arg3
+
+       ADDIB=          -1, %arg3, fitoneloop   /* Preadjust and test */
+       movb,<,n        %arg3, %r31, fitdone    /* If loop < 0, skip */
+       copy            %arg0, %r28             /* Init base addr */
+
+fitmanyloop:                                   /* Loop if LOOP >= 2 */
+       mtsp            %r20, %sr1
+       add             %r21, %r20, %r20        /* increment space */
+       copy            %arg2, %r29             /* Init middle loop count */
+
+fitmanymiddle:                                 /* Loop if LOOP >= 2 */
+       ADDIB>          -1, %r31, fitmanymiddle /* Adjusted inner loop decr */
+       pitlbe          0(%sr1, %r28)
+       pitlbe,m        %arg1(%sr1, %r28)       /* Last pitlbe and addr adjust 
*/
+       ADDIB>          -1, %r29, fitmanymiddle /* Middle loop decr */
+       copy            %arg3, %r31             /* Re-init inner loop count */
+
+       movb,tr         %arg0, %r28, fitmanyloop /* Re-init base addr */
+       ADDIB<=,n       -1, %r22, fitdone       /* Outer loop count decr */
+
+fitoneloop:                                    /* Loop if LOOP = 1 */
+       mtsp            %r20, %sr1
+       copy            %arg0, %r28             /* init base addr */
+       copy            %arg2, %r29             /* init middle loop count */
+
+fitonemiddle:                                  /* Loop if LOOP = 1 */
+       ADDIB>          -1, %r29, fitonemiddle  /* Middle loop count decr */
+       pitlbe,m        %arg1(%sr1, %r28)       /* pitlbe for one loop */
 
-       ADDIB>          -1,%r22,fitoneloop      /* Outer loop count decr */
-       add             %r21,%r20,%r20          /* increment space */
+       ADDIB>          -1, %r22, fitoneloop    /* Outer loop count decr */
+       add             %r21, %r20, %r20                /* increment space */
 
 fitdone:
 
        /* Flush Data Tlb */
 
-       LDREG           DTLB_SID_BASE(%r1),%r20
-       LDREG           DTLB_SID_STRIDE(%r1),%r21
-       LDREG           DTLB_SID_COUNT(%r1),%r22
-       LDREG           DTLB_OFF_BASE(%r1),%arg0
-       LDREG           DTLB_OFF_STRIDE(%r1),%arg1
-       LDREG           DTLB_OFF_COUNT(%r1),%arg2
-       LDREG           DTLB_LOOP(%r1),%arg3
-
-       ADDIB=          -1,%arg3,fdtoneloop     /* Preadjust and test */
-       movb,<,n        %arg3,%r31,fdtdone      /* If loop < 0, skip */
-       copy            %arg0,%r28              /* Init base addr */
-
-fdtmanyloop:                                    /* Loop if LOOP >= 2 */
-       mtsp            %r20,%sr1
-       add             %r21,%r20,%r20          /* increment space */
-       copy            %arg2,%r29              /* Init middle loop count */
-
-fdtmanymiddle:                                  /* Loop if LOOP >= 2 */
-       ADDIB>          -1,%r31,fdtmanymiddle   /* Adjusted inner loop decr */
-       pdtlbe          0(%sr1,%r28)
-       pdtlbe,m        %arg1(%sr1,%r28)        /* Last pdtlbe and addr adjust 
*/
-       ADDIB>          -1,%r29,fdtmanymiddle   /* Middle loop decr */
-       copy            %arg3,%r31              /* Re-init inner loop count */
-
-       movb,tr         %arg0,%r28,fdtmanyloop  /* Re-init base addr */
-       ADDIB<=,n       -1,%r22,fdtdone         /* Outer loop count decr */
-
-fdtoneloop:                                     /* Loop if LOOP = 1 */
-       mtsp            %r20,%sr1
-       copy            %arg0,%r28              /* init base addr */
-       copy            %arg2,%r29              /* init middle loop count */
-
-fdtonemiddle:                                   /* Loop if LOOP = 1 */
-       ADDIB>          -1,%r29,fdtonemiddle    /* Middle loop count decr */
-       pdtlbe,m        %arg1(%sr1,%r28)        /* pdtlbe for one loop */
+       LDREG           DTLB_SID_BASE(%r1), %r20
+       LDREG           DTLB_SID_STRIDE(%r1), %r21
+       LDREG           DTLB_SID_COUNT(%r1), %r22
+       LDREG           DTLB_OFF_BASE(%r1), %arg0
+       LDREG           DTLB_OFF_STRIDE(%r1), %arg1
+       LDREG           DTLB_OFF_COUNT(%r1), %arg2
+       LDREG           DTLB_LOOP(%r1), %arg3
+
+       ADDIB=          -1, %arg3, fdtoneloop   /* Preadjust and test */
+       movb,<,n        %arg3, %r31, fdtdone    /* If loop < 0, skip */
+       copy            %arg0, %r28             /* Init base addr */
+
+fdtmanyloop:                                   /* Loop if LOOP >= 2 */
+       mtsp            %r20, %sr1
+       add             %r21, %r20, %r20        /* increment space */
+       copy            %arg2, %r29             /* Init middle loop count */
+
+fdtmanymiddle:                                 /* Loop if LOOP >= 2 */
+       ADDIB>          -1, %r31, fdtmanymiddle /* Adjusted inner loop decr */
+       pdtlbe          0(%sr1, %r28)
+       pdtlbe,m        %arg1(%sr1, %r28)       /* Last pdtlbe and addr adjust 
*/
+       ADDIB>          -1, %r29, fdtmanymiddle /* Middle loop decr */
+       copy            %arg3, %r31             /* Re-init inner loop count */
+
+       movb,tr         %arg0, %r28, fdtmanyloop /* Re-init base addr */
+       ADDIB<=,n       -1, %r22,fdtdone        /* Outer loop count decr */
+
+fdtoneloop:                                    /* Loop if LOOP = 1 */
+       mtsp            %r20, %sr1
+       copy            %arg0, %r28             /* init base addr */
+       copy            %arg2, %r29             /* init middle loop count */
+
+fdtonemiddle:                                  /* Loop if LOOP = 1 */
+       ADDIB>          -1, %r29, fdtonemiddle  /* Middle loop count decr */
+       pdtlbe,m        %arg1(%sr1, %r28)       /* pdtlbe for one loop */
 
-       ADDIB>          -1,%r22,fdtoneloop      /* Outer loop count decr */
-       add             %r21,%r20,%r20          /* increment space */
+       ADDIB>          -1, %r22, fdtoneloop    /* Outer loop count decr */
+       add             %r21, %r20, %r20        /* increment space */
 
 fdtdone:
 
        /* Switch back to virtual mode */
 
-       rsm     PSW_SM_Q,%r0       /* clear Q bit to load iia queue */
-       ldil    L%KERNEL_PSW, %r1
-       ldo     R%KERNEL_PSW(%r1), %r1
-       or      %r1,%r19,%r1    /* Set I bit if set on entry */
-       mtctl   %r1, %cr22
-       mtctl   %r0, %cr17      /* Clear IIASQ tail */
-       mtctl   %r0, %cr17      /* Clear IIASQ head */
-       ldil    L%(2f), %r1
-       ldo     R%(2f)(%r1), %r1
-       mtctl   %r1, %cr18      /* IIAOQ head */
-       ldo     4(%r1), %r1
-       mtctl   %r1, %cr18      /* IIAOQ tail */
+       rsm             PSW_SM_Q, %r0           /* clear Q bit to load iia 
queue */
+       ldil            L%KERNEL_PSW, %r1
+       ldo             R%KERNEL_PSW(%r1), %r1
+       or              %r1, %r19, %r1          /* Set I bit if set on entry */
+       mtctl           %r1, %cr22
+       mtctl           %r0, %cr17              /* Clear IIASQ tail */
+       mtctl           %r0, %cr17              /* Clear IIASQ head */
+       ldil            L%(2f), %r1
+       ldo             R%(2f)(%r1), %r1
+       mtctl           %r1, %cr18              /* IIAOQ head */
+       ldo             4(%r1), %r1
+       mtctl           %r1, %cr18              /* IIAOQ tail */
        rfi
        nop
 
-2:      bv      %r0(%r2)
+2:      bv             %r0(%r2)
        nop
        .exit
 
@@ -211,140 +211,198 @@
        .callinfo NO_CALLS
        .entry
 
-       mtsp            %r0,%sr1
-       ldil            L%cache_info,%r1
-       ldo             R%cache_info(%r1),%r1
+       mtsp            %r0, %sr1
+       ldil            L%cache_info, %r1
+       ldo             R%cache_info(%r1), %r1
 
        /* Flush Instruction Cache */
 
-       LDREG           ICACHE_BASE(%r1),%arg0
-       LDREG           ICACHE_STRIDE(%r1),%arg1
-       LDREG           ICACHE_COUNT(%r1),%arg2
-       LDREG           ICACHE_LOOP(%r1),%arg3
-       rsm             PSW_SM_I,%r22           /* No mmgt ops during loop*/
-       ADDIB=          -1,%arg3,fioneloop      /* Preadjust and test */
-       movb,<,n        %arg3,%r31,fisync       /* If loop < 0, do sync */
-
-fimanyloop:                                     /* Loop if LOOP >= 2 */
-       ADDIB>          -1,%r31,fimanyloop      /* Adjusted inner loop decr */
-       fice            0(%sr1,%arg0)
-       fice,m          %arg1(%sr1,%arg0)       /* Last fice and addr adjust */
-       movb,tr         %arg3,%r31,fimanyloop   /* Re-init inner loop count */
-       ADDIB<=,n       -1,%arg2,fisync         /* Outer loop decr */
-
-fioneloop:                                      /* Loop if LOOP = 1 */
-       ADDIB>          -1,%arg2,fioneloop      /* Outer loop count decr */
-       fice,m          %arg1(%sr1,%arg0)       /* Fice for one loop */
+       LDREG           ICACHE_BASE(%r1), %arg0
+       LDREG           ICACHE_STRIDE(%r1), %arg1
+       LDREG           ICACHE_COUNT(%r1), %arg2
+       LDREG           ICACHE_LOOP(%r1), %arg3
+       rsm             PSW_SM_I, %r22          /* No mmgt ops during loop*/
+       ADDIB=          -1, %arg3, fioneloop    /* Preadjust and test */
+       movb,<,n        %arg3, %r31, fisync     /* If loop < 0, do sync */
+
+fimanyloop:                                    /* Loop if LOOP >= 2 */
+       ADDIB>          -1, %r31, fimanyloop    /* Adjusted inner loop decr */
+       fice            0(%sr1, %arg0)
+       fice,m          %arg1(%sr1, %arg0)      /* Last fice and addr adjust */
+       movb,tr         %arg3, %r31, fimanyloop /* Re-init inner loop count */
+       ADDIB<=,n       -1, %arg2, fisync       /* Outer loop decr */
+
+fioneloop:                                     /* Loop if LOOP = 1 */
+       ADDIB>          -1, %arg2, fioneloop    /* Outer loop count decr */
+       fice,m          %arg1(%sr1, %arg0)      /* Fice for one loop */
 
 fisync:
        sync
-       mtsm    %r22
-       bv      %r0(%r2)
+       mtsm            %r22
+       bv              %r0(%r2)
        nop
        .exit
 
        .procend
 
-       .export flush_data_cache_local,code
-       .import cache_info,data
+       .export flush_data_cache_local, code
+       .import cache_info, data
 
 flush_data_cache_local:
        .proc
        .callinfo NO_CALLS
        .entry
 
-       mtsp            %r0,%sr1
-       ldil            L%cache_info,%r1
-       ldo             R%cache_info(%r1),%r1
+       mtsp            %r0, %sr1
+       ldil            L%cache_info, %r1
+       ldo             R%cache_info(%r1), %r1
 
        /* Flush Data Cache */
 
-       LDREG           DCACHE_BASE(%r1),%arg0
-       LDREG           DCACHE_STRIDE(%r1),%arg1
-       LDREG           DCACHE_COUNT(%r1),%arg2
-       LDREG           DCACHE_LOOP(%r1),%arg3
-       rsm             PSW_SM_I,%r22
-       ADDIB=          -1,%arg3,fdoneloop      /* Preadjust and test */
-       movb,<,n        %arg3,%r31,fdsync       /* If loop < 0, do sync */
-
-fdmanyloop:                                     /* Loop if LOOP >= 2 */
-       ADDIB>          -1,%r31,fdmanyloop      /* Adjusted inner loop decr */
-       fdce            0(%sr1,%arg0)
-       fdce,m          %arg1(%sr1,%arg0)       /* Last fdce and addr adjust */
-       movb,tr         %arg3,%r31,fdmanyloop   /* Re-init inner loop count */
-       ADDIB<=,n       -1,%arg2,fdsync         /* Outer loop decr */
-
-fdoneloop:                                      /* Loop if LOOP = 1 */
-       ADDIB>          -1,%arg2,fdoneloop      /* Outer loop count decr */
-       fdce,m          %arg1(%sr1,%arg0)       /* Fdce for one loop */
+       LDREG           DCACHE_BASE(%r1), %arg0
+       LDREG           DCACHE_STRIDE(%r1), %arg1
+       LDREG           DCACHE_COUNT(%r1), %arg2
+       LDREG           DCACHE_LOOP(%r1), %arg3
+       rsm             PSW_SM_I, %r22
+       ADDIB=          -1, %arg3, fdoneloop    /* Preadjust and test */
+       movb,<,n        %arg3, %r31, fdsync     /* If loop < 0, do sync */
+
+fdmanyloop:                                    /* Loop if LOOP >= 2 */
+       ADDIB>          -1, %r31, fdmanyloop    /* Adjusted inner loop decr */
+       fdce            0(%sr1, %arg0)
+       fdce,m          %arg1(%sr1, %arg0)      /* Last fdce and addr adjust */
+       movb,tr         %arg3, %r31, fdmanyloop /* Re-init inner loop count */
+       ADDIB<=,n       -1, %arg2, fdsync       /* Outer loop decr */
+
+fdoneloop:                                     /* Loop if LOOP = 1 */
+       ADDIB>          -1, %arg2, fdoneloop    /* Outer loop count decr */
+       fdce,m          %arg1(%sr1, %arg0)      /* Fdce for one loop */
 
 fdsync:
        syncdma
        sync
-       mtsm    %r22
-       bv      %r0(%r2)
+       mtsm            %r22
+       bv              %r0(%r2)
        nop
        .exit
 
        .procend
 
        .export copy_user_page_asm,code
+       .align  16
 
 copy_user_page_asm:
        .proc
        .callinfo NO_CALLS
        .entry
 
-       ldi 64,%r1
+#ifdef __LP64__
+       /* PA8x00 CPUs can consume 2 loads or 1 store per cycle.
+        * Unroll the loop by hand and arrange insn appropriately.
+        * GCC probably can do this just as well.
+        */
+
+       ldd             0(%r25), %r19
+       ldi             32, %r1                 /* PAGE_SIZE/128 == 32 */
+       ldw             64(%r25), %r0           /* prefetch 1 cacheline ahead */
+       ldw             128(%r25), %r0          /* prefetch 2 */
+
+1:     ldd             8(%r25), %r20
+       ldw             192(%r25), %r0          /* prefetch 3 */
+       ldw             256(%r25), %r0          /* prefetch 4 */
+
+       ldd             16(%r25), %r21
+       ldd             24(%r25), %r22
+       std             %r19, 0(%r26)
+       std             %r20, 8(%r26)
+
+       ldd             32(%r25), %r19
+       ldd             40(%r25), %r20
+       std             %r21, 16(%r26)
+       std             %r22, 24(%r26)
+
+       ldd             48(%r25), %r21
+       ldd             56(%r25), %r22
+       std             %r19, 32(%r26)
+       std             %r20, 40(%r26)
+
+       ldd             64(%r25), %r19
+       ldd             72(%r25), %r20
+       std             %r21, 48(%r26)
+       std             %r22, 56(%r26)
+
+       ldd             80(%r25), %r21
+       ldd             88(%r25), %r22
+       std             %r19, 64(%r26)
+       std             %r20, 72(%r26)
+
+       ldd              96(%r25), %r19
+       ldd             104(%r25), %r20
+       std             %r21, 80(%r26)
+       std             %r22, 88(%r26)
+
+       ldd             112(%r25), %r21
+       ldd             120(%r25), %r22
+       std             %r19, 96(%r26)
+       std             %r20, 104(%r26)
+
+       ldo             128(%r25), %r25
+       std             %r21, 112(%r26)
+       std             %r22, 120(%r26)
+       ldo             128(%r26), %r26
+
+       ADDIB>          -1, %r1, 1b             /* bundle 10 */
+       ldd             0(%r25), %r19           /* start next loads */
+
+#else
 
        /*
         * This loop is optimized for PCXL/PCXL2 ldw/ldw and stw/stw
-        * bundles (very restricted rules for bundling). It probably
-        * does OK on PCXU and better, but we could do better with
-        * ldd/std instructions. Note that until (if) we start saving
+        * bundles (very restricted rules for bundling).
+        * Note that until (if) we start saving
         * the full 64 bit register values on interrupt, we can't
         * use ldd/std on a 32 bit kernel.
         */
-
+       ldi             64, %r1         /* PAGE_SIZE/64 == 64 */
 
 1:
-       ldw 0(%r25),%r19
-       ldw 4(%r25),%r20
-       ldw 8(%r25),%r21
-       ldw 12(%r25),%r22
-       stw %r19,0(%r26)
-       stw %r20,4(%r26)
-       stw %r21,8(%r26)
-       stw %r22,12(%r26)
-       ldw 16(%r25),%r19
-       ldw 20(%r25),%r20
-       ldw 24(%r25),%r21
-       ldw 28(%r25),%r22
-       stw %r19,16(%r26)
-       stw %r20,20(%r26)
-       stw %r21,24(%r26)
-       stw %r22,28(%r26)
-       ldw 32(%r25),%r19
-       ldw 36(%r25),%r20
-       ldw 40(%r25),%r21
-       ldw 44(%r25),%r22
-       stw %r19,32(%r26)
-       stw %r20,36(%r26)
-       stw %r21,40(%r26)
-       stw %r22,44(%r26)
-       ldw 48(%r25),%r19
-       ldw 52(%r25),%r20
-       ldw 56(%r25),%r21
-       ldw 60(%r25),%r22
-       stw %r19,48(%r26)
-       stw %r20,52(%r26)
-       stw %r21,56(%r26)
-       stw %r22,60(%r26)
-       ldo 64(%r26),%r26
-       ADDIB>  -1,%r1,1b
-       ldo 64(%r25),%r25
-
-       bv      %r0(%r2)
+       ldw             0(%r25), %r19
+       ldw             4(%r25), %r20
+       ldw             8(%r25), %r21
+       ldw             12(%r25), %r22
+       stw             %r19, 0(%r26)
+       stw             %r20, 4(%r26)
+       stw             %r21, 8(%r26)
+       stw             %r22, 12(%r26)
+       ldw             16(%r25), %r19
+       ldw             20(%r25), %r20
+       ldw             24(%r25), %r21
+       ldw             28(%r25), %r22
+       stw             %r19, 16(%r26)
+       stw             %r20, 20(%r26)
+       stw             %r21, 24(%r26)
+       stw             %r22, 28(%r26)
+       ldw             32(%r25), %r19
+       ldw             36(%r25), %r20
+       ldw             40(%r25), %r21
+       ldw             44(%r25), %r22
+       stw             %r19, 32(%r26)
+       stw             %r20, 36(%r26)
+       stw             %r21, 40(%r26)
+       stw             %r22, 44(%r26)
+       ldw             48(%r25), %r19
+       ldw             52(%r25), %r20
+       ldw             56(%r25), %r21
+       ldw             60(%r25), %r22
+       stw             %r19, 48(%r26)
+       stw             %r20, 52(%r26)
+       stw             %r21, 56(%r26)
+       stw             %r22, 60(%r26)
+       ldo             64(%r26), %r26
+       ADDIB>          -1, %r1, 1b
+       ldo             64(%r25), %r25
+#endif
+       bv              %r0(%r2)
        nop
        .exit
 
@@ -393,33 +451,33 @@
        .callinfo NO_CALLS
        .entry
 
-       ldil    L%(__PAGE_OFFSET),%r1
-       sub     %r26,%r1,%r26
-       sub     %r25,%r1,%r23  /* move physical addr into non shadowed reg */
-
-       ldil    L%(TMPALIAS_MAP_START),%r28
-#ifdef __LP64__
-       extrd,u %r26,56,32,%r26 /* convert phys addr to tlb insert format */
-       extrd,u %r23,56,32,%r23 /* convert phys addr to tlb insert format */
-       depd    %r24,63,22,%r28 /* Form aliased virtual address 'to' */
-       depdi   0,63,12,%r28    /* Clear any offset bits */
-       copy    %r28,%r29
-       depdi   1,41,1,%r29     /* Form aliased virtual address 'from' */
-#else
-       extrw,u %r26,24,25,%r26 /* convert phys addr to tlb insert format */
-       extrw,u %r23,24,25,%r23 /* convert phys addr to tlb insert format */
-       depw    %r24,31,22,%r28 /* Form aliased virtual address 'to' */
-       depwi   0,31,12,%r28    /* Clear any offset bits */
-       copy    %r28,%r29
-       depwi   1,9,1,%r29      /* Form aliased virtual address 'from' */
+       ldil            L%(__PAGE_OFFSET), %r1
+       sub             %r26, %r1, %r26
+       sub             %r25, %r1, %r23         /* move physical addr into non 
shadowed reg */
+
+       ldil            L%(TMPALIAS_MAP_START), %r28
+#ifdef __LP64__
+       extrd,u         %r26,56,32, %r26                /* convert phys addr to 
tlb insert format */
+       extrd,u         %r23,56,32, %r23                /* convert phys addr to 
tlb insert format */
+       depd            %r24,63,22, %r28                /* Form aliased virtual 
address 'to' */
+       depdi           0, 63,12, %r28          /* Clear any offset bits */
+       copy            %r28, %r29
+       depdi           1, 41,1, %r29           /* Form aliased virtual address 
'from' */
+#else
+       extrw,u         %r26, 24,25, %r26       /* convert phys addr to tlb 
insert format */
+       extrw,u         %r23, 24,25, %r23       /* convert phys addr to tlb 
insert format */
+       depw            %r24, 31,22, %r28       /* Form aliased virtual address 
'to' */
+       depwi           0, 31,12, %r28          /* Clear any offset bits */
+       copy            %r28, %r29
+       depwi           1, 9,1, %r29            /* Form aliased virtual address 
'from' */
 #endif
 
        /* Purge any old translations */
 
-       pdtlb   0(%r28)
-       pdtlb   0(%r29)
+       pdtlb           0(%r28)
+       pdtlb           0(%r29)
 
-       ldi 64,%r1
+       ldi             64, %r1
 
        /*
         * This loop is optimized for PCXL/PCXL2 ldw/ldw and stw/stw
@@ -432,43 +490,43 @@
 
 
 1:
-       ldw 0(%r29),%r19
-       ldw 4(%r29),%r20
-       ldw 8(%r29),%r21
-       ldw 12(%r29),%r22
-       stw %r19,0(%r28)
-       stw %r20,4(%r28)
-       stw %r21,8(%r28)
-       stw %r22,12(%r28)
-       ldw 16(%r29),%r19
-       ldw 20(%r29),%r20
-       ldw 24(%r29),%r21
-       ldw 28(%r29),%r22
-       stw %r19,16(%r28)
-       stw %r20,20(%r28)
-       stw %r21,24(%r28)
-       stw %r22,28(%r28)
-       ldw 32(%r29),%r19
-       ldw 36(%r29),%r20
-       ldw 40(%r29),%r21
-       ldw 44(%r29),%r22
-       stw %r19,32(%r28)
-       stw %r20,36(%r28)
-       stw %r21,40(%r28)
-       stw %r22,44(%r28)
-       ldw 48(%r29),%r19
-       ldw 52(%r29),%r20
-       ldw 56(%r29),%r21
-       ldw 60(%r29),%r22
-       stw %r19,48(%r28)
-       stw %r20,52(%r28)
-       stw %r21,56(%r28)
-       stw %r22,60(%r28)
-       ldo 64(%r28),%r28
-       ADDIB>  -1,%r1,1b
-       ldo 64(%r29),%r29
+       ldw             0(%r29), %r19
+       ldw             4(%r29), %r20
+       ldw             8(%r29), %r21
+       ldw             12(%r29), %r22
+       stw             %r19, 0(%r28)
+       stw             %r20, 4(%r28)
+       stw             %r21, 8(%r28)
+       stw             %r22, 12(%r28)
+       ldw             16(%r29), %r19
+       ldw             20(%r29), %r20
+       ldw             24(%r29), %r21
+       ldw             28(%r29), %r22
+       stw             %r19, 16(%r28)
+       stw             %r20, 20(%r28)
+       stw             %r21, 24(%r28)
+       stw             %r22, 28(%r28)
+       ldw             32(%r29), %r19
+       ldw             36(%r29), %r20
+       ldw             40(%r29), %r21
+       ldw             44(%r29), %r22
+       stw             %r19, 32(%r28)
+       stw             %r20, 36(%r28)
+       stw             %r21, 40(%r28)
+       stw             %r22, 44(%r28)
+       ldw             48(%r29