Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 20 May 2010 16:20:59 +0000 (09:20 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 20 May 2010 16:20:59 +0000 (09:20 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (44 commits)
  vlynq: make whole Kconfig-menu dependant on architecture
  add descriptive comment for TIF_MEMDIE task flag declaration.
  EEPROM: max6875: Header file cleanup
  EEPROM: 93cx6: Header file cleanup
  EEPROM: Header file cleanup
  agp: use NULL instead of 0 when pointer is needed
  rtc-v3020: make bitfield unsigned
  PCI: make bitfield unsigned
  jbd2: use NULL instead of 0 when pointer is needed
  cciss: fix shadows sparse warning
  doc: inode uses a mutex instead of a semaphore.
  uml: i386: Avoid redefinition of NR_syscalls
  fix "seperate" typos in comments
  cocbalt_lcdfb: correct sections
  doc: Change urls for sparse
  Powerpc: wii: Fix typo in comment
  i2o: cleanup some exit paths
  Documentation/: it's -> its where appropriate
  UML: Fix compiler warning due to missing task_struct declaration
  UML: add kernel.h include to signal.c
  ...

22 files changed:
1  2 
Documentation/DocBook/libata.tmpl
Documentation/cgroups/cgroups.txt
Documentation/filesystems/proc.txt
Documentation/intel_txt.txt
Documentation/kprobes.txt
Documentation/trace/events.txt
MAINTAINERS
arch/arm/mach-s3c2443/clock.c
arch/arm/plat-samsung/include/plat/gpio-core.h
arch/s390/include/asm/thread_info.h
arch/um/drivers/line.c
arch/x86/include/asm/percpu.h
arch/x86/include/asm/thread_info.h
drivers/firewire/ohci.c
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/radeon/atombios.h
drivers/pci/pci.c
drivers/usb/host/ehci-omap.c
fs/logfs/logfs.h
kernel/cgroup.c
mm/memcontrol.c
net/ipv4/ipmr.c

@@@ -107,6 -107,10 +107,6 @@@ void (*dev_config) (struct ata_port *, 
        issue of SET FEATURES - XFER MODE, and prior to operation.
        </para>
        <para>
 -      Called by ata_device_add() after ata_dev_identify() determines
 -      a device is present.
 -      </para>
 -      <para>
        This entry may be specified as NULL in ata_port_operations.
        </para>
  
@@@ -150,8 -154,8 +150,8 @@@ unsigned int (*mode_filter) (struct ata
  
        <sect2><title>Taskfile read/write</title>
        <programlisting>
 -void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
 -void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
 +void (*sff_tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
 +void (*sff_tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
        </programlisting>
  
        <para>
        hardware registers / DMA buffers, to obtain the current set of
        taskfile register values.
        Most drivers for taskfile-based hardware (PIO or MMIO) use
 -      ata_tf_load() and ata_tf_read() for these hooks.
 +      ata_sff_tf_load() and ata_sff_tf_read() for these hooks.
        </para>
  
        </sect2>
  
        <sect2><title>PIO data read/write</title>
        <programlisting>
 -void (*data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);
 +void (*sff_data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);
        </programlisting>
  
        <para>
  All bmdma-style drivers must implement this hook.  This is the low-level
  operation that actually copies the data bytes during a PIO data
  transfer.
 -Typically the driver
 -will choose one of ata_pio_data_xfer_noirq(), ata_pio_data_xfer(), or
 -ata_mmio_data_xfer().
 +Typically the driver will choose one of ata_sff_data_xfer_noirq(),
 +ata_sff_data_xfer(), or ata_sff_data_xfer32().
        </para>
  
        </sect2>
  
        <sect2><title>ATA command execute</title>
        <programlisting>
 -void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
 +void (*sff_exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
        </programlisting>
  
        <para>
        causes an ATA command, previously loaded with
        ->tf_load(), to be initiated in hardware.
 -      Most drivers for taskfile-based hardware use ata_exec_command()
 +      Most drivers for taskfile-based hardware use ata_sff_exec_command()
        for this hook.
        </para>
  
@@@ -213,8 -218,8 +213,8 @@@ command
  
        <sect2><title>Read specific ATA shadow registers</title>
        <programlisting>
 -u8   (*check_status)(struct ata_port *ap);
 -u8   (*check_altstatus)(struct ata_port *ap);
 +u8   (*sff_check_status)(struct ata_port *ap);
 +u8   (*sff_check_altstatus)(struct ata_port *ap);
        </programlisting>
  
        <para>
        hardware.  On some hardware, reading the Status register has
        the side effect of clearing the interrupt condition.
        Most drivers for taskfile-based hardware use
 -      ata_check_status() for this hook.
 -      </para>
 -      <para>
 -      Note that because this is called from ata_device_add(), at
 -      least a dummy function that clears device interrupts must be
 -      provided for all drivers, even if the controller doesn't
 -      actually have a taskfile status register.
 +      ata_sff_check_status() for this hook.
        </para>
  
        </sect2>
  
        <sect2><title>Select ATA device on bus</title>
        <programlisting>
 -void (*dev_select)(struct ata_port *ap, unsigned int device);
 +void (*sff_dev_select)(struct ata_port *ap, unsigned int device);
        </programlisting>
  
        <para>
        </para>
        <para>
        Most drivers for taskfile-based hardware use
 -      ata_std_dev_select() for this hook.  Controllers which do not
 -      support second drives on a port (such as SATA contollers) will
 -      use ata_noop_dev_select().
 +      ata_sff_dev_select() for this hook.
        </para>
  
        </sect2>
@@@ -428,13 -441,13 +428,13 @@@ void (*irq_clear) (struct ata_port *)
        to struct ata_host_set.
        </para>
        <para>
 -      Most legacy IDE drivers use ata_interrupt() for the
 +      Most legacy IDE drivers use ata_sff_interrupt() for the
        irq_handler hook, which scans all ports in the host_set,
        determines which queued command was active (if any), and calls
 -      ata_host_intr(ap,qc).
 +      ata_sff_host_intr(ap,qc).
        </para>
        <para>
 -      Most legacy IDE drivers use ata_bmdma_irq_clear() for the
 +      Most legacy IDE drivers use ata_sff_irq_clear() for the
        irq_clear() hook, which simply clears the interrupt and error
        flags in the DMA status register.
        </para>
@@@ -477,12 -490,16 +477,12 @@@ void (*host_stop) (struct ata_host_set 
        allocates space for a legacy IDE PRD table and returns.
        </para>
        <para>
-       ->port_stop() is called after ->host_stop().  It's sole function
+       ->port_stop() is called after ->host_stop().  Its sole function
        is to release DMA/memory resources, now that they are no longer
        actively being used.  Many drivers also free driver-private
        data from port at this time.
        </para>
        <para>
 -      Many drivers use ata_port_stop() as this hook, which frees the
 -      PRD table.
 -      </para>
 -      <para>
        ->host_stop() is called after all ->port_stop() calls
  have completed.  The hook must finalize hardware shutdown, release DMA
  and other resources, etc.
@@@ -235,7 -235,8 +235,7 @@@ containing the following files describi
   - cgroup.procs: list of tgids in the cgroup.  This list is not
     guaranteed to be sorted or free of duplicate tgids, and userspace
     should sort/uniquify the list if this property is required.
 -   Writing a tgid into this file moves all threads with that tgid into
 -   this cgroup.
 +   This is a read-only file, for now.
   - 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)
@@@ -572,7 -573,7 +572,7 @@@ void cancel_attach(struct cgroup_subsy
  
  Called when a task attach operation has failed after can_attach() has succeeded.
  A subsystem whose can_attach() has some side-effects should provide this
- function, so that the subsytem can implement a rollback. If not, not necessary.
+ function, so that the subsystem can implement a rollback. If not, not necessary.
  This will be called only about subsystems whose can_attach() operation have
  succeeded.
  
@@@ -305,7 -305,7 +305,7 @@@ Table 1-4: Contents of the stat files (
    cgtime        guest time of the task children in jiffies
  ..............................................................................
  
- The /proc/PID/map file containing the currently mapped memory regions and
+ The /proc/PID/maps file containing the currently mapped memory regions and
  their access permissions.
  
  The format is:
@@@ -316,7 -316,7 +316,7 @@@ address           perms offset  dev   i
  08049000-0804a000 rw-p 00001000 03:00 8312       /opt/test
  0804a000-0806b000 rw-p 00000000 00:00 0          [heap]
  a7cb1000-a7cb2000 ---p 00000000 00:00 0
 -a7cb2000-a7eb2000 rw-p 00000000 00:00 0          [threadstack:001ff4b4]
 +a7cb2000-a7eb2000 rw-p 00000000 00:00 0
  a7eb2000-a7eb3000 ---p 00000000 00:00 0
  a7eb3000-a7ed5000 rw-p 00000000 00:00 0
  a7ed5000-a8008000 r-xp 00000000 03:00 4222       /lib/libc.so.6
@@@ -352,6 -352,7 +352,6 @@@ is not associated with a file
   [stack]                  = the stack of the main process
   [vdso]                   = the "virtual dynamic shared object",
                              the kernel system call handler
 - [threadstack:xxxxxxxx]   = the stack of the thread, xxxxxxxx is the stack size
  
   or if empty, the mapping is anonymous.
  
@@@ -565,10 -566,6 +565,10 @@@ The default_smp_affinity mask applies t
  IRQs which have not yet been allocated/activated, and hence which lack a
  /proc/irq/[0-9]* directory.
  
 +The node file on an SMP system shows the node to which the device using the IRQ
 +reports itself as being attached. This hardware locality information does not
 +include information about any possible driver locality preference.
 +
  prof_cpu_mask specifies which CPUs are to be profiled by the system wide
  profiler. Default value is ffffffff (all cpus).
  
@@@ -968,7 -965,7 +968,7 @@@ your system and how much traffic was ro
    ...] 1375103    17405    0    0    0     0       0          0 
    ...] 1703981     5535    0    0    0     3       0          0 
  
- In addition, each Channel Bond interface has it's own directory.  For
+ In addition, each Channel Bond interface has its own directory.  For
  example, the bond0 device will have a directory called /proc/net/bond0/.
  It will contain information that is specific to that bond, such as the
  current slaves of the bond, the link status of the slaves, and how
@@@ -1365,7 -1362,7 +1365,7 @@@ been accounted as having caused 1MB of 
  In other words: The number of bytes which this process caused to not happen,
  by truncating pagecache. A task can cause "negative" IO too. If this task
  truncates some dirty pagecache, some IO which another task has been accounted
- for (in it's write_bytes) will not be happening. We _could_ just subtract that
+ for (in its write_bytes) will not be happening. We _could_ just subtract that
  from the truncating task's write_bytes, but there is information loss in doing
  that.
  
@@@ -126,7 -126,7 +126,7 @@@ o  Tboot then applies an (optional) use
  o  Tboot adjusts the e820 table provided by the bootloader to reserve
     its own location in memory as well as to reserve certain other
     TXT-related regions.
- o  As part of it's launch, tboot DMA protects all of RAM (using the
+ o  As part of its launch, tboot DMA protects all of RAM (using the
     VT-d PMRs).  Thus, the kernel must be booted with 'intel_iommu=on'
     in order to remove this blanket protection and use VT-d's
     page-level protection.
@@@ -161,15 -161,13 +161,15 @@@ o  In order to put a system into any o
        has been restored, it will restore the TPM PCRs and then
        transfer control back to the kernel's S3 resume vector.
        In order to preserve system integrity across S3, the kernel
 -      provides tboot with a set of memory ranges (kernel
 -      code/data/bss, S3 resume code, and AP trampoline) that tboot
 -      will calculate a MAC (message authentication code) over and then
 -      seal with the TPM.  On resume and once the measured environment
 -      has been re-established, tboot will re-calculate the MAC and
 -      verify it against the sealed value.  Tboot's policy determines
 -      what happens if the verification fails.
 +      provides tboot with a set of memory ranges (RAM and RESERVED_KERN
 +      in the e820 table, but not any memory that BIOS might alter over
 +      the S3 transition) that tboot will calculate a MAC (message
 +      authentication code) over and then seal with the TPM. On resume
 +      and once the measured environment has been re-established, tboot
 +      will re-calculate the MAC and verify it against the sealed value.
 +      Tboot's policy determines what happens if the verification fails.
 +      Note that the c/s 194 of tboot which has the new MAC code supports
 +      this.
  
  That's pretty much it for TXT support.
  
@@@ -165,8 -165,8 +165,8 @@@ the user entry_handler invocation is al
  
  1.4 How Does Jump Optimization Work?
  
 -If you configured your kernel with CONFIG_OPTPROBES=y (currently
 -this option is supported on x86/x86-64, non-preemptive kernel) and
 +If your kernel is built with CONFIG_OPTPROBES=y (currently this flag
 +is automatically set 'y' on x86/x86-64, non-preemptive kernel) and
  the "debug.kprobes_optimization" kernel parameter is set to 1 (see
  sysctl(8)), Kprobes tries to reduce probe-hit overhead by using a jump
  instruction instead of a breakpoint instruction at each probepoint.
@@@ -271,6 -271,8 +271,6 @@@ tweak the kernel's execution path, you 
  using one of the following techniques:
  - Specify an empty function for the kprobe's post_handler or break_handler.
   or
 -- Config CONFIG_OPTPROBES=n.
 - or
  - Execute 'sysctl -w debug.kprobes_optimization=n'
  
  2. Architectures Supported
@@@ -305,6 -307,10 +305,6 @@@ it useful to "Compile the kernel with d
  so you can use "objdump -d -l vmlinux" to see the source-to-object
  code mapping.
  
 -If you want to reduce probing overhead, set "Kprobes jump optimization
 -support" (CONFIG_OPTPROBES) to "y". You can find this option under the
 -"Kprobes" line.
 -
  4. API Reference
  
  The Kprobes API includes a "register" function and an "unregister"
@@@ -326,7 -332,7 +326,7 @@@ occurs during execution of kp->pre_hand
  or during single-stepping of the probed instruction, Kprobes calls
  kp->fault_handler.  Any or all handlers can be NULL. If kp->flags
  is set KPROBE_FLAG_DISABLED, that kp will be registered but disabled,
- so, it's handlers aren't hit until calling enable_kprobe(kp).
+ so, its handlers aren't hit until calling enable_kprobe(kp).
  
  NOTE:
  1. With the introduction of the "symbol_name" field to struct kprobe,
@@@ -90,8 -90,7 +90,8 @@@ In order to facilitate early boot debug
  
        trace_event=[event-list]
  
 -The format of this boot option is the same as described in section 2.1.
 +event-list is a comma separated list of events. See section 2.1 for event
 +format.
  
  3. Defining an event-enabled tracepoint
  =======================================
@@@ -239,7 -238,7 +239,7 @@@ subsystem's filter file
  
  For convenience, filters for every event in a subsystem can be set or
  cleared as a group by writing a filter expression into the filter file
- at the root of the subsytem.  Note however, that if a filter for any
+ at the root of the subsystem.  Note however, that if a filter for any
  event within the subsystem lacks a field specified in the subsystem
  filter, or if the filter can't be applied for any other reason, the
  filter for that event will retain its previous setting.  This can
@@@ -251,7 -250,7 +251,7 @@@ fields can be guaranteed to propagate s
  Here are a few subsystem filter examples that also illustrate the
  above points:
  
- Clear the filters on all events in the sched subsytem:
+ Clear the filters on all events in the sched subsystem:
  
  # cd /sys/kernel/debug/tracing/events/sched
  # echo 0 > filter
@@@ -261,7 -260,7 +261,7 @@@ non
  none
  
  Set a filter using only common fields for all events in the sched
- subsytem (all events end up with the same filter):
+ subsystem (all events end up with the same filter):
  
  # cd /sys/kernel/debug/tracing/events/sched
  # echo common_pid == 0 > filter
@@@ -271,7 -270,7 +271,7 @@@ common_pid == 
  common_pid == 0
  
  Attempt to set a filter using a non-common field for all events in the
- sched subsytem (all events but those that have a prev_pid field retain
+ sched subsystem (all events but those that have a prev_pid field retain
  their old filters):
  
  # cd /sys/kernel/debug/tracing/events/sched
diff --combined MAINTAINERS
@@@ -586,12 -586,6 +586,12 @@@ F:       drivers/mtd/nand/bcm_umi_bch.
  F:    drivers/mtd/nand/bcm_umi_hamming.c
  F:    drivers/mtd/nand/nand_bcm_umi.h
  
 +ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT
 +M:    Anton Vorontsov <avorontsov@mvista.com>
 +S:    Maintained
 +F:    arch/arm/mach-cns3xxx/
 +T:    git git://git.infradead.org/users/cbou/linux-cns3xxx.git
 +
  ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
  M:    Hartley Sweeten <hsweeten@visionengravers.com>
  M:    Ryan Mallon <ryan@bluewatersys.com>
@@@ -781,10 -775,11 +781,10 @@@ M:      Philipp Zabel <philipp.zabel@gmail.c
  S:    Maintained
  
  ARM/Marvell Loki/Kirkwood/MV78xx0/Orion SOC support
 -M:    Lennert Buytenhek <buytenh@marvell.com>
 -M:    Nicolas Pitre <nico@marvell.com>
 +M:    Lennert Buytenhek <kernel@wantstofly.org>
 +M:    Nicolas Pitre <nico@fluxnic.net>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -T:    git git://git.marvell.com/orion
 -S:    Maintained
 +S:    Odd Fixes
  F:    arch/arm/mach-loki/
  F:    arch/arm/mach-kirkwood/
  F:    arch/arm/mach-mv78xx0/
@@@ -819,7 -814,6 +819,7 @@@ ARM/QUALCOMM MSM MACHINE SUPPOR
  M:    David Brown <davidb@codeaurora.org>
  M:    Daniel Walker <dwalker@codeaurora.org>
  M:    Bryan Huntsman <bryanh@codeaurora.org>
 +L:    linux-arm-msm@vger.kernel.org
  F:    arch/arm/mach-msm/
  F:    drivers/video/msm/
  F:    drivers/mmc/host/msm_sdcc.c
@@@ -1000,20 -994,6 +1000,20 @@@ W:     http://www.arm.linux.org.uk
  S:    Maintained
  F:    arch/arm/vfp/
  
 +ARM/VOIPAC PXA270 SUPPORT
 +M:    Marek Vasut <marek.vasut@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-pxa/vpac270.c
 +F:    arch/arm/mach-pxa/include/mach-pxa/vpac270.h
 +
 +ARM/ZIPIT Z2 SUPPORT
 +M:    Marek Vasut <marek.vasut@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-pxa/z2.c
 +F:    arch/arm/mach-pxa/include/mach-pxa/z2.h
 +
  ASC7621 HARDWARE MONITOR DRIVER
  M:    George Joseph <george.joseph@fairview5.com>
  L:    lm-sensors@lm-sensors.org
@@@ -1749,20 -1729,6 +1749,20 @@@ W:    http://www.openfabrics.or
  S:    Supported
  F:    drivers/infiniband/hw/cxgb3/
  
 +CXGB4 ETHERNET DRIVER (CXGB4)
 +M:    Dimitris Michailidis <dm@chelsio.com>
 +L:    netdev@vger.kernel.org
 +W:    http://www.chelsio.com
 +S:    Supported
 +F:    drivers/net/cxgb4/
 +
 +CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
 +M:    Steve Wise <swise@chelsio.com>
 +L:    linux-rdma@vger.kernel.org
 +W:    http://www.openfabrics.org
 +S:    Supported
 +F:    drivers/infiniband/hw/cxgb4/
 +
  CYBERPRO FB DRIVER
  M:    Russell King <linux@arm.linux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1994,7 -1960,7 +1994,7 @@@ F:      lib/kobj
  
  DRM DRIVERS
  M:    David Airlie <airlied@linux.ie>
 -L:    dri-devel@lists.sourceforge.net
 +L:    dri-devel@lists.freedesktop.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
  S:    Maintained
  F:    drivers/gpu/drm/
@@@ -2701,16 -2667,12 +2701,12 @@@ F:   Documentation/timers/hpet.tx
  F:    drivers/char/hpet.c
  F:    include/linux/hpet.h
  
- HPET: i386
- M:    "Venkatesh Pallipadi (Venki)" <venkatesh.pallipadi@intel.com>
+ HPET: x86
+ M:    "Venkatesh Pallipadi (Venki)" <venki@google.com>
  S:    Maintained
  F:    arch/x86/kernel/hpet.c
  F:    arch/x86/include/asm/hpet.h
  
- HPET: x86_64
- M:    Vojtech Pavlik <vojtech@suse.cz>
- S:    Maintained
  HPET: ACPI
  M:    Bob Picco <bob.picco@hp.com>
  S:    Maintained
@@@ -2987,17 -2949,6 +2983,17 @@@ S:    Odd Fixe
  F:    Documentation/networking/README.ipw2200
  F:    drivers/net/wireless/ipw2x00/ipw2200.*
  
 +INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
 +M:    Joseph Cihula <joseph.cihula@intel.com>
 +M:    Shane Wang <shane.wang@intel.com>
 +L:    tboot-devel@lists.sourceforge.net
 +W:    http://tboot.sourceforge.net
 +T:    Mercurial http://www.bughost.org/repos.hg/tboot.hg
 +S:    Supported
 +F:    Documentation/intel_txt.txt
 +F:    include/linux/tboot.h
 +F:    arch/x86/kernel/tboot.c
 +
  INTEL WIRELESS WIMAX CONNECTION 2400
  M:    Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
  M:    linux-wimax@intel.com
@@@ -3669,8 -3620,7 +3665,8 @@@ F:      drivers/net/wireless/mwl8k.
  
  MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
  M:    Nicolas Pitre <nico@fluxnic.net>
 -S:    Maintained
 +S:    Odd Fixes
 +F: drivers/mmc/host/mvsdio.*
  
  MARVELL YUKON / SYSKONNECT DRIVER
  M:    Mirko Lindner <mlindner@syskonnect.de>
@@@ -4211,7 -4161,6 +4207,7 @@@ OPROFIL
  M:    Robert Richter <robert.richter@amd.com>
  L:    oprofile-list@lists.sf.net
  S:    Maintained
 +F:    arch/*/include/asm/oprofile*.h
  F:    arch/*/oprofile/
  F:    drivers/oprofile/
  F:    include/linux/oprofile.h
@@@ -4400,13 -4349,13 +4396,13 @@@ M:   Paul Mackerras <paulus@samba.org
  M:    Ingo Molnar <mingo@elte.hu>
  M:    Arnaldo Carvalho de Melo <acme@redhat.com>
  S:    Supported
 -F:    kernel/perf_event.c
 +F:    kernel/perf_event*.c
  F:    include/linux/perf_event.h
 -F:    arch/*/kernel/perf_event.c
 -F:    arch/*/kernel/*/perf_event.c
 -F:    arch/*/kernel/*/*/perf_event.c
 +F:    arch/*/kernel/perf_event*.c
 +F:    arch/*/kernel/*/perf_event*.c
 +F:    arch/*/kernel/*/*/perf_event*.c
  F:    arch/*/include/asm/perf_event.h
 -F:    arch/*/lib/perf_event.c
 +F:    arch/*/lib/perf_event*.c
  F:    arch/*/kernel/perf_callchain.c
  F:    tools/perf/
  
@@@ -4529,17 -4478,17 +4525,17 @@@ S:   Maintaine
  F:    drivers/ata/sata_promise.*
  
  PS3 NETWORK SUPPORT
 -M:    Geoff Levand <geoffrey.levand@am.sony.com>
 +M:    Geoff Levand <geoff@infradead.org>
  L:    netdev@vger.kernel.org
  L:    cbe-oss-dev@ozlabs.org
 -S:    Supported
 +S:    Maintained
  F:    drivers/net/ps3_gelic_net.*
  
  PS3 PLATFORM SUPPORT
 -M:    Geoff Levand <geoffrey.levand@am.sony.com>
 +M:    Geoff Levand <geoff@infradead.org>
  L:    linuxppc-dev@ozlabs.org
  L:    cbe-oss-dev@ozlabs.org
 -S:    Supported
 +S:    Maintained
  F:    arch/powerpc/boot/ps3*
  F:    arch/powerpc/include/asm/lv1call.h
  F:    arch/powerpc/include/asm/ps3*.h
@@@ -5168,7 -5117,7 +5164,7 @@@ F:      mm/sl?b.
  
  SMC91x ETHERNET DRIVER
  M:    Nicolas Pitre <nico@fluxnic.net>
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/net/smc91x.*
  
  SMSC47B397 HARDWARE MONITOR DRIVER
@@@ -5299,46 -5248,6 +5295,46 @@@ F:    drivers/serial/sunsu.
  F:    drivers/serial/sunzilog.c
  F:    drivers/serial/sunzilog.h
  
 +SPEAR PLATFORM SUPPORT
 +M:    Viresh Kumar <viresh.kumar@st.com>
 +W:    http://www.st.com/spear
 +S:    Maintained
 +F:    arch/arm/plat-spear/
 +
 +SPEAR3XX MACHINE SUPPORT
 +M:    Viresh Kumar <viresh.kumar@st.com>
 +W:    http://www.st.com/spear
 +S:    Maintained
 +F:    arch/arm/mach-spear3xx/
 +
 +SPEAR6XX MACHINE SUPPORT
 +M:    Rajeev Kumar <rajeev-dlh.kumar@st.com>
 +W:    http://www.st.com/spear
 +S:    Maintained
 +F:    arch/arm/mach-spear6xx/
 +
 +SPEAR CLOCK FRAMEWORK SUPPORT
 +M:    Viresh Kumar <viresh.kumar@st.com>
 +W:    http://www.st.com/spear
 +S:    Maintained
 +F:    arch/arm/mach-spear*/clock.c
 +F:    arch/arm/mach-spear*/include/mach/clkdev.h
 +F:    arch/arm/plat-spear/clock.c
 +F:    arch/arm/plat-spear/include/plat/clock.h and clkdev.h
 +
 +SPEAR PAD MULTIPLEXING SUPPORT
 +M:    Viresh Kumar <viresh.kumar@st.com>
 +W:    http://www.st.com/spear
 +S:    Maintained
 +F:    arch/arm/plat-spear/include/plat/padmux.h
 +F:    arch/arm/plat-spear/padmux.c
 +F:    arch/arm/mach-spear*/spear*xx.c
 +F:    arch/arm/mach-spear*/include/mach/generic.h
 +F:    arch/arm/mach-spear3xx/spear3*0.c
 +F:    arch/arm/mach-spear3xx/spear3*0_evb.c
 +F:    arch/arm/mach-spear6xx/spear600.c
 +F:    arch/arm/mach-spear6xx/spear600_evb.c
 +
  SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER
  M:    Roger Wolff <R.E.Wolff@BitWizard.nl>
  S:    Supported
@@@ -5579,7 -5488,7 +5575,7 @@@ S:      Maintaine
  F:    drivers/mmc/host/tmio_mmc.*
  
  TMPFS (SHMEM FILESYSTEM)
 -M:    Hugh Dickins <hugh.dickins@tiscali.co.uk>
 +M:    Hugh Dickins <hughd@google.com>
  L:    linux-mm@kvack.org
  S:    Maintained
  F:    include/linux/shmem_fs.h
@@@ -21,7 -21,6 +21,7 @@@
  */
  
  #include <linux/init.h>
 +
  #include <linux/module.h>
  #include <linux/kernel.h>
  #include <linux/list.h>
   * set the correct muxing at initialisation
  */
  
 -static int s3c2443_gate(void __iomem *reg, struct clk *clk, int enable)
 -{
 -      u32 ctrlbit = clk->ctrlbit;
 -      u32 con = __raw_readl(reg);
 -
 -      if (enable)
 -              con |= ctrlbit;
 -      else
 -              con &= ~ctrlbit;
 -
 -      __raw_writel(con, reg);
 -      return 0;
 -}
 -
 -static int s3c2443_clkcon_enable_h(struct clk *clk, int enable)
 -{
 -      return s3c2443_gate(S3C2443_HCLKCON, clk, enable);
 -}
 -
 -static int s3c2443_clkcon_enable_p(struct clk *clk, int enable)
 -{
 -      return s3c2443_gate(S3C2443_PCLKCON, clk, enable);
 -}
 -
 -static int s3c2443_clkcon_enable_s(struct clk *clk, int enable)
 -{
 -      return s3c2443_gate(S3C2443_SCLKCON, clk, enable);
 -}
 -
  /* clock selections */
  
 -/* mpllref is a direct descendant of clk_xtal by default, but it is not
 - * elided as the EPLL can be either sourced by the XTAL or EXTCLK and as
 - * such directly equating the two source clocks is impossible.
 - */
 -static struct clk clk_mpllref = {
 -      .name           = "mpllref",
 -      .parent         = &clk_xtal,
 -      .id             = -1,
 -};
 -
  static struct clk clk_i2s_ext = {
        .name           = "i2s-ext",
        .id             = -1,
  };
  
 -static struct clk *clk_epllref_sources[] = {
 -      [0] = &clk_mpllref,
 -      [1] = &clk_mpllref,
 -      [2] = &clk_xtal,
 -      [3] = &clk_ext,
 -};
 -
 -static struct clksrc_clk clk_epllref = {
 -      .clk    = {
 -              .name           = "epllref",
 -              .id             = -1,
 -      },
 -      .sources = &(struct clksrc_sources) {
 -              .sources = clk_epllref_sources,
 -              .nr_sources = ARRAY_SIZE(clk_epllref_sources),
 -      },
 -      .reg_src = { .reg = S3C2443_CLKSRC, .size = 2, .shift = 7 },
 -};
 -
 -static unsigned long s3c2443_getrate_mdivclk(struct clk *clk)
 -{
 -      unsigned long parent_rate = clk_get_rate(clk->parent);
 -      unsigned long div = __raw_readl(S3C2443_CLKDIV0);
 -
 -      div  &= S3C2443_CLKDIV0_EXTDIV_MASK;
 -      div >>= (S3C2443_CLKDIV0_EXTDIV_SHIFT-1);       /* x2 */
 -
 -      return parent_rate / (div + 1);
 -}
 -
 -static struct clk clk_mdivclk = {
 -      .name           = "mdivclk",
 -      .parent         = &clk_mpllref,
 -      .id             = -1,
 -      .ops            = &(struct clk_ops) {
 -              .get_rate       = s3c2443_getrate_mdivclk,
 -      },
 -};
 -
 -static struct clk *clk_msysclk_sources[] = {
 -      [0] = &clk_mpllref,
 -      [1] = &clk_mpll,
 -      [2] = &clk_mdivclk,
 -      [3] = &clk_mpllref,
 -};
 -
 -static struct clksrc_clk clk_msysclk = {
 -      .clk    = {
 -              .name           = "msysclk",
 -              .parent         = &clk_xtal,
 -              .id             = -1,
 -      },
 -      .sources = &(struct clksrc_sources) {
 -              .sources = clk_msysclk_sources,
 -              .nr_sources = ARRAY_SIZE(clk_msysclk_sources),
 -      },
 -      .reg_src = { .reg = S3C2443_CLKSRC, .size = 2, .shift = 3 },
 -};
 -
  /* armdiv
   *
   * this clock is sourced from msysclk and can have a number of
@@@ -169,6 -266,44 +169,6 @@@ static struct clksrc_clk clk_arm = 
        .reg_src = { .reg = S3C2443_CLKDIV0, .size = 1, .shift = 13 },
  };
  
 -/* esysclk
 - *
 - * this is sourced from either the EPLL or the EPLLref clock
 -*/
 -
 -static struct clk *clk_sysclk_sources[] = {
 -      [0] = &clk_epllref.clk,
 -      [1] = &clk_epll,
 -};
 -
 -static struct clksrc_clk clk_esysclk = {
 -      .clk    = {
 -              .name           = "esysclk",
 -              .parent         = &clk_epll,
 -              .id             = -1,
 -      },
 -      .sources = &(struct clksrc_sources) {
 -              .sources = clk_sysclk_sources,
 -              .nr_sources = ARRAY_SIZE(clk_sysclk_sources),
 -      },
 -      .reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 6 },
 -};
 -
 -/* uartclk
 - *
 - * UART baud-rate clock sourced from esysclk via a divisor
 -*/
 -
 -static struct clksrc_clk clk_uart = {
 -      .clk    = {
 -              .name           = "uartclk",
 -              .id             = -1,
 -              .parent         = &clk_esysclk.clk,
 -      },
 -      .reg_div = { .reg = S3C2443_CLKDIV1, .size = 4, .shift = 8 },
 -};
 -
 -
  /* hsspi
   *
   * high-speed spi clock, sourced from esysclk
@@@ -185,6 -320,21 +185,6 @@@ static struct clksrc_clk clk_hsspi = 
        .reg_div = { .reg = S3C2443_CLKDIV1, .size = 2, .shift = 4 },
  };
  
 -/* usbhost
 - *
 - * usb host bus-clock, usually 48MHz to provide USB bus clock timing
 -*/
 -
 -static struct clksrc_clk clk_usb_bus_host = {
 -      .clk    = {
 -              .name           = "usb-bus-host-parent",
 -              .id             = -1,
 -              .parent         = &clk_esysclk.clk,
 -              .ctrlbit        = S3C2443_SCLKCON_USBHOST,
 -              .enable         = s3c2443_clkcon_enable_s,
 -      },
 -      .reg_div = { .reg = S3C2443_CLKDIV1, .size = 2, .shift = 4 },
 -};
  
  /* clk_hsmcc_div
   *
@@@ -241,7 -391,7 +241,7 @@@ static struct clk clk_hsmmc = 
  
  /* i2s_eplldiv
   *
-  * This clock is the output from the I2S divisor of ESYSCLK, and is seperate
+  * This clock is the output from the I2S divisor of ESYSCLK, and is separate
   * from the mux that comes after it (cannot merge into one single clock)
  */
  
@@@ -283,15 -433,88 +283,15 @@@ static struct clksrc_clk clk_i2s = 
        .reg_src = { .reg = S3C2443_CLKSRC, .size = 2, .shift = 14 },
  };
  
 -/* cam-if
 - *
 - * camera interface bus-clock, divided down from esysclk
 -*/
 -
 -static struct clksrc_clk clk_cam = {
 -      .clk    = {
 -              .name           = "camif-upll", /* same as 2440 name */
 -              .id             = -1,
 -              .parent         = &clk_esysclk.clk,
 -              .ctrlbit        = S3C2443_SCLKCON_CAMCLK,
 -              .enable         = s3c2443_clkcon_enable_s,
 -      },
 -      .reg_div = { .reg = S3C2443_CLKDIV1, .size = 4, .shift = 26 },
 -};
 -
 -/* display-if
 - *
 - * display interface clock, divided from esysclk
 -*/
 -
 -static struct clksrc_clk clk_display = {
 -      .clk    = {
 -              .name           = "display-if",
 -              .id             = -1,
 -              .parent         = &clk_esysclk.clk,
 -              .ctrlbit        = S3C2443_SCLKCON_DISPCLK,
 -              .enable         = s3c2443_clkcon_enable_s,
 -      },
 -      .reg_div = { .reg = S3C2443_CLKDIV1, .size = 8, .shift = 16 },
 -};
 -
 -/* prediv
 - *
 - * this divides the msysclk down to pass to h/p/etc.
 - */
 -
 -static unsigned long s3c2443_prediv_getrate(struct clk *clk)
 -{
 -      unsigned long rate = clk_get_rate(clk->parent);
 -      unsigned long clkdiv0 = __raw_readl(S3C2443_CLKDIV0);
 -
 -      clkdiv0 &= S3C2443_CLKDIV0_PREDIV_MASK;
 -      clkdiv0 >>= S3C2443_CLKDIV0_PREDIV_SHIFT;
 -
 -      return rate / (clkdiv0 + 1);
 -}
 -
 -static struct clk clk_prediv = {
 -      .name           = "prediv",
 -      .id             = -1,
 -      .parent         = &clk_msysclk.clk,
 -      .ops            = &(struct clk_ops) {
 -              .get_rate       = s3c2443_prediv_getrate,
 -      },
 -};
 -
  /* standard clock definitions */
  
 -static struct clk init_clocks_disable[] = {
 +static struct clk init_clocks_off[] = {
        {
 -              .name           = "nand",
 -              .id             = -1,
 -              .parent         = &clk_h,
 -      }, {
                .name           = "sdi",
                .id             = -1,
                .parent         = &clk_p,
                .enable         = s3c2443_clkcon_enable_p,
                .ctrlbit        = S3C2443_PCLKCON_SDI,
 -      }, {
 -              .name           = "adc",
 -              .id             = -1,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_ADC,
 -      }, {
 -              .name           = "i2c",
 -              .id             = -1,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_IIC,
        }, {
                .name           = "iis",
                .id             = -1,
  };
  
  static struct clk init_clocks[] = {
 -      {
 -              .name           = "dma",
 -              .id             = 0,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_DMA0,
 -      }, {
 -              .name           = "dma",
 -              .id             = 1,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_DMA1,
 -      }, {
 -              .name           = "dma",
 -              .id             = 2,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_DMA2,
 -      }, {
 -              .name           = "dma",
 -              .id             = 3,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_DMA3,
 -      }, {
 -              .name           = "dma",
 -              .id             = 4,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_DMA4,
 -      }, {
 -              .name           = "dma",
 -              .id             = 5,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_DMA5,
 -      }, {
 -              .name           = "lcd",
 -              .id             = -1,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_LCDC,
 -      }, {
 -              .name           = "gpio",
 -              .id             = -1,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_GPIO,
 -      }, {
 -              .name           = "usb-host",
 -              .id             = -1,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_USBH,
 -      }, {
 -              .name           = "usb-device",
 -              .id             = -1,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_USBD,
 -      }, {
 -              .name           = "hsmmc",
 -              .id             = -1,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_HSMMC,
 -      }, {
 -              .name           = "cfc",
 -              .id             = -1,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_CFC,
 -      }, {
 -              .name           = "ssmc",
 -              .id             = -1,
 -              .parent         = &clk_h,
 -              .enable         = s3c2443_clkcon_enable_h,
 -              .ctrlbit        = S3C2443_HCLKCON_SSMC,
 -      }, {
 -              .name           = "timers",
 -              .id             = -1,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_PWMT,
 -      }, {
 -              .name           = "uart",
 -              .id             = 0,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_UART0,
 -      }, {
 -              .name           = "uart",
 -              .id             = 1,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_UART1,
 -      }, {
 -              .name           = "uart",
 -              .id             = 2,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_UART2,
 -      }, {
 -              .name           = "uart",
 -              .id             = 3,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_UART3,
 -      }, {
 -              .name           = "rtc",
 -              .id             = -1,
 -              .parent         = &clk_p,
 -              .enable         = s3c2443_clkcon_enable_p,
 -              .ctrlbit        = S3C2443_PCLKCON_RTC,
 -      }, {
 -              .name           = "watchdog",
 -              .id             = -1,
 -              .parent         = &clk_p,
 -              .ctrlbit        = S3C2443_PCLKCON_WDT,
 -      }, {
 -              .name           = "usb-bus-host",
 -              .id             = -1,
 -              .parent         = &clk_usb_bus_host.clk,
 -      }, {
 -              .name           = "ac97",
 -              .id             = -1,
 -              .parent         = &clk_p,
 -              .ctrlbit        = S3C2443_PCLKCON_AC97,
 -      }
 -};
 -
 -/* clocks to add where we need to check their parentage */
 -
 -static struct clksrc_clk __initdata *init_list[] = {
 -      &clk_epllref, /* should be first */
 -      &clk_esysclk,
 -      &clk_msysclk,
 -      &clk_arm,
 -      &clk_i2s_eplldiv,
 -      &clk_i2s,
 -      &clk_cam,
 -      &clk_uart,
 -      &clk_display,
 -      &clk_hsmmc_div,
 -      &clk_usb_bus_host,
  };
  
 -static void __init s3c2443_clk_initparents(void)
 -{
 -      int ptr;
 -
 -      for (ptr = 0; ptr < ARRAY_SIZE(init_list); ptr++)
 -              s3c_set_clksrc(init_list[ptr], true);
 -}
 -
 -static inline unsigned long s3c2443_get_hdiv(unsigned long clkcon0)
 -{
 -      clkcon0 &= S3C2443_CLKDIV0_HCLKDIV_MASK;
 -
 -      return clkcon0 + 1;
 -}
 -
  /* clocks to add straight away */
  
  static struct clksrc_clk *clksrcs[] __initdata = {
 -      &clk_usb_bus_host,
 -      &clk_epllref,
 -      &clk_esysclk,
 -      &clk_msysclk,
        &clk_arm,
 -      &clk_uart,
 -      &clk_display,
 -      &clk_cam,
        &clk_i2s_eplldiv,
        &clk_i2s,
        &clk_hsspi,
  };
  
  static struct clk *clks[] __initdata = {
 -      &clk_ext,
 -      &clk_epll,
 -      &clk_usb_bus,
 -      &clk_mpllref,
        &clk_hsmmc,
        &clk_armdiv,
 -      &clk_prediv,
  };
  
  void __init_or_cpufreq s3c2443_setup_clocks(void)
  {
 -      unsigned long mpllcon = __raw_readl(S3C2443_MPLLCON);
 -      unsigned long clkdiv0 = __raw_readl(S3C2443_CLKDIV0);
 -      struct clk *xtal_clk;
 -      unsigned long xtal;
 -      unsigned long pll;
 -      unsigned long fclk;
 -      unsigned long hclk;
 -      unsigned long pclk;
 -
 -      xtal_clk = clk_get(NULL, "xtal");
 -      xtal = clk_get_rate(xtal_clk);
 -      clk_put(xtal_clk);
 -
 -      pll = s3c2443_get_mpll(mpllcon, xtal);
 -      clk_msysclk.clk.rate = pll;
 -
 -      fclk = pll / s3c2443_fclk_div(clkdiv0);
 -      hclk = s3c2443_prediv_getrate(&clk_prediv);
 -      hclk /= s3c2443_get_hdiv(clkdiv0);
 -      pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1);
 -
 -      s3c24xx_setup_clocks(fclk, hclk, pclk);
 -
 -      printk("S3C2443: mpll %s %ld.%03ld MHz, cpu %ld.%03ld MHz, mem %ld.%03ld MHz, pclk %ld.%03ld MHz\n",
 -             (mpllcon & S3C2443_PLLCON_OFF) ? "off":"on",
 -             print_mhz(pll), print_mhz(fclk),
 -             print_mhz(hclk), print_mhz(pclk));
 -
 -      s3c24xx_setup_clocks(fclk, hclk, pclk);
 +      s3c2443_common_setup_clocks(s3c2443_get_mpll, s3c2443_fclk_div);
  }
  
  void __init s3c2443_init_clocks(int xtal)
  {
 -      struct clk *clkp;
        unsigned long epllcon = __raw_readl(S3C2443_EPLLCON);
 -      int ret;
        int ptr;
  
 -      /* s3c2443 parents h and p clocks from prediv */
 -      clk_h.parent = &clk_prediv;
 -      clk_p.parent = &clk_prediv;
 +      clk_epll.rate = s3c2443_get_epll(epllcon, xtal);
 +      clk_epll.parent = &clk_epllref.clk;
 +
 +      s3c2443_common_init_clocks(xtal, s3c2443_get_mpll, s3c2443_fclk_div);
  
 -      s3c24xx_register_baseclocks(xtal);
        s3c2443_setup_clocks();
 -      s3c2443_clk_initparents();
 -
 -      for (ptr = 0; ptr < ARRAY_SIZE(clks); ptr++) {
 -              clkp = clks[ptr];
  
 -              ret = s3c24xx_register_clock(clkp);
 -              if (ret < 0) {
 -                      printk(KERN_ERR "Failed to register clock %s (%d)\n",
 -                             clkp->name, ret);
 -              }
 -      }
 +      s3c24xx_register_clocks(clks, ARRAY_SIZE(clks));
  
        for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++)
                s3c_register_clksrc(clksrcs[ptr], 1);
  
 -      clk_epll.rate = s3c2443_get_epll(epllcon, xtal);
 -      clk_epll.parent = &clk_epllref.clk;
 -      clk_usb_bus.parent = &clk_usb_bus_host.clk;
 -
 -      /* ensure usb bus clock is within correct rate of 48MHz */
 -
 -      if (clk_get_rate(&clk_usb_bus_host.clk) != (48 * 1000 * 1000)) {
 -              printk(KERN_INFO "Warning: USB host bus not at 48MHz\n");
 -              clk_set_rate(&clk_usb_bus_host.clk, 48*1000*1000);
 -      }
 -
 -      printk("S3C2443: epll %s %ld.%03ld MHz, usb-bus %ld.%03ld MHz\n",
 -             (epllcon & S3C2443_PLLCON_OFF) ? "off":"on",
 -             print_mhz(clk_get_rate(&clk_epll)),
 -             print_mhz(clk_get_rate(&clk_usb_bus)));
 -
        /* register clocks from clock array */
  
        s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks));
  
        /* install (and disable) the clocks we do not need immediately */
  
 -      clkp = init_clocks_disable;
 -      for (ptr = 0; ptr < ARRAY_SIZE(init_clocks_disable); ptr++, clkp++) {
 -
 -              ret = s3c24xx_register_clock(clkp);
 -              if (ret < 0) {
 -                      printk(KERN_ERR "Failed to register clock %s (%d)\n",
 -                             clkp->name, ret);
 -              }
 -
 -              (clkp->enable)(clkp, 0);
 -      }
 +      s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
 +      s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
  
        s3c_pwmclk_init();
  }
@@@ -44,26 -44,16 +44,26 @@@ struct s3c_gpio_cfg
   * @chip: The chip structure to be exported via gpiolib.
   * @base: The base pointer to the gpio configuration registers.
   * @config: special function and pull-resistor control information.
 + * @lock: Lock for exclusive access to this gpio bank.
   * @pm_save: Save information for suspend/resume support.
   *
   * This wrapper provides the necessary information for the Samsung
   * specific gpios being registered with gpiolib.
 + *
 + * The lock protects each gpio bank from multiple access of the shared
 + * configuration registers, or from reading of data whilst another thread
 + * is writing to the register set.
 + *
 + * Each chip has its own lock to avoid any  contention between different
 + * CPU cores trying to get one lock for different GPIO banks, where each
 + * bank of GPIO has its own register space and configuration registers.
   */
  struct s3c_gpio_chip {
        struct gpio_chip        chip;
        struct s3c_gpio_cfg     *config;
        struct s3c_gpio_pm      *pm;
        void __iomem            *base;
 +      spinlock_t               lock;
  #ifdef CONFIG_PM
        u32                     pm_save[4];
  #endif
@@@ -107,7 -97,7 +107,7 @@@ extern void s3c_gpiolib_add(struct s3c_
   * others = Special functions (dependant on bank)
   *
   * Note, since the code to deal with the case where there are two control
-  * registers instead of one, we do not have a seperate set of function
+  * registers instead of one, we do not have a separate set of function
   * (samsung_gpiolib_add_4bit2_chips)for each case.
   */
  extern void samsung_gpiolib_add_4bit_chips(struct s3c_gpio_chip *chip,
@@@ -118,9 -108,6 +118,9 @@@ extern void samsung_gpiolib_add_4bit2_c
  extern void samsung_gpiolib_add_4bit(struct s3c_gpio_chip *chip);
  extern void samsung_gpiolib_add_4bit2(struct s3c_gpio_chip *chip);
  
 +/* exported for core SoC support to change */
 +extern struct s3c_gpio_cfg s3c24xx_gpiocfg_default;
 +
  #ifdef CONFIG_S3C_GPIO_TRACK
  extern struct s3c_gpio_chip *s3c_gpios[S3C_GPIO_END];
  
@@@ -148,7 -135,3 +148,7 @@@ extern struct s3c_gpio_pm s3c_gpio_pm_4
  #define __gpio_pm(x) NULL
  
  #endif /* CONFIG_PM */
 +
 +/* locking wrappers to deal with multiple access to the same gpio bank */
 +#define s3c_gpio_lock(_oc, _fl) spin_lock_irqsave(&(_oc)->lock, _fl)
 +#define s3c_gpio_unlock(_oc, _fl) spin_unlock_irqrestore(&(_oc)->lock, _fl)
@@@ -50,7 -50,6 +50,7 @@@ struct thread_info 
        struct restart_block    restart_block;
        __u64                   user_timer;
        __u64                   system_timer;
 +      unsigned long           last_break;     /* last breaking-event-address. */
  };
  
  /*
@@@ -97,7 -96,7 +97,7 @@@ static inline struct thread_info *curre
  #define TIF_POLLING_NRFLAG    16      /* true if poll_idle() is polling
                                           TIF_NEED_RESCHED */
  #define TIF_31BIT             17      /* 32bit process */
- #define TIF_MEMDIE            18
+ #define TIF_MEMDIE            18      /* is terminating due to OOM killer */
  #define TIF_RESTORE_SIGMASK   19      /* restore signal mask in do_signal() */
  #define TIF_FREEZE            20      /* thread is freezing for suspend */
  
diff --combined arch/um/drivers/line.c
@@@ -6,7 -6,6 +6,7 @@@
  #include "linux/irqreturn.h"
  #include "linux/kd.h"
  #include "linux/sched.h"
 +#include "linux/slab.h"
  #include "chan_kern.h"
  #include "irq_kern.h"
  #include "irq_user.h"
@@@ -19,7 -18,6 +19,6 @@@ static irqreturn_t line_interrupt(int i
  {
        struct chan *chan = data;
        struct line *line = chan->line;
-       struct tty_struct *tty;
  
        if (line)
                chan_interrupt(&line->chan_list, &line->task, line->tty, irq);
@@@ -105,7 -105,7 +105,7 @@@ do {                                                       
  
  /*
   * Generate a percpu add to memory instruction and optimize code
-  * if one is added or subtracted.
+  * if one is added or subtracted.
   */
  #define percpu_add_op(var, val)                                               \
  do {                                                                  \
        pfo_ret__;                                      \
  })
  
 +#define percpu_unary_op(op, var)                      \
 +({                                                    \
 +      switch (sizeof(var)) {                          \
 +      case 1:                                         \
 +              asm(op "b "__percpu_arg(0)              \
 +                  : "+m" (var));                      \
 +              break;                                  \
 +      case 2:                                         \
 +              asm(op "w "__percpu_arg(0)              \
 +                  : "+m" (var));                      \
 +              break;                                  \
 +      case 4:                                         \
 +              asm(op "l "__percpu_arg(0)              \
 +                  : "+m" (var));                      \
 +              break;                                  \
 +      case 8:                                         \
 +              asm(op "q "__percpu_arg(0)              \
 +                  : "+m" (var));                      \
 +              break;                                  \
 +      default: __bad_percpu_size();                   \
 +      }                                               \
 +})
 +
  /*
   * percpu_read() makes gcc load the percpu variable every time it is
   * accessed while percpu_read_stable() allows the value to be cached.
  #define percpu_and(var, val)          percpu_to_op("and", var, val)
  #define percpu_or(var, val)           percpu_to_op("or", var, val)
  #define percpu_xor(var, val)          percpu_to_op("xor", var, val)
 +#define percpu_inc(var)               percpu_unary_op("inc", var)
  
  #define __this_cpu_read_1(pcp)                percpu_from_op("mov", (pcp), "m"(pcp))
  #define __this_cpu_read_2(pcp)                percpu_from_op("mov", (pcp), "m"(pcp))
@@@ -87,12 -87,13 +87,12 @@@ struct thread_info 
  #define TIF_NOTSC             16      /* TSC is not accessible in userland */
  #define TIF_IA32              17      /* 32bit process */
  #define TIF_FORK              18      /* ret_from_fork */
- #define TIF_MEMDIE            20
+ #define TIF_MEMDIE            20      /* is terminating due to OOM killer */
  #define TIF_DEBUG             21      /* uses debug registers */
  #define TIF_IO_BITMAP         22      /* uses I/O bitmap */
  #define TIF_FREEZE            23      /* is freezing for suspend */
  #define TIF_FORCED_TF         24      /* true if TF in eflags artificially */
 -#define TIF_DEBUGCTLMSR               25      /* uses thread_struct.debugctlmsr */
 -#define TIF_DS_AREA_MSR               26      /* uses thread_struct.ds_area_msr */
 +#define TIF_BLOCKSTEP         25      /* set when we want DEBUGCTLMSR_BTF */
  #define TIF_LAZY_MMU_UPDATES  27      /* task is updating the mmu lazily */
  #define TIF_SYSCALL_TRACEPOINT        28      /* syscall tracepoint instrumentation */
  
  #define _TIF_IO_BITMAP                (1 << TIF_IO_BITMAP)
  #define _TIF_FREEZE           (1 << TIF_FREEZE)
  #define _TIF_FORCED_TF                (1 << TIF_FORCED_TF)
 -#define _TIF_DEBUGCTLMSR      (1 << TIF_DEBUGCTLMSR)
 -#define _TIF_DS_AREA_MSR      (1 << TIF_DS_AREA_MSR)
 +#define _TIF_BLOCKSTEP                (1 << TIF_BLOCKSTEP)
  #define _TIF_LAZY_MMU_UPDATES (1 << TIF_LAZY_MMU_UPDATES)
  #define _TIF_SYSCALL_TRACEPOINT       (1 << TIF_SYSCALL_TRACEPOINT)
  
  
  /* flags to check in __switch_to() */
  #define _TIF_WORK_CTXSW                                                       \
 -      (_TIF_IO_BITMAP|_TIF_DEBUGCTLMSR|_TIF_DS_AREA_MSR|_TIF_NOTSC)
 +      (_TIF_IO_BITMAP|_TIF_NOTSC|_TIF_BLOCKSTEP)
  
  #define _TIF_WORK_CTXSW_PREV (_TIF_WORK_CTXSW|_TIF_USER_RETURN_NOTIFY)
  #define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW|_TIF_DEBUG)
@@@ -242,6 -244,7 +242,6 @@@ static inline struct thread_info *curre
  #define TS_POLLING            0x0004  /* true if in idle loop
                                           and not sleeping */
  #define TS_RESTORE_SIGMASK    0x0008  /* restore signal mask in do_signal() */
 -#define TS_XSAVE              0x0010  /* Use xsave/xrstor */
  
  #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING)
  
diff --combined drivers/firewire/ohci.c
@@@ -1158,7 -1158,7 +1158,7 @@@ static void handle_local_lock(struct fw
                              struct fw_packet *packet, u32 csr)
  {
        struct fw_packet response;
 -      int tcode, length, ext_tcode, sel;
 +      int tcode, length, ext_tcode, sel, try;
        __be32 *payload, lock_old;
        u32 lock_arg, lock_data;
  
        reg_write(ohci, OHCI1394_CSRCompareData, lock_arg);
        reg_write(ohci, OHCI1394_CSRControl, sel);
  
 -      if (reg_read(ohci, OHCI1394_CSRControl) & 0x80000000)
 -              lock_old = cpu_to_be32(reg_read(ohci, OHCI1394_CSRData));
 -      else
 -              fw_notify("swap not done yet\n");
 +      for (try = 0; try < 20; try++)
 +              if (reg_read(ohci, OHCI1394_CSRControl) & 0x80000000) {
 +                      lock_old = cpu_to_be32(reg_read(ohci,
 +                                                      OHCI1394_CSRData));
 +                      fw_fill_response(&response, packet->header,
 +                                       RCODE_COMPLETE,
 +                                       &lock_old, sizeof(lock_old));
 +                      goto out;
 +              }
 +
 +      fw_error("swap not done (CSR lock timeout)\n");
 +      fw_fill_response(&response, packet->header, RCODE_BUSY, NULL, 0);
  
 -      fw_fill_response(&response, packet->header,
 -                       RCODE_COMPLETE, &lock_old, sizeof(lock_old));
   out:
        fw_core_handle_response(&ohci->card, &response);
  }
  
  static void handle_local_request(struct context *ctx, struct fw_packet *packet)
  {
 -      u64 offset;
 -      u32 csr;
 +      u64 offset, csr;
  
        if (ctx == &ctx->ohci->at_request_ctx) {
                packet->ack = ACK_PENDING;
@@@ -1351,7 -1346,7 +1351,7 @@@ static void bus_reset_tasklet(unsigned 
         * was set up before this reset, the old one is now no longer
         * in use and we can free it. Update the config rom pointers
         * to point to the current config rom and clear the
-        * next_config_rom pointer so a new udpate can take place.
+        * next_config_rom pointer so a new update can take place.
         */
  
        if (ohci->next_config_rom != NULL) {
@@@ -905,9 -905,9 +905,9 @@@ intel_g4x_find_best_PLL(const intel_lim
  
        memset(best_clock, 0, sizeof(*best_clock));
        max_n = limit->n.max;
-       /* based on hardware requriment prefer smaller n to precision */
+       /* based on hardware requirement, prefer smaller n to precision */
        for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
-               /* based on hardware requirment prefere larger m1,m2 */
+               /* based on hardware requirement, prefere larger m1,m2 */
                for (clock.m1 = limit->m1.max;
                     clock.m1 >= limit->m1.min; clock.m1--) {
                        for (clock.m2 = limit->m2.max;
@@@ -4853,18 -4853,17 +4853,18 @@@ static void intel_init_display(struct d
                dev_priv->display.update_wm = g4x_update_wm;
        else if (IS_I965G(dev))
                dev_priv->display.update_wm = i965_update_wm;
 -      else if (IS_I9XX(dev) || IS_MOBILE(dev)) {
 +      else if (IS_I9XX(dev)) {
                dev_priv->display.update_wm = i9xx_update_wm;
                dev_priv->display.get_fifo_size = i9xx_get_fifo_size;
 +      } else if (IS_I85X(dev)) {
 +              dev_priv->display.update_wm = i9xx_update_wm;
 +              dev_priv->display.get_fifo_size = i85x_get_fifo_size;
        } else {
 -              if (IS_I85X(dev))
 -                      dev_priv->display.get_fifo_size = i85x_get_fifo_size;
 -              else if (IS_845G(dev))
 +              dev_priv->display.update_wm = i830_update_wm;
 +              if (IS_845G(dev))
                        dev_priv->display.get_fifo_size = i845_get_fifo_size;
                else
                        dev_priv->display.get_fifo_size = i830_get_fifo_size;
 -              dev_priv->display.update_wm = i830_update_wm;
        }
  }
  
@@@ -2912,7 -2912,7 +2912,7 @@@ typedef struct _ATOM_ANALOG_TV_INFO_V1_
    UCHAR                    ucTV_BootUpDefaultStandard; 
    UCHAR                    ucExt_TV_ASIC_ID;
    UCHAR                    ucExt_TV_ASIC_SlaveAddr;
 -  ATOM_DTD_FORMAT          aModeTimings[MAX_SUPPORTED_TV_TIMING];
 +  ATOM_DTD_FORMAT          aModeTimings[MAX_SUPPORTED_TV_TIMING_V1_2];
  }ATOM_ANALOG_TV_INFO_V1_2;
  
  typedef struct _ATOM_DPCD_INFO
@@@ -3780,7 -3780,7 +3780,7 @@@ typedef struct _ATOM_ASIC_SS_ASSIGNMEN
        UCHAR                                                           ucReserved[2];
  }ATOM_ASIC_SS_ASSIGNMENT;
  
- //Define ucClockIndication, SW uses the IDs below to search if the SS is requried/enabled on a clock branch/signal type.
+ //Define ucClockIndication, SW uses the IDs below to search if the SS is required/enabled on a clock branch/signal type.
  //SS is not required or enabled if a match is not found.
  #define ASIC_INTERNAL_MEMORY_SS                       1
  #define ASIC_INTERNAL_ENGINE_SS                       2
@@@ -5895,7 -5895,7 +5895,7 @@@ typedef struct _ATOM_PPLIB_RS780_CLOCK_
        UCHAR  ucPadding;                   // For proper alignment and size.
        USHORT usVDDC;                      // For the 780, use: None, Low, High, Variable
        UCHAR  ucMaxHTLinkWidth;            // From SBIOS - {2, 4, 8, 16}
-       UCHAR  ucMinHTLinkWidth;            // From SBIOS - {2, 4, 8, 16}. Effective only if CDLW enabled. Minimum down stream width could be bigger as display BW requriement.
+       UCHAR  ucMinHTLinkWidth;            // From SBIOS - {2, 4, 8, 16}. Effective only if CDLW enabled. Minimum down stream width could be bigger as display BW requirement.
        USHORT usHTLinkFreq;                // See definition ATOM_PPLIB_RS780_HTLINKFREQ_xxx or in MHz(>=200).
        ULONG  ulFlags; 
  } ATOM_PPLIB_RS780_CLOCK_INFO;
diff --combined drivers/pci/pci.c
@@@ -679,7 -679,7 +679,7 @@@ static void __pci_start_power_transitio
   */
  int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state)
  {
 -      return state > PCI_D0 ?
 +      return state >= PCI_D0 ?
                        pci_platform_power_transition(dev, state) : -EINVAL;
  }
  EXPORT_SYMBOL_GPL(__pci_complete_power_transition);
@@@ -716,6 -716,10 +716,6 @@@ int pci_set_power_state(struct pci_dev 
                 */
                return 0;
  
 -      /* Check if we're already there */
 -      if (dev->current_state == state)
 -              return 0;
 -
        __pci_start_power_transition(dev, state);
  
        /* This device is quirked not to be put into D3, so
@@@ -1503,7 -1507,7 +1503,7 @@@ int pci_prepare_to_sleep(struct pci_de
   * pci_back_from_sleep - turn PCI device on during system-wide transition into working state
   * @dev: Device to handle.
   *
-  * Disable device's sytem wake-up capability and put it into D0.
+  * Disable device's system wake-up capability and put it into D0.
   */
  int pci_back_from_sleep(struct pci_dev *dev)
  {
@@@ -181,7 -181,7 +181,7 @@@ struct ehci_hcd_omap 
        void __iomem            *ehci_base;
  
        /* Regulators for USB PHYs.
-        * Each PHY can have a seperate regulator.
+        * Each PHY can have a separate regulator.
         */
        struct regulator        *regulator[OMAP3_HS_USB_PORTS];
  };
@@@ -629,13 -629,11 +629,13 @@@ static int ehci_hcd_omap_probe(struct p
                }
                snprintf(supply, sizeof(supply), "hsusb%d", i);
                omap->regulator[i] = regulator_get(omap->dev, supply);
 -              if (IS_ERR(omap->regulator[i]))
 +              if (IS_ERR(omap->regulator[i])) {
 +                      omap->regulator[i] = NULL;
                        dev_dbg(&pdev->dev,
                        "failed to get ehci port%d regulator\n", i);
 -              else
 +              } else {
                        regulator_enable(omap->regulator[i]);
 +              }
        }
  
        ret = omap_start_ehc(omap, hcd);
diff --combined fs/logfs/logfs.h
@@@ -144,7 -144,6 +144,7 @@@ struct logfs_area_ops 
   * @erase:                    erase one segment
   * @read:                     read from the device
   * @erase:                    erase part of the device
 + * @can_write_buf:            decide whether wbuf can be written to ofs
   */
  struct logfs_device_ops {
        struct page *(*find_first_sb)(struct super_block *sb, u64 *ofs);
        void (*writeseg)(struct super_block *sb, u64 ofs, size_t len);
        int (*erase)(struct super_block *sb, loff_t ofs, size_t len,
                        int ensure_write);
 +      int (*can_write_buf)(struct super_block *sb, u64 ofs);
        void (*sync)(struct super_block *sb);
        void (*put_device)(struct super_block *sb);
  };
@@@ -396,7 -394,6 +396,7 @@@ struct logfs_super 
        int      s_lock_count;
        mempool_t *s_block_pool;                /* struct logfs_block pool */
        mempool_t *s_shadow_pool;               /* struct logfs_shadow pool */
 +      struct list_head s_writeback_list;      /* writeback pages */
        /*
         * Space accounting:
         * - s_used_bytes specifies space used to store valid data objects.
@@@ -601,19 -598,19 +601,19 @@@ void freeseg(struct super_block *sb, u3
  int logfs_init_areas(struct super_block *sb);
  void logfs_cleanup_areas(struct super_block *sb);
  int logfs_open_area(struct logfs_area *area, size_t bytes);
 -void __logfs_buf_write(struct logfs_area *area, u64 ofs, void *buf, size_t len,
 +int __logfs_buf_write(struct logfs_area *area, u64 ofs, void *buf, size_t len,
                int use_filler);
  
 -static inline void logfs_buf_write(struct logfs_area *area, u64 ofs,
 +static inline int logfs_buf_write(struct logfs_area *area, u64 ofs,
                void *buf, size_t len)
  {
 -      __logfs_buf_write(area, ofs, buf, len, 0);
 +      return __logfs_buf_write(area, ofs, buf, len, 0);
  }
  
 -static inline void logfs_buf_recover(struct logfs_area *area, u64 ofs,
 +static inline int logfs_buf_recover(struct logfs_area *area, u64 ofs,
                void *buf, size_t len)
  {
 -      __logfs_buf_write(area, ofs, buf, len, 1);
 +      return __logfs_buf_write(area, ofs, buf, len, 1);
  }
  
  /* super.c */
@@@ -707,7 -704,7 +707,7 @@@ static inline gc_level_t expand_level(u
        u8 level = (__force u8)__level;
  
        if (ino == LOGFS_INO_MASTER) {
-               /* ifile has seperate areas */
+               /* ifile has separate areas */
                level += LOGFS_MAX_LEVELS;
        }
        return (__force gc_level_t)level;
diff --combined kernel/cgroup.c
@@@ -1646,9 -1646,7 +1646,9 @@@ static inline struct cftype *__d_cft(st
  int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
  {
        char *start;
 -      struct dentry *dentry = rcu_dereference(cgrp->dentry);
 +      struct dentry *dentry = rcu_dereference_check(cgrp->dentry,
 +                                                    rcu_read_lock_held() ||
 +                                                    cgroup_lock_is_held());
  
        if (!dentry || cgrp == dummytop) {
                /*
        *--start = '\0';
        for (;;) {
                int len = dentry->d_name.len;
 +
                if ((start -= len) < buf)
                        return -ENAMETOOLONG;
 -              memcpy(start, cgrp->dentry->d_name.name, len);
 +              memcpy(start, dentry->d_name.name, len);
                cgrp = cgrp->parent;
                if (!cgrp)
                        break;
 -              dentry = rcu_dereference(cgrp->dentry);
 +
 +              dentry = rcu_dereference_check(cgrp->dentry,
 +                                             rcu_read_lock_held() ||
 +                                             cgroup_lock_is_held());
                if (!cgrp->parent)
                        continue;
                if (--start < buf)
@@@ -3016,7 -3010,7 +3016,7 @@@ static int cgroup_event_wake(wait_queue
        unsigned long flags = (unsigned long)key;
  
        if (flags & POLLHUP) {
 -              remove_wait_queue_locked(event->wqh, &event->wait);
 +              __remove_wait_queue(event->wqh, &event->wait);
                spin_lock(&cgrp->event_list_lock);
                list_del(&event->list);
                spin_unlock(&cgrp->event_list_lock);
@@@ -3615,7 -3609,7 +3615,7 @@@ static void __init cgroup_init_subsys(s
   * @ss: the subsystem to load
   *
   * This function should be called in a modular subsystem's initcall. If the
-  * subsytem is built as a module, it will be assigned a new subsys_id and set
+  * subsystem is built as a module, it will be assigned a new subsys_id and set
   * up for use. If the subsystem is built-in anyway, work is delegated to the
   * simpler cgroup_init_subsys.
   */
@@@ -4435,15 -4429,7 +4435,15 @@@ __setup("cgroup_disable=", cgroup_disab
   */
  unsigned short css_id(struct cgroup_subsys_state *css)
  {
 -      struct css_id *cssid = rcu_dereference(css->id);
 +      struct css_id *cssid;
 +
 +      /*
 +       * This css_id() can return correct value when somone has refcnt
 +       * on this or this is under rcu_read_lock(). Once css->id is allocated,
 +       * it's unchanged until freed.
 +       */
 +      cssid = rcu_dereference_check(css->id,
 +                      rcu_read_lock_held() || atomic_read(&css->refcnt));
  
        if (cssid)
                return cssid->id;
@@@ -4453,10 -4439,7 +4453,10 @@@ EXPORT_SYMBOL_GPL(css_id)
  
  unsigned short css_depth(struct cgroup_subsys_state *css)
  {
 -      struct css_id *cssid = rcu_dereference(css->id);
 +      struct css_id *cssid;
 +
 +      cssid = rcu_dereference_check(css->id,
 +                      rcu_read_lock_held() || atomic_read(&css->refcnt));
  
        if (cssid)
                return cssid->depth;
  }
  EXPORT_SYMBOL_GPL(css_depth);
  
 +/**
 + *  css_is_ancestor - test "root" css is an ancestor of "child"
 + * @child: the css to be tested.
 + * @root: the css supporsed to be an ancestor of the child.
 + *
 + * Returns true if "root" is an ancestor of "child" in its hierarchy. Because
 + * this function reads css->id, this use rcu_dereference() and rcu_read_lock().
 + * But, considering usual usage, the csses should be valid objects after test.
 + * Assuming that the caller will do some action to the child if this returns
 + * returns true, the caller must take "child";s reference count.
 + * If "child" is valid object and this returns true, "root" is valid, too.
 + */
 +
  bool css_is_ancestor(struct cgroup_subsys_state *child,
                    const struct cgroup_subsys_state *root)
  {
 -      struct css_id *child_id = rcu_dereference(child->id);
 -      struct css_id *root_id = rcu_dereference(root->id);
 +      struct css_id *child_id;
 +      struct css_id *root_id;
 +      bool ret = true;
  
 -      if (!child_id || !root_id || (child_id->depth < root_id->depth))
 -              return false;
 -      return child_id->stack[root_id->depth] == root_id->id;
 +      rcu_read_lock();
 +      child_id  = rcu_dereference(child->id);
 +      root_id = rcu_dereference(root->id);
 +      if (!child_id
 +          || !root_id
 +          || (child_id->depth < root_id->depth)
 +          || (child_id->stack[root_id->depth] != root_id->id))
 +              ret = false;
 +      rcu_read_unlock();
 +      return ret;
  }
  
  static void __free_css_id_cb(struct rcu_head *head)
@@@ -4593,13 -4555,13 +4593,13 @@@ static int alloc_css_id(struct cgroup_s
  {
        int subsys_id, i, depth = 0;
        struct cgroup_subsys_state *parent_css, *child_css;
 -      struct css_id *child_id, *parent_id = NULL;
 +      struct css_id *child_id, *parent_id;
  
        subsys_id = ss->subsys_id;
        parent_css = parent->subsys[subsys_id];
        child_css = child->subsys[subsys_id];
 -      depth = css_depth(parent_css) + 1;
        parent_id = parent_css->id;
 +      depth = parent_id->depth;
  
        child_id = get_new_cssid(ss, depth);
        if (IS_ERR(child_id))
diff --combined mm/memcontrol.c
@@@ -1438,7 -1438,7 +1438,7 @@@ static void drain_local_stock(struct wo
  
  /*
   * Cache charges(val) which is from res_counter, to local per_cpu area.
-  * This will be consumed by consumt_stock() function, later.
+  * This will be consumed by consume_stock() function, later.
   */
  static void refill_stock(struct mem_cgroup *mem, int val)
  {
@@@ -1601,6 -1601,7 +1601,6 @@@ static int __mem_cgroup_try_charge(stru
                         * There is a small race that "from" or "to" can be
                         * freed by rmdir, so we use css_tryget().
                         */
 -                      rcu_read_lock();
                        from = mc.from;
                        to = mc.to;
                        if (from && css_tryget(&from->css)) {
                                        do_continue = (to == mem_over_limit);
                                css_put(&to->css);
                        }
 -                      rcu_read_unlock();
                        if (do_continue) {
                                DEFINE_WAIT(wait);
                                prepare_to_wait(&mc.waitq, &wait,
@@@ -2427,11 -2429,11 +2427,11 @@@ int mem_cgroup_prepare_migration(struc
        }
        unlock_page_cgroup(pc);
  
 +      *ptr = mem;
        if (mem) {
 -              ret = __mem_cgroup_try_charge(NULL, GFP_KERNEL, &mem, false);
 +              ret = __mem_cgroup_try_charge(NULL, GFP_KERNEL, ptr, false);
                css_put(&mem->css);
        }
 -      *ptr = mem;
        return ret;
  }
  
diff --combined net/ipv4/ipmr.c
@@@ -22,7 -22,7 +22,7 @@@
   *                                    overflow.
   *      Carlos Picoto           :       PIMv1 Support
   *    Pavlin Ivanov Radoslavov:       PIMv2 Registers must checksum only PIM header
-  *                                    Relax this requrement to work with older peers.
+  *                                    Relax this requirement to work with older peers.
   *
   */
  
@@@ -754,8 -754,7 +754,8 @@@ ipmr_cache_unresolved(struct net *net, 
                c->next = mfc_unres_queue;
                mfc_unres_queue = c;
  
 -              mod_timer(&ipmr_expire_timer, c->mfc_un.unres.expires);
 +              if (atomic_read(&net->ipv4.cache_resolve_queue_len) == 1)
 +                      mod_timer(&ipmr_expire_timer, c->mfc_un.unres.expires);
        }
  
        /*