Skip to content
  • Linus Torvalds's avatar
    edd7ab76
    Merge tag 'core-mm-2020-12-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · edd7ab76
    Linus Torvalds authored
    Pull kmap updates from Thomas Gleixner:
     "The new preemtible kmap_local() implementation:
    
       - Consolidate all kmap_atomic() internals into a generic
         implementation which builds the base for the kmap_local() API and
         make the kmap_atomic() interface wrappers which handle the
         disabling/enabling of preemption and pagefaults.
    
       - Switch the storage from per-CPU to per task and provide scheduler
         support for clearing mapping when scheduling out and restoring them
         when scheduling back in.
    
       - Merge the migrate_disable/enable() code, which is also part of the
         scheduler pull request. This was required to make the kmap_local()
         interface available which does not disable preemption when a
         mapping is established. It has to disable migration instead to
         guarantee that the virtual address of the mapped slot is the same
         across preemption.
    
       - Provide better debug facilities: guard pages and enforced
         utilization of the mapping mechanics on 64bit systems when the
         architecture allows it.
    
       - Provide the new kmap_local() API which can now be used to cleanup
         the kmap_atomic() usage sites all over the place. Most of the usage
         sites do not require the implicit disabling of preemption and
         pagefaults so the penalty on 64bit and 32bit non-highmem systems is
         removed and quite some of the code can be simplified. A wholesale
         conversion is not possible because some usage depends on the
         implicit side effects and some need to be cleaned up because they
         work around these side effects.
    
         The migrate disable side effect is only effective on highmem
         systems and when enforced debugging is enabled. On 64bit and 32bit
         non-highmem systems the overhead is completely avoided"
    
    * tag 'core-mm-2020-12-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (33 commits)
      ARM: highmem: Fix cache_is_vivt() reference
      x86/crashdump/32: Simplify copy_oldmem_page()
      io-mapping: Provide iomap_local variant
      mm/highmem: Provide kmap_local*
      sched: highmem: Store local kmaps in task struct
      x86: Support kmap_local() forced debugging
      mm/highmem: Provide CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP
      mm/highmem: Provide and use CONFIG_DEBUG_KMAP_LOCAL
      microblaze/mm/highmem: Add dropped #ifdef back
      xtensa/mm/highmem: Make generic kmap_atomic() work correctly
      mm/highmem: Take kmap_high_get() properly into account
      highmem: High implementation details and document API
      Documentation/io-mapping: Remove outdated blurb
      io-mapping: Cleanup atomic iomap
      mm/highmem: Remove the old kmap_atomic cruft
      highmem: Get rid of kmap_types.h
      xtensa/mm/highmem: Switch to generic kmap atomic
      sparc/mm/highmem: Switch to generic kmap atomic
      powerpc/mm/highmem: Switch to generic kmap atomic
      nds32/mm/highmem: Switch to generic kmap atomic
      ...
    edd7ab76
    Merge tag 'core-mm-2020-12-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
    Linus Torvalds authored
    Pull kmap updates from Thomas Gleixner:
     "The new preemtible kmap_local() implementation:
    
       - Consolidate all kmap_atomic() internals into a generic
         implementation which builds the base for the kmap_local() API and
         make the kmap_atomic() interface wrappers which handle the
         disabling/enabling of preemption and pagefaults.
    
       - Switch the storage from per-CPU to per task and provide scheduler
         support for clearing mapping when scheduling out and restoring them
         when scheduling back in.
    
       - Merge the migrate_disable/enable() code, which is also part of the
         scheduler pull request. This was required to make the kmap_local()
         interface available which does not disable preemption when a
         mapping is established. It has to disable migration instead to
         guarantee that the virtual address of the mapped slot is the same
         across preemption.
    
       - Provide better debug facilities: guard pages and enforced
         utilization of the mapping mechanics on 64bit systems when the
         architecture allows it.
    
       - Provide the new kmap_local() API which can now be used to cleanup
         the kmap_atomic() usage sites all over the place. Most of the usage
         sites do not require the implicit disabling of preemption and
         pagefaults so the penalty on 64bit and 32bit non-highmem systems is
         removed and quite some of the code can be simplified. A wholesale
         conversion is not possible because some usage depends on the
         implicit side effects and some need to be cleaned up because they
         work around these side effects.
    
         The migrate disable side effect is only effective on highmem
         systems and when enforced debugging is enabled. On 64bit and 32bit
         non-highmem systems the overhead is completely avoided"
    
    * tag 'core-mm-2020-12-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (33 commits)
      ARM: highmem: Fix cache_is_vivt() reference
      x86/crashdump/32: Simplify copy_oldmem_page()
      io-mapping: Provide iomap_local variant
      mm/highmem: Provide kmap_local*
      sched: highmem: Store local kmaps in task struct
      x86: Support kmap_local() forced debugging
      mm/highmem: Provide CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP
      mm/highmem: Provide and use CONFIG_DEBUG_KMAP_LOCAL
      microblaze/mm/highmem: Add dropped #ifdef back
      xtensa/mm/highmem: Make generic kmap_atomic() work correctly
      mm/highmem: Take kmap_high_get() properly into account
      highmem: High implementation details and document API
      Documentation/io-mapping: Remove outdated blurb
      io-mapping: Cleanup atomic iomap
      mm/highmem: Remove the old kmap_atomic cruft
      highmem: Get rid of kmap_types.h
      xtensa/mm/highmem: Switch to generic kmap atomic
      sparc/mm/highmem: Switch to generic kmap atomic
      powerpc/mm/highmem: Switch to generic kmap atomic
      nds32/mm/highmem: Switch to generic kmap atomic
      ...
Loading