kernel_optimize_test/drivers/misc
David Rientjes 5ff7091f5a mm, mmu_notifier: annotate mmu notifiers with blockable invalidate callbacks
Commit 4d4bbd8526 ("mm, oom_reaper: skip mm structs with mmu
notifiers") prevented the oom reaper from unmapping private anonymous
memory with the oom reaper when the oom victim mm had mmu notifiers
registered.

The rationale is that doing mmu_notifier_invalidate_range_{start,end}()
around the unmap_page_range(), which is needed, can block and the oom
killer will stall forever waiting for the victim to exit, which may not
be possible without reaping.

That concern is real, but only true for mmu notifiers that have
blockable invalidate_range_{start,end}() callbacks.  This patch adds a
"flags" field to mmu notifier ops that can set a bit to indicate that
these callbacks do not block.

The implementation is steered toward an expensive slowpath, such as
after the oom reaper has grabbed mm->mmap_sem of a still alive oom
victim.

[rientjes@google.com: mmu_notifier_invalidate_range_end() can also call the invalidate_range() must not block, fix comment]
  Link: http://lkml.kernel.org/r/alpine.DEB.2.10.1801091339570.240101@chino.kir.corp.google.com
[akpm@linux-foundation.org: make mm_has_blockable_invalidate_notifiers() return bool, use rwsem_is_locked()]
Link: http://lkml.kernel.org/r/alpine.DEB.2.10.1712141329500.74052@chino.kir.corp.google.com
Signed-off-by: David Rientjes <rientjes@google.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Christian König <christian.koenig@amd.com>
Acked-by: Dimitri Sivanich <sivanich@hpe.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Oded Gabbay <oded.gabbay@gmail.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Doug Ledford <dledford@redhat.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Mike Marciniszyn <mike.marciniszyn@intel.com>
Cc: Sean Hefty <sean.hefty@intel.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Jérôme Glisse <jglisse@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: David Rientjes <rientjes@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-01-31 17:18:38 -08:00
..
altera-stapl misc: altera-stapl: drop Kconfig comment 2017-10-04 10:43:08 +02:00
c2port kmemcheck: remove annotations 2017-11-15 18:21:04 -08:00
cardreader - New Drivers 2018-01-29 10:59:24 -08:00
cb710
cxl dma mapping changes for Linux 4.16: 2018-01-31 11:32:27 -08:00
echo
eeprom eeprom: at24: change nvmem stride to 1 2017-12-06 11:22:04 +01:00
genwqe genwqe: Take R/W permissions into account when dealing with memory pages 2017-10-23 11:34:42 +02:00
ibmasm Merge branch 'for-linus' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2017-11-15 10:14:11 -08:00
lis3lv02d the rest of drivers/*: annotate ->poll() instances 2017-11-28 11:06:58 -05:00
mei the rest of drivers/*: annotate ->poll() instances 2017-11-28 11:06:58 -05:00
mic the rest of drivers/*: annotate ->poll() instances 2017-11-28 11:06:58 -05:00
sgi-gru mm, mmu_notifier: annotate mmu notifiers with blockable invalidate callbacks 2018-01-31 17:18:38 -08:00
sgi-xp Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2017-11-13 17:56:58 -08:00
ti-st
vmw_vmci the rest of drivers/*: annotate ->poll() instances 2017-11-28 11:06:58 -05:00
ad525x_dpot-i2c.c
ad525x_dpot-spi.c
ad525x_dpot.c
ad525x_dpot.h
apds990x.c
apds9802als.c
aspeed-lpc-ctrl.c
aspeed-lpc-snoop.c
atmel_tclib.c
atmel-ssc.c
bh1770glc.c
cs5535-mfgpt.c
ds1682.c
dummy-irq.c
enclosure.c
fsa9480.c
hmc6352.c
hpilo.c the rest of drivers/*: annotate ->poll() instances 2017-11-28 11:06:58 -05:00
hpilo.h
ics932s401.c
ioc4.c
isl29003.c
isl29020.c
Kconfig misc: rtsx: Move Realtek Card Reader Driver to misc 2017-11-29 10:16:44 +00:00
kgdbts.c treewide: Fix function prototypes for module_param_call() 2017-10-31 15:30:37 +01:00
lattice-ecp3-config.c
lkdtm_bugs.c lkdtm: include WARN format string 2017-11-17 16:10:01 -08:00
lkdtm_core.c lkdtm, kprobes: Convert from jprobes to kprobes 2017-10-23 13:52:45 +02:00
lkdtm_heap.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkdtm_perms.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkdtm_refcount.c
lkdtm_rodata.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkdtm_usercopy.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkdtm.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Makefile misc: rtsx: Move Realtek Card Reader Driver to misc 2017-11-29 10:16:44 +00:00
pch_phub.c
pci_endpoint_test.c misc: pci_endpoint_test: Fix BUG_ON error during pci_disable_msi() 2017-10-31 15:33:46 -05:00
phantom.c the rest of drivers/*: annotate ->poll() instances 2017-11-28 11:06:58 -05:00
pti.c drivers/misc/intel/pti: Rename the header file to free up the namespace 2017-12-17 12:52:34 +01:00
qcom-coincell.c
spear13xx_pcie_gadget.c
sram-exec.c
sram.c
sram.h
tifm_7xx1.c
tifm_core.c
tsl2550.c
vexpress-syscfg.c
vmw_balloon.c x86/virt: Add enum for hypervisors to replace x86_hyper 2017-11-10 10:03:12 +01:00