1. 17 7月, 2009 3 次提交
    • O
      kernel: is_current_single_threaded: don't use ->mmap_sem · 967cc537
      Oleg Nesterov 提交于
      is_current_single_threaded() can safely miss a freshly forked CLONE_VM
      task, but in this case it must not miss its parent. That is why we take
      mm->mmap_sem for writing to make sure a thread/task with the same ->mm
      can't pass exit_mm() and disappear.
      
      However we can avoid ->mmap_sem and rely on rcu/barriers:
      
      	- if we do not see the exiting parent on thread/process list
      	  we see the result of list_del_rcu(), in this case we must
      	  also see the result of list_add_rcu() which does wmb().
      
      	- if we do see the parent but its ->mm == NULL, we need rmb()
      	  to make sure we can't miss the child.
      Signed-off-by: NOleg Nesterov <oleg@redhat.com>
      Acked-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      967cc537
    • O
      kernel: rename is_single_threaded(task) to current_is_single_threaded(void) · 5bb459bb
      Oleg Nesterov 提交于
      - is_single_threaded(task) is not safe unless task == current,
        we can't use task->signal or task->mm.
      
      - it doesn't make sense unless task == current, the task can
        fork right after the check.
      
      Rename it to current_is_single_threaded() and kill the argument.
      Signed-off-by: NOleg Nesterov <oleg@redhat.com>
      Acked-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      5bb459bb
    • O
      kernel: fix is_single_threaded · d2e3ee9b
      Oleg Nesterov 提交于
      - Fix the comment, is_single_threaded(p) actually means that nobody shares
        ->mm with p.
      
        I think this helper should be renamed, and it should not have arguments.
        With or without this patch it must not be used unless p == current,
        otherwise we can't safely use p->signal or p->mm.
      
      - "if (atomic_read(&p->signal->count) != 1)" is not right when we have a
        zombie group leader, use signal->live instead.
      
      - Add PF_KTHREAD check to skip kernel threads which may borrow p->mm,
        otherwise we can return the wrong "false".
      
      - Use for_each_process() instead of do_each_thread(), all threads must use
        the same ->mm.
      
      - Use down_write(mm->mmap_sem) + rcu_read_lock() instead of tasklist_lock
        to iterate over the process list. If there is another CLONE_VM process
        it can't pass exit_mm() which takes the same mm->mmap_sem. We can miss
        a freshly forked CLONE_VM task, but this doesn't matter because we must
        see its parent and return false.
      Signed-off-by: NOleg Nesterov <oleg@redhat.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: James Morris <jmorris@namei.org>
      Cc: Roland McGrath <roland@redhat.com>
      Cc: Stephen Smalley <sds@tycho.nsa.gov>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NJames Morris <jmorris@namei.org>
      d2e3ee9b
  2. 11 7月, 2009 1 次提交
    • I
      dma-debug: Fix the overlap() function to be correct and readable · f39d1b97
      Ingo Molnar 提交于
      Linus noticed how unclean and buggy the overlap() function is:
      
       - It uses convoluted (and bug-causing) positive checks for
         range overlap - instead of using a more natural negative
         check.
      
       - Even the positive checks are buggy: a positive intersection
         check has four natural cases while we checked only for three,
         missing the (addr < start && addr2 == end) case for example.
      
       - The variables are mis-named, making it non-obvious how the
         check was done.
      
       - It needlessly uses u64 instead of unsigned long. Since these
         are kernel memory pointers and we explicitly exclude highmem
         ranges anyway we cannot ever overflow 32 bits, even if we
         could. (and on 64-bit it doesnt matter anyway)
      
      All in one, this function needs a total revamp. I used Linus's
      suggestions minus the paranoid checks (we cannot overflow really
      because if we get totally bad DMA ranges passed far more things
      break in the systems than just DMA debugging). I also fixed a
      few other small details i noticed.
      Reported-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Cc: Joerg Roedel <joerg.roedel@amd.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      f39d1b97
  3. 25 6月, 2009 1 次提交
  4. 23 6月, 2009 1 次提交
  5. 21 6月, 2009 1 次提交
  6. 19 6月, 2009 2 次提交
    • A
      lib/checksum.c: fix endianess bug · 32a9ff9c
      Arnd Bergmann 提交于
      The new generic checksum code has a small dependency on endianess and
      worked only on big-endian systems. I could not find a nice efficient
      way to express this, so I added an #ifdef. Using
      'result += le16_to_cpu(*buff);' would have worked as well, but
      would be slightly less efficient on big-endian systems and IMHO
      would not be clearer.
      
      Also fix a bug that prevents this from working on 64-bit machines.
      If you have a 64-bit CPU and want to use the generic checksum
      code, you should probably do some more optimizations anyway, but
      at least the code should not break.
      Reported-by: NMike Frysinger <vapier@gentoo.org>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      32a9ff9c
    • F
      lib: add lib/gcd.c · d2829224
      Florian Fainelli 提交于
      This patch adds lib/gcd.c which contains a greatest common divider
      implementation taken from sound/core/pcm_timer.c
      
      Several usages of this new library function will be sent to subsystem
      maintainers.
      
      [akpm@linux-foundation.org: use swap() (pointed out by Joe)]
      [akpm@linux-foundation.org: just add gcd.o to obj-y, remove Kconfig changes]
      Signed-off-by: NFlorian Fainelli <florian@openwrt.org>
      Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
      Cc: Takashi Iwai <tiwai@suse.de>
      Cc: Simon Horman <horms@verge.net.au>
      Cc: Julius Volz <juliusv@google.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Patrick McHardy <kaber@trash.net>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      d2829224
  7. 17 6月, 2009 9 次提交
  8. 16 6月, 2009 2 次提交
  9. 15 6月, 2009 5 次提交
  10. 12 6月, 2009 5 次提交
  11. 11 6月, 2009 1 次提交
  12. 09 6月, 2009 1 次提交
  13. 08 6月, 2009 5 次提交
  14. 07 6月, 2009 1 次提交
  15. 02 6月, 2009 2 次提交