#include <linux/sched/task.h>
#include <linux/sched/cputime.h>
#include <linux/taskstats.h>
#include <linux/sysctl.h>
#include <linux/delayacct.h>
#include <linux/module.h>
int delayacct_on __read_mostly = 1;
EXPORT_SYMBOL_GPL(delayacct_on);
struct kmem_cache *delayacct_cache;
static int __init delayacct_setup_disable(char *str)
__setup("nodelayacct", delayacct_setup_disable);
void delayacct_init(void)
delayacct_cache = KMEM_CACHE(task_delay_info, SLAB_PANIC|SLAB_ACCOUNT);
delayacct_tsk_init(&init_task);
void __delayacct_tsk_init(struct task_struct *tsk)
tsk->delays = kmem_cache_zalloc(delayacct_cache, GFP_KERNEL);
raw_spin_lock_init(&tsk->delays->lock);
static void delayacct_end(raw_spinlock_t *lock, u64 *start, u64 *total,
s64 ns = ktime_get_ns() - *start;
raw_spin_lock_irqsave(lock, flags);
raw_spin_unlock_irqrestore(lock, flags);
void __delayacct_blkio_start(void)
current->delays->blkio_start = ktime_get_ns();