Merge branch 'topic/usb-caiaq' into for-linus
Takashi Iwai [Mon, 12 Jan 2009 13:06:01 +0000 (14:06 +0100)]
1316 files changed:
Documentation/ABI/testing/sysfs-class-regulator
Documentation/DocBook/Makefile
Documentation/DocBook/regulator.tmpl [new file with mode: 0644]
Documentation/RCU/00-INDEX
Documentation/RCU/rcubarrier.txt [new file with mode: 0644]
Documentation/bad_memory.txt [new file with mode: 0644]
Documentation/cgroups/cgroups.txt
Documentation/controllers/memcg_test.txt [new file with mode: 0644]
Documentation/controllers/memory.txt
Documentation/crypto/async-tx-api.txt
Documentation/development-process/4.Coding
Documentation/dmaengine.txt [new file with mode: 0644]
Documentation/filesystems/Locking
Documentation/filesystems/btrfs.txt [new file with mode: 0644]
Documentation/filesystems/ext4.txt
Documentation/filesystems/squashfs.txt [new file with mode: 0644]
Documentation/filesystems/vfs.txt
Documentation/hwmon/abituguru-datasheet
Documentation/kernel-parameters.txt
Documentation/nommu-mmap.txt
Documentation/powerpc/dts-bindings/4xx/ndfc.txt [new file with mode: 0644]
Documentation/powerpc/dts-bindings/fsl/board.txt
Documentation/scsi/scsi_fc_transport.txt
Documentation/sysctl/vm.txt
Documentation/w1/masters/00-INDEX
Documentation/w1/masters/mxc-w1 [new file with mode: 0644]
Documentation/w1/w1.netlink
Documentation/x86/boot.txt
MAINTAINERS
Makefile
arch/arm/configs/clps7500_defconfig [deleted file]
arch/arm/include/asm/mmu.h
arch/arm/kernel/isa.c
arch/arm/mach-at91/at91cap9.c
arch/arm/mach-at91/at91rm9200.c
arch/arm/mach-at91/at91sam9260.c
arch/arm/mach-at91/at91sam9261.c
arch/arm/mach-at91/at91sam9263.c
arch/arm/mach-at91/at91sam9rl.c
arch/arm/mach-at91/board-sam9rlek.c
arch/arm/mach-clps711x/edb7211-mm.c
arch/arm/mach-clps711x/fortunet.c
arch/arm/mach-davinci/devices.c
arch/arm/mach-davinci/include/mach/gpio.h
arch/arm/mach-footbridge/common.c
arch/arm/mach-footbridge/common.h
arch/arm/mach-footbridge/dc21285.c
arch/arm/mach-footbridge/isa-irq.c
arch/arm/mach-h720x/h7202-eval.c
arch/arm/mach-kirkwood/common.c
arch/arm/mach-kirkwood/pcie.c
arch/arm/mach-ks8695/devices.c
arch/arm/mach-msm/devices.c
arch/arm/mach-mv78xx0/pcie.c
arch/arm/mach-mx2/devices.c
arch/arm/mach-mx3/devices.c
arch/arm/mach-netx/fb.c
arch/arm/mach-netx/time.c
arch/arm/mach-netx/xc.c
arch/arm/mach-omap1/mcbsp.c
arch/arm/mach-omap2/mcbsp.c
arch/arm/mach-orion5x/pci.c
arch/arm/mach-pnx4008/gpio.c
arch/arm/mach-pnx4008/i2c.c
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/e350.c
arch/arm/mach-pxa/e400.c
arch/arm/mach-pxa/e740.c
arch/arm/mach-pxa/e750.c
arch/arm/mach-pxa/e800.c
arch/arm/mach-pxa/include/mach/pxa3xx-regs.h
arch/arm/mach-pxa/poodle.c
arch/arm/mach-pxa/spitz.c
arch/arm/mach-realview/platsmp.c
arch/arm/mach-s3c2410/include/mach/gpio.h
arch/arm/mach-s3c2410/include/mach/irqs.h
arch/arm/mach-s3c2440/mach-at2440evb.c
arch/arm/mach-s3c6400/include/mach/irqs.h
arch/arm/mm/dma-mapping.c
arch/arm/plat-omap/i2c.c
arch/arm/plat-s3c/dev-fb.c
arch/arm/plat-s3c/dev-i2c0.c
arch/arm/plat-s3c/dev-i2c1.c
arch/arm/plat-s3c24xx/gpiolib.c
arch/arm/plat-s3c24xx/pwm.c
arch/arm/plat-s3c64xx/include/plat/irqs.h
arch/avr32/mach-at32ap/at32ap700x.c
arch/blackfin/include/asm/mmu.h
arch/blackfin/kernel/ptrace.c
arch/blackfin/kernel/traps.c
arch/frv/kernel/ptrace.c
arch/h8300/include/asm/mmu.h
arch/ia64/include/asm/acpi-ext.h
arch/ia64/include/asm/irq.h
arch/ia64/include/asm/sn/acpi.h
arch/ia64/include/asm/topology.h
arch/ia64/kernel/acpi.c
arch/ia64/kernel/irq.c
arch/ia64/sn/kernel/io_acpi_init.c
arch/ia64/sn/kernel/io_common.c
arch/m68knommu/include/asm/mmu.h
arch/parisc/Makefile
arch/parisc/include/asm/Kbuild
arch/parisc/include/asm/byteorder.h
arch/parisc/include/asm/checksum.h
arch/parisc/include/asm/io.h
arch/parisc/include/asm/mmu_context.h
arch/parisc/include/asm/processor.h
arch/parisc/include/asm/swab.h [new file with mode: 0644]
arch/parisc/include/asm/uaccess.h
arch/parisc/kernel/drivers.c
arch/parisc/kernel/hpmc.S
arch/parisc/kernel/irq.c
arch/parisc/kernel/pdc_cons.c
arch/parisc/kernel/perf.c
arch/parisc/kernel/processor.c
arch/parisc/kernel/setup.c
arch/parisc/kernel/smp.c
arch/parisc/kernel/time.c
arch/parisc/kernel/topology.c
arch/parisc/kernel/traps.c
arch/parisc/kernel/unwind.c
arch/parisc/lib/iomap.c
arch/parisc/lib/memcpy.c
arch/parisc/mm/fault.c
arch/powerpc/Kconfig
arch/powerpc/boot/Makefile
arch/powerpc/boot/dts/mpc836x_mds.dts
arch/powerpc/boot/dts/mpc836x_rdk.dts
arch/powerpc/boot/dts/mpc8641_hpcn.dts
arch/powerpc/boot/install.sh
arch/powerpc/configs/85xx/mpc8572_ds_defconfig
arch/powerpc/include/asm/cell-pmu.h
arch/powerpc/include/asm/ioctls.h
arch/powerpc/include/asm/kexec.h
arch/powerpc/include/asm/oprofile_impl.h
arch/powerpc/include/asm/ps3.h
arch/powerpc/include/asm/qe.h
arch/powerpc/include/asm/qe_ic.h
arch/powerpc/include/asm/spu.h
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/cacheinfo.c [new file with mode: 0644]
arch/powerpc/kernel/cacheinfo.h [new file with mode: 0644]
arch/powerpc/kernel/pci-common.c
arch/powerpc/kernel/pci_64.c
arch/powerpc/kernel/ppc_ksyms.c
arch/powerpc/kernel/prom.c
arch/powerpc/kernel/prom_init.c
arch/powerpc/kernel/sysfs.c
arch/powerpc/mm/mmu_decl.h
arch/powerpc/mm/numa.c
arch/powerpc/mm/pgtable_32.c
arch/powerpc/mm/tlb_nohash.c
arch/powerpc/oprofile/cell/pr_util.h
arch/powerpc/oprofile/cell/spu_profiler.c
arch/powerpc/oprofile/common.c
arch/powerpc/oprofile/op_model_cell.c
arch/powerpc/platforms/52xx/mpc52xx_common.c
arch/powerpc/platforms/83xx/mpc831x_rdb.c
arch/powerpc/platforms/83xx/mpc832x_mds.c
arch/powerpc/platforms/83xx/mpc832x_rdb.c
arch/powerpc/platforms/83xx/mpc836x_mds.c
arch/powerpc/platforms/83xx/mpc836x_rdk.c
arch/powerpc/platforms/83xx/mpc837x_mds.c
arch/powerpc/platforms/83xx/mpc837x_rdb.c
arch/powerpc/platforms/83xx/mpc83xx.h
arch/powerpc/platforms/85xx/mpc85xx_ds.c
arch/powerpc/platforms/85xx/smp.c
arch/powerpc/platforms/Kconfig
arch/powerpc/platforms/Kconfig.cputype
arch/powerpc/platforms/cell/beat_htab.c
arch/powerpc/platforms/cell/beat_udbg.c
arch/powerpc/platforms/cell/cbe_cpufreq_pervasive.c
arch/powerpc/platforms/cell/interrupt.c
arch/powerpc/platforms/cell/io-workarounds.c
arch/powerpc/platforms/cell/iommu.c
arch/powerpc/platforms/cell/spufs/spufs.h
arch/powerpc/platforms/iseries/Kconfig
arch/powerpc/platforms/iseries/setup.c
arch/powerpc/platforms/pasemi/cpufreq.c
arch/powerpc/platforms/pasemi/dma_lib.c
arch/powerpc/platforms/powermac/pci.c
arch/powerpc/platforms/powermac/time.c
arch/powerpc/platforms/ps3/device-init.c
arch/powerpc/sysdev/Makefile
arch/powerpc/sysdev/fsl_pci.c
arch/powerpc/sysdev/fsl_soc.h
arch/powerpc/sysdev/qe_lib/Kconfig
arch/powerpc/sysdev/qe_lib/gpio.c
arch/powerpc/sysdev/simple_gpio.c [new file with mode: 0644]
arch/powerpc/sysdev/simple_gpio.h [new file with mode: 0644]
arch/s390/include/asm/chpid.h
arch/s390/include/asm/chsc.h
arch/s390/include/asm/cmb.h
arch/s390/include/asm/dasd.h
arch/s390/include/asm/kvm.h
arch/s390/include/asm/posix_types.h
arch/s390/include/asm/ptrace.h
arch/s390/include/asm/qeth.h
arch/s390/include/asm/schid.h
arch/s390/include/asm/swab.h
arch/s390/include/asm/types.h
arch/s390/kernel/entry.h
arch/s390/kernel/smp.c
arch/s390/kernel/sys_s390.c
arch/s390/kernel/vdso.c
arch/s390/kernel/vdso32/gettimeofday.S
arch/s390/kvm/diag.c
arch/s390/kvm/interrupt.c
arch/s390/kvm/priv.c
arch/sh/include/asm/mmu.h
arch/sparc/kernel/sun4m_smp.c
arch/x86/Kconfig
arch/x86/include/asm/bitops.h
arch/x86/include/asm/es7000/apic.h
arch/x86/include/asm/es7000/mpparse.h
arch/x86/include/asm/genapic_32.h
arch/x86/include/asm/mach-default/mach_mpparse.h
arch/x86/include/asm/mach-generic/mach_mpparse.h
arch/x86/include/asm/mach-generic/mach_mpspec.h
arch/x86/include/asm/mpspec_def.h
arch/x86/include/asm/numaq/mpparse.h
arch/x86/include/asm/setup.h
arch/x86/include/asm/smp.h
arch/x86/include/asm/summit/apic.h
arch/x86/include/asm/summit/mpparse.h
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/acpi/cstate.c
arch/x86/kernel/acpi/sleep.c
arch/x86/kernel/apic.c
arch/x86/kernel/apm_32.c
arch/x86/kernel/cpu/common.c
arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
arch/x86/kernel/cpu/cpufreq/longhaul.c
arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
arch/x86/kernel/cpu/cpufreq/powernow-k8.c
arch/x86/kernel/cpu/cpufreq/powernow-k8.h
arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c
arch/x86/kernel/cpu/cpufreq/speedstep-ich.c
arch/x86/kernel/cpu/mcheck/mce_32.c
arch/x86/kernel/cpu/mcheck/mce_amd_64.c
arch/x86/kernel/cpu/mcheck/p5.c
arch/x86/kernel/cpu/mcheck/p6.c
arch/x86/kernel/cpu/mcheck/winchip.c
arch/x86/kernel/e820.c
arch/x86/kernel/early-quirks.c
arch/x86/kernel/head_64.S
arch/x86/kernel/i8259.c
arch/x86/kernel/io_apic.c
arch/x86/kernel/ioport.c
arch/x86/kernel/irq.c
arch/x86/kernel/irq_32.c
arch/x86/kernel/irq_64.c
arch/x86/kernel/irqinit_32.c
arch/x86/kernel/irqinit_64.c
arch/x86/kernel/mpparse.c
arch/x86/kernel/nmi.c
arch/x86/kernel/numaq_32.c
arch/x86/kernel/process_32.c
arch/x86/kernel/setup_percpu.c
arch/x86/kernel/smp.c
arch/x86/kernel/smpboot.c
arch/x86/kernel/time_32.c
arch/x86/kernel/time_64.c
arch/x86/kernel/traps.c
arch/x86/kernel/visws_quirks.c
arch/x86/mach-generic/es7000.c
arch/x86/mach-generic/numaq.c
arch/x86/mach-generic/probe.c
arch/x86/mm/k8topology_64.c
arch/x86/oprofile/op_model_amd.c
block/Kconfig
block/blk-map.c
crypto/async_tx/async_tx.c
drivers/Kconfig
drivers/Makefile
drivers/acpi/Kconfig
drivers/acpi/Makefile
drivers/acpi/acpica/Makefile [new file with mode: 0644]
drivers/acpi/acpica/accommon.h [new file with mode: 0644]
drivers/acpi/acpica/acconfig.h [new file with mode: 0644]
drivers/acpi/acpica/acdebug.h [moved from include/acpi/acdebug.h with 100% similarity]
drivers/acpi/acpica/acdispat.h [moved from include/acpi/acdispat.h with 100% similarity]
drivers/acpi/acpica/acevents.h [new file with mode: 0644]
drivers/acpi/acpica/acglobal.h [new file with mode: 0644]
drivers/acpi/acpica/achware.h [new file with mode: 0644]
drivers/acpi/acpica/acinterp.h [moved from include/acpi/acinterp.h with 100% similarity]
drivers/acpi/acpica/aclocal.h [new file with mode: 0644]
drivers/acpi/acpica/acmacros.h [new file with mode: 0644]
drivers/acpi/acpica/acnamesp.h [new file with mode: 0644]
drivers/acpi/acpica/acobject.h [moved from include/acpi/acobject.h with 100% similarity]
drivers/acpi/acpica/acopcode.h [moved from include/acpi/acopcode.h with 100% similarity]
drivers/acpi/acpica/acparser.h [moved from include/acpi/acparser.h with 100% similarity]
drivers/acpi/acpica/acpredef.h [moved from include/acpi/acpredef.h with 100% similarity]
drivers/acpi/acpica/acresrc.h [moved from include/acpi/acresrc.h with 100% similarity]
drivers/acpi/acpica/acstruct.h [moved from include/acpi/acstruct.h with 100% similarity]
drivers/acpi/acpica/actables.h [new file with mode: 0644]
drivers/acpi/acpica/acutils.h [new file with mode: 0644]
drivers/acpi/acpica/amlcode.h [moved from include/acpi/amlcode.h with 100% similarity]
drivers/acpi/acpica/amlresrc.h [moved from include/acpi/amlresrc.h with 100% similarity]
drivers/acpi/acpica/dsfield.c [new file with mode: 0644]
drivers/acpi/acpica/dsinit.c [new file with mode: 0644]
drivers/acpi/acpica/dsmethod.c [new file with mode: 0644]
drivers/acpi/acpica/dsmthdat.c [new file with mode: 0644]
drivers/acpi/acpica/dsobject.c [new file with mode: 0644]
drivers/acpi/acpica/dsopcode.c [new file with mode: 0644]
drivers/acpi/acpica/dsutils.c [new file with mode: 0644]
drivers/acpi/acpica/dswexec.c [new file with mode: 0644]
drivers/acpi/acpica/dswload.c [new file with mode: 0644]
drivers/acpi/acpica/dswscope.c [new file with mode: 0644]
drivers/acpi/acpica/dswstate.c [new file with mode: 0644]
drivers/acpi/acpica/evevent.c [new file with mode: 0644]
drivers/acpi/acpica/evgpe.c [new file with mode: 0644]
drivers/acpi/acpica/evgpeblk.c [new file with mode: 0644]
drivers/acpi/acpica/evmisc.c [new file with mode: 0644]
drivers/acpi/acpica/evregion.c [new file with mode: 0644]
drivers/acpi/acpica/evrgnini.c [new file with mode: 0644]
drivers/acpi/acpica/evsci.c [new file with mode: 0644]
drivers/acpi/acpica/evxface.c [new file with mode: 0644]
drivers/acpi/acpica/evxfevnt.c [new file with mode: 0644]
drivers/acpi/acpica/evxfregn.c [new file with mode: 0644]
drivers/acpi/acpica/exconfig.c [new file with mode: 0644]
drivers/acpi/acpica/exconvrt.c [new file with mode: 0644]
drivers/acpi/acpica/excreate.c [new file with mode: 0644]
drivers/acpi/acpica/exdump.c [new file with mode: 0644]
drivers/acpi/acpica/exfield.c [new file with mode: 0644]
drivers/acpi/acpica/exfldio.c [new file with mode: 0644]
drivers/acpi/acpica/exmisc.c [new file with mode: 0644]
drivers/acpi/acpica/exmutex.c [new file with mode: 0644]
drivers/acpi/acpica/exnames.c [new file with mode: 0644]
drivers/acpi/acpica/exoparg1.c [new file with mode: 0644]
drivers/acpi/acpica/exoparg2.c [new file with mode: 0644]
drivers/acpi/acpica/exoparg3.c [new file with mode: 0644]
drivers/acpi/acpica/exoparg6.c [new file with mode: 0644]
drivers/acpi/acpica/exprep.c [new file with mode: 0644]
drivers/acpi/acpica/exregion.c [new file with mode: 0644]
drivers/acpi/acpica/exresnte.c [new file with mode: 0644]
drivers/acpi/acpica/exresolv.c [new file with mode: 0644]
drivers/acpi/acpica/exresop.c [new file with mode: 0644]
drivers/acpi/acpica/exstore.c [new file with mode: 0644]
drivers/acpi/acpica/exstoren.c [new file with mode: 0644]
drivers/acpi/acpica/exstorob.c [new file with mode: 0644]
drivers/acpi/acpica/exsystem.c [new file with mode: 0644]
drivers/acpi/acpica/exutils.c [new file with mode: 0644]
drivers/acpi/acpica/hwacpi.c [new file with mode: 0644]
drivers/acpi/acpica/hwgpe.c [new file with mode: 0644]
drivers/acpi/acpica/hwregs.c [new file with mode: 0644]
drivers/acpi/acpica/hwsleep.c [new file with mode: 0644]
drivers/acpi/acpica/hwtimer.c [new file with mode: 0644]
drivers/acpi/acpica/hwxface.c [new file with mode: 0644]
drivers/acpi/acpica/nsaccess.c [new file with mode: 0644]
drivers/acpi/acpica/nsalloc.c [new file with mode: 0644]
drivers/acpi/acpica/nsdump.c [new file with mode: 0644]
drivers/acpi/acpica/nsdumpdv.c [new file with mode: 0644]
drivers/acpi/acpica/nseval.c [new file with mode: 0644]
drivers/acpi/acpica/nsinit.c [new file with mode: 0644]
drivers/acpi/acpica/nsload.c [new file with mode: 0644]
drivers/acpi/acpica/nsnames.c [new file with mode: 0644]
drivers/acpi/acpica/nsobject.c [new file with mode: 0644]
drivers/acpi/acpica/nsparse.c [new file with mode: 0644]
drivers/acpi/acpica/nspredef.c [new file with mode: 0644]
drivers/acpi/acpica/nssearch.c [new file with mode: 0644]
drivers/acpi/acpica/nsutils.c [new file with mode: 0644]
drivers/acpi/acpica/nswalk.c [new file with mode: 0644]
drivers/acpi/acpica/nsxfeval.c [new file with mode: 0644]
drivers/acpi/acpica/nsxfname.c [new file with mode: 0644]
drivers/acpi/acpica/nsxfobj.c [new file with mode: 0644]
drivers/acpi/acpica/psargs.c [new file with mode: 0644]
drivers/acpi/acpica/psloop.c [new file with mode: 0644]
drivers/acpi/acpica/psopcode.c [new file with mode: 0644]
drivers/acpi/acpica/psparse.c [new file with mode: 0644]
drivers/acpi/acpica/psscope.c [new file with mode: 0644]
drivers/acpi/acpica/pstree.c [new file with mode: 0644]
drivers/acpi/acpica/psutils.c [new file with mode: 0644]
drivers/acpi/acpica/pswalk.c [new file with mode: 0644]
drivers/acpi/acpica/psxface.c [new file with mode: 0644]
drivers/acpi/acpica/rsaddr.c [new file with mode: 0644]
drivers/acpi/acpica/rscalc.c [new file with mode: 0644]
drivers/acpi/acpica/rscreate.c [new file with mode: 0644]
drivers/acpi/acpica/rsdump.c [new file with mode: 0644]
drivers/acpi/acpica/rsinfo.c [new file with mode: 0644]
drivers/acpi/acpica/rsio.c [new file with mode: 0644]
drivers/acpi/acpica/rsirq.c [new file with mode: 0644]
drivers/acpi/acpica/rslist.c [new file with mode: 0644]
drivers/acpi/acpica/rsmemory.c [new file with mode: 0644]
drivers/acpi/acpica/rsmisc.c [new file with mode: 0644]
drivers/acpi/acpica/rsutils.c [new file with mode: 0644]
drivers/acpi/acpica/rsxface.c [new file with mode: 0644]
drivers/acpi/acpica/tbfadt.c [new file with mode: 0644]
drivers/acpi/acpica/tbfind.c [new file with mode: 0644]
drivers/acpi/acpica/tbinstal.c [new file with mode: 0644]
drivers/acpi/acpica/tbutils.c [new file with mode: 0644]
drivers/acpi/acpica/tbxface.c [new file with mode: 0644]
drivers/acpi/acpica/tbxfroot.c [new file with mode: 0644]
drivers/acpi/acpica/utalloc.c [new file with mode: 0644]
drivers/acpi/acpica/utcopy.c [new file with mode: 0644]
drivers/acpi/acpica/utdebug.c [new file with mode: 0644]
drivers/acpi/acpica/utdelete.c [new file with mode: 0644]
drivers/acpi/acpica/uteval.c [new file with mode: 0644]
drivers/acpi/acpica/utglobal.c [new file with mode: 0644]
drivers/acpi/acpica/utinit.c [new file with mode: 0644]
drivers/acpi/acpica/utmath.c [new file with mode: 0644]
drivers/acpi/acpica/utmisc.c [new file with mode: 0644]
drivers/acpi/acpica/utmutex.c [new file with mode: 0644]
drivers/acpi/acpica/utobject.c [new file with mode: 0644]
drivers/acpi/acpica/utresrc.c [new file with mode: 0644]
drivers/acpi/acpica/utstate.c [new file with mode: 0644]
drivers/acpi/acpica/utxface.c [new file with mode: 0644]
drivers/acpi/battery.c
drivers/acpi/cm_sbs.c
drivers/acpi/debug.c
drivers/acpi/dispatcher/Makefile [deleted file]
drivers/acpi/dispatcher/dsfield.c [deleted file]
drivers/acpi/dispatcher/dsinit.c [deleted file]
drivers/acpi/dispatcher/dsmethod.c [deleted file]
drivers/acpi/dispatcher/dsmthdat.c [deleted file]
drivers/acpi/dispatcher/dsobject.c [deleted file]
drivers/acpi/dispatcher/dsopcode.c [deleted file]
drivers/acpi/dispatcher/dsutils.c [deleted file]
drivers/acpi/dispatcher/dswexec.c [deleted file]
drivers/acpi/dispatcher/dswload.c [deleted file]
drivers/acpi/dispatcher/dswscope.c [deleted file]
drivers/acpi/dispatcher/dswstate.c [deleted file]
drivers/acpi/ec.c
drivers/acpi/events/Makefile [deleted file]
drivers/acpi/events/evevent.c [deleted file]
drivers/acpi/events/evgpe.c [deleted file]
drivers/acpi/events/evgpeblk.c [deleted file]
drivers/acpi/events/evmisc.c [deleted file]
drivers/acpi/events/evregion.c [deleted file]
drivers/acpi/events/evrgnini.c [deleted file]
drivers/acpi/events/evsci.c [deleted file]
drivers/acpi/events/evxface.c [deleted file]
drivers/acpi/events/evxfevnt.c [deleted file]
drivers/acpi/events/evxfregn.c [deleted file]
drivers/acpi/executer/Makefile [deleted file]
drivers/acpi/executer/exconfig.c [deleted file]
drivers/acpi/executer/exconvrt.c [deleted file]
drivers/acpi/executer/excreate.c [deleted file]
drivers/acpi/executer/exdump.c [deleted file]
drivers/acpi/executer/exfield.c [deleted file]
drivers/acpi/executer/exfldio.c [deleted file]
drivers/acpi/executer/exmisc.c [deleted file]
drivers/acpi/executer/exmutex.c [deleted file]
drivers/acpi/executer/exnames.c [deleted file]
drivers/acpi/executer/exoparg1.c [deleted file]
drivers/acpi/executer/exoparg2.c [deleted file]
drivers/acpi/executer/exoparg3.c [deleted file]
drivers/acpi/executer/exoparg6.c [deleted file]
drivers/acpi/executer/exprep.c [deleted file]
drivers/acpi/executer/exregion.c [deleted file]
drivers/acpi/executer/exresnte.c [deleted file]
drivers/acpi/executer/exresolv.c [deleted file]
drivers/acpi/executer/exresop.c [deleted file]
drivers/acpi/executer/exstore.c [deleted file]
drivers/acpi/executer/exstoren.c [deleted file]
drivers/acpi/executer/exstorob.c [deleted file]
drivers/acpi/executer/exsystem.c [deleted file]
drivers/acpi/executer/exutils.c [deleted file]
drivers/acpi/hardware/Makefile [deleted file]
drivers/acpi/hardware/hwacpi.c [deleted file]
drivers/acpi/hardware/hwgpe.c [deleted file]
drivers/acpi/hardware/hwregs.c [deleted file]
drivers/acpi/hardware/hwsleep.c [deleted file]
drivers/acpi/hardware/hwtimer.c [deleted file]
drivers/acpi/main.c [new file with mode: 0644]
drivers/acpi/namespace/Makefile [deleted file]
drivers/acpi/namespace/nsaccess.c [deleted file]
drivers/acpi/namespace/nsalloc.c [deleted file]
drivers/acpi/namespace/nsdump.c [deleted file]
drivers/acpi/namespace/nsdumpdv.c [deleted file]
drivers/acpi/namespace/nseval.c [deleted file]
drivers/acpi/namespace/nsinit.c [deleted file]
drivers/acpi/namespace/nsload.c [deleted file]
drivers/acpi/namespace/nsnames.c [deleted file]
drivers/acpi/namespace/nsobject.c [deleted file]
drivers/acpi/namespace/nsparse.c [deleted file]
drivers/acpi/namespace/nspredef.c [deleted file]
drivers/acpi/namespace/nssearch.c [deleted file]
drivers/acpi/namespace/nsutils.c [deleted file]
drivers/acpi/namespace/nswalk.c [deleted file]
drivers/acpi/namespace/nsxfeval.c [deleted file]
drivers/acpi/namespace/nsxfname.c [deleted file]
drivers/acpi/namespace/nsxfobj.c [deleted file]
drivers/acpi/numa.c
drivers/acpi/osl.c
drivers/acpi/parser/Makefile [deleted file]
drivers/acpi/parser/psargs.c [deleted file]
drivers/acpi/parser/psloop.c [deleted file]
drivers/acpi/parser/psopcode.c [deleted file]
drivers/acpi/parser/psparse.c [deleted file]
drivers/acpi/parser/psscope.c [deleted file]
drivers/acpi/parser/pstree.c [deleted file]
drivers/acpi/parser/psutils.c [deleted file]
drivers/acpi/parser/pswalk.c [deleted file]
drivers/acpi/parser/psxface.c [deleted file]
drivers/acpi/pci_bind.c
drivers/acpi/pci_irq.c
drivers/acpi/pci_link.c
drivers/acpi/power.c
drivers/acpi/proc.c [new file with mode: 0644]
drivers/acpi/reboot.c
drivers/acpi/resources/Makefile [deleted file]
drivers/acpi/resources/rsaddr.c [deleted file]
drivers/acpi/resources/rscalc.c [deleted file]
drivers/acpi/resources/rscreate.c [deleted file]
drivers/acpi/resources/rsdump.c [deleted file]
drivers/acpi/resources/rsinfo.c [deleted file]
drivers/acpi/resources/rsio.c [deleted file]
drivers/acpi/resources/rsirq.c [deleted file]
drivers/acpi/resources/rslist.c [deleted file]
drivers/acpi/resources/rsmemory.c [deleted file]
drivers/acpi/resources/rsmisc.c [deleted file]
drivers/acpi/resources/rsutils.c [deleted file]
drivers/acpi/resources/rsxface.c [deleted file]
drivers/acpi/sbshc.c
drivers/acpi/scan.c
drivers/acpi/sleep.h [moved from drivers/acpi/sleep/sleep.h with 100% similarity]
drivers/acpi/sleep/Makefile [deleted file]
drivers/acpi/sleep/main.c [deleted file]
drivers/acpi/sleep/proc.c [deleted file]
drivers/acpi/sleep/wakeup.c [deleted file]
drivers/acpi/system.c
drivers/acpi/tables/Makefile [deleted file]
drivers/acpi/tables/tbfadt.c [deleted file]
drivers/acpi/tables/tbfind.c [deleted file]
drivers/acpi/tables/tbinstal.c [deleted file]
drivers/acpi/tables/tbutils.c [deleted file]
drivers/acpi/tables/tbxface.c [deleted file]
drivers/acpi/tables/tbxfroot.c [deleted file]
drivers/acpi/utilities/Makefile [deleted file]
drivers/acpi/utilities/utalloc.c [deleted file]
drivers/acpi/utilities/utcache.c [deleted file]
drivers/acpi/utilities/utcopy.c [deleted file]
drivers/acpi/utilities/utdebug.c [deleted file]
drivers/acpi/utilities/utdelete.c [deleted file]
drivers/acpi/utilities/uteval.c [deleted file]
drivers/acpi/utilities/utglobal.c [deleted file]
drivers/acpi/utilities/utinit.c [deleted file]
drivers/acpi/utilities/utmath.c [deleted file]
drivers/acpi/utilities/utmisc.c [deleted file]
drivers/acpi/utilities/utmutex.c [deleted file]
drivers/acpi/utilities/utobject.c [deleted file]
drivers/acpi/utilities/utresrc.c [deleted file]
drivers/acpi/utilities/utstate.c [deleted file]
drivers/acpi/utilities/utxface.c [deleted file]
drivers/acpi/video.c
drivers/acpi/video_detect.c
drivers/acpi/wakeup.c [new file with mode: 0644]
drivers/amba/bus.c
drivers/ata/ahci.c
drivers/ata/ata_piix.c
drivers/ata/libata-acpi.c
drivers/ata/libata-core.c
drivers/ata/libata-sff.c
drivers/ata/pata_acpi.c
drivers/ata/pata_ali.c
drivers/ata/pata_amd.c
drivers/ata/pata_hpt366.c
drivers/ata/pata_hpt3x3.c
drivers/ata/pata_mpiix.c
drivers/ata/pata_platform.c
drivers/ata/pata_sil680.c
drivers/ata/sata_sil24.c
drivers/atm/iphase.c
drivers/base/base.h
drivers/base/bus.c
drivers/base/core.c
drivers/base/dd.c
drivers/base/driver.c
drivers/char/Kconfig
drivers/char/hvc_beat.c
drivers/char/hvc_iucv.c
drivers/char/pty.c
drivers/char/rtc.c
drivers/char/tpm/tpm_bios.c
drivers/char/tpm/tpm_nsc.c
drivers/char/vt.c
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq_conservative.c
drivers/cpufreq/cpufreq_ondemand.c
drivers/cpuidle/governors/menu.c
drivers/dca/dca-core.c
drivers/dma/Kconfig
drivers/dma/dmaengine.c
drivers/dma/dmatest.c
drivers/dma/dw_dmac.c
drivers/dma/fsldma.c
drivers/dma/ioat.c
drivers/dma/ioat_dma.c
drivers/dma/iop-adma.c
drivers/dma/mv_xor.c
drivers/firewire/fw-card.c
drivers/firewire/fw-device.c
drivers/firmware/dcdbas.c
drivers/firmware/dcdbas.h
drivers/firmware/memmap.c
drivers/hwmon/Makefile
drivers/hwmon/hp_accel.c [new file with mode: 0644]
drivers/hwmon/lis3lv02d.c
drivers/hwmon/lis3lv02d.h
drivers/ide/ide-acpi.c
drivers/ieee1394/eth1394.c
drivers/ieee1394/eth1394.h
drivers/infiniband/hw/nes/nes_cm.c
drivers/input/mouse/pxa930_trkball.c
drivers/isdn/hardware/eicon/debuglib.h
drivers/isdn/hardware/eicon/os_4bri.c
drivers/isdn/hardware/eicon/os_bri.c
drivers/isdn/hardware/eicon/os_pri.c
drivers/isdn/hardware/mISDN/Kconfig
drivers/isdn/hardware/mISDN/Makefile
drivers/isdn/hardware/mISDN/hfc_multi.h
drivers/isdn/hardware/mISDN/hfc_pci.h
drivers/isdn/hardware/mISDN/hfcmulti.c
drivers/isdn/hardware/mISDN/hfcpci.c
drivers/isdn/hardware/mISDN/hfcsusb.c [new file with mode: 0644]
drivers/isdn/hardware/mISDN/hfcsusb.h [new file with mode: 0644]
drivers/isdn/hysdn/hysdn_net.c
drivers/isdn/i4l/isdn_net.c
drivers/isdn/mISDN/Makefile
drivers/isdn/mISDN/clock.c [new file with mode: 0644]
drivers/isdn/mISDN/core.c
drivers/isdn/mISDN/core.h
drivers/isdn/mISDN/dsp.h
drivers/isdn/mISDN/dsp_cmx.c
drivers/isdn/mISDN/dsp_core.c
drivers/isdn/mISDN/dsp_pipeline.c
drivers/isdn/mISDN/hwchannel.c
drivers/isdn/mISDN/l1oip_core.c
drivers/isdn/mISDN/layer1.c
drivers/isdn/mISDN/socket.c
drivers/isdn/mISDN/stack.c
drivers/isdn/mISDN/tei.c
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/leds/led-class.c
drivers/leds/leds-alix2.c [new file with mode: 0644]
drivers/leds/leds-ams-delta.c
drivers/leds/leds-clevo-mail.c
drivers/leds/leds-fsg.c
drivers/leds/leds-gpio.c
drivers/leds/leds-hp-disk.c
drivers/leds/leds-hp6xx.c
drivers/leds/leds-net48xx.c
drivers/leds/leds-pca9532.c
drivers/leds/leds-s3c24xx.c
drivers/leds/leds-wm8350.c [new file with mode: 0644]
drivers/leds/leds-wrap.c
drivers/leds/ledtrig-timer.c
drivers/md/bitmap.c
drivers/md/faulty.c
drivers/md/linear.c
drivers/md/md.c
drivers/md/multipath.c
drivers/md/raid0.c
drivers/md/raid1.c
drivers/md/raid10.c
drivers/md/raid5.c
drivers/media/dvb/dvb-core/dvb_net.c
drivers/memstick/core/mspro_block.c
drivers/message/fusion/mptctl.c
drivers/message/fusion/mptlan.c
drivers/mfd/wm8350-core.c
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/misc/dell-laptop.c [new file with mode: 0644]
drivers/misc/enclosure.c
drivers/misc/fujitsu-laptop.c [deleted file]
drivers/misc/hp-wmi.c [deleted file]
drivers/misc/panasonic-laptop.c [deleted file]
drivers/misc/sgi-xp/xpnet.c
drivers/misc/sony-laptop.c [deleted file]
drivers/misc/tc1100-wmi.c [deleted file]
drivers/misc/thinkpad_acpi.c [deleted file]
drivers/mmc/host/atmel-mci.c
drivers/mtd/Kconfig
drivers/mtd/Makefile
drivers/mtd/chips/cfi_cmdset_0001.c
drivers/mtd/chips/cfi_cmdset_0002.c
drivers/mtd/chips/cfi_cmdset_0020.c
drivers/mtd/chips/fwh_lock.h
drivers/mtd/devices/Kconfig
drivers/mtd/devices/Makefile
drivers/mtd/devices/lart.c
drivers/mtd/devices/m25p80.c
drivers/mtd/devices/mtd_dataflash.c
drivers/mtd/devices/ps3vram.c [new file with mode: 0644]
drivers/mtd/ftl.c
drivers/mtd/inftlcore.c
drivers/mtd/inftlmount.c
drivers/mtd/lpddr/Kconfig [new file with mode: 0644]
drivers/mtd/lpddr/Makefile [new file with mode: 0644]
drivers/mtd/lpddr/lpddr_cmds.c [new file with mode: 0644]
drivers/mtd/lpddr/qinfo_probe.c [new file with mode: 0644]
drivers/mtd/maps/Kconfig
drivers/mtd/maps/alchemy-flash.c
drivers/mtd/maps/amd76xrom.c
drivers/mtd/maps/cfi_flagadm.c
drivers/mtd/maps/ck804xrom.c
drivers/mtd/maps/dbox2-flash.c
drivers/mtd/maps/edb7312.c
drivers/mtd/maps/esb2rom.c
drivers/mtd/maps/fortunet.c
drivers/mtd/maps/h720x-flash.c
drivers/mtd/maps/ichxrom.c
drivers/mtd/maps/impa7.c
drivers/mtd/maps/ipaq-flash.c
drivers/mtd/maps/mbx860.c
drivers/mtd/maps/nettel.c
drivers/mtd/maps/octagon-5066.c
drivers/mtd/maps/physmap.c
drivers/mtd/maps/pmcmsp-flash.c
drivers/mtd/maps/redwood.c
drivers/mtd/maps/rpxlite.c
drivers/mtd/maps/sbc8240.c
drivers/mtd/maps/scb2_flash.c
drivers/mtd/maps/sharpsl-flash.c
drivers/mtd/maps/tqm8xxl.c
drivers/mtd/maps/uclinux.c
drivers/mtd/maps/vmax301.c
drivers/mtd/maps/wr_sbc82xx_flash.c
drivers/mtd/mtdchar.c
drivers/mtd/mtdconcat.c
drivers/mtd/mtdcore.c
drivers/mtd/mtdoops.c
drivers/mtd/mtdpart.c
drivers/mtd/nand/Kconfig
drivers/mtd/nand/alauda.c
drivers/mtd/nand/cafe_nand.c
drivers/mtd/nand/fsl_elbc_nand.c
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/nand_bbt.c
drivers/mtd/nand/nandsim.c
drivers/mtd/nand/ndfc.c
drivers/mtd/nand/pxa3xx_nand.c
drivers/mtd/nand/sharpsl.c
drivers/mtd/nftlcore.c
drivers/mtd/nftlmount.c
drivers/mtd/onenand/onenand_base.c
drivers/mtd/rfd_ftl.c
drivers/mtd/ssfdc.c
drivers/mtd/tests/Makefile [new file with mode: 0644]
drivers/mtd/tests/mtd_oobtest.c [new file with mode: 0644]
drivers/mtd/tests/mtd_pagetest.c [new file with mode: 0644]
drivers/mtd/tests/mtd_readtest.c [new file with mode: 0644]
drivers/mtd/tests/mtd_speedtest.c [new file with mode: 0644]
drivers/mtd/tests/mtd_stresstest.c [new file with mode: 0644]
drivers/mtd/tests/mtd_subpagetest.c [new file with mode: 0644]
drivers/mtd/tests/mtd_torturetest.c [new file with mode: 0644]
drivers/mtd/ubi/build.c
drivers/mtd/ubi/gluebi.c
drivers/mtd/ubi/kapi.c
drivers/net/Kconfig
drivers/net/acenic_firmware.h [deleted file]
drivers/net/amd8111e.c
drivers/net/appletalk/ipddp.c
drivers/net/atp.c
drivers/net/b44.c
drivers/net/bnx2x_main.c
drivers/net/bonding/bond_main.c
drivers/net/cassini.c
drivers/net/de600.c
drivers/net/de620.c
drivers/net/e100.c
drivers/net/ehea/ehea_phyp.c
drivers/net/enc28j60.c
drivers/net/epic100.c
drivers/net/fealnx.c
drivers/net/gianfar.c
drivers/net/hp100.c
drivers/net/ibmveth.c
drivers/net/ibmveth.h
drivers/net/ipg.c
drivers/net/irda/ali-ircc.c
drivers/net/irda/ali-ircc.h
drivers/net/irda/au1000_ircc.h
drivers/net/irda/au1k_ir.c
drivers/net/irda/donauboe.h
drivers/net/irda/irda-usb.c
drivers/net/irda/irda-usb.h
drivers/net/irda/kingsun-sir.c
drivers/net/irda/ks959-sir.c
drivers/net/irda/ksdazzle-sir.c
drivers/net/irda/mcs7780.c
drivers/net/irda/mcs7780.h
drivers/net/irda/nsc-ircc.c
drivers/net/irda/nsc-ircc.h
drivers/net/irda/pxaficp_ir.c
drivers/net/irda/sa1100_ir.c
drivers/net/irda/sir-dev.h
drivers/net/irda/sir_dev.c
drivers/net/irda/smsc-ircc2.c
drivers/net/irda/stir4200.c
drivers/net/irda/via-ircc.c
drivers/net/irda/via-ircc.h
drivers/net/irda/vlsi_ir.c
drivers/net/irda/vlsi_ir.h
drivers/net/irda/w83977af_ir.c
drivers/net/irda/w83977af_ir.h
drivers/net/mlx4/en_params.c
drivers/net/mlx4/en_tx.c
drivers/net/mlx4/mlx4_en.h
drivers/net/natsemi.c
drivers/net/ns83820.c
drivers/net/pcnet32.c
drivers/net/plip.c
drivers/net/r6040.c
drivers/net/sb1000.c
drivers/net/sis190.c
drivers/net/slip.c
drivers/net/starfire.c
drivers/net/sundance.c
drivers/net/sungem.c
drivers/net/sunhme.c
drivers/net/tlan.c
drivers/net/tulip/de2104x.c
drivers/net/tulip/de4x5.c
drivers/net/tulip/dmfe.c
drivers/net/tulip/tulip_core.c
drivers/net/tulip/uli526x.c
drivers/net/tulip/winbond-840.c
drivers/net/tulip/xircom_cb.c
drivers/net/typhoon.c
drivers/net/usb/dm9601.c
drivers/net/usb/kaweth.c
drivers/net/usb/pegasus.c
drivers/net/virtio_net.c
drivers/net/wimax/i2400m/usb.c
drivers/net/wireless/ath5k/dma.c
drivers/net/wireless/zd1211rw/zd_mac.c
drivers/net/xen-netfront.c
drivers/oprofile/buffer_sync.c
drivers/oprofile/cpu_buffer.c
drivers/oprofile/cpu_buffer.h
drivers/oprofile/event_buffer.c
drivers/oprofile/oprof.c
drivers/oprofile/oprof.h
drivers/oprofile/oprofile_files.c
drivers/parisc/asp.c
drivers/parisc/ccio-dma.c
drivers/parisc/dino.c
drivers/parisc/hppb.c
drivers/parisc/lasi.c
drivers/parisc/lba_pci.c
drivers/parisc/sba_iommu.c
drivers/parisc/wax.c
drivers/pci/hotplug/acpi_pcihp.c
drivers/pci/hotplug/pciehp.h
drivers/pci/pci-acpi.c
drivers/pci/pci-sysfs.c
drivers/pci/probe.c
drivers/platform/Kconfig [new file with mode: 0644]
drivers/platform/Makefile [new file with mode: 0644]
drivers/platform/x86/Kconfig [new file with mode: 0644]
drivers/platform/x86/Makefile [new file with mode: 0644]
drivers/platform/x86/acer-wmi.c [moved from drivers/misc/acer-wmi.c with 100% similarity]
drivers/platform/x86/asus-laptop.c [moved from drivers/misc/asus-laptop.c with 100% similarity]
drivers/platform/x86/asus_acpi.c [moved from drivers/acpi/asus_acpi.c with 100% similarity]
drivers/platform/x86/compal-laptop.c [moved from drivers/misc/compal-laptop.c with 100% similarity]
drivers/platform/x86/eeepc-laptop.c [moved from drivers/misc/eeepc-laptop.c with 100% similarity]
drivers/platform/x86/fujitsu-laptop.c [new file with mode: 0644]
drivers/platform/x86/hp-wmi.c [new file with mode: 0644]
drivers/platform/x86/intel_menlow.c [moved from drivers/misc/intel_menlow.c with 100% similarity]
drivers/platform/x86/msi-laptop.c [moved from drivers/misc/msi-laptop.c with 100% similarity]
drivers/platform/x86/panasonic-laptop.c [new file with mode: 0644]
drivers/platform/x86/sony-laptop.c [new file with mode: 0644]
drivers/platform/x86/tc1100-wmi.c [new file with mode: 0644]
drivers/platform/x86/thinkpad_acpi.c [new file with mode: 0644]
drivers/platform/x86/toshiba_acpi.c [moved from drivers/acpi/toshiba_acpi.c with 100% similarity]
drivers/platform/x86/wmi.c [moved from drivers/acpi/wmi.c with 100% similarity]
drivers/pnp/pnpacpi/core.c
drivers/regulator/core.c
drivers/regulator/da903x.c
drivers/regulator/wm8350-regulator.c
drivers/rtc/rtc-ds1307.c
drivers/rtc/rtc-parisc.c
drivers/s390/block/dasd.c
drivers/s390/block/dasd_3990_erp.c
drivers/s390/block/dasd_devmap.c
drivers/s390/block/dasd_diag.c
drivers/s390/block/dasd_eckd.c
drivers/s390/block/dasd_fba.c
drivers/s390/block/dasd_int.h
drivers/s390/char/Kconfig
drivers/s390/char/tape_3590.c
drivers/s390/cio/cio.c
drivers/s390/cio/qdio_debug.c
drivers/s390/cio/qdio_main.c
drivers/s390/net/qeth_l2_main.c
drivers/s390/net/qeth_l3_main.c
drivers/scsi/Kconfig
drivers/scsi/NCR_D700.c
drivers/scsi/a2091.c
drivers/scsi/advansys.c
drivers/scsi/aic94xx/aic94xx_tmf.c
drivers/scsi/cxgb3i/cxgb3i_ddp.c
drivers/scsi/gvp11.c
drivers/scsi/hosts.c
drivers/scsi/ibmvscsi/ibmvfc.c
drivers/scsi/ibmvscsi/ibmvscsi.c
drivers/scsi/ipr.c
drivers/scsi/ipr.h
drivers/scsi/lasi700.c
drivers/scsi/libsas/sas_discover.c
drivers/scsi/libsas/sas_dump.c
drivers/scsi/libsas/sas_host_smp.c
drivers/scsi/libsas/sas_port.c
drivers/scsi/lpfc/lpfc_init.c
drivers/scsi/mvsas.c
drivers/scsi/pcmcia/aha152x_stub.c
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_dbg.c
drivers/scsi/qla2xxx/qla_dbg.h
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_dfs.c
drivers/scsi/qla2xxx/qla_fw.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_gs.c
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_iocb.c
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_mid.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_sup.c
drivers/scsi/qla2xxx/qla_version.h
drivers/scsi/raid_class.c
drivers/scsi/scsi.c
drivers/scsi/scsi_debug.c
drivers/scsi/scsi_error.c
drivers/scsi/scsi_ioctl.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_scan.c
drivers/scsi/scsi_sysfs.c
drivers/scsi/scsi_transport_fc.c
drivers/scsi/scsi_transport_iscsi.c
drivers/scsi/scsi_transport_sas.c
drivers/scsi/scsi_transport_srp.c
drivers/scsi/sd.c
drivers/scsi/sd_dif.c
drivers/scsi/ses.c
drivers/scsi/sg.c
drivers/scsi/sgiwd93.c
drivers/scsi/sim710.c
drivers/scsi/sni_53c710.c
drivers/scsi/st.c
drivers/scsi/st.h
drivers/scsi/zalon.c
drivers/serial/Kconfig
drivers/serial/Makefile
drivers/serial/nwpserial.c [new file with mode: 0644]
drivers/serial/of_serial.c
drivers/usb/gadget/f_phonet.c
drivers/usb/gadget/u_ether.c
drivers/uwb/i1480/i1480u-wlp/i1480u-wlp.h
drivers/uwb/i1480/i1480u-wlp/lc.c
drivers/uwb/i1480/i1480u-wlp/netdev.c
drivers/uwb/i1480/i1480u-wlp/rx.c
drivers/uwb/i1480/i1480u-wlp/tx.c
drivers/video/amba-clcd.c
drivers/video/backlight/Kconfig
drivers/video/backlight/Makefile
drivers/video/backlight/backlight.c
drivers/video/backlight/corgi_bl.c [deleted file]
drivers/video/backlight/cr_bllcd.c
drivers/video/backlight/generic_bl.c [new file with mode: 0644]
drivers/video/backlight/hp680_bl.c
drivers/video/backlight/mbp_nvidia_bl.c
drivers/video/backlight/progear_bl.c
drivers/video/backlight/tdo24m.c
drivers/video/backlight/tosa_lcd.c
drivers/video/backlight/vgg2432a4.c
drivers/w1/masters/Kconfig
drivers/w1/masters/Makefile
drivers/w1/masters/mxc_w1.c [new file with mode: 0644]
drivers/w1/w1.h
drivers/w1/w1_io.c
drivers/w1/w1_netlink.c
drivers/w1/w1_netlink.h
drivers/xen/Kconfig
drivers/xen/Makefile
drivers/xen/xenbus/xenbus_client.c
drivers/xen/xenbus/xenbus_probe.c
drivers/xen/xenbus/xenbus_xs.c
drivers/xen/xenfs/Makefile [new file with mode: 0644]
drivers/xen/xenfs/super.c [new file with mode: 0644]
drivers/xen/xenfs/xenbus.c [new file with mode: 0644]
drivers/xen/xenfs/xenfs.h [new file with mode: 0644]
firmware/Makefile
firmware/WHENCE
firmware/e100/d101m_ucode.bin.ihex [new file with mode: 0644]
firmware/e100/d101s_ucode.bin.ihex [new file with mode: 0644]
firmware/e100/d102e_ucode.bin.ihex [new file with mode: 0644]
fs/Kconfig
fs/Kconfig.binfmt
fs/Makefile
fs/binfmt_elf.c
fs/binfmt_elf_fdpic.c
fs/binfmt_flat.c
fs/bio.c
fs/block_dev.c
fs/btrfs/Makefile [new file with mode: 0644]
fs/btrfs/acl.c [new file with mode: 0644]
fs/btrfs/async-thread.c [new file with mode: 0644]
fs/btrfs/async-thread.h [new file with mode: 0644]
fs/btrfs/btrfs_inode.h [new file with mode: 0644]
fs/btrfs/compat.h [new file with mode: 0644]
fs/btrfs/compression.c [new file with mode: 0644]
fs/btrfs/compression.h [new file with mode: 0644]
fs/btrfs/crc32c.h [new file with mode: 0644]
fs/btrfs/ctree.c [new file with mode: 0644]
fs/btrfs/ctree.h [new file with mode: 0644]
fs/btrfs/dir-item.c [new file with mode: 0644]
fs/btrfs/disk-io.c [new file with mode: 0644]
fs/btrfs/disk-io.h [new file with mode: 0644]
fs/btrfs/export.c [new file with mode: 0644]
fs/btrfs/export.h [new file with mode: 0644]
fs/btrfs/extent-tree.c [new file with mode: 0644]
fs/btrfs/extent_io.c [new file with mode: 0644]
fs/btrfs/extent_io.h [new file with mode: 0644]
fs/btrfs/extent_map.c [new file with mode: 0644]
fs/btrfs/extent_map.h [new file with mode: 0644]
fs/btrfs/file-item.c [new file with mode: 0644]
fs/btrfs/file.c [new file with mode: 0644]
fs/btrfs/free-space-cache.c [new file with mode: 0644]
fs/btrfs/hash.h [new file with mode: 0644]
fs/btrfs/inode-item.c [new file with mode: 0644]
fs/btrfs/inode-map.c [new file with mode: 0644]
fs/btrfs/inode.c [new file with mode: 0644]
fs/btrfs/ioctl.c [new file with mode: 0644]
fs/btrfs/ioctl.h [new file with mode: 0644]
fs/btrfs/locking.c [new file with mode: 0644]
fs/btrfs/locking.h [new file with mode: 0644]
fs/btrfs/ordered-data.c [new file with mode: 0644]
fs/btrfs/ordered-data.h [new file with mode: 0644]
fs/btrfs/orphan.c [new file with mode: 0644]
fs/btrfs/print-tree.c [new file with mode: 0644]
fs/btrfs/print-tree.h [new file with mode: 0644]
fs/btrfs/ref-cache.c [new file with mode: 0644]
fs/btrfs/ref-cache.h [new file with mode: 0644]
fs/btrfs/root-tree.c [new file with mode: 0644]
fs/btrfs/struct-funcs.c [new file with mode: 0644]
fs/btrfs/super.c [new file with mode: 0644]
fs/btrfs/sysfs.c [new file with mode: 0644]
fs/btrfs/transaction.c [new file with mode: 0644]
fs/btrfs/transaction.h [new file with mode: 0644]
fs/btrfs/tree-defrag.c [new file with mode: 0644]
fs/btrfs/tree-log.c [new file with mode: 0644]
fs/btrfs/tree-log.h [new file with mode: 0644]
fs/btrfs/version.h [new file with mode: 0644]
fs/btrfs/version.sh [new file with mode: 0644]
fs/btrfs/volumes.c [new file with mode: 0644]
fs/btrfs/volumes.h [new file with mode: 0644]
fs/btrfs/xattr.c [new file with mode: 0644]
fs/btrfs/xattr.h [new file with mode: 0644]
fs/btrfs/zlib.c [new file with mode: 0644]
fs/buffer.c
fs/coda/sysctl.c
fs/dcache.c
fs/dquot.c
fs/ext2/ialloc.c
fs/ext2/inode.c
fs/ext2/ioctl.c
fs/ext2/super.c
fs/ext3/hash.c
fs/ext3/ialloc.c
fs/ext3/ioctl.c
fs/ext3/namei.c
fs/ext3/super.c
fs/ext4/balloc.c
fs/ext4/bitmap.c
fs/ext4/dir.c
fs/ext4/ext4.h
fs/ext4/ext4_extents.h
fs/ext4/ext4_i.h
fs/ext4/ext4_jbd2.c
fs/ext4/ext4_jbd2.h
fs/ext4/ext4_sb.h
fs/ext4/extents.c
fs/ext4/file.c
fs/ext4/hash.c
fs/ext4/ialloc.c
fs/ext4/inode.c
fs/ext4/ioctl.c
fs/ext4/mballoc.c
fs/ext4/mballoc.h
fs/ext4/migrate.c
fs/ext4/namei.c
fs/ext4/resize.c
fs/ext4/super.c
fs/ext4/xattr.c
fs/gfs2/ops_super.c
fs/inode.c
fs/ioctl.c
fs/ioprio.c
fs/jbd/commit.c
fs/jbd/transaction.c
fs/jbd2/checkpoint.c
fs/jbd2/commit.c
fs/jbd2/journal.c
fs/jbd2/transaction.c
fs/jffs2/compr_rubin.c
fs/jffs2/erase.c
fs/jffs2/nodelist.h
fs/jfs/super.c
fs/ocfs2/alloc.c
fs/ocfs2/dlmglue.c
fs/ocfs2/file.c
fs/partitions/check.c
fs/proc/internal.h
fs/proc/meminfo.c
fs/proc/nommu.c
fs/proc/task_nommu.c
fs/proc/vmcore.c
fs/ramfs/file-nommu.c
fs/reiserfs/super.c
fs/romfs/inode.c
fs/splice.c
fs/squashfs/Makefile [new file with mode: 0644]
fs/squashfs/block.c [new file with mode: 0644]
fs/squashfs/cache.c [new file with mode: 0644]
fs/squashfs/dir.c [new file with mode: 0644]
fs/squashfs/export.c [new file with mode: 0644]
fs/squashfs/file.c [new file with mode: 0644]
fs/squashfs/fragment.c [new file with mode: 0644]
fs/squashfs/id.c [new file with mode: 0644]
fs/squashfs/inode.c [new file with mode: 0644]
fs/squashfs/namei.c [new file with mode: 0644]
fs/squashfs/squashfs.h [new file with mode: 0644]
fs/squashfs/squashfs_fs.h [new file with mode: 0644]
fs/squashfs/squashfs_fs_i.h [new file with mode: 0644]
fs/squashfs/squashfs_fs_sb.h [new file with mode: 0644]
fs/squashfs/super.c [new file with mode: 0644]
fs/squashfs/symlink.c [new file with mode: 0644]
fs/super.c
fs/xfs/linux-2.6/xfs_ioctl.c
fs/xfs/linux-2.6/xfs_ioctl32.c
fs/xfs/linux-2.6/xfs_super.c
fs/xfs/xfs_fs.h
fs/xfs/xfs_fsops.c
fs/xfs/xfs_fsops.h
include/acpi/acconfig.h [deleted file]
include/acpi/acdisasm.h [deleted file]
include/acpi/acevents.h [deleted file]
include/acpi/acexcep.h
include/acpi/acglobal.h [deleted file]
include/acpi/achware.h [deleted file]
include/acpi/aclocal.h [deleted file]
include/acpi/acmacros.h [deleted file]
include/acpi/acnamesp.h [deleted file]
include/acpi/acoutput.h
include/acpi/acpi.h
include/acpi/acpiosxf.h
include/acpi/acpixf.h
include/acpi/acrestyp.h [new file with mode: 0644]
include/acpi/actables.h [deleted file]
include/acpi/actbl.h
include/acpi/actbl1.h
include/acpi/actypes.h
include/acpi/acutils.h [deleted file]
include/acpi/platform/acenv.h
include/acpi/platform/aclinux.h
include/asm-frv/mmu.h
include/asm-m32r/mmu.h
include/linux/acpi.h
include/linux/async_tx.h
include/linux/atmel-mci.h
include/linux/auxvec.h
include/linux/backlight.h
include/linux/blkdev.h
include/linux/buffer_head.h
include/linux/can/core.h
include/linux/cgroup.h
include/linux/compiler-gcc.h
include/linux/cpufreq.h
include/linux/cpuset.h
include/linux/device.h
include/linux/dmaengine.h
include/linux/dw_dmac.h
include/linux/ext2_fs.h
include/linux/ext2_fs_sb.h
include/linux/ext3_fs.h
include/linux/ext3_fs_sb.h
include/linux/fs.h
include/linux/if_vlan.h
include/linux/ioprio.h
include/linux/jbd.h
include/linux/jbd2.h
include/linux/kernel.h
include/linux/leds-pca9532.h
include/linux/leds.h
include/linux/libata.h
include/linux/mISDNhw.h
include/linux/mISDNif.h
include/linux/magic.h
include/linux/memcontrol.h
include/linux/memstick.h
include/linux/mfd/wm8350/pmic.h
include/linux/mm.h
include/linux/mm_inline.h
include/linux/mm_types.h
include/linux/mmzone.h
include/linux/mtd/cfi.h
include/linux/mtd/ftl.h
include/linux/mtd/map.h
include/linux/mtd/mtd.h
include/linux/mtd/nand.h
include/linux/mtd/partitions.h
include/linux/mtd/pfow.h [new file with mode: 0644]
include/linux/mtd/physmap.h
include/linux/mtd/qinfo.h [new file with mode: 0644]
include/linux/mtd/sharpsl.h [new file with mode: 0644]
include/linux/netdevice.h
include/linux/nwpserial.h [new file with mode: 0644]
include/linux/oprofile.h
include/linux/page_cgroup.h
include/linux/pci_hotplug.h
include/linux/pid.h
include/linux/pid_namespace.h
include/linux/raid/md_k.h
include/linux/raid/md_p.h
include/linux/raid/raid0.h
include/linux/rbtree.h
include/linux/regulator/consumer.h
include/linux/regulator/driver.h
include/linux/regulator/machine.h
include/linux/res_counter.h
include/linux/serial_core.h
include/linux/spi/tdo24m.h [new file with mode: 0644]
include/linux/suspend.h
include/linux/swap.h
include/net/netdma.h
include/net/protocol.h
include/net/wimax.h
include/scsi/scsi_transport_fc.h
include/sound/soc-dapm.h
include/sound/soc.h
include/xen/xenbus.h
init/Kconfig
init/do_mounts_rd.c
init/initramfs.c
ipc/mqueue.c
ipc/shm.c
kernel/async.c
kernel/cgroup.c
kernel/cpuset.c
kernel/cred.c
kernel/fork.c
kernel/ns_cgroup.c
kernel/pid.c
kernel/power/disk.c
kernel/power/snapshot.c
kernel/power/swsusp.c
kernel/res_counter.c
kernel/sched_fair.c
kernel/sysctl.c
kernel/trace/ring_buffer.c
lib/Kconfig.debug
lib/rbtree.c
lib/sort.c
mm/filemap.c
mm/memcontrol.c
mm/memory.c
mm/migrate.c
mm/mmap.c
mm/nommu.c
mm/oom_kill.c
mm/page_alloc.c
mm/page_cgroup.c
mm/shmem.c
mm/swap.c
mm/swap_state.c
mm/swapfile.c
mm/vmscan.c
net/8021q/vlan_core.c
net/8021q/vlan_dev.c
net/appletalk/aarp.c
net/bluetooth/bnep/bnep.h
net/bluetooth/bnep/core.c
net/bluetooth/bnep/netdev.c
net/can/af_can.c
net/can/bcm.c
net/can/raw.c
net/core/dev.c
net/dsa/slave.c
net/ipv4/tcp.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv6/af_inet6.c
net/ipv6/route.c
net/ipv6/sysctl_net_ipv6.c
net/ipv6/tcp_ipv6.c
net/phonet/pep-gprs.c
net/sched/sch_sfq.c
net/sched/sch_teql.c
net/sctp/auth.c
net/wimax/Kconfig
net/wimax/id-table.c
net/wimax/op-rfkill.c
net/wireless/wext.c
scripts/bootgraph.pl
security/device_cgroup.c
security/smack/smackfs.c
sound/pci/hda/hda_beep.c
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.h
sound/pci/hda/hda_intel.c
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_nvhdmi.c
sound/pci/hda/patch_realtek.c
sound/soc/au1x/dbdma2.c
sound/soc/codecs/twl4030.c
sound/soc/davinci/davinci-pcm.c
sound/soc/soc-core.c
sound/soc/soc-dapm.c

index 3731f6f..873ef1f 100644 (file)
@@ -3,8 +3,9 @@ Date:           April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
-               state. This holds the regulator output state.
+               Some regulator directories will contain a field called
+               state. This reports the regulator enable status, for
+               regulators which can report that value.
 
                This will be one of the following strings:
 
@@ -18,7 +19,8 @@ Description:
                'disabled' means the regulator output is OFF and is not
                supplying power to the system..
 
-               'unknown' means software cannot determine the state.
+               'unknown' means software cannot determine the state, or
+               the reported state is invalid.
 
                NOTE: this field can be used in conjunction with microvolts
                and microamps to determine regulator output levels.
@@ -53,9 +55,10 @@ Date:                April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                microvolts. This holds the regulator output voltage setting
-               measured in microvolts (i.e. E-6 Volts).
+               measured in microvolts (i.e. E-6 Volts), for regulators
+               which can report that voltage.
 
                NOTE: This value should not be used to determine the regulator
                output voltage level as this value is the same regardless of
@@ -67,9 +70,10 @@ Date:                April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                microamps. This holds the regulator output current limit
-               setting measured in microamps (i.e. E-6 Amps).
+               setting measured in microamps (i.e. E-6 Amps), for regulators
+               which can report that current.
 
                NOTE: This value should not be used to determine the regulator
                output current level as this value is the same regardless of
@@ -81,8 +85,9 @@ Date:         April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
-               opmode. This holds the regulator operating mode setting.
+               Some regulator directories will contain a field called
+               opmode. This holds the current regulator operating mode,
+               for regulators which can report it.
 
                The opmode value can be one of the following strings:
 
@@ -92,7 +97,7 @@ Description:
                'standby'
                'unknown'
 
-               The modes are described in include/linux/regulator/regulator.h
+               The modes are described in include/linux/regulator/consumer.h
 
                NOTE: This value should not be used to determine the regulator
                output operating mode as this value is the same regardless of
@@ -104,9 +109,10 @@ Date:              April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                min_microvolts. This holds the minimum safe working regulator
-               output voltage setting for this domain measured in microvolts.
+               output voltage setting for this domain measured in microvolts,
+               for regulators which support voltage constraints.
 
                NOTE: this will return the string 'constraint not defined' if
                the power domain has no min microvolts constraint defined by
@@ -118,9 +124,10 @@ Date:              April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                max_microvolts. This holds the maximum safe working regulator
-               output voltage setting for this domain measured in microvolts.
+               output voltage setting for this domain measured in microvolts,
+               for regulators which support voltage constraints.
 
                NOTE: this will return the string 'constraint not defined' if
                the power domain has no max microvolts constraint defined by
@@ -132,10 +139,10 @@ Date:             April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                min_microamps. This holds the minimum safe working regulator
                output current limit setting for this domain measured in
-               microamps.
+               microamps, for regulators which support current constraints.
 
                NOTE: this will return the string 'constraint not defined' if
                the power domain has no min microamps constraint defined by
@@ -147,10 +154,10 @@ Date:             April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                max_microamps. This holds the maximum safe working regulator
                output current limit setting for this domain measured in
-               microamps.
+               microamps, for regulators which support current constraints.
 
                NOTE: this will return the string 'constraint not defined' if
                the power domain has no max microamps constraint defined by
@@ -185,7 +192,7 @@ Date:               April 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                requested_microamps. This holds the total requested load
                current in microamps for this regulator from all its consumer
                devices.
@@ -204,125 +211,102 @@ Date:           May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_mem_microvolts. This holds the regulator output
                voltage setting for this domain measured in microvolts when
-               the system is suspended to memory.
-
-               NOTE: this will return the string 'not defined' if
-               the power domain has no suspend to memory voltage defined by
-               platform code.
+               the system is suspended to memory, for voltage regulators
+               implementing suspend voltage configuration constraints.
 
 What:          /sys/class/regulator/.../suspend_disk_microvolts
 Date:          May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_disk_microvolts. This holds the regulator output
                voltage setting for this domain measured in microvolts when
-               the system is suspended to disk.
-
-               NOTE: this will return the string 'not defined' if
-               the power domain has no suspend to disk voltage defined by
-               platform code.
+               the system is suspended to disk, for voltage regulators
+               implementing suspend voltage configuration constraints.
 
 What:          /sys/class/regulator/.../suspend_standby_microvolts
 Date:          May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_standby_microvolts. This holds the regulator output
                voltage setting for this domain measured in microvolts when
-               the system is suspended to standby.
-
-               NOTE: this will return the string 'not defined' if
-               the power domain has no suspend to standby voltage defined by
-               platform code.
+               the system is suspended to standby, for voltage regulators
+               implementing suspend voltage configuration constraints.
 
 What:          /sys/class/regulator/.../suspend_mem_mode
 Date:          May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_mem_mode. This holds the regulator operating mode
                setting for this domain when the system is suspended to
-               memory.
-
-               NOTE: this will return the string 'not defined' if
-               the power domain has no suspend to memory mode defined by
-               platform code.
+               memory, for regulators implementing suspend mode
+               configuration constraints.
 
 What:          /sys/class/regulator/.../suspend_disk_mode
 Date:          May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_disk_mode. This holds the regulator operating mode
-               setting for this domain when the system is suspended to disk.
-
-               NOTE: this will return the string 'not defined' if
-               the power domain has no suspend to disk mode defined by
-               platform code.
+               setting for this domain when the system is suspended to disk,
+               for regulators implementing suspend mode configuration
+               constraints.
 
 What:          /sys/class/regulator/.../suspend_standby_mode
 Date:          May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_standby_mode. This holds the regulator operating mode
                setting for this domain when the system is suspended to
-               standby.
-
-               NOTE: this will return the string 'not defined' if
-               the power domain has no suspend to standby mode defined by
-               platform code.
+               standby, for regulators implementing suspend mode
+               configuration constraints.
 
 What:          /sys/class/regulator/.../suspend_mem_state
 Date:          May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_mem_state. This holds the regulator operating state
-               when suspended to memory.
-
-               This will be one of the following strings:
+               when suspended to memory, for regulators implementing suspend
+               configuration constraints.
 
-               'enabled'
-               'disabled'
-               'not defined'
+               This will be one of the same strings reported by
+               the "state" attribute.
 
 What:          /sys/class/regulator/.../suspend_disk_state
 Date:          May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_disk_state. This holds the regulator operating state
-               when suspended to disk.
-
-               This will be one of the following strings:
+               when suspended to disk, for regulators implementing
+               suspend configuration constraints.
 
-               'enabled'
-               'disabled'
-               'not defined'
+               This will be one of the same strings reported by
+               the "state" attribute.
 
 What:          /sys/class/regulator/.../suspend_standby_state
 Date:          May 2008
 KernelVersion: 2.6.26
 Contact:       Liam Girdwood <lrg@slimlogic.co.uk>
 Description:
-               Each regulator directory will contain a field called
+               Some regulator directories will contain a field called
                suspend_standby_state. This holds the regulator operating
-               state when suspended to standby.
-
-               This will be one of the following strings:
+               state when suspended to standby, for regulators implementing
+               suspend configuration constraints.
 
-               'enabled'
-               'disabled'
-               'not defined'
+               This will be one of the same strings reported by
+               the "state" attribute.
index 0a08126..dc3154e 100644 (file)
@@ -12,7 +12,7 @@ DOCBOOKS := z8530book.xml mcabook.xml \
            kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \
            gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
            genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \
-           mac80211.xml debugobjects.xml sh.xml
+           mac80211.xml debugobjects.xml sh.xml regulator.xml
 
 ###
 # The build process is as follows (targets):
diff --git a/Documentation/DocBook/regulator.tmpl b/Documentation/DocBook/regulator.tmpl
new file mode 100644 (file)
index 0000000..53f4f8d
--- /dev/null
@@ -0,0 +1,304 @@
+<?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="regulator-api">
+ <bookinfo>
+  <title>Voltage and current regulator API</title>
+
+  <authorgroup>
+   <author>
+    <firstname>Liam</firstname>
+    <surname>Girdwood</surname>
+    <affiliation>
+     <address>
+      <email>lrg@slimlogic.co.uk</email>
+     </address>
+    </affiliation>
+   </author>
+   <author>
+    <firstname>Mark</firstname>
+    <surname>Brown</surname>
+    <affiliation>
+     <orgname>Wolfson Microelectronics</orgname>
+     <address>
+      <email>broonie@opensource.wolfsonmicro.com</email>
+     </address>
+    </affiliation>
+   </author>
+  </authorgroup>
+
+  <copyright>
+   <year>2007-2008</year>
+   <holder>Wolfson Microelectronics</holder>
+  </copyright>
+  <copyright>
+   <year>2008</year>
+   <holder>Liam Girdwood</holder>
+  </copyright>
+
+  <legalnotice>
+   <para>
+     This documentation 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.
+   </para>
+
+   <para>
+     This program is distributed in the hope that it will be
+     useful, but WITHOUT ANY WARRANTY; without even the implied
+     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+     See the GNU General Public License for more details.
+   </para>
+
+   <para>
+     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
+   </para>
+
+   <para>
+     For more details see the file COPYING in the source
+     distribution of Linux.
+   </para>
+  </legalnotice>
+ </bookinfo>
+
+<toc></toc>
+
+  <chapter id="intro">
+    <title>Introduction</title>
+    <para>
+       This framework is designed to provide a standard kernel
+       interface to control voltage and current regulators.
+    </para>
+    <para>
+       The intention is to allow systems to dynamically control
+       regulator power output in order to save power and prolong
+       battery life.  This applies to both voltage regulators (where
+       voltage output is controllable) and current sinks (where current
+       limit is controllable).
+    </para>
+    <para>
+       Note that additional (and currently more complete) documentation
+       is available in the Linux kernel source under
+       <filename>Documentation/power/regulator</filename>.
+    </para>
+
+    <sect1 id="glossary">
+       <title>Glossary</title>
+       <para>
+       The regulator API uses a number of terms which may not be
+       familiar:
+       </para>
+       <glossary>
+
+         <glossentry>
+          <glossterm>Regulator</glossterm>
+          <glossdef>
+            <para>
+       Electronic device that supplies power to other devices.  Most
+       regulators can enable and disable their output and some can also
+       control their output voltage or current.
+            </para>
+          </glossdef>
+         </glossentry>
+
+        <glossentry>
+          <glossterm>Consumer</glossterm>
+          <glossdef>
+            <para>
+       Electronic device which consumes power provided by a regulator.
+       These may either be static, requiring only a fixed supply, or
+       dynamic, requiring active management of the regulator at
+       runtime.
+            </para>
+          </glossdef>
+        </glossentry>
+
+        <glossentry>
+          <glossterm>Power Domain</glossterm>
+          <glossdef>
+            <para>
+       The electronic circuit supplied by a given regulator, including
+       the regulator and all consumer devices.  The configuration of
+       the regulator is shared between all the components in the
+       circuit.
+            </para>
+          </glossdef>
+        </glossentry>
+
+        <glossentry>
+          <glossterm>Power Management Integrated Circuit</glossterm>
+          <acronym>PMIC</acronym>
+          <glossdef>
+            <para>
+       An IC which contains numerous regulators and often also other
+       subsystems.  In an embedded system the primary PMIC is often
+       equivalent to a combination of the PSU and southbridge in a
+       desktop system.
+            </para>
+          </glossdef>
+        </glossentry>
+       </glossary>
+     </sect1>
+  </chapter>
+
+  <chapter id="consumer">
+     <title>Consumer driver interface</title>
+     <para>
+       This offers a similar API to the kernel clock framework.
+       Consumer drivers use <link
+       linkend='API-regulator-get'>get</link> and <link
+       linkend='API-regulator-put'>put</link> operations to acquire and
+       release regulators.  Functions are
+       provided to <link linkend='API-regulator-enable'>enable</link>
+       and <link linkend='API-regulator-disable'>disable</link> the
+       reguator and to get and set the runtime parameters of the
+       regulator.
+     </para>
+     <para>
+       When requesting regulators consumers use symbolic names for their
+       supplies, such as "Vcc", which are mapped into actual regulator
+       devices by the machine interface.
+     </para>
+     <para>
+       A stub version of this API is provided when the regulator
+       framework is not in use in order to minimise the need to use
+       ifdefs.
+     </para>
+
+     <sect1 id="consumer-enable">
+       <title>Enabling and disabling</title>
+       <para>
+         The regulator API provides reference counted enabling and
+        disabling of regulators. Consumer devices use the <function><link
+        linkend='API-regulator-enable'>regulator_enable</link></function>
+        and <function><link
+        linkend='API-regulator-disable'>regulator_disable</link>
+        </function> functions to enable and disable regulators.  Calls
+        to the two functions must be balanced.
+       </para>
+       <para>
+         Note that since multiple consumers may be using a regulator and
+        machine constraints may not allow the regulator to be disabled
+        there is no guarantee that calling
+        <function>regulator_disable</function> will actually cause the
+        supply provided by the regulator to be disabled. Consumer
+        drivers should assume that the regulator may be enabled at all
+        times.
+       </para>
+     </sect1>
+
+     <sect1 id="consumer-config">
+       <title>Configuration</title>
+       <para>
+         Some consumer devices may need to be able to dynamically
+        configure their supplies.  For example, MMC drivers may need to
+        select the correct operating voltage for their cards.  This may
+        be done while the regulator is enabled or disabled.
+       </para>
+       <para>
+        The <function><link
+        linkend='API-regulator-set-voltage'>regulator_set_voltage</link>
+        </function> and <function><link
+        linkend='API-regulator-set-current-limit'
+        >regulator_set_current_limit</link>
+        </function> functions provide the primary interface for this.
+        Both take ranges of voltages and currents, supporting drivers
+        that do not require a specific value (eg, CPU frequency scaling
+        normally permits the CPU to use a wider range of supply
+        voltages at lower frequencies but does not require that the
+        supply voltage be lowered).  Where an exact value is required
+        both minimum and maximum values should be identical.
+       </para>
+     </sect1>
+
+     <sect1 id="consumer-callback">
+       <title>Callbacks</title>
+       <para>
+         Callbacks may also be <link
+         linkend='API-regulator-register-notifier'>registered</link>
+         for events such as regulation failures.
+       </para>
+     </sect1>
+   </chapter>
+
+   <chapter id="driver">
+     <title>Regulator driver interface</title>
+     <para>
+       Drivers for regulator chips <link
+       linkend='API-regulator-register'>register</link> the regulators
+       with the regulator core, providing operations structures to the
+       core.  A <link
+       linkend='API-regulator-notifier-call-chain'>notifier</link> interface
+       allows error conditions to be reported to the core.
+     </para>
+     <para>
+       Registration should be triggered by explicit setup done by the
+       platform, supplying a <link
+       linkend='API-struct-regulator-init-data'>struct
+       regulator_init_data</link> for the regulator containing
+       <link linkend='machine-constraint'>constraint</link> and
+       <link linkend='machine-supply'>supply</link> information.
+     </para>
+   </chapter>
+
+   <chapter id="machine">
+     <title>Machine interface</title>
+     <para>
+       This interface provides a way to define how regulators are
+       connected to consumers on a given system and what the valid
+       operating parameters are for the system.
+     </para>
+
+     <sect1 id="machine-supply">
+       <title>Supplies</title>
+       <para>
+         Regulator supplies are specified using <link
+        linkend='API-struct-regulator-consumer-supply'>struct
+        regulator_consumer_supply</link>.  This is done at
+        <link linkend='driver'>driver registration
+        time</link> as part of the machine constraints.
+       </para>
+     </sect1>
+
+     <sect1 id="machine-constraint">
+       <title>Constraints</title>
+       <para>
+        As well as definining the connections the machine interface
+        also provides constraints definining the operations that
+        clients are allowed to perform and the parameters that may be
+        set.  This is required since generally regulator devices will
+        offer more flexibility than it is safe to use on a given
+        system, for example supporting higher supply voltages than the
+        consumers are rated for.
+       </para>
+       <para>
+        This is done at <link linkend='driver'>driver
+        registration time</link> by providing a <link
+        linkend='API-struct-regulation-constraints'>struct
+        regulation_constraints</link>.
+       </para>
+       <para>
+         The constraints may also specify an initial configuration for the
+         regulator in the constraints, which is particularly useful for
+         use with static consumers.
+       </para>
+     </sect1>
+  </chapter>
+
+  <chapter id="api">
+    <title>API reference</title>
+    <para>
+      Due to limitations of the kernel documentation framework and the
+      existing layout of the source code the entire regulator API is
+      documented here.
+    </para>
+!Iinclude/linux/regulator/consumer.h
+!Iinclude/linux/regulator/machine.h
+!Iinclude/linux/regulator/driver.h
+!Edrivers/regulator/core.c
+  </chapter>
+</book>
index 7dc0695..9bb62f7 100644 (file)
@@ -12,6 +12,8 @@ rcuref.txt
        - Reference-count design for elements of lists/arrays protected by RCU
 rcu.txt
        - RCU Concepts
+rcubarrier.txt
+       - Unloading modules that use RCU callbacks
 RTFP.txt
        - List of RCU papers (bibliography) going back to 1980.
 torture.txt
diff --git a/Documentation/RCU/rcubarrier.txt b/Documentation/RCU/rcubarrier.txt
new file mode 100644 (file)
index 0000000..909602d
--- /dev/null
@@ -0,0 +1,304 @@
+RCU and Unloadable Modules
+
+[Originally published in LWN Jan. 14, 2007: http://lwn.net/Articles/217484/]
+
+RCU (read-copy update) is a synchronization mechanism that can be thought
+of as a replacement for read-writer locking (among other things), but with
+very low-overhead readers that are immune to deadlock, priority inversion,
+and unbounded latency. RCU read-side critical sections are delimited
+by rcu_read_lock() and rcu_read_unlock(), which, in non-CONFIG_PREEMPT
+kernels, generate no code whatsoever.
+
+This means that RCU writers are unaware of the presence of concurrent
+readers, so that RCU updates to shared data must be undertaken quite
+carefully, leaving an old version of the data structure in place until all
+pre-existing readers have finished. These old versions are needed because
+such readers might hold a reference to them. RCU updates can therefore be
+rather expensive, and RCU is thus best suited for read-mostly situations.
+
+How can an RCU writer possibly determine when all readers are finished,
+given that readers might well leave absolutely no trace of their
+presence? There is a synchronize_rcu() primitive that blocks until all
+pre-existing readers have completed. An updater wishing to delete an
+element p from a linked list might do the following, while holding an
+appropriate lock, of course:
+
+       list_del_rcu(p);
+       synchronize_rcu();
+       kfree(p);
+
+But the above code cannot be used in IRQ context -- the call_rcu()
+primitive must be used instead. This primitive takes a pointer to an
+rcu_head struct placed within the RCU-protected data structure and
+another pointer to a function that may be invoked later to free that
+structure. Code to delete an element p from the linked list from IRQ
+context might then be as follows:
+
+       list_del_rcu(p);
+       call_rcu(&p->rcu, p_callback);
+
+Since call_rcu() never blocks, this code can safely be used from within
+IRQ context. The function p_callback() might be defined as follows:
+
+       static void p_callback(struct rcu_head *rp)
+       {
+               struct pstruct *p = container_of(rp, struct pstruct, rcu);
+
+               kfree(p);
+       }
+
+
+Unloading Modules That Use call_rcu()
+
+But what if p_callback is defined in an unloadable module?
+
+If we unload the module while some RCU callbacks are pending,
+the CPUs executing these callbacks are going to be severely
+disappointed when they are later invoked, as fancifully depicted at
+http://lwn.net/images/ns/kernel/rcu-drop.jpg.
+
+We could try placing a synchronize_rcu() in the module-exit code path,
+but this is not sufficient. Although synchronize_rcu() does wait for a
+grace period to elapse, it does not wait for the callbacks to complete.
+
+One might be tempted to try several back-to-back synchronize_rcu()
+calls, but this is still not guaranteed to work. If there is a very
+heavy RCU-callback load, then some of the callbacks might be deferred
+in order to allow other processing to proceed. Such deferral is required
+in realtime kernels in order to avoid excessive scheduling latencies.
+
+
+rcu_barrier()
+
+We instead need the rcu_barrier() primitive. This primitive is similar
+to synchronize_rcu(), but instead of waiting solely for a grace
+period to elapse, it also waits for all outstanding RCU callbacks to
+complete. Pseudo-code using rcu_barrier() is as follows:
+
+   1. Prevent any new RCU callbacks from being posted.
+   2. Execute rcu_barrier().
+   3. Allow the module to be unloaded.
+
+Quick Quiz #1: Why is there no srcu_barrier()?
+
+The rcutorture module makes use of rcu_barrier in its exit function
+as follows:
+
+ 1 static void
+ 2 rcu_torture_cleanup(void)
+ 3 {
+ 4   int i;
+ 5
+ 6   fullstop = 1;
+ 7   if (shuffler_task != NULL) {
+ 8     VERBOSE_PRINTK_STRING("Stopping rcu_torture_shuffle task");
+ 9     kthread_stop(shuffler_task);
+10   }
+11   shuffler_task = NULL;
+12
+13   if (writer_task != NULL) {
+14     VERBOSE_PRINTK_STRING("Stopping rcu_torture_writer task");
+15     kthread_stop(writer_task);
+16   }
+17   writer_task = NULL;
+18
+19   if (reader_tasks != NULL) {
+20     for (i = 0; i < nrealreaders; i++) {
+21       if (reader_tasks[i] != NULL) {
+22         VERBOSE_PRINTK_STRING(
+23           "Stopping rcu_torture_reader task");
+24         kthread_stop(reader_tasks[i]);
+25       }
+26       reader_tasks[i] = NULL;
+27     }
+28     kfree(reader_tasks);
+29     reader_tasks = NULL;
+30   }
+31   rcu_torture_current = NULL;
+32
+33   if (fakewriter_tasks != NULL) {
+34     for (i = 0; i < nfakewriters; i++) {
+35       if (fakewriter_tasks[i] != NULL) {
+36         VERBOSE_PRINTK_STRING(
+37           "Stopping rcu_torture_fakewriter task");
+38         kthread_stop(fakewriter_tasks[i]);
+39       }
+40       fakewriter_tasks[i] = NULL;
+41     }
+42     kfree(fakewriter_tasks);
+43     fakewriter_tasks = NULL;
+44   }
+45
+46   if (stats_task != NULL) {
+47     VERBOSE_PRINTK_STRING("Stopping rcu_torture_stats task");
+48     kthread_stop(stats_task);
+49   }
+50   stats_task = NULL;
+51
+52   /* Wait for all RCU callbacks to fire. */
+53   rcu_barrier();
+54
+55   rcu_torture_stats_print(); /* -After- the stats thread is stopped! */
+56
+57   if (cur_ops->cleanup != NULL)
+58     cur_ops->cleanup();
+59   if (atomic_read(&n_rcu_torture_error))
+60     rcu_torture_print_module_parms("End of test: FAILURE");
+61   else
+62     rcu_torture_print_module_parms("End of test: SUCCESS");
+63 }
+
+Line 6 sets a global variable that prevents any RCU callbacks from
+re-posting themselves. This will not be necessary in most cases, since
+RCU callbacks rarely include calls to call_rcu(). However, the rcutorture
+module is an exception to this rule, and therefore needs to set this
+global variable.
+
+Lines 7-50 stop all the kernel tasks associated with the rcutorture
+module. Therefore, once execution reaches line 53, no more rcutorture
+RCU callbacks will be posted. The rcu_barrier() call on line 53 waits
+for any pre-existing callbacks to complete.
+
+Then lines 55-62 print status and do operation-specific cleanup, and
+then return, permitting the module-unload operation to be completed.
+
+Quick Quiz #2: Is there any other situation where rcu_barrier() might
+       be required?
+
+Your module might have additional complications. For example, if your
+module invokes call_rcu() from timers, you will need to first cancel all
+the timers, and only then invoke rcu_barrier() to wait for any remaining
+RCU callbacks to complete.
+
+
+Implementing rcu_barrier()
+
+Dipankar Sarma's implementation of rcu_barrier() makes use of the fact
+that RCU callbacks are never reordered once queued on one of the per-CPU
+queues. His implementation queues an RCU callback on each of the per-CPU
+callback queues, and then waits until they have all started executing, at
+which point, all earlier RCU callbacks are guaranteed to have completed.
+
+The original code for rcu_barrier() was as follows:
+
+ 1 void rcu_barrier(void)
+ 2 {
+ 3   BUG_ON(in_interrupt());
+ 4   /* Take cpucontrol mutex to protect against CPU hotplug */
+ 5   mutex_lock(&rcu_barrier_mutex);
+ 6   init_completion(&rcu_barrier_completion);
+ 7   atomic_set(&rcu_barrier_cpu_count, 0);
+ 8   on_each_cpu(rcu_barrier_func, NULL, 0, 1);
+ 9   wait_for_completion(&rcu_barrier_completion);
+10   mutex_unlock(&rcu_barrier_mutex);
+11 }
+
+Line 3 verifies that the caller is in process context, and lines 5 and 10
+use rcu_barrier_mutex to ensure that only one rcu_barrier() is using the
+global completion and counters at a time, which are initialized on lines
+6 and 7. Line 8 causes each CPU to invoke rcu_barrier_func(), which is
+shown below. Note that the final "1" in on_each_cpu()'s argument list
+ensures that all the calls to rcu_barrier_func() will have completed
+before on_each_cpu() returns. Line 9 then waits for the completion.
+
+This code was rewritten in 2008 to support rcu_barrier_bh() and
+rcu_barrier_sched() in addition to the original rcu_barrier().
+
+The rcu_barrier_func() runs on each CPU, where it invokes call_rcu()
+to post an RCU callback, as follows:
+
+ 1 static void rcu_barrier_func(void *notused)
+ 2 {
+ 3 int cpu = smp_processor_id();
+ 4 struct rcu_data *rdp = &per_cpu(rcu_data, cpu);
+ 5 struct rcu_head *head;
+ 6
+ 7 head = &rdp->barrier;
+ 8 atomic_inc(&rcu_barrier_cpu_count);
+ 9 call_rcu(head, rcu_barrier_callback);
+10 }
+
+Lines 3 and 4 locate RCU's internal per-CPU rcu_data structure,
+which contains the struct rcu_head that needed for the later call to
+call_rcu(). Line 7 picks up a pointer to this struct rcu_head, and line
+8 increments a global counter. This counter will later be decremented
+by the callback. Line 9 then registers the rcu_barrier_callback() on
+the current CPU's queue.
+
+The rcu_barrier_callback() function simply atomically decrements the
+rcu_barrier_cpu_count variable and finalizes the completion when it
+reaches zero, as follows:
+
+ 1 static void rcu_barrier_callback(struct rcu_head *notused)
+ 2 {
+ 3 if (atomic_dec_and_test(&rcu_barrier_cpu_count))
+ 4 complete(&rcu_barrier_completion);
+ 5 }
+
+Quick Quiz #3: What happens if CPU 0's rcu_barrier_func() executes
+       immediately (thus incrementing rcu_barrier_cpu_count to the
+       value one), but the other CPU's rcu_barrier_func() invocations
+       are delayed for a full grace period? Couldn't this result in
+       rcu_barrier() returning prematurely?
+
+
+rcu_barrier() Summary
+
+The rcu_barrier() primitive has seen relatively little use, since most
+code using RCU is in the core kernel rather than in modules. However, if
+you are using RCU from an unloadable module, you need to use rcu_barrier()
+so that your module may be safely unloaded.
+
+
+Answers to Quick Quizzes
+
+Quick Quiz #1: Why is there no srcu_barrier()?
+
+Answer: Since there is no call_srcu(), there can be no outstanding SRCU
+       callbacks. Therefore, there is no need to wait for them.
+
+Quick Quiz #2: Is there any other situation where rcu_barrier() might
+       be required?
+
+Answer: Interestingly enough, rcu_barrier() was not originally
+       implemented for module unloading. Nikita Danilov was using
+       RCU in a filesystem, which resulted in a similar situation at
+       filesystem-unmount time. Dipankar Sarma coded up rcu_barrier()
+       in response, so that Nikita could invoke it during the
+       filesystem-unmount process.
+
+       Much later, yours truly hit the RCU module-unload problem when
+       implementing rcutorture, and found that rcu_barrier() solves
+       this problem as well.
+
+Quick Quiz #3: What happens if CPU 0's rcu_barrier_func() executes
+       immediately (thus incrementing rcu_barrier_cpu_count to the
+       value one), but the other CPU's rcu_barrier_func() invocations
+       are delayed for a full grace period? Couldn't this result in
+       rcu_barrier() returning prematurely?
+
+Answer: This cannot happen. The reason is that on_each_cpu() has its last
+       argument, the wait flag, set to "1". This flag is passed through
+       to smp_call_function() and further to smp_call_function_on_cpu(),
+       causing this latter to spin until the cross-CPU invocation of
+       rcu_barrier_func() has completed. This by itself would prevent
+       a grace period from completing on non-CONFIG_PREEMPT kernels,
+       since each CPU must undergo a context switch (or other quiescent
+       state) before the grace period can complete. However, this is
+       of no use in CONFIG_PREEMPT kernels.
+
+       Therefore, on_each_cpu() disables preemption across its call
+       to smp_call_function() and also across the local call to
+       rcu_barrier_func(). This prevents the local CPU from context
+       switching, again preventing grace periods from completing. This
+       means that all CPUs have executed rcu_barrier_func() before
+       the first rcu_barrier_callback() can possibly execute, in turn
+       preventing rcu_barrier_cpu_count from prematurely reaching zero.
+
+       Currently, -rt implementations of RCU keep but a single global
+       queue for RCU callbacks, and thus do not suffer from this
+       problem. However, when the -rt RCU eventually does have per-CPU
+       callback queues, things will have to change. One simple change
+       is to add an rcu_read_lock() before line 8 of rcu_barrier()
+       and an rcu_read_unlock() after line 8 of this same function. If
+       you can think of a better change, please let me know!
diff --git a/Documentation/bad_memory.txt b/Documentation/bad_memory.txt
new file mode 100644 (file)
index 0000000..df84162
--- /dev/null
@@ -0,0 +1,45 @@
+March 2008
+Jan-Simon Moeller, dl9pf@gmx.de
+
+
+How to deal with bad memory e.g. reported by memtest86+ ?
+#########################################################
+
+There are three possibilities I know of:
+
+1) Reinsert/swap the memory modules
+
+2) Buy new modules (best!) or try to exchange the memory
+   if you have spare-parts
+
+3) Use BadRAM or memmap
+
+This Howto is about number 3) .
+
+
+BadRAM
+######
+BadRAM is the actively developed and available as kernel-patch
+here:  http://rick.vanrein.org/linux/badram/
+
+For more details see the BadRAM documentation.
+
+memmap
+######
+
+memmap is already in the kernel and usable as kernel-parameter at
+boot-time.  Its syntax is slightly strange and you may need to
+calculate the values by yourself!
+
+Syntax to exclude a memory area (see kernel-parameters.txt for details):
+memmap=<size>$<address>
+
+Example: memtest86+ reported here errors at address 0x18691458, 0x18698424 and
+         some others. All had 0x1869xxxx in common, so I chose a pattern of
+         0x18690000,0xffff0000.
+
+With the numbers of the example above:
+memmap=64K$0x18690000
+ or
+memmap=0x10000$0x18690000
+
index d9014aa..e33ee74 100644 (file)
@@ -227,7 +227,6 @@ Each cgroup is represented by a directory in the cgroup file system
 containing the following files describing that cgroup:
 
  - tasks: list of tasks (by pid) attached to that cgroup
- - releasable flag: cgroup currently removeable?
  - notify_on_release flag: run the release agent on exit?
  - release_agent: the path to use for release notifications (this file
    exists in the top cgroup only)
@@ -360,7 +359,7 @@ Now you want to do something with this cgroup.
 
 In this directory you can find several files:
 # ls
-notify_on_release releasable tasks
+notify_on_release tasks
 (plus whatever files added by the attached subsystems)
 
 Now attach your shell to this cgroup:
@@ -479,7 +478,6 @@ newly-created cgroup if an error occurs after this subsystem's
 create() method has been called for the new cgroup).
 
 void pre_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp);
-(cgroup_mutex held by caller)
 
 Called before checking the reference count on each subsystem. This may
 be useful for subsystems which have some extra references even if
@@ -498,6 +496,7 @@ remain valid while the caller holds cgroup_mutex.
 
 void attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
            struct cgroup *old_cgrp, struct task_struct *task)
+(cgroup_mutex held by caller)
 
 Called after the task has been attached to the cgroup, to allow any
 post-attachment activity that requires memory allocations or blocking.
@@ -511,6 +510,7 @@ void exit(struct cgroup_subsys *ss, struct task_struct *task)
 Called during task exit.
 
 int populate(struct cgroup_subsys *ss, struct cgroup *cgrp)
+(cgroup_mutex held by caller)
 
 Called after creation of a cgroup to allow a subsystem to populate
 the cgroup directory with file entries.  The subsystem should make
@@ -520,6 +520,7 @@ method can return an error code, the error code is currently not
 always handled well.
 
 void post_clone(struct cgroup_subsys *ss, struct cgroup *cgrp)
+(cgroup_mutex held by caller)
 
 Called at the end of cgroup_clone() to do any paramater
 initialization which might be required before a task could attach.  For
@@ -527,7 +528,7 @@ example in cpusets, no task may attach before 'cpus' and 'mems' are set
 up.
 
 void bind(struct cgroup_subsys *ss, struct cgroup *root)
-(cgroup_mutex held by caller)
+(cgroup_mutex and ss->hierarchy_mutex held by caller)
 
 Called when a cgroup subsystem is rebound to a different hierarchy
 and root cgroup. Currently this will only involve movement between
diff --git a/Documentation/controllers/memcg_test.txt b/Documentation/controllers/memcg_test.txt
new file mode 100644 (file)
index 0000000..08d4d3e
--- /dev/null
@@ -0,0 +1,342 @@
+Memory Resource Controller(Memcg)  Implementation Memo.
+Last Updated: 2008/12/15
+Base Kernel Version: based on 2.6.28-rc8-mm.
+
+Because VM is getting complex (one of reasons is memcg...), memcg's behavior
+is complex. This is a document for memcg's internal behavior.
+Please note that implementation details can be changed.
+
+(*) Topics on API should be in Documentation/controllers/memory.txt)
+
+0. How to record usage ?
+   2 objects are used.
+
+   page_cgroup ....an object per page.
+       Allocated at boot or memory hotplug. Freed at memory hot removal.
+
+   swap_cgroup ... an entry per swp_entry.
+       Allocated at swapon(). Freed at swapoff().
+
+   The page_cgroup has USED bit and double count against a page_cgroup never
+   occurs. swap_cgroup is used only when a charged page is swapped-out.
+
+1. Charge
+
+   a page/swp_entry may be charged (usage += PAGE_SIZE) at
+
+       mem_cgroup_newpage_charge()
+         Called at new page fault and Copy-On-Write.
+
+       mem_cgroup_try_charge_swapin()
+         Called at do_swap_page() (page fault on swap entry) and swapoff.
+         Followed by charge-commit-cancel protocol. (With swap accounting)
+         At commit, a charge recorded in swap_cgroup is removed.
+
+       mem_cgroup_cache_charge()
+         Called at add_to_page_cache()
+
+       mem_cgroup_cache_charge_swapin()
+         Called at shmem's swapin.
+
+       mem_cgroup_prepare_migration()
+         Called before migration. "extra" charge is done and followed by
+         charge-commit-cancel protocol.
+         At commit, charge against oldpage or newpage will be committed.
+
+2. Uncharge
+  a page/swp_entry may be uncharged (usage -= PAGE_SIZE) by
+
+       mem_cgroup_uncharge_page()
+         Called when an anonymous page is fully unmapped. I.e., mapcount goes
+         to 0. If the page is SwapCache, uncharge is delayed until
+         mem_cgroup_uncharge_swapcache().
+
+       mem_cgroup_uncharge_cache_page()
+         Called when a page-cache is deleted from radix-tree. If the page is
+         SwapCache, uncharge is delayed until mem_cgroup_uncharge_swapcache().
+
+       mem_cgroup_uncharge_swapcache()
+         Called when SwapCache is removed from radix-tree. The charge itself
+         is moved to swap_cgroup. (If mem+swap controller is disabled, no
+         charge to swap occurs.)
+
+       mem_cgroup_uncharge_swap()
+         Called when swp_entry's refcnt goes down to 0. A charge against swap
+         disappears.
+
+       mem_cgroup_end_migration(old, new)
+       At success of migration old is uncharged (if necessary), a charge
+       to new page is committed. At failure, charge to old page is committed.
+
+3. charge-commit-cancel
+       In some case, we can't know this "charge" is valid or not at charging
+       (because of races).
+       To handle such case, there are charge-commit-cancel functions.
+               mem_cgroup_try_charge_XXX
+               mem_cgroup_commit_charge_XXX
+               mem_cgroup_cancel_charge_XXX
+       these are used in swap-in and migration.
+
+       At try_charge(), there are no flags to say "this page is charged".
+       at this point, usage += PAGE_SIZE.
+
+       At commit(), the function checks the page should be charged or not
+       and set flags or avoid charging.(usage -= PAGE_SIZE)
+
+       At cancel(), simply usage -= PAGE_SIZE.
+
+Under below explanation, we assume CONFIG_MEM_RES_CTRL_SWAP=y.
+
+4. Anonymous
+       Anonymous page is newly allocated at
+                 - page fault into MAP_ANONYMOUS mapping.
+                 - Copy-On-Write.
+       It is charged right after it's allocated before doing any page table
+       related operations. Of course, it's uncharged when another page is used
+       for the fault address.
+
+       At freeing anonymous page (by exit() or munmap()), zap_pte() is called
+       and pages for ptes are freed one by one.(see mm/memory.c). Uncharges
+       are done at page_remove_rmap() when page_mapcount() goes down to 0.
+
+       Another page freeing is by page-reclaim (vmscan.c) and anonymous
+       pages are swapped out. In this case, the page is marked as
+       PageSwapCache(). uncharge() routine doesn't uncharge the page marked
+       as SwapCache(). It's delayed until __delete_from_swap_cache().
+
+       4.1 Swap-in.
+       At swap-in, the page is taken from swap-cache. There are 2 cases.
+
+       (a) If the SwapCache is newly allocated and read, it has no charges.
+       (b) If the SwapCache has been mapped by processes, it has been
+           charged already.
+
+       This swap-in is one of the most complicated work. In do_swap_page(),
+       following events occur when pte is unchanged.
+
+       (1) the page (SwapCache) is looked up.
+       (2) lock_page()
+       (3) try_charge_swapin()
+       (4) reuse_swap_page() (may call delete_swap_cache())
+       (5) commit_charge_swapin()
+       (6) swap_free().
+
+       Considering following situation for example.
+
+       (A) The page has not been charged before (2) and reuse_swap_page()
+           doesn't call delete_from_swap_cache().
+       (B) The page has not been charged before (2) and reuse_swap_page()
+           calls delete_from_swap_cache().
+       (C) The page has been charged before (2) and reuse_swap_page() doesn't
+           call delete_from_swap_cache().
+       (D) The page has been charged before (2) and reuse_swap_page() calls
+           delete_from_swap_cache().
+
+           memory.usage/memsw.usage changes to this page/swp_entry will be
+        Case          (A)      (B)       (C)     (D)
+         Event
+       Before (2)     0/ 1     0/ 1      1/ 1    1/ 1
+          ===========================================
+          (3)        +1/+1    +1/+1     +1/+1   +1/+1
+          (4)          -       0/ 0       -     -1/ 0
+          (5)         0/-1     0/ 0     -1/-1    0/ 0
+          (6)          -       0/-1       -      0/-1
+          ===========================================
+       Result         1/ 1     1/ 1      1/ 1    1/ 1
+
+       In any cases, charges to this page should be 1/ 1.
+
+       4.2 Swap-out.
+       At swap-out, typical state transition is below.
+
+       (a) add to swap cache. (marked as SwapCache)
+           swp_entry's refcnt += 1.
+       (b) fully unmapped.
+           swp_entry's refcnt += # of ptes.
+       (c) write back to swap.
+       (d) delete from swap cache. (remove from SwapCache)
+           swp_entry's refcnt -= 1.
+
+
+       At (b), the page is marked as SwapCache and not uncharged.
+       At (d), the page is removed from SwapCache and a charge in page_cgroup
+       is moved to swap_cgroup.
+
+       Finally, at task exit,
+       (e) zap_pte() is called and swp_entry's refcnt -=1 -> 0.
+       Here, a charge in swap_cgroup disappears.
+
+5. Page Cache
+       Page Cache is charged at
+       - add_to_page_cache_locked().
+
+       uncharged at
+       - __remove_from_page_cache().
+
+       The logic is very clear. (About migration, see below)
+       Note: __remove_from_page_cache() is called by remove_from_page_cache()
+       and __remove_mapping().
+
+6. Shmem(tmpfs) Page Cache
+       Memcg's charge/uncharge have special handlers of shmem. The best way
+       to understand shmem's page state transition is to read mm/shmem.c.
+       But brief explanation of the behavior of memcg around shmem will be
+       helpful to understand the logic.
+
+       Shmem's page (just leaf page, not direct/indirect block) can be on
+               - radix-tree of shmem's inode.
+               - SwapCache.
+               - Both on radix-tree and SwapCache. This happens at swap-in
+                 and swap-out,
+
+       It's charged when...
+       - A new page is added to shmem's radix-tree.
+       - A swp page is read. (move a charge from swap_cgroup to page_cgroup)
+       It's uncharged when
+       - A page is removed from radix-tree and not SwapCache.
+       - When SwapCache is removed, a charge is moved to swap_cgroup.
+       - When swp_entry's refcnt goes down to 0, a charge in swap_cgroup
+         disappears.
+
+7. Page Migration
+       One of the most complicated functions is page-migration-handler.
+       Memcg has 2 routines. Assume that we are migrating a page's contents
+       from OLDPAGE to NEWPAGE.
+
+       Usual migration logic is..
+       (a) remove the page from LRU.
+       (b) allocate NEWPAGE (migration target)
+       (c) lock by lock_page().
+       (d) unmap all mappings.
+       (e-1) If necessary, replace entry in radix-tree.
+       (e-2) move contents of a page.
+       (f) map all mappings again.
+       (g) pushback the page to LRU.
+       (-) OLDPAGE will be freed.
+
+       Before (g), memcg should complete all necessary charge/uncharge to
+       NEWPAGE/OLDPAGE.
+
+       The point is....
+       - If OLDPAGE is anonymous, all charges will be dropped at (d) because
+          try_to_unmap() drops all mapcount and the page will not be
+         SwapCache.
+
+       - If OLDPAGE is SwapCache, charges will be kept at (g) because
+         __delete_from_swap_cache() isn't called at (e-1)
+
+       - If OLDPAGE is page-cache, charges will be kept at (g) because
+         remove_from_swap_cache() isn't called at (e-1)
+
+       memcg provides following hooks.
+
+       - mem_cgroup_prepare_migration(OLDPAGE)
+         Called after (b) to account a charge (usage += PAGE_SIZE) against
+         memcg which OLDPAGE belongs to.
+
+        - mem_cgroup_end_migration(OLDPAGE, NEWPAGE)
+         Called after (f) before (g).
+         If OLDPAGE is used, commit OLDPAGE again. If OLDPAGE is already
+         charged, a charge by prepare_migration() is automatically canceled.
+         If NEWPAGE is used, commit NEWPAGE and uncharge OLDPAGE.
+
+         But zap_pte() (by exit or munmap) can be called while migration,
+         we have to check if OLDPAGE/NEWPAGE is a valid page after commit().
+
+8. LRU
+        Each memcg has its own private LRU. Now, it's handling is under global
+       VM's control (means that it's handled under global zone->lru_lock).
+       Almost all routines around memcg's LRU is called by global LRU's
+       list management functions under zone->lru_lock().
+
+       A special function is mem_cgroup_isolate_pages(). This scans
+       memcg's private LRU and call __isolate_lru_page() to extract a page
+       from LRU.
+       (By __isolate_lru_page(), the page is removed from both of global and
+        private LRU.)
+
+
+9. Typical Tests.
+
+ Tests for racy cases.
+
+ 9.1 Small limit to memcg.
+       When you do test to do racy case, it's good test to set memcg's limit
+       to be very small rather than GB. Many races found in the test under
+       xKB or xxMB limits.
+       (Memory behavior under GB and Memory behavior under MB shows very
+        different situation.)
+
+ 9.2 Shmem
+       Historically, memcg's shmem handling was poor and we saw some amount
+       of troubles here. This is because shmem is page-cache but can be
+       SwapCache. Test with shmem/tmpfs is always good test.
+
+ 9.3 Migration
+       For NUMA, migration is an another special case. To do easy test, cpuset
+       is useful. Following is a sample script to do migration.
+
+       mount -t cgroup -o cpuset none /opt/cpuset
+
+       mkdir /opt/cpuset/01
+       echo 1 > /opt/cpuset/01/cpuset.cpus
+       echo 0 > /opt/cpuset/01/cpuset.mems
+       echo 1 > /opt/cpuset/01/cpuset.memory_migrate
+       mkdir /opt/cpuset/02
+       echo 1 > /opt/cpuset/02/cpuset.cpus
+       echo 1 > /opt/cpuset/02/cpuset.mems
+       echo 1 > /opt/cpuset/02/cpuset.memory_migrate
+
+       In above set, when you moves a task from 01 to 02, page migration to
+       node 0 to node 1 will occur. Following is a script to migrate all
+       under cpuset.
+       --
+       move_task()
+       {
+       for pid in $1
+        do
+                /bin/echo $pid >$2/tasks 2>/dev/null
+               echo -n $pid
+               echo -n " "
+        done
+       echo END
+       }
+
+       G1_TASK=`cat ${G1}/tasks`
+       G2_TASK=`cat ${G2}/tasks`
+       move_task "${G1_TASK}" ${G2} &
+       --
+ 9.4 Memory hotplug.
+       memory hotplug test is one of good test.
+       to offline memory, do following.
+       # echo offline > /sys/devices/system/memory/memoryXXX/state
+       (XXX is the place of memory)
+       This is an easy way to test page migration, too.
+
+ 9.5 mkdir/rmdir
+       When using hierarchy, mkdir/rmdir test should be done.
+       Use tests like the following.
+
+       echo 1 >/opt/cgroup/01/memory/use_hierarchy
+       mkdir /opt/cgroup/01/child_a
+       mkdir /opt/cgroup/01/child_b
+
+       set limit to 01.
+       add limit to 01/child_b
+       run jobs under child_a and child_b
+
+       create/delete following groups at random while jobs are running.
+       /opt/cgroup/01/child_a/child_aa
+       /opt/cgroup/01/child_b/child_bb
+       /opt/cgroup/01/child_c
+
+       running new jobs in new group is also good.
+
+ 9.6 Mount with other subsystems.
+       Mounting with other subsystems is a good test because there is a
+       race and lock dependency with other cgroup subsystems.
+
+       example)
+       # mount -t cgroup none /cgroup -t cpuset,memory,cpu,devices
+
+       and do task move, mkdir, rmdir etc...under this.
index 1c07547..e150196 100644 (file)
@@ -137,7 +137,32 @@ behind this approach is that a cgroup that aggressively uses a shared
 page will eventually get charged for it (once it is uncharged from
 the cgroup that brought it in -- this will happen on memory pressure).
 
-2.4 Reclaim
+Exception: If CONFIG_CGROUP_CGROUP_MEM_RES_CTLR_SWAP is not used..
+When you do swapoff and make swapped-out pages of shmem(tmpfs) to
+be backed into memory in force, charges for pages are accounted against the
+caller of swapoff rather than the users of shmem.
+
+
+2.4 Swap Extension (CONFIG_CGROUP_MEM_RES_CTLR_SWAP)
+Swap Extension allows you to record charge for swap. A swapped-in page is
+charged back to original page allocator if possible.
+
+When swap is accounted, following files are added.
+ - memory.memsw.usage_in_bytes.
+ - memory.memsw.limit_in_bytes.
+
+usage of mem+swap is limited by memsw.limit_in_bytes.
+
+Note: why 'mem+swap' rather than swap.
+The global LRU(kswapd) can swap out arbitrary pages. Swap-out means
+to move account from memory to swap...there is no change in usage of
+mem+swap.
+
+In other words, when we want to limit the usage of swap without affecting
+global LRU, mem+swap limit is better than just limiting swap from OS point
+of view.
+
+2.5 Reclaim
 
 Each cgroup maintains a per cgroup LRU that consists of an active
 and inactive list. When a cgroup goes over its limit, we first try
@@ -207,12 +232,6 @@ exceeded.
 The memory.stat file gives accounting information. Now, the number of
 caches, RSS and Active pages/Inactive pages are shown.
 
-The memory.force_empty gives an interface to drop *all* charges by force.
-
-# echo 1 > memory.force_empty
-
-will drop all charges in cgroup. Currently, this is maintained for test.
-
 4. Testing
 
 Balbir posted lmbench, AIM9, LTP and vmmstress results [10] and [11].
@@ -242,10 +261,106 @@ reclaimed.
 
 A cgroup can be removed by rmdir, but as discussed in sections 4.1 and 4.2, a
 cgroup might have some charge associated with it, even though all
-tasks have migrated away from it. Such charges are automatically dropped at
-rmdir() if there are no tasks.
+tasks have migrated away from it.
+Such charges are freed(at default) or moved to its parent. When moved,
+both of RSS and CACHES are moved to parent.
+If both of them are busy, rmdir() returns -EBUSY. See 5.1 Also.
+
+Charges recorded in swap information is not updated at removal of cgroup.
+Recorded information is discarded and a cgroup which uses swap (swapcache)
+will be charged as a new owner of it.
+
+
+5. Misc. interfaces.
+
+5.1 force_empty
+  memory.force_empty interface is provided to make cgroup's memory usage empty.
+  You can use this interface only when the cgroup has no tasks.
+  When writing anything to this
+
+  # echo 0 > memory.force_empty
+
+  Almost all pages tracked by this memcg will be unmapped and freed. Some of
+  pages cannot be freed because it's locked or in-use. Such pages are moved
+  to parent and this cgroup will be empty. But this may return -EBUSY in
+  some too busy case.
+
+  Typical use case of this interface is that calling this before rmdir().
+  Because rmdir() moves all pages to parent, some out-of-use page caches can be
+  moved to the parent. If you want to avoid that, force_empty will be useful.
+
+5.2 stat file
+  memory.stat file includes following statistics (now)
+       cache                   - # of pages from page-cache and shmem.
+       rss                     - # of pages from anonymous memory.
+       pgpgin                  - # of event of charging
+       pgpgout                 - # of event of uncharging
+       active_anon             - # of pages on active lru of anon, shmem.
+       inactive_anon           - # of pages on active lru of anon, shmem
+       active_file             - # of pages on active lru of file-cache
+       inactive_file           - # of pages on inactive lru of file cache
+       unevictable             - # of pages cannot be reclaimed.(mlocked etc)
+
+       Below is depend on CONFIG_DEBUG_VM.
+       inactive_ratio          - VM inernal parameter. (see mm/page_alloc.c)
+       recent_rotated_anon     - VM internal parameter. (see mm/vmscan.c)
+       recent_rotated_file     - VM internal parameter. (see mm/vmscan.c)
+       recent_scanned_anon     - VM internal parameter. (see mm/vmscan.c)
+       recent_scanned_file     - VM internal parameter. (see mm/vmscan.c)
+
+  Memo:
+       recent_rotated means recent frequency of lru rotation.
+       recent_scanned means recent # of scans to lru.
+       showing for better debug please see the code for meanings.
+
+
+5.3 swappiness
+  Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.
+
+  Following cgroup's swapiness can't be changed.
+  - root cgroup (uses /proc/sys/vm/swappiness).
+  - a cgroup which uses hierarchy and it has child cgroup.
+  - a cgroup which uses hierarchy and not the root of hierarchy.
+
+
+6. Hierarchy support
+
+The memory controller supports a deep hierarchy and hierarchical accounting.
+The hierarchy is created by creating the appropriate cgroups in the
+cgroup filesystem. Consider for example, the following cgroup filesystem
+hierarchy
+
+               root
+            /  |   \
+           /   |    \
+         a     b       c
+                       | \
+                       |  \
+                       d   e
+
+In the diagram above, with hierarchical accounting enabled, all memory
+usage of e, is accounted to its ancestors up until the root (i.e, c and root),
+that has memory.use_hierarchy enabled.  If one of the ancestors goes over its
+limit, the reclaim algorithm reclaims from the tasks in the ancestor and the
+children of the ancestor.
+
+6.1 Enabling hierarchical accounting and reclaim
+
+The memory controller by default disables the hierarchy feature. Support
+can be enabled by writing 1 to memory.use_hierarchy file of the root cgroup
+
+# echo 1 > memory.use_hierarchy
+
+The feature can be disabled by
+
+# echo 0 > memory.use_hierarchy
+
+NOTE1: Enabling/disabling will fail if the cgroup already has other
+cgroups created below it.
+
+NOTE2: This feature can be enabled/disabled per subtree.
 
-5. TODO
+7. TODO
 
 1. Add support for accounting huge pages (as a separate controller)
 2. Make per-cgroup scanner reclaim not-shared pages first
index c1e9545..9f59fcb 100644 (file)
@@ -13,9 +13,9 @@
 3.6 Constraints
 3.7 Example
 
-4 DRIVER DEVELOPER NOTES
+4 DMAENGINE DRIVER DEVELOPER NOTES
 4.1 Conformance points
-4.2 "My application needs finer control of hardware channels"
+4.2 "My application needs exclusive control of hardware channels"
 
 5 SOURCE
 
@@ -150,6 +150,7 @@ ops_run_* and ops_complete_* routines in drivers/md/raid5.c for more
 implementation examples.
 
 4 DRIVER DEVELOPMENT NOTES
+
 4.1 Conformance points:
 There are a few conformance points required in dmaengine drivers to
 accommodate assumptions made by applications using the async_tx API:
@@ -158,58 +159,49 @@ accommodate assumptions made by applications using the async_tx API:
 3/ Use async_tx_run_dependencies() in the descriptor clean up path to
    handle submission of dependent operations
 
-4.2 "My application needs finer control of hardware channels"
-This requirement seems to arise from cases where a DMA engine driver is
-trying to support device-to-memory DMA.  The dmaengine and async_tx
-implementations were designed for offloading memory-to-memory
-operations; however, there are some capabilities of the dmaengine layer
-that can be used for platform-specific channel management.
-Platform-specific constraints can be handled by registering the
-application as a 'dma_client' and implementing a 'dma_event_callback' to
-apply a filter to the available channels in the system.  Before showing
-how to implement a custom dma_event callback some background of
-dmaengine's client support is required.
-
-The following routines in dmaengine support multiple clients requesting
-use of a channel:
-- dma_async_client_register(struct dma_client *client)
-- dma_async_client_chan_request(struct dma_client *client)
-
-dma_async_client_register takes a pointer to an initialized dma_client
-structure.  It expects that the 'event_callback' and 'cap_mask' fields
-are already initialized.
-
-dma_async_client_chan_request triggers dmaengine to notify the client of
-all channels that satisfy the capability mask.  It is up to the client's
-event_callback routine to track how many channels the client needs and
-how many it is currently using.  The dma_event_callback routine returns a
-dma_state_client code to let dmaengine know the status of the
-allocation.
-
-Below is the example of how to extend this functionality for
-platform-specific filtering of the available channels beyond the
-standard capability mask:
-
-static enum dma_state_client
-my_dma_client_callback(struct dma_client *client,
-                       struct dma_chan *chan, enum dma_state state)
-{
-       struct dma_device *dma_dev;
-       struct my_platform_specific_dma *plat_dma_dev;
-       
-       dma_dev = chan->device;
-       plat_dma_dev = container_of(dma_dev,
-                                   struct my_platform_specific_dma,
-                                   dma_dev);
-
-       if (!plat_dma_dev->platform_specific_capability)
-               return DMA_DUP;
-
-       . . .
-}
+4.2 "My application needs exclusive control of hardware channels"
+Primarily this requirement arises from cases where a DMA engine driver
+is being used to support device-to-memory operations.  A channel that is
+performing these operations cannot, for many platform specific reasons,
+be shared.  For these cases the dma_request_channel() interface is
+provided.
+
+The interface is:
+struct dma_chan *dma_request_channel(dma_cap_mask_t mask,
+                                    dma_filter_fn filter_fn,
+                                    void *filter_param);
+
+Where dma_filter_fn is defined as:
+typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
+
+When the optional 'filter_fn' parameter is set to NULL
+dma_request_channel simply returns the first channel that satisfies the
+capability mask.  Otherwise, when the mask parameter is insufficient for
+specifying the necessary channel, the filter_fn routine can be used to
+disposition the available channels in the system. The filter_fn routine
+is called once for each free channel in the system.  Upon seeing a
+suitable channel filter_fn returns DMA_ACK which flags that channel to
+be the return value from dma_request_channel.  A channel allocated via
+this interface is exclusive to the caller, until dma_release_channel()
+is called.
+
+The DMA_PRIVATE capability flag is used to tag dma devices that should
+not be used by the general-purpose allocator.  It can be set at
+initialization time if it is known that a channel will always be
+private.  Alternatively, it is set when dma_request_channel() finds an
+unused "public" channel.
+
+A couple caveats to note when implementing a driver and consumer:
+1/ Once a channel has been privately allocated it will no longer be
+   considered by the general-purpose allocator even after a call to
+   dma_release_channel().
+2/ Since capabilities are specified at the device level a dma_device
+   with multiple channels will either have all channels public, or all
+   channels private.
 
 5 SOURCE
-include/linux/dmaengine.h: core header file for DMA drivers and clients
+
+include/linux/dmaengine.h: core header file for DMA drivers and api users
 drivers/dma/dmaengine.c: offload engine channel management routines
 drivers/dma/: location for offload engine drivers
 include/linux/async_tx.h: core header file for the async_tx api
index 014aca8..a5a3450 100644 (file)
@@ -375,10 +375,10 @@ say, this can be a large job, so it is best to be sure that the
 justification is solid.
 
 When making an incompatible API change, one should, whenever possible,
-ensure that code which has not been updated is caught by the compiler.  
+ensure that code which has not been updated is caught by the compiler.
 This will help you to be sure that you have found all in-tree uses of that
 interface.  It will also alert developers of out-of-tree code that there is
 a change that they need to respond to.  Supporting out-of-tree code is not
 something that kernel developers need to be worried about, but we also do
-not have to make life harder for out-of-tree developers than it it needs to
-be. 
+not have to make life harder for out-of-tree developers than it needs to
+be.
diff --git a/Documentation/dmaengine.txt b/Documentation/dmaengine.txt
new file mode 100644 (file)
index 0000000..0c1c2f6
--- /dev/null
@@ -0,0 +1 @@
+See Documentation/crypto/async-tx-api.txt
index cfbfa15..ec6a939 100644 (file)
@@ -97,8 +97,8 @@ prototypes:
        void (*put_super) (struct super_block *);
        void (*write_super) (struct super_block *);
        int (*sync_fs)(struct super_block *sb, int wait);
-       void (*write_super_lockfs) (struct super_block *);
-       void (*unlockfs) (struct super_block *);
+       int (*freeze_fs) (struct super_block *);
+       int (*unfreeze_fs) (struct super_block *);
        int (*statfs) (struct dentry *, struct kstatfs *);
        int (*remount_fs) (struct super_block *, int *, char *);
        void (*clear_inode) (struct inode *);
@@ -119,8 +119,8 @@ delete_inode:               no
 put_super:             yes     yes     no
 write_super:           no      yes     read
 sync_fs:               no      no      read
-write_super_lockfs:    ?
-unlockfs:              ?
+freeze_fs:             ?
+unfreeze_fs:           ?
 statfs:                        no      no      no
 remount_fs:            yes     yes     maybe           (see below)
 clear_inode:           no
diff --git a/Documentation/filesystems/btrfs.txt b/Documentation/filesystems/btrfs.txt
new file mode 100644 (file)
index 0000000..64087c3
--- /dev/null
@@ -0,0 +1,91 @@
+
+       BTRFS
+       =====
+
+Btrfs is a new copy on write filesystem for Linux aimed at
+implementing advanced features while focusing on fault tolerance,
+repair and easy administration. Initially developed by Oracle, Btrfs
+is licensed under the GPL and open for contribution from anyone.
+
+Linux has a wealth of filesystems to choose from, but we are facing a
+number of challenges with scaling to the large storage subsystems that
+are becoming common in today's data centers. Filesystems need to scale
+in their ability to address and manage large storage, and also in
+their ability to detect, repair and tolerate errors in the data stored
+on disk.  Btrfs is under heavy development, and is not suitable for
+any uses other than benchmarking and review. The Btrfs disk format is
+not yet finalized.
+
+The main Btrfs features include:
+
+    * Extent based file storage (2^64 max file size)
+    * Space efficient packing of small files
+    * Space efficient indexed directories
+    * Dynamic inode allocation
+    * Writable snapshots
+    * Subvolumes (separate internal filesystem roots)
+    * Object level mirroring and striping
+    * Checksums on data and metadata (multiple algorithms available)
+    * Compression
+    * Integrated multiple device support, with several raid algorithms
+    * Online filesystem check (not yet implemented)
+    * Very fast offline filesystem check
+    * Efficient incremental backup and FS mirroring (not yet implemented)
+    * Online filesystem defragmentation
+
+
+
+       MAILING LIST
+       ============
+
+There is a Btrfs mailing list hosted on vger.kernel.org. You can
+find details on how to subscribe here:
+
+http://vger.kernel.org/vger-lists.html#linux-btrfs
+
+Mailing list archives are available from gmane:
+
+http://dir.gmane.org/gmane.comp.file-systems.btrfs
+
+
+
+       IRC
+       ===
+
+Discussion of Btrfs also occurs on the #btrfs channel of the Freenode
+IRC network.
+
+
+
+       UTILITIES
+       =========
+
+Userspace tools for creating and manipulating Btrfs file systems are
+available from the git repository at the following location:
+
+ http://git.kernel.org/?p=linux/kernel/git/mason/btrfs-progs-unstable.git
+ git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs-unstable.git
+
+These include the following tools:
+
+mkfs.btrfs: create a filesystem
+
+btrfsctl: control program to create snapshots and subvolumes:
+
+       mount /dev/sda2 /mnt
+       btrfsctl -s new_subvol_name /mnt
+       btrfsctl -s snapshot_of_default /mnt/default
+       btrfsctl -s snapshot_of_new_subvol /mnt/new_subvol_name
+       btrfsctl -s snapshot_of_a_snapshot /mnt/snapshot_of_new_subvol
+       ls /mnt
+       default snapshot_of_a_snapshot snapshot_of_new_subvol
+       new_subvol_name snapshot_of_default
+
+       Snapshots and subvolumes cannot be deleted right now, but you can
+       rm -rf all the files and directories inside them.
+
+btrfsck: do a limited check of the FS extent trees.
+
+btrfs-debug-tree: print all of the FS metadata in text form.  Example:
+
+       btrfs-debug-tree /dev/sda2 >& big_output_file
index 174eaff..cec829b 100644 (file)
@@ -58,13 +58,22 @@ Note: More extensive information for getting started with ext4 can be
 
        # mount -t ext4 /dev/hda1 /wherever
 
-  - When comparing performance with other filesystems, remember that
-    ext3/4 by default offers higher data integrity guarantees than most.
-    So when comparing with a metadata-only journalling filesystem, such
-    as ext3, use `mount -o data=writeback'.  And you might as well use
-    `mount -o nobh' too along with it.  Making the journal larger than
-    the mke2fs default often helps performance with metadata-intensive
-    workloads.
+  - When comparing performance with other filesystems, it's always
+    important to try multiple workloads; very often a subtle change in a
+    workload parameter can completely change the ranking of which
+    filesystems do well compared to others.  When comparing versus ext3,
+    note that ext4 enables write barriers by default, while ext3 does
+    not enable write barriers by default.  So it is useful to use
+    explicitly specify whether barriers are enabled or not when via the
+    '-o barriers=[0|1]' mount option for both ext3 and ext4 filesystems
+    for a fair comparison.  When tuning ext3 for best benchmark numbers,
+    it is often worthwhile to try changing the data journaling mode; '-o
+    data=writeback,nobh' can be faster for some workloads.  (Note
+    however that running mounted with data=writeback can potentially
+    leave stale data exposed in recently written files in case of an
+    unclean shutdown, which could be a security exposure in some
+    situations.)  Configuring the filesystem with a large journal can
+    also be helpful for metadata-intensive workloads.
 
 2. Features
 ===========
@@ -74,7 +83,7 @@ Note: More extensive information for getting started with ext4 can be
 * ability to use filesystems > 16TB (e2fsprogs support not available yet)
 * extent format reduces metadata overhead (RAM, IO for access, transactions)
 * extent format more robust in face of on-disk corruption due to magics,
-* internal redunancy in tree
+* internal redundancy in tree
 * improved file allocation (multi-block alloc)
 * fix 32000 subdirectory limit
 * nsec timestamps for mtime, atime, ctime, create time
@@ -116,10 +125,11 @@ grouping of bitmaps and inode tables.  Some test results available here:
 When mounting an ext4 filesystem, the following option are accepted:
 (*) == default
 
-extents                (*)     ext4 will use extents to address file data.  The
-                       file system will no longer be mountable by ext3.
-
-noextents              ext4 will not use extents for newly created files
+ro                     Mount filesystem read only. Note that ext4 will
+                       replay the journal (and thus write to the
+                       partition) even when mounted "read only". The
+                       mount options "ro,noload" can be used to prevent
+                       writes to the filesystem.
 
 journal_checksum       Enable checksumming of the journal transactions.
                        This will allow the recovery code in e2fsck and the
@@ -134,17 +144,17 @@ journal_async_commit      Commit block can be written to disk without waiting
 journal=update         Update the ext4 file system's journal to the current
                        format.
 
-journal=inum           When a journal already exists, this option is ignored.
-                       Otherwise, it specifies the number of the inode which
-                       will represent the ext4 file system's journal file.
-
 journal_dev=devnum     When the external journal device's major/minor numbers
                        have changed, this option allows the user to specify
                        the new journal location.  The journal device is
                        identified through its new major/minor numbers encoded
                        in devnum.
 
-noload                 Don't load the journal on mounting.
+noload                 Don't load the journal on mounting.  Note that
+                       if the filesystem was not unmounted cleanly,
+                       skipping the journal replay will lead to the
+                       filesystem containing inconsistencies that can
+                       lead to any number of problems.
 
 data=journal           All data are committed into the journal prior to being
                        written into the main file system.
@@ -219,9 +229,12 @@ minixdf                    Make 'df' act like Minix.
 
 debug                  Extra debugging information is sent to syslog.
 
-errors=remount-ro(*)   Remount the filesystem read-only on an error.
+errors=remount-ro      Remount the filesystem read-only on an error.
 errors=continue                Keep going on a filesystem error.
 errors=panic           Panic and halt the machine if an error occurs.
+                        (These mount options override the errors behavior
+                        specified in the superblock, which can be configured
+                        using tune2fs)
 
 data_err=ignore(*)     Just print an error message if an error occurs
                        in a file data buffer in ordered mode.
@@ -261,6 +274,42 @@ delalloc   (*)     Deferring block allocation until write-out time.
 nodelalloc             Disable delayed allocation. Blocks are allocation
                        when data is copied from user to page cache.
 
+max_batch_time=usec    Maximum amount of time ext4 should wait for
+                       additional filesystem operations to be batch
+                       together with a synchronous write operation.
+                       Since a synchronous write operation is going to
+                       force a commit and then a wait for the I/O
+                       complete, it doesn't cost much, and can be a
+                       huge throughput win, we wait for a small amount
+                       of time to see if any other transactions can
+                       piggyback on the synchronous write.   The
+                       algorithm used is designed to automatically tune
+                       for the speed of the disk, by measuring the
+                       amount of time (on average) that it takes to
+                       finish committing a transaction.  Call this time
+                       the "commit time".  If the time that the
+                       transactoin has been running is less than the
+                       commit time, ext4 will try sleeping for the
+                       commit time to see if other operati