Commit eee4d9fe authored by Peter Zijlstra's avatar Peter Zijlstra
Browse files

delayacct: Add static_branch in scheduler hooks

parent 63b3f96e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -58,8 +58,10 @@ struct task_delay_info {

#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/jump_label.h>

#ifdef CONFIG_TASK_DELAY_ACCT
DECLARE_STATIC_KEY_TRUE(delayacct_key);
extern int delayacct_on;	/* Delay accounting turned on/off */
extern struct kmem_cache *delayacct_cache;
extern void delayacct_init(void);
@@ -114,6 +116,9 @@ static inline void delayacct_tsk_free(struct task_struct *tsk)

static inline void delayacct_blkio_start(void)
{
	if (!static_branch_likely(&delayacct_key))
		return;

	delayacct_set_flag(current, DELAYACCT_PF_BLKIO);
	if (current->delays)
		__delayacct_blkio_start();
@@ -121,6 +126,9 @@ static inline void delayacct_blkio_start(void)

static inline void delayacct_blkio_end(struct task_struct *p)
{
	if (!static_branch_likely(&delayacct_key))
		return;

	if (p->delays)
		__delayacct_blkio_end(p);
	delayacct_clear_flag(p, DELAYACCT_PF_BLKIO);
+3 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
#include <linux/delayacct.h>
#include <linux/module.h>

DEFINE_STATIC_KEY_TRUE(delayacct_key);
int delayacct_on __read_mostly = 1;	/* Delay accounting turned on/off */
struct kmem_cache *delayacct_cache;

@@ -28,6 +29,8 @@ void delayacct_init(void)
{
	delayacct_cache = KMEM_CACHE(task_delay_info, SLAB_PANIC|SLAB_ACCOUNT);
	delayacct_tsk_init(&init_task);
	if (!delayacct_on)
		static_branch_disable(&delayacct_key);
}

void __delayacct_tsk_init(struct task_struct *tsk)