1. 29 7月, 2008 14 次提交
    • A
      mmu-notifiers: add mm_take_all_locks() operation · 7906d00c
      Andrea Arcangeli 提交于
      mm_take_all_locks holds off reclaim from an entire mm_struct.  This allows
      mmu notifiers to register into the mm at any time with the guarantee that
      no mmu operation is in progress on the mm.
      
      This operation locks against the VM for all pte/vma/mm related operations
      that could ever happen on a certain mm.  This includes vmtruncate,
      try_to_unmap, and all page faults.
      
      The caller must take the mmap_sem in write mode before calling
      mm_take_all_locks().  The caller isn't allowed to release the mmap_sem
      until mm_drop_all_locks() returns.
      
      mmap_sem in write mode is required in order to block all operations that
      could modify pagetables and free pages without need of altering the vma
      layout (for example populate_range() with nonlinear vmas).  It's also
      needed in write mode to avoid new anon_vmas to be associated with existing
      vmas.
      
      A single task can't take more than one mm_take_all_locks() in a row or it
      would deadlock.
      
      mm_take_all_locks() and mm_drop_all_locks are expensive operations that
      may have to take thousand of locks.
      
      mm_take_all_locks() can fail if it's interrupted by signals.
      
      When mmu_notifier_register returns, we must be sure that the driver is
      notified if some task is in the middle of a vmtruncate for the 'mm' where
      the mmu notifier was registered (mmu_notifier_invalidate_range_start/end
      is run around the vmtruncation but mmu_notifier_register can run after
      mmu_notifier_invalidate_range_start and before
      mmu_notifier_invalidate_range_end).  Same problem for rmap paths.  And
      we've to remove page pinning to avoid replicating the tlb_gather logic
      inside KVM (and GRU doesn't work well with page pinning regardless of
      needing tlb_gather), so without mm_take_all_locks when vmtruncate frees
      the page, kvm would have no way to notice that it mapped into sptes a page
      that is going into the freelist without a chance of any further
      mmu_notifier notification.
      
      [akpm@linux-foundation.org: coding-style fixes]
      Signed-off-by: NAndrea Arcangeli <andrea@qumranet.com>
      Acked-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Cc: Christoph Lameter <cl@linux-foundation.org>
      Cc: Jack Steiner <steiner@sgi.com>
      Cc: Robin Holt <holt@sgi.com>
      Cc: Nick Piggin <npiggin@suse.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Kanoj Sarcar <kanojsarcar@yahoo.com>
      Cc: Roland Dreier <rdreier@cisco.com>
      Cc: Steve Wise <swise@opengridcomputing.com>
      Cc: Avi Kivity <avi@qumranet.com>
      Cc: Hugh Dickins <hugh@veritas.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Chris Wright <chrisw@redhat.com>
      Cc: Marcelo Tosatti <marcelo@kvack.org>
      Cc: Eric Dumazet <dada1@cosmosbay.com>
      Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
      Cc: Izik Eidus <izike@qumranet.com>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Rik van Riel <riel@redhat.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7906d00c
    • A
      mmu-notifiers: add list_del_init_rcu() · 6beeac76
      Andrea Arcangeli 提交于
      Introduce list_del_init_rcu() and document it.
      Signed-off-by: NAndrea Arcangeli <andrea@qumranet.com>
      Acked-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Christoph Lameter <cl@linux-foundation.org>
      Cc: Jack Steiner <steiner@sgi.com>
      Cc: Robin Holt <holt@sgi.com>
      Cc: Nick Piggin <npiggin@suse.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Kanoj Sarcar <kanojsarcar@yahoo.com>
      Cc: Roland Dreier <rdreier@cisco.com>
      Cc: Steve Wise <swise@opengridcomputing.com>
      Cc: Avi Kivity <avi@qumranet.com>
      Cc: Hugh Dickins <hugh@veritas.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Chris Wright <chrisw@redhat.com>
      Cc: Marcelo Tosatti <marcelo@kvack.org>
      Cc: Eric Dumazet <dada1@cosmosbay.com>
      Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
      Cc: Izik Eidus <izike@qumranet.com>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Rik van Riel <riel@redhat.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      6beeac76
    • D
      arm: fix HAVE_CLK merge goof · 93686ae8
      David Brownell 提交于
      This fixes a merge goof whereby ARCH_EP93XX got the "select HAVE_CLK" line
      which belongs instead with ARCH_AT91.
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      93686ae8
    • A
      __ratelimit() cpu flags can't be static · 4d9c377c
      Alexey Dobriyan 提交于
      Signed-off-by: NAlexey Dobriyan <adobriyan@gmail.com>
      Cc: Dave Young <hidave.darkstar@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4d9c377c
    • H
      tmpfs: fix kernel BUG in shmem_delete_inode · 14fcc23f
      Hugh Dickins 提交于
      SuSE's insserve initscript ordering program hits kernel BUG at mm/shmem.c:814
      on 2.6.26.  It's using posix_fadvise on directories, and the shmem_readpage
      method added in 2.6.23 is letting POSIX_FADV_WILLNEED allocate useless pages
      to a tmpfs directory, incrementing i_blocks count but never decrementing it.
      
      Fix this by assigning shmem_aops (pointing to readpage and writepage and
      set_page_dirty) only when it's needed, on a regular file or a long symlink.
      
      Many thanks to Kel for outstanding bugreport and steps to reproduce it.
      Reported-by: NKel Modderman <kel@otaku42.de>
      Tested-by: NKel Modderman <kel@otaku42.de>
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Cc: <stable@kernel.org>		[2.6.25.x, 2.6.26.x]
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      14fcc23f
    • H
      exec: include pagemap.h again to fix build · ca5b172b
      Hugh Dickins 提交于
      Fix compilation errors on avr32 and without CONFIG_SWAP, introduced by
      ba92a43d ("exec: remove some includes")
      
        In file included from include/asm/tlb.h:24,
                         from fs/exec.c:55:
        include/asm-generic/tlb.h: In function 'tlb_flush_mmu':
        include/asm-generic/tlb.h:76: error: implicit declaration of function 'release_pages'
        include/asm-generic/tlb.h: In function 'tlb_remove_page':
        include/asm-generic/tlb.h:105: error: implicit declaration of function 'page_cache_release'
        make[1]: *** [fs/exec.o] Error 1
      
      This straightforward part-revert is nobody's favourite patch to address
      the underlying tlb.h needs swap.h needs pagemap.h (but sparc won't like
      that) mess; but appropriate to fix the build now before any overhaul.
      Reported-by: NYoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
      Reported-by: NHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Tested-by: NAdrian Bunk <bunk@kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      ca5b172b
    • L
      Merge branch 'cpus4096-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip · 63add2f2
      Linus Torvalds 提交于
      * 'cpus4096-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
        cpu masks: optimize and clean up cpumask_of_cpu()
        cpumask: export cpumask_of_cpu_map
        cpumask: change cpumask_of_cpu_ptr to use new cpumask_of_cpu
        cpumask: put cpumask_of_cpu_map in the initdata section
        cpumask: make cpumask_of_cpu_map generic
      63add2f2
    • J
      ipwireless: fix compile failure · 3684a601
      James Bottomley 提交于
      There's a brown paper bag compile failure introduced by this patch
      
      commit a0138692
      Author: David Sterba <dsterba@suse.cz>
      Date:   Mon Jul 28 16:53:32 2008 +0200
      
          ipwireless: Preallocate received packet buffers with MRU size
      
      Really, it can't ever have been even compile tested.  It looks like the
      closing bracket is in the wrong place, so this is the fix.
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3684a601
    • I
      Merge branch 'linus' into cpus4096 · 9e3ee1c3
      Ingo Molnar 提交于
      Conflicts:
      
      	kernel/stop_machine.c
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      9e3ee1c3
    • L
      cpu masks: optimize and clean up cpumask_of_cpu() · e56b3bc7
      Linus Torvalds 提交于
      Clean up and optimize cpumask_of_cpu(), by sharing all the zero words.
      
      Instead of stupidly generating all possible i=0...NR_CPUS 2^i patterns
      creating a huge array of constant bitmasks, realize that the zero words
      can be shared.
      
      In other words, on a 64-bit architecture, we only ever need 64 of these
      arrays - with a different bit set in one single world (with enough zero
      words around it so that we can create any bitmask by just offsetting in
      that big array). And then we just put enough zeroes around it that we
      can point every single cpumask to be one of those things.
      
      So when we have 4k CPU's, instead of having 4k arrays (of 4k bits each,
      with one bit set in each array - 2MB memory total), we have exactly 64
      arrays instead, each 8k bits in size (64kB total).
      
      And then we just point cpumask(n) to the right position (which we can
      calculate dynamically). Once we have the right arrays, getting
      "cpumask(n)" ends up being:
      
        static inline const cpumask_t *get_cpu_mask(unsigned int cpu)
        {
                const unsigned long *p = cpu_bit_bitmap[1 + cpu % BITS_PER_LONG];
                p -= cpu / BITS_PER_LONG;
                return (const cpumask_t *)p;
        }
      
      This brings other advantages and simplifications as well:
      
       - we are not wasting memory that is just filled with a single bit in
         various different places
      
       - we don't need all those games to re-create the arrays in some dense
         format, because they're already going to be dense enough.
      
      if we compile a kernel for up to 4k CPU's, "wasting" that 64kB of memory
      is a non-issue (especially since by doing this "overlapping" trick we
      probably get better cache behaviour anyway).
      
      [ mingo@elte.hu:
      
        Converted Linus's mails into a commit. See:
      
           http://lkml.org/lkml/2008/7/27/156
           http://lkml.org/lkml/2008/7/28/320
      
        Also applied a family filter - which also has the side-effect of leaving
        out the bits where Linus calls me an idio... Oh, never mind ;-)
      ]
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Al Viro <viro@ZenIV.linux.org.uk>
      Cc: Mike Travis <travis@sgi.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      e56b3bc7
    • I
      Merge branch 'linus' into cpus4096 · 414f746d
      Ingo Molnar 提交于
      414f746d
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input · f934fb19
      Linus Torvalds 提交于
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
        Input: add driver for Atmel integrated touchscreen controller
        Input: ads7846 - optimize order of calculating Rt in ads7846_rx()
        Input: ads7846 - fix sparse endian warnings
        Input: uinput - remove duplicate include
        Input: serio - offload resume to kseriod
        Input: serio - mark serio_register_driver() __must_check
      f934fb19
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm · 3988ba07
      Linus Torvalds 提交于
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm:
        dlm: fix uninitialized variable for search_rsb_list callers
        dlm: release socket on error
        dlm: fix basts for granted CW waiting PR/CW
        dlm: check for null in device_write
      3988ba07
    • L
      Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc · d9089c29
      Linus Torvalds 提交于
      * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (25 commits)
        powerpc: Disable 64K hugetlb support when doing 64K SPU mappings
        powerpc/powermac: Fixup default serial port device for pmac_zilog
        powerpc/powermac: Use sane default baudrate for SCC debugging
        powerpc/mm: Implement _PAGE_SPECIAL & pte_special() for 64-bit
        powerpc: Show processor cache information in sysfs
        powerpc: Make core id information available to userspace
        powerpc: Make core sibling information available to userspace
        powerpc/vio: More fallout from dma_mapping_error API change
        ibmveth: Fix multiple errors with dma_mapping_error conversion
        powerpc/pseries: Fix CMO sysdev attribute API change fallout
        powerpc: Enable tracehook for the architecture
        powerpc: Add TIF_NOTIFY_RESUME support for tracehook
        powerpc: Add asm/syscall.h with the tracehook entry points
        powerpc: Make syscall tracing use tracehook.h helpers
        powerpc: Call tracehook_signal_handler() when setting up signal frames
        powerpc: Update cpu_sibling_maps dynamically
        powerpc: register_cpu_online should be __cpuinit
        powerpc: kill useless SMT code in prom_hold_cpus
        powerpc: Fix 8xx build failure
        powerpc: Fix vio build warnings
        ...
      d9089c29
  2. 28 7月, 2008 26 次提交