Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/borntraeger...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 21 Dec 2014 00:48:59 +0000 (16:48 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 21 Dec 2014 00:48:59 +0000 (16:48 -0800)
Pull ACCESS_ONCE cleanup preparation from Christian Borntraeger:
 "kernel: Provide READ_ONCE and ASSIGN_ONCE

  As discussed on LKML http://marc.info/?i=54611D86.4040306%40de.ibm.com
  ACCESS_ONCE might fail with specific compilers for non-scalar
  accesses.

  Here is a set of patches to tackle that problem.

  The first patch introduce READ_ONCE and ASSIGN_ONCE.  If the data
  structure is larger than the machine word size memcpy is used and a
  warning is emitted.  The next patches fix up several in-tree users of
  ACCESS_ONCE on non-scalar types.

  This does not yet contain a patch that forces ACCESS_ONCE to work only
  on scalar types.  This is targetted for the next merge window as Linux
  next already contains new offenders regarding ACCESS_ONCE vs.
  non-scalar types"

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/borntraeger/linux:
  s390/kvm: REPLACE barrier fixup with READ_ONCE
  arm/spinlock: Replace ACCESS_ONCE with READ_ONCE
  arm64/spinlock: Replace ACCESS_ONCE READ_ONCE
  mips/gup: Replace ACCESS_ONCE with READ_ONCE
  x86/gup: Replace ACCESS_ONCE with READ_ONCE
  x86/spinlock: Replace ACCESS_ONCE with READ_ONCE
  mm: replace ACCESS_ONCE with READ_ONCE or barriers
  kernel: Provide READ_ONCE and ASSIGN_ONCE

1  2 
arch/mips/mm/gup.c
arch/s390/kvm/gaccess.c
arch/x86/include/asm/spinlock.h
mm/gup.c
mm/memory.c
mm/rmap.c

Simple merge
Simple merge
Simple merge
diff --cc mm/gup.c
index 0ca1df9075ab7ff3cbe24c0ff06ec19a65701a93,f2305deaef507f82cbaf38ce61503ff631b9c56a..a900759cc8075fc8b0da9a37ebf6f93de34d8d10
+++ b/mm/gup.c
@@@ -966,9 -915,9 +966,9 @@@ static int gup_pud_range(pgd_t pgd, uns
        unsigned long next;
        pud_t *pudp;
  
 -      pudp = pud_offset(pgdp, addr);
 +      pudp = pud_offset(&pgd, addr);
        do {
-               pud_t pud = ACCESS_ONCE(*pudp);
+               pud_t pud = READ_ONCE(*pudp);
  
                next = pud_addr_end(addr, end);
                if (pud_none(pud))
diff --cc mm/memory.c
Simple merge
diff --cc mm/rmap.c
Simple merge