Michal Hocko
5695be142e
OOM, PM: OOM killed task shouldn't escape PM suspend
...
PM freezer relies on having all tasks frozen by the time devices are
getting frozen so that no task will touch them while they are getting
frozen. But OOM killer is allowed to kill an already frozen task in
order to handle OOM situtation. In order to protect from late wake ups
OOM killer is disabled after all tasks are frozen. This, however, still
keeps a window open when a killed task didn't manage to die by the time
freeze_processes finishes.
Reduce the race window by checking all tasks after OOM killer has been
disabled. This is still not race free completely unfortunately because
oom_killer_disable cannot stop an already ongoing OOM killer so a task
might still wake up from the fridge and get killed without
freeze_processes noticing. Full synchronization of OOM and freezer is,
however, too heavy weight for this highly unlikely case.
Introduce and check oom_kills counter which gets incremented early when
the allocator enters __alloc_pages_may_oom path and only check all the
tasks if the counter changes during the freezing attempt. The counter
is updated so early to reduce the race window since allocator checked
oom_killer_disabled which is set by PM-freezing code. A false positive
will push the PM-freezer into a slow path but that is not a big deal.
Changes since v1
- push the re-check loop out of freeze_processes into
check_frozen_processes and invert the condition to make the code more
readable as per Rafael
Fixes: f660daac47 (oom: thaw threads if oom killed thread is frozen before deferring)
Cc: 3.2+ <stable@vger.kernel.org> # 3.2+
Signed-off-by: Michal Hocko <mhocko@suse.cz>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2014-10-21 23:44:21 +02:00
..
backing-dev.c
Merge branch 'for-3.18/core' of git://git.kernel.dk/linux-block
2014-10-18 11:53:51 -07:00
balloon_compaction.c
mm/balloon_compaction: add vmstat counters and kpageflags bit
2014-10-09 22:26:01 -04:00
bootmem.c
mm/bootmem.c: use include/linux/ headers
2014-10-09 22:26:00 -04:00
cleancache.c
cma.c
drivers: dma-contiguous: add initialization from device tree
2014-10-14 02:18:12 +02:00
compaction.c
mm/balloon_compaction: redesign ballooned pages management
2014-10-09 22:26:01 -04:00
debug-pagealloc.c
debug.c
mm/debug.c: use pr_emerg()
2014-10-09 22:25:59 -04:00
dmapool.c
mm/dmapool.c: fixed a brace coding style issue
2014-10-09 22:26:00 -04:00
early_ioremap.c
fadvise.c
failslab.c
filemap.c
mm/filemap.c: remove trailing whitespace
2014-10-09 22:26:00 -04:00
filemap_xip.c
fremap.c
mm: mark remap_file_pages() syscall as deprecated
2014-06-06 16:08:17 -07:00
frontswap.c
swap: change swap_list_head to plist, add swap_avail_head
2014-06-04 16:54:07 -07:00
gup.c
mm: introduce a general RCU get_user_pages_fast()
2014-10-09 22:26:00 -04:00
highmem.c
mm/highmem: make kmap cache coloring aware
2014-08-06 18:01:22 -07:00
huge_memory.c
mm: use VM_BUG_ON_MM where possible
2014-10-09 22:25:58 -04:00
hugetlb.c
mm: convert a few VM_BUG_ON callers to VM_BUG_ON_VMA
2014-10-09 22:25:57 -04:00
hugetlb_cgroup.c
hugetlb_cgroup: use lockdep_assert_held rather than spin_is_locked
2014-08-29 16:28:16 -07:00
hwpoison-inject.c
mm/hwpoison-inject.c: remove unnecessary null test before debugfs_remove_recursive
2014-08-06 18:01:19 -07:00
init-mm.c
internal.h
mm, compaction: pass gfp mask to compact_control
2014-10-09 22:25:55 -04:00
interval_tree.c
mm: convert a few VM_BUG_ON callers to VM_BUG_ON_VMA
2014-10-09 22:25:57 -04:00
iov_iter.c
Add copy_to_iter(), copy_from_iter() and iov_iter_zero()
2014-10-09 02:39:03 -04:00
Kconfig
mm/balloon_compaction: add vmstat counters and kpageflags bit
2014-10-09 22:26:01 -04:00
Kconfig.debug
kmemcheck.c
mm/slab_common: move kmem_cache definition to internal header
2014-10-09 22:25:50 -04:00
kmemleak-test.c
mm/kmemleak-test.c: use pr_fmt for logging
2014-06-06 16:08:18 -07:00
kmemleak.c
mm: introduce kmemleak_update_trace()
2014-06-06 16:08:17 -07:00
ksm.c
mm: ksm use pr_err instead of printk
2014-10-09 22:26:00 -04:00
list_lru.c
maccess.c
madvise.c
mm: update the description for madvise_remove
2014-08-06 18:01:18 -07:00
Makefile
Fixup for 3.18: use PATCHv2 of "mm: Support compiling out madvise and fadvise"
2014-10-12 09:21:57 -04:00
memblock.c
mem-hotplug: let memblock skip the hotpluggable memory regions in __next_mem_range()
2014-09-10 15:42:12 -07:00
memcontrol.c
memcg: zap memcg_can_account_kmem
2014-10-09 22:26:00 -04:00
memory-failure.c
cgroup: remove redundant check in cgroup_ino()
2014-09-19 09:16:23 -04:00
memory.c
mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared
2014-10-14 02:18:28 +02:00
memory_hotplug.c
memory-hotplug: add sysfs valid_zones attribute
2014-10-09 22:25:52 -04:00
mempolicy.c
mm: mempolicy: skip inaccessible VMAs when setting MPOL_MF_LAZY
2014-10-09 22:26:02 -04:00
mempool.c
mm/mempool.c: update the kmemleak stack trace for mempool allocations
2014-06-06 16:08:17 -07:00
migrate.c
mm/balloon_compaction: redesign ballooned pages management
2014-10-09 22:26:01 -04:00
mincore.c
mlock.c
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-10-13 15:44:12 +02:00
mm_init.c
mmap.c
mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared
2014-10-14 02:18:28 +02:00
mmu_context.c
mmu_notifier.c
kvm: Fix page ageing bugs
2014-09-24 14:07:58 +02:00
mmzone.c
mprotect.c
mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared
2014-10-14 02:18:28 +02:00
mremap.c
mm/mremap.c: use linux headers
2014-10-09 22:26:00 -04:00
msync.c
msync: fix incorrect fstart calculation
2014-07-03 09:21:53 -07:00
nobootmem.c
mem-hotplug: let memblock skip the hotpluggable memory regions in __next_mem_range()
2014-09-10 15:42:12 -07:00
nommu.c
percpu_counter: add @gfp to percpu_counter_init()
2014-09-08 09:51:29 +09:00
oom_kill.c
OOM, PM: OOM killed task shouldn't escape PM suspend
2014-10-21 23:44:21 +02:00
page-writeback.c
Merge branch 'for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-10 07:26:02 -04:00
page_alloc.c
OOM, PM: OOM killed task shouldn't escape PM suspend
2014-10-21 23:44:21 +02:00
page_cgroup.c
page_io.c
fix __swap_writepage() compile failure on old gcc versions
2014-06-14 19:30:48 -05:00
page_isolation.c
pagewalk.c
mm: use VM_BUG_ON_MM where possible
2014-10-09 22:25:58 -04:00
percpu-km.c
percpu: implmeent pcpu_nr_empty_pop_pages and chunk->nr_populated
2014-09-02 14:46:05 -04:00
percpu-vm.c
percpu: move region iterations out of pcpu_[de]populate_chunk()
2014-09-02 14:46:02 -04:00
percpu.c
percpu: fix how @gfp is interpreted by the percpu allocator
2014-10-08 12:01:52 -04:00
pgtable-generic.c
mm: actually clear pmd_numa before invalidating
2014-08-29 16:28:15 -07:00
process_vm_access.c
quicklist.c
readahead.c
mm/readahead.c: remove unused file_ra_state from count_history_pages
2014-08-06 18:01:15 -07:00
rmap.c
mm: convert a few VM_BUG_ON callers to VM_BUG_ON_VMA
2014-10-09 22:25:57 -04:00
shmem.c
Merge branch 'for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-10 07:26:02 -04:00
slab.c
mm/slab: fix unaligned access on sparc64
2014-10-14 02:18:12 +02:00
slab.h
mm/slab: use percpu allocator for cpu cache
2014-10-09 22:25:51 -04:00
slab_common.c
memcg: move memcg_update_cache_size() to slab_common.c
2014-10-09 22:25:59 -04:00
slob.c
mm/sl[ao]b: always track caller in kmalloc_(node_)track_caller()
2014-10-09 22:25:50 -04:00
slub.c
mm/slab_common: commonize slab merge logic
2014-10-09 22:25:51 -04:00
sparse-vmemmap.c
sparse.c
swap.c
mm: memcontrol: do not kill uncharge batching in free_pages_and_swap_cache
2014-10-09 22:25:59 -04:00
swap_state.c
mm: memcontrol: do not kill uncharge batching in free_pages_and_swap_cache
2014-10-09 22:25:59 -04:00
swapfile.c
mm: memcontrol: rewrite uncharge API
2014-08-08 15:57:17 -07:00
truncate.c
mm: memcontrol: rewrite uncharge API
2014-08-08 15:57:17 -07:00
util.c
proc/maps: make vm_is_stack() logic namespace-friendly
2014-10-09 22:25:50 -04:00
vmacache.c
mm,vmacache: optimize overflow system-wide flushing
2014-06-04 16:53:57 -07:00
vmalloc.c
mm/vmalloc.c: use seq_open_private() instead of seq_open()
2014-10-09 22:25:56 -04:00
vmpressure.c
vmscan.c
mm: memcontrol: fix transparent huge page allocations under pressure
2014-10-09 22:25:59 -04:00
vmstat.c
vmstat: on-demand vmstat workers V8
2014-10-09 22:26:02 -04:00
workingset.c
zbud.c
zbud: avoid accessing last unused freelist
2014-10-09 22:26:03 -04:00
zpool.c
mm/zpool: use prefixed module loading
2014-08-29 16:28:16 -07:00
zsmalloc.c
zsmalloc: simplify init_zspage free obj linking
2014-10-09 22:26:03 -04:00
zswap.c
mm/zswap.c: add __init to zswap_entry_cache_destroy()
2014-08-08 15:57:18 -07:00