1. 12 2月, 2015 1 次提交
    • K
      mm, asm-generic: define PUD_SHIFT in <asm-generic/4level-fixup.h> · 4155b8e0
      Kirill A. Shutemov 提交于
      If an architecure uses <asm-generic/4level-fixup.h>, build fails if we
      try to use PUD_SHIFT in generic code:
      
         In file included from arch/microblaze/include/asm/bug.h:1:0,
                          from include/linux/bug.h:4,
                          from include/linux/thread_info.h:11,
                          from include/asm-generic/preempt.h:4,
                          from arch/microblaze/include/generated/asm/preempt.h:1,
                          from include/linux/preempt.h:18,
                          from include/linux/spinlock.h:50,
                          from include/linux/mmzone.h:7,
                          from include/linux/gfp.h:5,
                          from include/linux/slab.h:14,
                          from mm/mmap.c:12:
         mm/mmap.c: In function 'exit_mmap':
      >> mm/mmap.c:2858:46: error: 'PUD_SHIFT' undeclared (first use in this function)
             round_up(FIRST_USER_ADDRESS, PUD_SIZE) >> PUD_SHIFT);
                                                       ^
         include/asm-generic/bug.h:86:25: note: in definition of macro 'WARN_ON'
           int __ret_warn_on = !!(condition);    \
                                  ^
         mm/mmap.c:2858:46: note: each undeclared identifier is reported only once for each function it appears in
             round_up(FIRST_USER_ADDRESS, PUD_SIZE) >> PUD_SHIFT);
                                                       ^
         include/asm-generic/bug.h:86:25: note: in definition of macro 'WARN_ON'
           int __ret_warn_on = !!(condition);    \
                                  ^
      As with <asm-generic/pgtable-nopud.h>, let's define PUD_SHIFT to
      PGDIR_SHIFT.
      Signed-off-by: NKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Reported-by: NWu Fengguang <fengguang.wu@intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4155b8e0
  2. 11 2月, 2015 1 次提交
  3. 13 1月, 2015 1 次提交
    • W
      mm: mmu_gather: use tlb->end != 0 only for TLB invalidation · 721c21c1
      Will Deacon 提交于
      When batching up address ranges for TLB invalidation, we check tlb->end
      != 0 to indicate that some pages have actually been unmapped.
      
      As of commit f045bbb9 ("mmu_gather: fix over-eager
      tlb_flush_mmu_free() calling"), we use the same check for freeing these
      pages in order to avoid a performance regression where we call
      free_pages_and_swap_cache even when no pages are actually queued up.
      
      Unfortunately, the range could have been reset (tlb->end = 0) by
      tlb_end_vma, which has been shown to cause memory leaks on arm64.
      Furthermore, investigation into these leaks revealed that the fullmm
      case on task exit no longer invalidates the TLB, by virtue of tlb->end
       == 0 (in 3.18, need_flush would have been set).
      
      This patch resolves the problem by reverting commit f045bbb9, using
      instead tlb->local.nr as the predicate for page freeing in
      tlb_flush_mmu_free and ensuring that tlb->end is initialised to a
      non-zero value in the fullmm case.
      Tested-by: NMark Langsdorf <mlangsdo@redhat.com>
      Tested-by: NDave Hansen <dave@sr71.net>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      721c21c1
  4. 12 12月, 2014 1 次提交
    • A
      arch: Add lightweight memory barriers dma_rmb() and dma_wmb() · 1077fa36
      Alexander Duyck 提交于
      There are a number of situations where the mandatory barriers rmb() and
      wmb() are used to order memory/memory operations in the device drivers
      and those barriers are much heavier than they actually need to be.  For
      example in the case of PowerPC wmb() calls the heavy-weight sync
      instruction when for coherent memory operations all that is really needed
      is an lsync or eieio instruction.
      
      This commit adds a coherent only version of the mandatory memory barriers
      rmb() and wmb().  In most cases this should result in the barrier being the
      same as the SMP barriers for the SMP case, however in some cases we use a
      barrier that is somewhere in between rmb() and smp_rmb().  For example on
      ARM the rmb barriers break down as follows:
      
        Barrier   Call     Explanation
        --------- -------- ----------------------------------
        rmb()     dsb()    Data synchronization barrier - system
        dma_rmb() dmb(osh) data memory barrier - outer sharable
        smp_rmb() dmb(ish) data memory barrier - inner sharable
      
      These new barriers are not as safe as the standard rmb() and wmb().
      Specifically they do not guarantee ordering between coherent and incoherent
      memories.  The primary use case for these would be to enforce ordering of
      reads and writes when accessing coherent memory that is shared between the
      CPU and a device.
      
      It may also be noted that there is no dma_mb().  Most architectures don't
      provide a good mechanism for performing a coherent only full barrier without
      resorting to the same mechanism used in mb().  As such there isn't much to
      be gained in trying to define such a function.
      
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
      Cc: Michael Ellerman <michael@ellerman.id.au>
      Cc: Michael Neuling <mikey@neuling.org>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Geert Uytterhoeven <geert@linux-m68k.org>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: David Miller <davem@davemloft.net>
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NAlexander Duyck <alexander.h.duyck@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1077fa36
  5. 11 12月, 2014 1 次提交
  6. 08 12月, 2014 1 次提交
  7. 02 12月, 2014 1 次提交
    • W
      iommu: provide early initialisation hook for IOMMU drivers · 1cd076bf
      Will Deacon 提交于
      IOMMU drivers must be initialised before any of their upstream devices,
      otherwise the relevant iommu_ops won't be configured for the bus in
      question. To solve this, a number of IOMMU drivers use initcalls to
      initialise the driver before anything has a chance to be probed.
      
      Whilst this solves the immediate problem, it leaves the job of probing
      the IOMMU completely separate from the iommu_ops to configure the IOMMU,
      which are called on a per-bus basis and require the driver to figure out
      exactly which instance of the IOMMU is being requested. In particular,
      the add_device callback simply passes a struct device to the driver,
      which then has to parse firmware tables or probe buses to identify the
      relevant IOMMU instance.
      
      This patch takes the first step in addressing this problem by adding an
      early initialisation pass for IOMMU drivers, giving them the ability to
      store some per-instance data in their iommu_ops structure and store that
      in their of_node. This can later be used when parsing OF masters to
      identify the IOMMU instance in question.
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NJoerg Roedel <jroedel@suse.de>
      Acked-by: NMarek Szyprowski <m.szyprowski@samsung.com>
      Tested-by: NRobin Murphy <robin.murphy@arm.com>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      1cd076bf
  8. 28 11月, 2014 1 次提交
  9. 23 11月, 2014 2 次提交
    • T
      asm-generic: Add msi.h · 926ff9ad
      Thomas Gleixner 提交于
      To support MSI irq domains we want a generic data structure for
      allocation, but we need the option to provide an architecture specific
      version of it. So instead of playing #ifdef games in linux/msi.h we
      add a generic header file and let architectures decide whether to
      include it or to provide their own implementation and provide the
      required typedef.
      
      I know that typedefs are not really nice, but in this case there are no
      forward declarations required and it's the simplest solution.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Jiang Liu <jiang.liu@linux.intel.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Cc: Grant Likely <grant.likely@linaro.org>
      Cc: Marc Zyngier <marc.zyngier@arm.com>
      Cc: Yijing Wang <wangyijing@huawei.com>
      Cc: Yingjoe Chen <yingjoe.chen@mediatek.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Matthias Brugger <matthias.bgg@gmail.com>
      Cc: Alexander Gordeev <agordeev@redhat.com>
      926ff9ad
    • D
      asm-generic: Remove asm-generic arch_bprm_mm_init() · 9f7789f8
      Dave Hansen 提交于
      This is a follow-on to commit 62e88b1c 'mm: Make
      arch_unmap()/bprm_mm_init() available to all architectures'
      
      I removed the asm-generic version of arch_unmap() in that patch,
      but missed arch_bprm_mm_init().  So this broke the build for
      architectures using asm-generic/mmu_context.h who actually have
      an MMU.
      
      Fixes: 62e88b1c 'mm: Make arch_unmap()/bprm_mm_init() available to all architectures'
      Signed-off-by: NDave Hansen <dave.hansen@linux.intel.com>
      Cc: Dave Hansen <dave@sr71.net>
      Cc: linux-arch@vger.kernel.org
      Cc: x86@kernel.org
      Link: http://lkml.kernel.org/r/20141122163711.0F037EE6@viggo.jf.intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      9f7789f8
  10. 19 11月, 2014 1 次提交
    • D
      mm: Make arch_unmap()/bprm_mm_init() available to all architectures · 62e88b1c
      Dave Hansen 提交于
      The x86 MPX patch set calls arch_unmap() and arch_bprm_mm_init()
      from fs/exec.c, so we need at least a stub for them in all
      architectures.  They are only called under an #ifdef for
      CONFIG_MMU=y, so we can at least restict this to architectures
      with MMU support.
      
      blackfin/c6x have no MMU support, so do not call arch_unmap().
      They also do not include mm_hooks.h or mmu_context.h at all and
      do not need to be touched.
      
      s390, um and unicore32 do not use asm-generic/mm_hooks.h, so got
      their own arch_unmap() versions.  (I also moved um's
      arch_dup_mmap() to be closer to the other mm_hooks.h functions).
      
      xtensa only includes mm_hooks when MMU=y, which should be fine
      since arch_unmap() is called only from MMU=y code.
      
      For the rest, we use the stub copies of these functions in
      asm-generic/mm_hook.h.
      
      I cross compiled defconfigs for cris (to check NOMMU) and s390
      to make sure that this works.  I also checked a 64-bit build
      of UML and all my normal x86 builds including PARAVIRT on and
      off.
      Signed-off-by: NDave Hansen <dave.hansen@linux.intel.com>
      Cc: Dave Hansen <dave@sr71.net>
      Cc: linux-arch@vger.kernel.org
      Cc: x86@kernel.org
      Link: http://lkml.kernel.org/r/20141118182350.8B4AA2C2@viggo.jf.intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      62e88b1c
  11. 18 11月, 2014 2 次提交
    • D
      x86, mpx: Cleanup unused bound tables · 1de4fa14
      Dave Hansen 提交于
      The previous patch allocates bounds tables on-demand.  As noted in
      an earlier description, these can add up to *HUGE* amounts of
      memory.  This has caused OOMs in practice when running tests.
      
      This patch adds support for freeing bounds tables when they are no
      longer in use.
      
      There are two types of mappings in play when unmapping tables:
       1. The mapping with the actual data, which userspace is
          munmap()ing or brk()ing away, etc...
       2. The mapping for the bounds table *backing* the data
          (is tagged with VM_MPX, see the patch "add MPX specific
          mmap interface").
      
      If userspace use the prctl() indroduced earlier in this patchset
      to enable the management of bounds tables in kernel, when it
      unmaps the first type of mapping with the actual data, the kernel
      needs to free the mapping for the bounds table backing the data.
      This patch hooks in at the very end of do_unmap() to do so.
      We look at the addresses being unmapped and find the bounds
      directory entries and tables which cover those addresses.  If
      an entire table is unused, we clear associated directory entry
      and free the table.
      
      Once we unmap the bounds table, we would have a bounds directory
      entry pointing at empty address space. That address space might
      now be allocated for some other (random) use, and the MPX
      hardware might now try to walk it as if it were a bounds table.
      That would be bad.  So any unmapping of an enture bounds table
      has to be accompanied by a corresponding write to the bounds
      directory entry to invalidate it.  That write to the bounds
      directory can fault, which causes the following problem:
      
      Since we are doing the freeing from munmap() (and other paths
      like it), we hold mmap_sem for write. If we fault, the page
      fault handler will attempt to acquire mmap_sem for read and
      we will deadlock.  To avoid the deadlock, we pagefault_disable()
      when touching the bounds directory entry and use a
      get_user_pages() to resolve the fault.
      
      The unmapping of bounds tables happends under vm_munmap().  We
      also (indirectly) call vm_munmap() to _do_ the unmapping of the
      bounds tables.  We avoid unbounded recursion by disallowing
      freeing of bounds tables *for* bounds tables.  This would not
      occur normally, so should not have any practical impact.  Being
      strict about it here helps ensure that we do not have an
      exploitable stack overflow.
      Based-on-patch-by: NQiaowei Ren <qiaowei.ren@intel.com>
      Signed-off-by: NDave Hansen <dave.hansen@linux.intel.com>
      Cc: linux-mm@kvack.org
      Cc: linux-mips@linux-mips.org
      Cc: Dave Hansen <dave@sr71.net>
      Link: http://lkml.kernel.org/r/20141114151831.E4531C4A@viggo.jf.intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      1de4fa14
    • D
      x86, mpx: On-demand kernel allocation of bounds tables · fe3d197f
      Dave Hansen 提交于
      This is really the meat of the MPX patch set.  If there is one patch to
      review in the entire series, this is the one.  There is a new ABI here
      and this kernel code also interacts with userspace memory in a
      relatively unusual manner.  (small FAQ below).
      
      Long Description:
      
      This patch adds two prctl() commands to provide enable or disable the
      management of bounds tables in kernel, including on-demand kernel
      allocation (See the patch "on-demand kernel allocation of bounds tables")
      and cleanup (See the patch "cleanup unused bound tables"). Applications
      do not strictly need the kernel to manage bounds tables and we expect
      some applications to use MPX without taking advantage of this kernel
      support. This means the kernel can not simply infer whether an application
      needs bounds table management from the MPX registers.  The prctl() is an
      explicit signal from userspace.
      
      PR_MPX_ENABLE_MANAGEMENT is meant to be a signal from userspace to
      require kernel's help in managing bounds tables.
      
      PR_MPX_DISABLE_MANAGEMENT is the opposite, meaning that userspace don't
      want kernel's help any more. With PR_MPX_DISABLE_MANAGEMENT, the kernel
      won't allocate and free bounds tables even if the CPU supports MPX.
      
      PR_MPX_ENABLE_MANAGEMENT will fetch the base address of the bounds
      directory out of a userspace register (bndcfgu) and then cache it into
      a new field (->bd_addr) in  the 'mm_struct'.  PR_MPX_DISABLE_MANAGEMENT
      will set "bd_addr" to an invalid address.  Using this scheme, we can
      use "bd_addr" to determine whether the management of bounds tables in
      kernel is enabled.
      
      Also, the only way to access that bndcfgu register is via an xsaves,
      which can be expensive.  Caching "bd_addr" like this also helps reduce
      the cost of those xsaves when doing table cleanup at munmap() time.
      Unfortunately, we can not apply this optimization to #BR fault time
      because we need an xsave to get the value of BNDSTATUS.
      
      ==== Why does the hardware even have these Bounds Tables? ====
      
      MPX only has 4 hardware registers for storing bounds information.
      If MPX-enabled code needs more than these 4 registers, it needs to
      spill them somewhere. It has two special instructions for this
      which allow the bounds to be moved between the bounds registers
      and some new "bounds tables".
      
      They are similar conceptually to a page fault and will be raised by
      the MPX hardware during both bounds violations or when the tables
      are not present. This patch handles those #BR exceptions for
      not-present tables by carving the space out of the normal processes
      address space (essentially calling the new mmap() interface indroduced
      earlier in this patch set.) and then pointing the bounds-directory
      over to it.
      
      The tables *need* to be accessed and controlled by userspace because
      the instructions for moving bounds in and out of them are extremely
      frequent. They potentially happen every time a register pointing to
      memory is dereferenced. Any direct kernel involvement (like a syscall)
      to access the tables would obviously destroy performance.
      
      ==== Why not do this in userspace? ====
      
      This patch is obviously doing this allocation in the kernel.
      However, MPX does not strictly *require* anything in the kernel.
      It can theoretically be done completely from userspace. Here are
      a few ways this *could* be done. I don't think any of them are
      practical in the real-world, but here they are.
      
      Q: Can virtual space simply be reserved for the bounds tables so
         that we never have to allocate them?
      A: As noted earlier, these tables are *HUGE*. An X-GB virtual
         area needs 4*X GB of virtual space, plus 2GB for the bounds
         directory. If we were to preallocate them for the 128TB of
         user virtual address space, we would need to reserve 512TB+2GB,
         which is larger than the entire virtual address space today.
         This means they can not be reserved ahead of time. Also, a
         single process's pre-popualated bounds directory consumes 2GB
         of virtual *AND* physical memory. IOW, it's completely
         infeasible to prepopulate bounds directories.
      
      Q: Can we preallocate bounds table space at the same time memory
         is allocated which might contain pointers that might eventually
         need bounds tables?
      A: This would work if we could hook the site of each and every
         memory allocation syscall. This can be done for small,
         constrained applications. But, it isn't practical at a larger
         scale since a given app has no way of controlling how all the
         parts of the app might allocate memory (think libraries). The
         kernel is really the only place to intercept these calls.
      
      Q: Could a bounds fault be handed to userspace and the tables
         allocated there in a signal handler instead of in the kernel?
      A: (thanks to tglx) mmap() is not on the list of safe async
         handler functions and even if mmap() would work it still
         requires locking or nasty tricks to keep track of the
         allocation state there.
      
      Having ruled out all of the userspace-only approaches for managing
      bounds tables that we could think of, we create them on demand in
      the kernel.
      Based-on-patch-by: NQiaowei Ren <qiaowei.ren@intel.com>
      Signed-off-by: NDave Hansen <dave.hansen@linux.intel.com>
      Cc: linux-mm@kvack.org
      Cc: linux-mips@linux-mips.org
      Cc: Dave Hansen <dave@sr71.net>
      Link: http://lkml.kernel.org/r/20141114151829.AD4310DE@viggo.jf.intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      fe3d197f
  12. 17 11月, 2014 1 次提交
    • W
      mmu_gather: move minimal range calculations into generic code · fb7332a9
      Will Deacon 提交于
      On architectures with hardware broadcasting of TLB invalidation messages
      , it makes sense to reduce the range of the mmu_gather structure when
      unmapping page ranges based on the dirty address information passed to
      tlb_remove_tlb_entry.
      
      arm64 already does this by directly manipulating the start/end fields
      of the gather structure, but this confuses the generic code which
      does not expect these fields to change and can end up calculating
      invalid, negative ranges when forcing a flush in zap_pte_range.
      
      This patch moves the minimal range calculation out of the arm64 code
      and into the generic implementation, simplifying zap_pte_range in the
      process (which no longer needs to care about start/end, since they will
      point to the appropriate ranges already). With the range being tracked
      by core code, the need_flush flag is dropped in favour of checking that
      the end of the range has actually been set.
      
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Russell King - ARM Linux <linux@arm.linux.org.uk>
      Cc: Michal Simek <monstr@monstr.eu>
      Acked-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      fb7332a9
  13. 15 11月, 2014 1 次提交
    • J
      Revert "fast_hash: avoid indirect function calls" · a77f9c5d
      Jay Vosburgh 提交于
      This reverts commit e5a2c899.
      
      	Commit e5a2c899 introduced an alternative_call, arch_fast_hash2,
      that selects between __jhash2 and __intel_crc4_2_hash based on the
      X86_FEATURE_XMM4_2.
      
      	Unfortunately, the alternative_call system does not appear to be
      suitable for use with C functions, as register usage is not handled
      properly for the called functions.  The __jhash2 function in particular
      clobbers registers that are not preserved when called via
      alternative_call, resulting in a panic for direct callers of
      arch_fast_hash2 on older CPUs lacking sse4_2.  It is possible that
      __intel_crc4_2_hash works merely by chance because it uses fewer
      registers.
      
      	This commit was suggested as the source of the problem by Jesse
      Gross <jesse@nicira.com>.
      Signed-off-by: NJay Vosburgh <jay.vosburgh@canonical.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a77f9c5d
  14. 10 11月, 2014 2 次提交
    • T
      asm-generic/io.h: Implement generic {read,write}s*() · 9ab3a7a0
      Thierry Reding 提交于
      Currently driver writers need to use io{read,write}{8,16,32}_rep() when
      accessing FIFO registers portably. This is bad for two reasons: it is
      inconsistent with how other registers are accessed using the standard
      {read,write}{b,w,l}() functions, which can lead to confusion. On some
      architectures the io{read,write}*() functions also need to perform some
      extra checks to determine whether an address is memory-mapped or refers
      to I/O space. Drivers which can be expected to never use I/O can safely
      use the {read,write}s{b,w,l,q}(), just like they use their non-string
      variants and there's no need for these extra checks.
      
      This patch implements generic versions of readsb(), readsw(), readsl(),
      readsq(), writesb(), writesw(), writesl() and writesq(). Variants of
      these string functions for I/O accesses (ins*() and outs*() as well as
      ioread*_rep() and iowrite*_rep()) are now implemented in terms of the
      new functions.
      
      Going forward, {read,write}{,s}{b,w,l,q}() should be used consistently
      by drivers for devices that will only ever be memory-mapped and hence
      don't need to access I/O space, whereas io{read,write}{8,16,32}_rep()
      should be used by drivers for devices that can be either memory-mapped
      or I/O-mapped.
      Signed-off-by: NThierry Reding <treding@nvidia.com>
      9ab3a7a0
    • T
      asm-generic/io.h: Reconcile I/O accessor overrides · 9216efaf
      Thierry Reding 提交于
      Overriding I/O accessors and helpers is currently very inconsistent.
      This commit introduces a homogeneous way to override functions by
      checking for the existence of a macro with the same of the function.
      Architectures can provide their own implementations and communicate this
      to the generic header by defining the appropriate macro. Doing this will
      also help prevent the implementations from being subsequently
      overridden.
      
      While at it, also turn a lot of macros into static inline functions for
      better type checking and to provide a canonical signature for overriding
      architectures to copy. Also reorder functions by logical groups.
      Signed-off-by: NThierry Reding <treding@nvidia.com>
      9216efaf
  15. 06 11月, 2014 1 次提交
  16. 28 10月, 2014 1 次提交
  17. 27 10月, 2014 1 次提交
  18. 21 10月, 2014 1 次提交
    • W
      asm-generic: io: implement relaxed accessor macros as conditional wrappers · 9439eb3a
      Will Deacon 提交于
      {read,write}{b,w,l,q}_relaxed are implemented by some architectures in
      order to permit memory-mapped I/O accesses with weaker barrier semantics
      than the non-relaxed variants.
      
      This patch adds wrappers to asm-generic so that drivers can rely on the
      relaxed accessors being available, even if they don't always provide
      weaker ordering guarantees. Since some architectures both include
      asm-generic/io.h and define some relaxed accessors, the definitions here
      are conditional for the time being.
      
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      9439eb3a
  19. 14 10月, 2014 1 次提交
    • P
      mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared · 64e45507
      Peter Feiner 提交于
      For VMAs that don't want write notifications, PTEs created for read faults
      have their write bit set.  If the read fault happens after VM_SOFTDIRTY is
      cleared, then the PTE's softdirty bit will remain clear after subsequent
      writes.
      
      Here's a simple code snippet to demonstrate the bug:
      
        char* m = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE,
                       MAP_ANONYMOUS | MAP_SHARED, -1, 0);
        system("echo 4 > /proc/$PPID/clear_refs"); /* clear VM_SOFTDIRTY */
        assert(*m == '\0');     /* new PTE allows write access */
        assert(!soft_dirty(x));
        *m = 'x';               /* should dirty the page */
        assert(soft_dirty(x));  /* fails */
      
      With this patch, write notifications are enabled when VM_SOFTDIRTY is
      cleared.  Furthermore, to avoid unnecessary faults, write notifications
      are disabled when VM_SOFTDIRTY is set.
      
      As a side effect of enabling and disabling write notifications with
      care, this patch fixes a bug in mprotect where vm_page_prot bits set by
      drivers were zapped on mprotect.  An analogous bug was fixed in mmap by
      commit c9d0bf24 ("mm: uncached vma support with writenotify").
      Signed-off-by: NPeter Feiner <pfeiner@google.com>
      Reported-by: NPeter Feiner <pfeiner@google.com>
      Suggested-by: NKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Cyrill Gorcunov <gorcunov@openvz.org>
      Cc: Pavel Emelyanov <xemul@parallels.com>
      Cc: Jamie Liu <jamieliu@google.com>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      64e45507
  20. 10 10月, 2014 3 次提交
    • G
      nosave: consolidate __nosave_{begin,end} in <asm/sections.h> · 7f8998c7
      Geert Uytterhoeven 提交于
      The different architectures used their own (and different) declarations:
      
          extern __visible const void __nosave_begin, __nosave_end;
          extern const void __nosave_begin, __nosave_end;
          extern long __nosave_begin, __nosave_end;
      
      Consolidate them using the first variant in <asm/sections.h>.
      Signed-off-by: NGeert Uytterhoeven <geert@linux-m68k.org>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7f8998c7
    • L
      common: dma-mapping: introduce common remapping functions · 513510dd
      Laura Abbott 提交于
      For architectures without coherent DMA, memory for DMA may need to be
      remapped with coherent attributes.  Factor out the the remapping code from
      arm and put it in a common location to reduce code duplication.
      
      As part of this, the arm APIs are now migrated away from
      ioremap_page_range to the common APIs which use map_vm_area for remapping.
       This should be an equivalent change and using map_vm_area is more correct
      as ioremap_page_range is intended to bring in io addresses into the cpu
      space and not regular kernel managed memory.
      Signed-off-by: NLaura Abbott <lauraa@codeaurora.org>
      Reviewed-by: NCatalin Marinas <catalin.marinas@arm.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: David Riley <davidriley@chromium.org>
      Cc: Olof Johansson <olof@lixom.net>
      Cc: Ritesh Harjain <ritesh.harjani@gmail.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: James Hogan <james.hogan@imgtec.com>
      Cc: Laura Abbott <lauraa@codeaurora.org>
      Cc: Mitchel Humpherys <mitchelh@codeaurora.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      513510dd
    • M
      mm: remove misleading ARCH_USES_NUMA_PROT_NONE · 6a33979d
      Mel Gorman 提交于
      ARCH_USES_NUMA_PROT_NONE was defined for architectures that implemented
      _PAGE_NUMA using _PROT_NONE.  This saved using an additional PTE bit and
      relied on the fact that PROT_NONE vmas were skipped by the NUMA hinting
      fault scanner.  This was found to be conceptually confusing with a lot of
      implicit assumptions and it was asked that an alternative be found.
      
      Commit c46a7c81 "x86: define _PAGE_NUMA by reusing software bits on the
      PMD and PTE levels" redefined _PAGE_NUMA on x86 to be one of the swap PTE
      bits and shrunk the maximum possible swap size but it did not go far
      enough.  There are no architectures that reuse _PROT_NONE as _PROT_NUMA
      but the relics still exist.
      
      This patch removes ARCH_USES_NUMA_PROT_NONE and removes some unnecessary
      duplication in powerpc vs the generic implementation by defining the types
      the core NUMA helpers expected to exist from x86 with their ppc64
      equivalent.  This necessitated that a PTE bit mask be created that
      identified the bits that distinguish present from NUMA pte entries but it
      is expected this will only differ between arches based on _PAGE_PROTNONE.
      The naming for the generic helpers was taken from x86 originally but ppc64
      has types that are equivalent for the purposes of the helper so they are
      mapped instead of duplicating code.
      Signed-off-by: NMel Gorman <mgorman@suse.de>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Cyrill Gorcunov <gorcunov@gmail.com>
      Reviewed-by: NAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      6a33979d
  21. 03 10月, 2014 3 次提交
  22. 01 10月, 2014 1 次提交
  23. 30 9月, 2014 1 次提交
  24. 26 9月, 2014 1 次提交
    • M
      asm-generic: COMMON_CLK defines __clk_{get,put} · b52f4914
      Mike Turquette 提交于
      If CONFIG_COMMON_CLK is selected then __clk_get and __clk_put are
      defined in drivers/clk/clk.c and declared in include/linux/clkdev.h.
      
      Sylwester's series[0] to properly support clk_{get,put} in the common
      clock framework made changes to the asm-specific clkdev.h headers, but
      not the asm-generic version. Tomeu's recent changes[1] to introduce a
      provider/consumer split in the clock framework uncovered this problem,
      causing the following build error on any architecture using the
      asm-generic clkdev.h (e.g. x86 architecture and the ACPI LPSS driver):
      
      In file included from drivers/acpi/acpi_lpss.c:15:0:
      include/linux/clkdev.h:59:5: error: conflicting types for ‘__clk_get’
       int __clk_get(struct clk_core *clk);
           ^
      In file included from arch/x86/include/generated/asm/clkdev.h:1:0,
                       from include/linux/clkdev.h:15,
                       from drivers/acpi/acpi_lpss.c:15:
      include/asm-generic/clkdev.h:20:19: note: previous definition of ‘__clk_get’ was here
       static inline int __clk_get(struct clk *clk) { return 1; }
                         ^
      
      Fixed by only declarating  __clk_get and __clk_put when
      CONFIG_COMMON_CLK is set.
      
      [0] http://lkml.kernel.org/r/<1386177127-2894-5-git-send-email-s.nawrocki@samsung.com>
      [1] http://lkml.kernel.org/r/<1409758148-20104-1-git-send-email-tomeu.vizoso@collabora.com>
      Signed-off-by: NMike Turquette <mturquette@linaro.org>
      b52f4914
  25. 24 9月, 2014 1 次提交
  26. 23 9月, 2014 1 次提交
    • M
      gpio: Increase ARCH_NR_GPIOs to 512 · 7ca267fa
      Mika Westerberg 提交于
      Some newer Intel SoCs, like Braswell already have more than 256 GPIOs
      available so the default limit is exceeded. Instead of adding more
      architecture specific gpio.h files with custom ARCH_NR_GPIOs we increase
      the gpiolib default limit to be twice the current.
      
      Current generic ARCH_NR_GPIOS limit is 256 which starts to be too small
      for newer Intel SoCs like Braswell. In order to support GPIO controllers
      on these SoCs we increase ARCH_NR_GPIOS to be 512 which should be
      sufficient for now.
      
      The kernel size increases a bit with this change. Below is an example of
      x86_64 kernel image.
      
      ARCH_NR_GPIOS=256
       text     data    bss     dec      hex    filename
       11476173 1971328 1265664 14713165 e0814d vmlinux
      
      ARCH_NR_GPIOS=512
       text     data    bss     dec      hex    filename
       11476173 1971328 1269760 14717261 e0914d vmlinux
      
      So the BSS size and this the kernel image size increases by 4k.
      Signed-off-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      7ca267fa
  27. 22 9月, 2014 1 次提交
  28. 14 9月, 2014 1 次提交
  29. 26 8月, 2014 1 次提交
  30. 14 8月, 2014 1 次提交
  31. 09 8月, 2014 1 次提交
    • J
      pci-dma-compat: add pci_zalloc_consistent helper · 82bf0baa
      Joe Perches 提交于
      Add this helper for consistency with pci_zalloc_coherent
      and the ability to remove unnecessary memset(,0,) uses.
      Signed-off-by: NJoe Perches <joe@perches.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: "James E.J. Bottomley" <JBottomley@parallels.com>
      Cc: "John W. Linville" <linville@tuxdriver.com>
      Cc: "Stephen M. Cameron" <scameron@beardog.cce.hp.com>
      Cc: Adam Radford <linuxraid@lsi.com>
      Cc: Chaoming Li <chaoming_li@realsil.com.cn>
      Cc: Chas Williams <chas@cmf.nrl.navy.mil>
      Cc: Christian Benvenuti <benve@cisco.com>
      Cc: Christopher Harrer <charrer@alacritech.com>
      Cc: Dario Ballabio <ballabio_dario@emc.com>
      Cc: David Airlie <airlied@linux.ie>
      Cc: Don Fry <pcnet32@frontier.com>
      Cc: Faisal Latif <faisal.latif@intel.com>
      Cc: Forest Bond <forest@alittletooquiet.net>
      Cc: Govindarajulu Varadarajan <_govind@gmx.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Hal Rosenstock <hal.rosenstock@gmail.com>
      Cc: Hans Verkuil <hverkuil@xs4all.nl>
      Cc: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
      Cc: Larry Finger <Larry.Finger@lwfinger.net>
      Cc: Lennert Buytenhek <buytenh@wantstofly.org>
      Cc: Lior Dotan <liodot@gmail.com>
      Cc: Manish Chopra <manish.chopra@qlogic.com>
      Cc: Manohar Vanga <manohar.vanga@gmail.com>
      Cc: Martyn Welch <martyn.welch@ge.com>
      Cc: Mauro Carvalho Chehab <m.chehab@samsung.com>
      Cc: Michael Neuffer <mike@i-Connect.Net>
      Cc: Mirko Lindner <mlindner@marvell.com>
      Cc: Neel Patel <neepatel@cisco.com>
      Cc: Neela Syam Kolli <megaraidlinux@lsi.com>
      Cc: Rajesh Borundia <rajesh.borundia@qlogic.com>
      Cc: Roland Dreier <roland@kernel.org>
      Cc: Ron Mercer <ron.mercer@qlogic.com>
      Cc: Samuel Ortiz <samuel@sortiz.org>
      Cc: Sean Hefty <sean.hefty@intel.com>
      Cc: Shahed Shaikh <shahed.shaikh@qlogic.com>
      Cc: Sony Chacko <sony.chacko@qlogic.com>
      Cc: Stanislav Yakovlev <stas.yakovlev@gmail.com>
      Cc: Stephen Hemminger <stephen@networkplumber.org>
      Cc: Steve Wise <swise@opengridcomputing.com>
      Cc: Sujith Sankar <ssujith@cisco.com>
      Cc: Tom Tucker <tom@opengridcomputing.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      82bf0baa
  32. 25 7月, 2014 1 次提交
  33. 23 7月, 2014 1 次提交
    • A
      gpio: move gpio_ensure_requested() into legacy C file · d82da797
      Alexandre Courbot 提交于
      gpio_ensure_requested() only makes sense when using the integer-based
      GPIO API, so make sure it is called from there instead of the gpiod
      API which we know cannot be called with a non-requested GPIO anyway.
      
      The uses of gpio_ensure_requested() in the gpiod API were kind of
      out-of-place anyway, so putting them in gpio-legacy.c helps clearing the
      code.
      
      Actually, considering the time this ensure_requested mechanism has been
      around, maybe we should just turn this patch into "remove
      gpio_ensure_requested()" if we know for sure that no user depend on it
      anymore?
      Signed-off-by: NAlexandre Courbot <acourbot@nvidia.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      d82da797