mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-18 17:16:27 +07:00
mm: Allow to kill tasks doing pcpu_alloc() and waiting for pcpu_balance_workfn()
In case of memory deficit and low percpu memory pages, pcpu_balance_workfn() takes pcpu_alloc_mutex for a long time (as it makes memory allocations itself and waits for memory reclaim). If tasks doing pcpu_alloc() are choosen by OOM killer, they can't exit, because they are waiting for the mutex. The patch makes pcpu_alloc() to care about killing signal and use mutex_lock_killable(), when it's allowed by GFP flags. This guarantees, a task does not miss SIGKILL from OOM killer. Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
71546d1004
commit
f52ba1fef7
13
mm/percpu.c
13
mm/percpu.c
@ -1373,8 +1373,17 @@ static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_atomic)
|
if (!is_atomic) {
|
||||||
mutex_lock(&pcpu_alloc_mutex);
|
/*
|
||||||
|
* pcpu_balance_workfn() allocates memory under this mutex,
|
||||||
|
* and it may wait for memory reclaim. Allow current task
|
||||||
|
* to become OOM victim, in case of memory pressure.
|
||||||
|
*/
|
||||||
|
if (gfp & __GFP_NOFAIL)
|
||||||
|
mutex_lock(&pcpu_alloc_mutex);
|
||||||
|
else if (mutex_lock_killable(&pcpu_alloc_mutex))
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&pcpu_lock, flags);
|
spin_lock_irqsave(&pcpu_lock, flags);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user