[PATCH] per-task-delay-accounting: taskstats interface
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / linux / delayacct.h
CommitLineData
ca74e92b
SN
1/* delayacct.h - per-task delay accounting
2 *
3 * Copyright (C) Shailabh Nagar, IBM Corp. 2006
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13 * the GNU General Public License for more details.
14 *
15 */
16
17#ifndef _LINUX_DELAYACCT_H
18#define _LINUX_DELAYACCT_H
19
20#include <linux/sched.h>
21
0ff92245
SN
22/*
23 * Per-task flags relevant to delay accounting
24 * maintained privately to avoid exhausting similar flags in sched.h:PF_*
25 * Used to set current->delays->flags
26 */
27#define DELAYACCT_PF_SWAPIN 0x00000001 /* I am doing a swapin */
28
ca74e92b
SN
29#ifdef CONFIG_TASK_DELAY_ACCT
30
31extern int delayacct_on; /* Delay accounting turned on/off */
32extern kmem_cache_t *delayacct_cache;
33extern void delayacct_init(void);
34extern void __delayacct_tsk_init(struct task_struct *);
35extern void __delayacct_tsk_exit(struct task_struct *);
0ff92245
SN
36extern void __delayacct_blkio_start(void);
37extern void __delayacct_blkio_end(void);
ca74e92b
SN
38
39static inline void delayacct_set_flag(int flag)
40{
41 if (current->delays)
42 current->delays->flags |= flag;
43}
44
45static inline void delayacct_clear_flag(int flag)
46{
47 if (current->delays)
48 current->delays->flags &= ~flag;
49}
50
51static inline void delayacct_tsk_init(struct task_struct *tsk)
52{
53 /* reinitialize in case parent's non-null pointer was dup'ed*/
54 tsk->delays = NULL;
55 if (unlikely(delayacct_on))
56 __delayacct_tsk_init(tsk);
57}
58
59static inline void delayacct_tsk_exit(struct task_struct *tsk)
60{
61 if (tsk->delays)
62 __delayacct_tsk_exit(tsk);
63}
64
0ff92245
SN
65static inline void delayacct_blkio_start(void)
66{
67 if (current->delays)
68 __delayacct_blkio_start();
69}
70
71static inline void delayacct_blkio_end(void)
72{
73 if (current->delays)
74 __delayacct_blkio_end();
75}
76
ca74e92b
SN
77#else
78static inline void delayacct_set_flag(int flag)
79{}
80static inline void delayacct_clear_flag(int flag)
81{}
82static inline void delayacct_init(void)
83{}
84static inline void delayacct_tsk_init(struct task_struct *tsk)
85{}
86static inline void delayacct_tsk_exit(struct task_struct *tsk)
87{}
0ff92245
SN
88static inline void delayacct_blkio_start(void)
89{}
90static inline void delayacct_blkio_end(void)
91{}
ca74e92b
SN
92#endif /* CONFIG_TASK_DELAY_ACCT */
93
94#endif