• Thomas Gleixner's avatar
    mm/scatterlist: replace the !preemptible warning in sg_miter_stop() · 723aca20
    Thomas Gleixner authored
    sg_miter_stop() checks for disabled preemption before unmapping a page
    via kunmap_atomic().  The kernel doc mentions under context that
    preemption must be disabled if SG_MITER_ATOMIC is set.
    
    There is no active requirement for the caller to have preemption
    disabled before invoking sg_mitter_stop().  The sg_mitter_*()
    implementation itself has no such requirement.
    
    In fact, preemption is disabled by kmap_atomic() as part of
    sg_miter_next() and remains disabled as long as there is an active
    SG_MITER_ATOMIC mapping.  This is a consequence of kmap_atomic() and not
    a requirement for sg_mitter_*() itself.
    
    The user chooses SG_MITER_ATOMIC because it uses the API in a context
    where blocking is not possible or blocking is possible but he chooses a
    lower weight mapping which is not available on all CPUs and so it might
    need less overhead to setup at a price that now preemption will be
    disabled.
    
    The kmap_atomic() implementation on PREEMPT_RT does not disable
    preemption.  It simply disables CPU migration to ensure that the task
    remains on the same CPU while the caller remains preemptible.  This in
    turn triggers the warning in sg_miter_stop() because preemption is
    allowed.
    
    The PREEMPT_RT and !PREEMPT_RT implementation of kmap_atomic() disable
    pagefaults as a requirement.  It is sufficient to check for this instead
    of disabled preemption.
    
    Check for disabled pagefault handler in the SG_MITER_ATOMIC case.
    Remove the "preemption disabled" part from the kernel doc as the
    sg_milter*() implementation does not care.
    
    [bigeasy@linutronix.de: commit description]
    
    Link: https://lkml.kernel.org/r/20211015211409.cqopacv3pxdwn2ty@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    723aca20
scatterlist.c 28.1 KB