aries | p1: add frandom character device

frandom kernel random number generator
http://www.billauer.co.il/frandom.html

Squashed commit of:
https://github.com/f1vefour/supernatural-kernel/commit/8564e1af9b62f0c946afd7eef8bcc12344137353
https://github.com/f1vefour/supernatural-kernel/commit/95c81553596a0368212936c71f7d2f470f5d4803
https://github.com/f1vefour/supernatural-kernel/commit/5c1ef4b7565b6bf1b8807a05f369ec9df2ef8dce

PS2: rebase
PS3: rebase
PS4: commit message

Change-Id: Icd8b2861156265bc0da4da5030f54453e99bc4a7
mm: fix slab->page flags corruption

Transparent huge pages can change page->flags (PG_compound_lock) without
taking Slab lock.  Since THP can not break slab pages we can safely access
compound page without taking compound lock.

Specifically this patch fixes a race between compound_unlock() and slab
functions which perform page-flags updates.  This can occur when
get_page()/put_page() is called on a page from slab.

[akpm@linux-foundation.org: tweak comment text, fix comment layout, fix label indenting]
Reported-by: Amey Bhide <abhide@nicira.com>
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Reviewed-by: Christoph Lameter <cl@linux.com>
Acked-by: Andrea Arcangeli <aarcange@redhat.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
oom: fix race while temporarily setting current's oom_score_adj

test_set_oom_score_adj() was introduced in 72788c385604 ("oom: replace
PF_OOM_ORIGIN with toggling oom_score_adj") to temporarily elevate
current's oom_score_adj for ksm and swapoff without requiring an
additional per-process flag.

Using that function to both set oom_score_adj to OOM_SCORE_ADJ_MAX and
then reinstate the previous value is racy since it's possible that
userspace can set the value to something else itself before the old value
is reinstated.  That results in userspace setting current's oom_score_adj
to a different value and then the kernel immediately setting it back to
its previous value without notification.

To fix this, a new compare_swap_oom_score_adj() function is introduced
with the same semantics as the compare and swap CAS instruction, or
CMPXCHG on x86.  It is used to reinstate the previous value of
oom_score_adj if and only if the present value is the same as the old
value.

Signed-off-by: David Rientjes <rientjes@google.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Ying Han <yinghan@google.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
zram swap optimizations: added zram swap optimizations for Linux 3.0/3.1

code cherry-picked from Samsung Galaxy Note 2 kernels

Signed-off-by: Paul Reioux <reioux@gmail.com>
Enable CONFIG_ZRAM_FOR_ANDROID in defconfig
- added zram, frandom etc. from kasper_h & humberos