mirror of
https://github.com/torvalds/linux.git
synced 2026-09-25 21:21:09 -04:00
kfence: maximize allocation wait timeout duration
The allocation wait timeout was initially added because of warnings due to CONFIG_DETECT_HUNG_TASK=y [1]. While the 1 sec timeout is sufficient to resolve the warnings (given the hung task timeout must be 1 sec or larger) it may cause unnecessary wake-ups if the system is idle: https://lkml.kernel.org/r/CADYN=9J0DQhizAGB0-jz4HOBBh+05kMBXb4c0cXMS7Qi5NAJiw@mail.gmail.com Fix it by computing the timeout duration in terms of the current sysctl_hung_task_timeout_secs value. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Marco Elver <[email protected]> Cc: Alexander Potapenko <[email protected]> Cc: Dmitry Vyukov <[email protected]> Cc: Hillf Danton <[email protected]> Cc: Jann Horn <[email protected]> Cc: Mark Rutland <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
committed by
Linus Torvalds
parent
407f1d8c1b
commit
37c9284f69
+11
-1
@@ -20,6 +20,7 @@
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/random.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/sched/sysctl.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
@@ -621,7 +622,16 @@ static void toggle_allocation_gate(struct work_struct *work)
|
||||
/* Enable static key, and await allocation to happen. */
|
||||
static_branch_enable(&kfence_allocation_key);
|
||||
|
||||
wait_event_timeout(allocation_wait, atomic_read(&kfence_allocation_gate), HZ);
|
||||
if (sysctl_hung_task_timeout_secs) {
|
||||
/*
|
||||
* During low activity with no allocations we might wait a
|
||||
* while; let's avoid the hung task warning.
|
||||
*/
|
||||
wait_event_timeout(allocation_wait, atomic_read(&kfence_allocation_gate),
|
||||
sysctl_hung_task_timeout_secs * HZ / 2);
|
||||
} else {
|
||||
wait_event(allocation_wait, atomic_read(&kfence_allocation_gate));
|
||||
}
|
||||
|
||||
/* Disable static key and reset timer. */
|
||||
static_branch_disable(&kfence_allocation_key);
|
||||
|
||||
Reference in New Issue
Block a user