• Thomas Gleixner's avatar
    mm/highmem: Provide kmap_local* · f3ba3c71
    Thomas Gleixner authored
    Now that the kmap atomic index is stored in task struct provide a
    preemptible variant. On context switch the maps of an outgoing task are
    removed and the map of the incoming task are restored. That's obviously
    slow, but highmem is slow anyway.
    
    The kmap_local.*() functions can be invoked from both preemptible and
    atomic context. kmap local sections disable migration to keep the resulting
    virtual mapping address correct, but disable neither pagefaults nor
    preemption.
    
    A wholesale conversion of kmap_atomic to be fully preemptible is not
    possible because some of the usage sites might rely on the preemption
    disable for serialization or on the implicit pagefault disable. Needs to be
    done on a case by case basis.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20201118204007.468533059@linutronix.de
    f3ba3c71
highmem.c 18.1 KB