Blame view
include/linux/delayacct.h
4 KB
ca74e92b4 [PATCH] per-task-... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/* delayacct.h - per-task delay accounting * * Copyright (C) Shailabh Nagar, IBM Corp. 2006 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License for more details. * */ #ifndef _LINUX_DELAYACCT_H #define _LINUX_DELAYACCT_H #include <linux/sched.h> |
5a0e3ad6a include cleanup: ... |
21 |
#include <linux/slab.h> |
ca74e92b4 [PATCH] per-task-... |
22 |
|
0ff922452 [PATCH] per-task-... |
23 24 25 26 27 28 |
/* * Per-task flags relevant to delay accounting * maintained privately to avoid exhausting similar flags in sched.h:PF_* * Used to set current->delays->flags */ #define DELAYACCT_PF_SWAPIN 0x00000001 /* I am doing a swapin */ |
846c7bb05 Add cgroupstats |
29 |
#define DELAYACCT_PF_BLKIO 0x00000002 /* I am waiting on IO */ |
0ff922452 [PATCH] per-task-... |
30 |
|
ca74e92b4 [PATCH] per-task-... |
31 32 33 |
#ifdef CONFIG_TASK_DELAY_ACCT extern int delayacct_on; /* Delay accounting turned on/off */ |
e18b890bb [PATCH] slab: rem... |
34 |
extern struct kmem_cache *delayacct_cache; |
ca74e92b4 [PATCH] per-task-... |
35 36 37 |
extern void delayacct_init(void); extern void __delayacct_tsk_init(struct task_struct *); extern void __delayacct_tsk_exit(struct task_struct *); |
0ff922452 [PATCH] per-task-... |
38 39 |
extern void __delayacct_blkio_start(void); extern void __delayacct_blkio_end(void); |
6f44993fe [PATCH] per-task-... |
40 |
extern int __delayacct_add_tsk(struct taskstats *, struct task_struct *); |
258904546 [PATCH] per-task-... |
41 |
extern __u64 __delayacct_blkio_ticks(struct task_struct *); |
873b47717 per-task-delay-ac... |
42 43 |
extern void __delayacct_freepages_start(void); extern void __delayacct_freepages_end(void); |
ca74e92b4 [PATCH] per-task-... |
44 |
|
846c7bb05 Add cgroupstats |
45 46 47 48 49 50 51 |
static inline int delayacct_is_task_waiting_on_io(struct task_struct *p) { if (p->delays) return (p->delays->flags & DELAYACCT_PF_BLKIO); else return 0; } |
ca74e92b4 [PATCH] per-task-... |
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
static inline void delayacct_set_flag(int flag) { if (current->delays) current->delays->flags |= flag; } static inline void delayacct_clear_flag(int flag) { if (current->delays) current->delays->flags &= ~flag; } static inline void delayacct_tsk_init(struct task_struct *tsk) { /* reinitialize in case parent's non-null pointer was dup'ed*/ tsk->delays = NULL; |
163ecdff0 [PATCH] delay acc... |
68 |
if (delayacct_on) |
ca74e92b4 [PATCH] per-task-... |
69 70 |
__delayacct_tsk_init(tsk); } |
35df17c57 [PATCH] task dela... |
71 72 73 74 |
/* Free tsk->delays. Called from bad fork and __put_task_struct * where there's no risk of tsk->delays being accessed elsewhere */ static inline void delayacct_tsk_free(struct task_struct *tsk) |
ca74e92b4 [PATCH] per-task-... |
75 76 |
{ if (tsk->delays) |
35df17c57 [PATCH] task dela... |
77 78 |
kmem_cache_free(delayacct_cache, tsk->delays); tsk->delays = NULL; |
ca74e92b4 [PATCH] per-task-... |
79 |
} |
0ff922452 [PATCH] per-task-... |
80 81 |
static inline void delayacct_blkio_start(void) { |
846c7bb05 Add cgroupstats |
82 |
delayacct_set_flag(DELAYACCT_PF_BLKIO); |
0ff922452 [PATCH] per-task-... |
83 84 85 86 87 88 89 90 |
if (current->delays) __delayacct_blkio_start(); } static inline void delayacct_blkio_end(void) { if (current->delays) __delayacct_blkio_end(); |
846c7bb05 Add cgroupstats |
91 |
delayacct_clear_flag(DELAYACCT_PF_BLKIO); |
0ff922452 [PATCH] per-task-... |
92 |
} |
6f44993fe [PATCH] per-task-... |
93 94 95 |
static inline int delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) { |
163ecdff0 [PATCH] delay acc... |
96 |
if (!delayacct_on || !tsk->delays) |
6f44993fe [PATCH] per-task-... |
97 98 99 |
return 0; return __delayacct_add_tsk(d, tsk); } |
258904546 [PATCH] per-task-... |
100 101 102 103 104 105 |
static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk) { if (tsk->delays) return __delayacct_blkio_ticks(tsk); return 0; } |
873b47717 per-task-delay-ac... |
106 107 108 109 110 111 112 113 114 115 116 |
static inline void delayacct_freepages_start(void) { if (current->delays) __delayacct_freepages_start(); } static inline void delayacct_freepages_end(void) { if (current->delays) __delayacct_freepages_end(); } |
ca74e92b4 [PATCH] per-task-... |
117 118 119 120 121 122 123 124 125 |
#else static inline void delayacct_set_flag(int flag) {} static inline void delayacct_clear_flag(int flag) {} static inline void delayacct_init(void) {} static inline void delayacct_tsk_init(struct task_struct *tsk) {} |
35df17c57 [PATCH] task dela... |
126 |
static inline void delayacct_tsk_free(struct task_struct *tsk) |
ca74e92b4 [PATCH] per-task-... |
127 |
{} |
0ff922452 [PATCH] per-task-... |
128 129 130 131 |
static inline void delayacct_blkio_start(void) {} static inline void delayacct_blkio_end(void) {} |
6f44993fe [PATCH] per-task-... |
132 133 134 |
static inline int delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) { return 0; } |
258904546 [PATCH] per-task-... |
135 136 |
static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk) { return 0; } |
846c7bb05 Add cgroupstats |
137 138 |
static inline int delayacct_is_task_waiting_on_io(struct task_struct *p) { return 0; } |
873b47717 per-task-delay-ac... |
139 140 141 142 |
static inline void delayacct_freepages_start(void) {} static inline void delayacct_freepages_end(void) {} |
ca74e92b4 [PATCH] per-task-... |
143 144 145 |
#endif /* CONFIG_TASK_DELAY_ACCT */ #endif |