]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commit - kernel/sched/core.c
kernel.h: Add non_block_start/end()
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 26 Aug 2019 20:14:23 +0000 (22:14 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Sat, 7 Sep 2019 07:28:05 +0000 (04:28 -0300)
commit312364f3534cc974b79a96d062bde2386315201f
tree19103ff516fbff6a78ce059b63cb5d4cbf598f1a
parentf2bc09e9519181c7ca7ad4778d46b804c5b4c8c9
kernel.h: Add non_block_start/end()

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: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
include/linux/kernel.h
include/linux/sched.h
kernel/sched/core.c