cpufreq: fix utilization statistics for sync cpus

If the cpus are using related_cpus policy, then the
current implementaion will overwrite the the calculated
load for every iteration in the for loop. Hence, mpdecision
will read incorrect value, if the cores are using related
cpus policy. With this change mpdecision will read the
sum of the loads of all cpu's, if related cpu policy is
used.

Change-Id: I242c8fe39fd75dc3e48750a5b78a5d218b536ddd
Signed-off-by: Narayanan Gopalakrishnan <nargop@codeaurora.org>
Signed-off-by: Shruthi Krishna <skrish@codeaurora.org>
cpufreq: notify avg load for short sampling_rate

If the sampling rate is less than 50ms reporting
the actual load may lead to poor decision making
at user space. So, for sampling rates less than 50ms
report the average of load across two samples.

Change-Id: I0d1cf00801732bee8e4380158d7e892758226594
Signed-off-by: Narayanan Gopalakrishnan <nargop@codeaurora.org>
lib/lzo: Rename lzo1x_decompress.c to lzo1x_decompress_safe.c

Rename the source file to match the function name and thereby
also make room for a possible future even slightly faster
"non-safe" decompressor version.

Signed-off-by: Markus F.X.J. Oberhumer <markus@oberhumer.com>
lib/lzo: Update LZO compression to current upstream version

This commit updates the kernel LZO code to the current upsteam version
which features a significant speed improvement - benchmarking the Calgary
and Silesia test corpora typically shows a doubled performance in
both compression and decompression on modern i386/x86_64/powerpc machines.

Signed-off-by: Markus F.X.J. Oberhumer <markus@oberhumer.com>
lib/lzo: huge LZO decompression speedup on ARM by using unaligned access

Signed-off-by: Markus F.X.J. Oberhumer <markus@oberhumer.com>
ARM: 7668/1: fix memset-related crashes caused by recent GCC (4.7.2) optimizations

Recent GCC versions (e.g. GCC-4.7.2) perform optimizations based on
assumptions about the implementation of memset and similar functions.
The current ARM optimized memset code does not return the value of
its first argument, as is usually expected from standard implementations.

For instance in the following function:

void debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter)
{
	memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter));
	waiter->magic = waiter;
	INIT_LIST_HEAD(&waiter->list);
}

compiled as:

800554d0 <debug_mutex_lock_common>:
800554d0:       e92d4008        push    {r3, lr}
800554d4:       e1a00001        mov     r0, r1
800554d8:       e3a02010        mov     r2, #16 ; 0x10
800554dc:       e3a01011        mov     r1, #17 ; 0x11
800554e0:       eb04426e        bl      80165ea0 <memset>
800554e4:       e1a03000        mov     r3, r0
800554e8:       e583000c        str     r0, [r3, #12]
800554ec:       e5830000        str     r0, [r3]
800554f0:       e5830004        str     r0, [r3, #4]
800554f4:       e8bd8008        pop     {r3, pc}

GCC assumes memset returns the value of pointer 'waiter' in register r0; causing
register/memory corruptions.

This patch fixes the return value of the assembly version of memset.
It adds a 'mov' instruction and merges an additional load+store into
existing load/store instructions.
For ease of review, here is a breakdown of the patch into 4 simple steps:

Step 1
======
Perform the following substitutions:
ip -> r8, then
r0 -> ip,
and insert 'mov ip, r0' as the first statement of the function.
At this point, we have a memset() implementation returning the proper result,
but corrupting r8 on some paths (the ones that were using ip).

Step 2
======
Make sure r8 is saved and restored when (! CALGN(1)+0) == 1:

save r8:
-       str     lr, [sp, #-4]!
+       stmfd   sp!, {r8, lr}

and restore r8 on both exit paths:
-       ldmeqfd sp!, {pc}               @ Now <64 bytes to go.
+       ldmeqfd sp!, {r8, pc}           @ Now <64 bytes to go.
(...)
        tst     r2, #16
        stmneia ip!, {r1, r3, r8, lr}
-       ldr     lr, [sp], #4
+       ldmfd   sp!, {r8, lr}

Step 3
======
Make sure r8 is saved and restored when (! CALGN(1)+0) == 0:

save r8:
-       stmfd   sp!, {r4-r7, lr}
+       stmfd   sp!, {r4-r8, lr}

and restore r8 on both exit paths:
        bgt     3b
-       ldmeqfd sp!, {r4-r7, pc}
+       ldmeqfd sp!, {r4-r8, pc}
(...)
        tst     r2, #16
        stmneia ip!, {r4-r7}
-       ldmfd   sp!, {r4-r7, lr}
+       ldmfd   sp!, {r4-r8, lr}

Step 4
======
Rewrite register list "r4-r7, r8" as "r4-r8".

Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com>
Reviewed-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ARM: 7670/1: fix the memset fix

Commit 455bd4c430b0 ("ARM: 7668/1: fix memset-related crashes caused by
recent GCC (4.7.2) optimizations") attempted to fix a compliance issue
with the memset return value.  However the memset itself became broken
by that patch for misaligned pointers.

This fixes the above by branching over the entry code from the
misaligned fixup code to avoid reloading the original pointer.

Also, because the function entry alignment is wrong in the Thumb mode
compilation, that fixup code is moved to the end.

While at it, the entry instructions are slightly reworked to help dual
issue pipelines.

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Tested-by: Alexander Holler <holler@ahsoftware.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
zsmalloc: use 3.10 version of zsmalloc

commit 796ce5a7e4ef88ee0bfbeaa80070a51570650d57
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Apr 23 18:30:48 2013 +0200

    staging/zsmalloc: don't use pgtable-mapping from modules

    Building zsmalloc as a module does not work on ARM because it uses
    an interface that is not exported:

    ERROR: "flush_tlb_kernel_range" [drivers/staging/zsmalloc/zsmalloc.ko] undefined!

    Since this is only used as a performance optimization and only on ARM,
    we can avoid the problem simply by not using that optimization when
    building zsmalloc it is a loadable module.

    flush_tlb_kernel_range is often an inline function, but out of the
    architectures that use an extern function, only powerpc exports
    it.

    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Cc: Nitin Gupta <ngupta@vflare.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d95abbbb291bf5bce078148f53603ce9c0aa1d44
Author: Joerg Roedel <joro@8bytes.org>
Date:   Wed Mar 27 01:43:14 2013 +0100

    staging: zsmalloc: Fix link error on ARM

    Testing the arm chromebook config against the upstream
    kernel produces a linker error for the zsmalloc module from
    staging. The symbol flush_tlb_kernel_range is not available
    there. Fix this by removing the reimplementation of
    unmap_kernel_range in the zsmalloc module and using the
    function directly. The unmap_kernel_range function is not
    usable by modules, so also disallow building the driver as a
    module for now.

    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Joerg Roedel <joro@8bytes.org>
    Acked-by: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 22b751c3d0376e86a377e3a0aa2ddbbe9d2eefc1
Author: Mel Gorman <mgorman@suse.de>
Date:   Fri Feb 22 16:34:59 2013 -0800

    mm: rename page struct field helpers

    The function names page_xchg_last_nid(), page_last_nid() and
    reset_page_last_nid() were judged to be inconsistent so rename them to a
    struct_field_op style pattern.  As it looked jarring to have
    reset_page_mapcount() and page_nid_reset_last() beside each other in
    memmap_init_zone(), this patch also renames reset_page_mapcount() to
    page_mapcount_reset().  There are others like init_page_count() but as
    it is used throughout the arch code a rename would likely cause more
    conflicts than it is worth.

    [akpm@linux-foundation.org: fix zcache]
    Signed-off-by: Mel Gorman <mgorman@suse.de>
    Suggested-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

commit 0d145a501778042d0411c843ed5b468b41f8a171
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Wed Jan 30 09:36:52 2013 -0600

    staging: zsmalloc: remove unused pool name

    zs_create_pool() currently takes a name argument which is
    never used in any useful way.

    This patch removes it.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Acked-by: Nitin Gupta <ngupta@vflare.org>
    Acked-by: Rik van Riel <riel@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9915518887e83764269d5b617d01782893877ed3
Author: Minchan Kim <minchan@kernel.org>
Date:   Mon Jan 28 10:00:08 2013 +0900

    staging: zsmalloc: Fix TLB coherency and build problem

    Recently, Matt Sealey reported he fail to build zsmalloc caused by
    using of local_flush_tlb_kernel_range which are architecture dependent
    function so !CONFIG_SMP in ARM couldn't implement it so it ends up
    build error following as.

      MODPOST 216 modules
      LZMA    arch/arm/boot/compressed/piggy.lzma
      AS      arch/arm/boot/compressed/lib1funcs.o
    ERROR: "v7wbi_flush_kern_tlb_range"
    [drivers/staging/zsmalloc/zsmalloc.ko] undefined!
    make[1]: *** [__modpost] Error 1
    make: *** [modules] Error 2
    make: *** Waiting for unfinished jobs....

    The reason we used that function is copy method by [1]
    was really slow in ARM but at that time.

    More severe problem is ARM can prefetch speculatively on other CPUs
    so under us, other TLBs can have an entry only if we do flush local
    CPU. Russell King pointed that. Thanks!
    We don't have many choices except using flush_tlb_kernel_range.

    My experiment in ARMv7 processor 4 core didn't make any difference with
    zsmapbench[2] between local_flush_tlb_kernel_range and flush_tlb_kernel_range
    but still page-table based is much better than copy-based.

    * bigger is better.

    1. local_flush_tlb_kernel_range: 3918795 mappings
    2. flush_tlb_kernel_range : 3989538 mappings
    3. copy-based: 635158 mappings

    This patch replace local_flush_tlb_kernel_range with
    flush_tlb_kernel_range which are avaialbe in all architectures
    because we already have used it in vmalloc allocator which are
    generic one so build problem should go away and performane loss
    shoud be void.

    [1] f553646, zsmalloc: add page table mapping method
    [2] https://github.com/spartacus06/zsmapbench

    Cc: stable@vger.kernel.org
    Cc: Dan Magenheimer <dan.magenheimer@oracle.com>
    Cc: Russell King <linux@arm.linux.org.uk>
    Cc: Konrad Rzeszutek Wilk <konrad@darnok.org>
    Cc: Nitin Gupta <ngupta@vflare.org>
    Cc: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Reported-by: Matt Sealey <matt@genesi-usa.com>
    Signed-off-by: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d662b8eba94e9f6d4c036719dbf629ef0c9309cf
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Fri Jan 25 11:46:18 2013 -0600

    staging: zsmalloc: make CLASS_DELTA relative to PAGE_SIZE

    Right now ZS_SIZE_CLASS_DELTA is hardcoded to be 16.  This
    creates 254 classes for systems with 4k pages. However, on
    PPC64 with 64k pages, it creates 4095 classes which is far
    too many.

    This patch makes ZS_SIZE_CLASS_DELTA relative to PAGE_SIZE
    so that regardless of the page size, there will be the same
    number of classes.

    Acked-by: Nitin Gupta <ngupta@vflare.org>
    Acked-by: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Acked-by: Dan Magenheimer <dan.magenheimer@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4bbc0bc06b8b0cced31ee17beb753ad51a2e47e7
Author: Davidlohr Bueso <davidlohr.bueso@hp.com>
Date:   Fri Jan 4 12:14:00 2013 -0800

    staging: zsmalloc: comment zs_create_pool function

    Just as with zs_malloc() and zs_map_object(), it is worth
    formally commenting the zs_create_pool() function.

    Signed-off-by: Davidlohr Bueso <davidlohr.bueso@hp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0959c63f11c3bbef0a7d6c5011be8d25503f547c
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Wed Aug 8 15:12:17 2012 +0900

    zsmalloc: collapse internal .h into .c

    The patch collapses in the internal zsmalloc_int.h into
    the zsmalloc-main.c file.

    This is done in preparation for the promotion to mm/ where
    separate internal headers are discouraged.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Signed-off-by: Minchan Kim <minchan@kernel.org>
    Acked-by: Nitin Gupta <ngupta@vflare.org>
    Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f553646a67cb215577402cb702b67c8cf8fdb46f
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Wed Jul 18 11:55:56 2012 -0500

    staging: zsmalloc: add page table mapping method

    This patchset provides page mapping via the page table.
    On some archs, most notably ARM, this method has been
    demonstrated to be faster than copying.

    The logic controlling the method selection (copy vs page table)
    is controlled by the definition of USE_PGTABLE_MAPPING which
    is/can be defined for any arch that performs better with page
    table mapping.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Acked-by: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c60369f011251c60de506994aab088f1afb90bf4
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Wed Jul 18 11:55:55 2012 -0500

    staging: zsmalloc: prevent mappping in interrupt context

    Because we use per-cpu mapping areas shared among the
    pools/users, we can't allow mapping in interrupt context
    because it can corrupt another users mappings.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Acked-by: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6539a36c0cb9ec7f1c1633b535ac83b2bdf0ae6d
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Wed Jul 18 11:55:54 2012 -0500

    staging: zsmalloc: s/firstpage/page in new copy map funcs

    firstpage already has precedent and meaning the first page
    of a zspage.  In the case of the copy mapping functions,
    it is the first of a pair of pages needing to be mapped.

    This patch just renames the firstpage argument to "page" to
    avoid confusion.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Acked-by: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b74185108668ef966e663878adbad65e03bfcb43
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Mon Jul 2 16:15:52 2012 -0500

    staging: zsmalloc: add mapping modes

    This patch improves mapping performance in zsmalloc by getting
    usage information from the user in the form of a "mapping mode"
    and using it to avoid unnecessary copying for objects that span
    pages.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 166cfda752ca22eb6912614993b85f9a997dbd8f
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Mon Jul 2 16:15:51 2012 -0500

    staging: zsmalloc: add details to zs_map_object boiler plate

    Add information on the usage limits of zs_map_object()

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 103123305c4f695cbb11555d51a32ea14d6bed05
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Mon Jul 2 16:15:50 2012 -0500

    staging: zsmalloc: add single-page object fastpath in unmap

    Improve zs_unmap_object() performance by adding a fast path for
    objects that don't span pages.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5f601902c61e6cda627ec71c10609021067ed0fa
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Mon Jul 2 16:15:49 2012 -0500

    staging: zsmalloc: remove x86 dependency

    This patch replaces the page table assisted object mapping
    method, which has x86 dependencies, with a arch-independent
    method that does a simple copy into a temporary per-cpu
    buffer.

    While a copy seems like it would be worse than mapping the pages,
    tests demonstrate the copying is always faster and, in the case of
    running inside a KVM guest, roughly 4x faster.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 069f101fa463351f528773d73b74e9b606b3f66a
Author: Ben Hutchings <ben@decadent.org.uk>
Date:   Wed Jun 20 02:31:11 2012 +0100

    staging: zsmalloc: Finish conversion to a separate module

    ZSMALLOC is tristate, but the code has no MODULE_LICENSE and since it
    depends on GPL-only symbols it cannot be loaded as a module.  This in
    turn breaks zram which now depends on it.  I assume it's meant to be
    Dual BSD/GPL like the other z-stuff.

    There is also no module_exit, which will make it impossible to unload.
    Add the appropriate module_init and module_exit declarations suggested
    by comments.

    Reported-by: Christian Ohm <chr.ohm@gmx.net>
    References: http://bugs.debian.org/677273
    Cc: stable@vger.kernel.org # v3.4
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b4b700c5a61c6e6db976f60d4eb6ad369e838aa9
Author: Seth Jennings <sjenning@linux.vnet.ibm.com>
Date:   Wed Jun 13 16:03:42 2012 -0500

    staging: zsmalloc: fix uninit'ed variable warning

    This patch fixes an uninitialized variable warning in
    alloc_zspage().  It also fixes the secondary issue of
    prev_page leaving scope on each loop iteration.  The only
    reason this ever worked was because prev_page was occupying
    the same space on the stack on each iteration.

    Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Reported-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2db51dae56240b52fe08ddbb1a2eb47fe7cfd044
Author: Nitin Gupta <ngupta@vflare.org>
Date:   Sat Jun 9 17:41:14 2012 -0700

    staging: zsmalloc documentation

    Documentation of various struct page fields
    used by zsmalloc.

    Changes for v2:
    	- Regroup descriptions as suggested by Konrad

    Signed-off-by: Nitin Gupta <ngupta@vflare.org>
    Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Reviewed-by: Minchan Kim <minchan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c234434835b1f4bad9bdbae6710044cba387c9e5
Author: Minchan Kim <minchan@kernel.org>
Date:   Fri Jun 8 15:39:25 2012 +0900

    staging: zsmalloc: zsmalloc: use unsigned long instead of void *

    We should use unsigned long as handle instead of void * to avoid any
    confusion. Without this, users may just treat zs_malloc return value as
    a pointer and try to deference it.

    This patch passed compile test(zram, zcache and ramster) and zram is
    tested on qemu.

    changelog
      * from v2
    	- remove hval pointed out by Nitin
    	- based on next-20120607
      * from v1
    	- change zcache's zv_create return value
    	- baesd on next-20120604

    Cc: Dan Magenheimer <dan.magenheimer@oracle.com>
    Acked-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
    Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Minchan Kim <minchan@kernel.org>
    Acked-by: Nitin Gupta <ngupta@vflare.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 00a61d8618bb7314113eb3ba27c12631cd85c298
Author: Minchan Kim <minchan@kernel.org>
Date:   Thu May 3 15:40:40 2012 +0900

    staging: zsmalloc: add/fix function comment

    Add/fix the comment.

    Signed-off-by: Minchan Kim <minchan@kernel.org>
    Acked-by: Nitin Gupta <ngupta@vflare.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2e3b61547191a5934ff6c789aaa4d7e9a9e52f5a
Author: Minchan Kim <minchan@kernel.org>
Date:   Thu May 3 15:40:39 2012 +0900

    staging: zsmalloc: rename zspage_order with zspage_pages

    zspage_order defines how many pages are needed to make a zspage.
    So _order_ is rather awkward naming. It already deceive Jonathan
    - http://lwn.net/Articles/477067/
    " For each size, the code calculates an optimum number of pages (up to 16)"

    Let's change from _order_ to _pages_ and some function names.

    Signed-off-by: Minchan Kim <minchan@kernel.org>
    Acked-by: Nitin Gupta <ngupta@vflare.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d210267741fb2a8b6d741d9040703683a39087f4
Merge: 69964ea 5bb196a
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 2 11:48:07 2012 -0700

    Merge 3.4-rc5 into staging-next

    This resolves the conflict in:
    	drivers/staging/vt6656/ioctl.c

    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a27545bf0bab9027e5c040901b68956551d9f63e
Author: Minchan Kim <minchan@kernel.org>
Date:   Wed Apr 25 15:23:09 2012 +0900

    zsmalloc: use PageFlag macro instead of [set|test]_bit

    MM code always uses PageXXX to handle page flags.
    Let's keep the consistency.

    Signed-off-by: Minchan Kim <minchan@kernel.org>
    Acked-by: Nitin Gupta <ngupta@vflare.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Change-Id: I542f0b9eaf0264e1c9e38f9669fec8ea0debae7c
Signed-off-by: Larry Bassel <lbassel@codeaurora.org>

Conflicts:

	drivers/staging/zsmalloc/zsmalloc-main.c
	drivers/staging/zsmalloc/zsmalloc.h
staging: zsmalloc: Rename page_mapcount_reset

The page_mapcount_reset function was renamed from
reset_page_mapcount when back-porting zsmalloc from 3.10 kernel.
Revert this change to enable compilation of zsmalloc.

Change-Id: Iba09fc3f0294dae746d2e2b026e0015711c22f01
Signed-off-by: Olav Haugan <ohaugan@codeaurora.org>
ARM: kconfig: select HAVE_EFFICIENT_UNALIGNED_ACCESS for CPUv6+ && MMU

Modern ARM CPUs can perform efficient unaligned memory accesses in
hardware and this feature is relied up on by code such as the dcache
word-at-a-time name hashing.

[pawitp: adapt to kernel 3.0]

Change-Id: I41559fc9255229e2601f4bef28aa8d48246156b7
Signed-off-by: Will Deacon <will.deacon@arm.com>
tenderloin_defconfig: Enable HAVE_EFFICIENT_UNALIGNED_ACCESS
spi_qsd: Remove check for unaligned  length during input_irq.

QUP_IRQ  complete is triggered  before  dmov_rx callback.
Which will initiate SPI to start next transfer, due to
this earlier DMOV_CMD is blocked  and results in kernel panic.

Current  Implementation  make sure that transfer complete waits
For  DMOV callback only in case of aligned lengths , This patch
ensures   transfer trigger only after DMOV  RX call back for
unaligned length also.

CRs-Fixed: 583126
Change-Id: I090cf9f2c0abb21907cf5786829d5351c23a9314
Signed-off-by: Sana Venkat Raju <c_vsana@codeaurora.org>

Conflicts:

	drivers/spi/spi_qsd.c
jbd2: optimize jbd2_journal_force_commit

Current implementation of jbd2_journal_force_commit() is suboptimal because
result in empty and useless commits. But callers just want to force and wait
any unfinished commits. We already have jbd2_journal_force_commit_nested()
which does exactly what we want, except we are guaranteed that we do not hold
journal transaction open.

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

Change-Id: I5c041a1898838e880714a913b5a915f105a8dfb9
timer: optimize apply_slack()

__fls(mask) is equivalent to find_last_bit(&mask, BITS_PER_LONG), but cheaper.
find_last_bit was showing up high on the list when I was profiling for stalls
on icache misses on a system with very small cache size (MIPS).

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: edoko <r_data@naver.com>

Change-Id: I8a5021a2fb2936c00ffd456663a76cb1b23e3100
writeback: Fix occasional slow sync(1)

In case when system contains no dirty pages, wakeup_flusher_threads()
will submit WB_SYNC_NONE writeback for 0 pages so wb_writeback() exits
immediately without doing anything. Thus sync(1) will write all the
dirty inodes from a WB_SYNC_ALL writeback pass which is slow.

Fix the problem by using get_nr_dirty_pages() in
wakeup_flusher_threads() instead of calculating number of dirty pages
manually. That function also takes number of dirty inodes into account.

Change-Id: I458027ae08d9a5a93202a7b97ace1f8da7a18a07
CC: stable@vger.kernel.org
Reported-by: Paul Taysom <taysom@chromium.org>
Signed-off-by: Jan Kara <jack@suse.cz>
futex: Prevent attaching to kernel threads

We happily allow userspace to declare a random kernel thread to be the
owner of a user space PI futex.

Found while analysing the fallout of Dave Jones syscall fuzzer.

We also should validate the thread group for private futexes and find
some fast way to validate whether the "alleged" owner has RW access on
the file which backs the SHM, but that's a separate issue.

Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
Cc: Dave Jones <davej@...hat.com>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Peter Zijlstra <peterz@...radead.org>
Cc: Darren Hart <darren@...art.com>
Cc: Davidlohr Bueso <davidlohr@...com>
Cc: Steven Rostedt <rostedt@...dmis.org>
Cc: Clark Williams <williams@...hat.com>
Cc: Paul McKenney <paulmck@...ux.vnet.ibm.com>
Cc: Lai Jiangshan <laijs@...fujitsu.com>
Cc: Roland McGrath <roland@...k.frob.com>
Cc: Carlos ODonell <carlos@...hat.com>
Cc: Jakub Jelinek <jakub@...hat.com>
Cc: Michael Kerrisk <mtk.manpages@...il.com>
Cc: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
Link: http://lkml.kernel.org/r/20140512201701.194824402@...utronix.de
Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>

Change-Id: I7444c58d00cbded35b078331a8740e8431cb13a5
futex: Add another early deadlock detection check

Dave Jones trinity syscall fuzzer exposed an issue in the deadlock
detection code of rtmutex:
  http://lkml.kernel.org/r/20140429151655.GA14277@...hat.com

That underlying issue has been fixed with a patch to the rtmutex code,
but the futex code must not call into rtmutex in that case because
    - it can detect that issue early
    - it avoids a different and more complex fixup for backing out

If the user space variable got manipulated to 0x80000000 which means
no lock holder, but the waiters bit set and an active pi_state in the
kernel is found we can figure out the recursive locking issue by
looking at the pi_state owner. If that is the current task, then we
can safely return -EDEADLK.

The check should have been added in commit 59fa62451 (futex: Handle
futex_pi OWNER_DIED take over correctly) already, but I did not see
the above issue caused by user space manipulation back then.

Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
Cc: Dave Jones <davej@...hat.com>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Peter Zijlstra <peterz@...radead.org>
Cc: Darren Hart <darren@...art.com>
Cc: Davidlohr Bueso <davidlohr@...com>
Cc: Steven Rostedt <rostedt@...dmis.org>
Cc: Clark Williams <williams@...hat.com>
Cc: Paul McKenney <paulmck@...ux.vnet.ibm.com>
Cc: Lai Jiangshan <laijs@...fujitsu.com>
Cc: Roland McGrath <roland@...k.frob.com>
Cc: Carlos ODonell <carlos@...hat.com>
Cc: Jakub Jelinek <jakub@...hat.com>
Cc: Michael Kerrisk <mtk.manpages@...il.com>
Cc: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
Link: http://lkml.kernel.org/r/20140512201701.097349971@...utronix.de
Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>

Change-Id: I245f77622443435cf36bbd157b98798c235acdb0
futex-prevent-requeue-pi-on-same-futex.patch futex: Forbid uaddr == uaddr2 in futex_requeue(..., requeue_pi=1)

If uaddr == uaddr2, then we have broken the rule of only requeueing
from a non-pi futex to a pi futex with this call. If we attempt this,
then dangling pointers may be left for rt_waiter resulting in an
exploitable condition.

This change brings futex_requeue() into line with
futex_wait_requeue_pi() which performs the same check as per commit
6f7b0a2a5 (futex: Forbid uaddr == uaddr2 in futex_wait_requeue_pi())

[ tglx: Compare the resulting keys as well, as uaddrs might be
  	different depending on the mapping ]

Fixes CVE-2014-3153.

Reported-by: Pinkie Pie
Signed-off-by: Will Drewry <wad@chromium.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Change-Id: Iea1dfe1d877d63a374db2623dca6cea4e7a544b9
futex: Validate atomic acquisition in futex_lock_pi_atomic()

We need to protect the atomic acquisition in the kernel against rogue
user space which sets the user space futex to 0, so the kernel side
acquisition succeeds while there is existing state in the kernel
associated to the real owner.

Verify whether the futex has waiters associated with kernel state. If
it has, return -EINVAL. The state is corrupted already, so no point in
cleaning it up. Subsequent calls will fail as well. Not our problem.

[ tglx: Use futex_top_waiter() and explain why we do not need to try
  	restoring the already corrupted user space state. ]

Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Will Drewry <wad@chromium.org>
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Change-Id: I6c19ae4a5e85fbc9c560723e672d5136c4786ab6
futex: Always cleanup owner tid in unlock_pi

If the owner died bit is set at futex_unlock_pi, we currently do not
cleanup the user space futex. So the owner TID of the current owner
(the unlocker) persists. That's observable inconsistant state,
especially when the ownership of the pi state got transferred.

Clean it up unconditionally.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Kees Cook <keescook@chromium.org>
Cc: Will Drewry <wad@chromium.org>
Cc: Darren Hart <dvhart@linux.intel.com>
Cc: stable@vger.kernel.org

Change-Id: Ic84473a62bdf3e5702f46e04b266afa38e9ec40e

Conflicts:

	kernel/futex.c