• Linus Torvalds's avatar
    Merge branch 'sched-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · e13053f5
    Linus Torvalds authored
    Pull voluntary preemption fixes from Ingo Molnar:
     "This tree contains a speedup which is achieved through better
      might_sleep()/might_fault() preemption point annotations for uaccess
      functions, by Michael S Tsirkin:
    
      1. The only reason uaccess routines might sleep is if they fault.
         Make this explicit for all architectures.
    
      2. A voluntary preemption point in uaccess functions means compiler
         can't inline them efficiently, this breaks assumptions that they
         are very fast and small that e.g.  net code seems to make.  Remove
         this preemption point so behaviour matches with what callers
         assume.
    
      3. Accesses (e.g through socket ops) to kernel memory with KERNEL_DS
         like net/sunrpc does will never sleep.  Remove an unconditinal
         might_sleep() in the might_fault() inline in kernel.h (used when
         PROVE_LOCKING is not set).
    
      4. Accesses with pagefault_disable() return EFAULT but won't cause
         caller to sleep.  Check for that and thus avoid might_sleep() when
         PROVE_LOCKING is set.
    
      These changes offer a nice speedup for CONFIG_PREEMPT_VOLUNTARY=y
      kernels, here's a network bandwidth measurement between a virtual
      machine and the host:
    
       before:
            incoming: 7122.77   Mb/s
            outgoing: 8480.37   Mb/s
    
       after:
            incoming: 8619.24   Mb/s   [ +21.0% ]
            outgoing: 9455.42   Mb/s   [ +11.5% ]
    
      I kept these changes in a separate tree, separate from scheduler
      changes, because it's a mixed MM and scheduler topic"
    
    * 'sched-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
      mm, sched: Allow uaccess in atomic with pagefault_disable()
      mm, sched: Drop voluntary schedule from might_fault()
      x86: uaccess s/might_sleep/might_fault/
      tile: uaccess s/might_sleep/might_fault/
      powerpc: uaccess s/might_sleep/might_fault/
      mn10300: uaccess s/might_sleep/might_fault/
      microblaze: uaccess s/might_sleep/might_fault/
      m32r: uaccess s/might_sleep/might_fault/
      frv: uaccess s/might_sleep/might_fault/
      arm64: uaccess s/might_sleep/might_fault/
      asm-generic: uaccess s/might_sleep/might_fault/
    e13053f5
uaccess.h 11.3 KB