• Daniel Vetter's avatar
    kernel.h: Add non_block_start/end() · 312364f3
    Daniel Vetter authored
    In some special cases we must not block, but there's not a spinlock,
    preempt-off, irqs-off or similar critical section already that arms the
    might_sleep() debug checks. Add a non_block_start/end() pair to annotate
    these.
    
    This will be used in the oom paths of mmu-notifiers, where blocking is not
    allowed to make sure there's forward progress. Quoting Michal:
    
    "The notifier is called from quite a restricted context - oom_reaper -
    which shouldn't depend on any locks or sleepable conditionals. The code
    should be swift as well but we mostly do care about it to make a forward
    progress. Checking for sleepable context is the best thing we could come
    up with that would describe these demands at least partially."
    
    Peter also asked whether we want to catch spinlocks on top, but Michal
    said those are less of a problem because spinlocks can't have an indirect
    dependency upon the page allocator and hence close the loop with the oom
    reaper.
    
    Suggested by Michal Hocko.
    
    Link: https://lore.kernel.org/r/20190826201425.17547-4-daniel.vetter@ffwll.ch
    Acked-by: Christian König <christian.koenig@amd.com> (v1)
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    312364f3
core.c 187 KB