Commit | Line | Data |
---|---|---|
c757249a SN |
1 | /* taskstats_kern.h - kernel header for per-task statistics interface |
2 | * | |
3 | * Copyright (C) Shailabh Nagar, IBM Corp. 2006 | |
4 | * (C) Balbir Singh, IBM Corp. 2006 | |
5 | */ | |
6 | ||
7 | #ifndef _LINUX_TASKSTATS_KERN_H | |
8 | #define _LINUX_TASKSTATS_KERN_H | |
9 | ||
10 | #include <linux/taskstats.h> | |
11 | #include <linux/sched.h> | |
c8924363 | 12 | #include <net/genetlink.h> |
c757249a | 13 | |
c757249a | 14 | #ifdef CONFIG_TASKSTATS |
e18b890b | 15 | extern struct kmem_cache *taskstats_cache; |
6f44993f | 16 | extern struct mutex taskstats_exit_mutex; |
c757249a | 17 | |
ad4ecbcb SN |
18 | static inline void taskstats_tgid_init(struct signal_struct *sig) |
19 | { | |
ad4ecbcb SN |
20 | sig->stats = NULL; |
21 | } | |
22 | ||
b8534d7b | 23 | static inline void taskstats_tgid_alloc(struct task_struct *tsk) |
ad4ecbcb | 24 | { |
b8534d7b | 25 | struct signal_struct *sig = tsk->signal; |
ad4ecbcb | 26 | struct taskstats *stats; |
ad4ecbcb | 27 | |
17b02695 ON |
28 | if (sig->stats != NULL) |
29 | return; | |
30 | ||
b8534d7b | 31 | /* No problem if kmem_cache_zalloc() fails */ |
e94b1766 | 32 | stats = kmem_cache_zalloc(taskstats_cache, GFP_KERNEL); |
ad4ecbcb | 33 | |
b8534d7b | 34 | spin_lock_irq(&tsk->sighand->siglock); |
ad4ecbcb SN |
35 | if (!sig->stats) { |
36 | sig->stats = stats; | |
37 | stats = NULL; | |
38 | } | |
b8534d7b | 39 | spin_unlock_irq(&tsk->sighand->siglock); |
ad4ecbcb SN |
40 | |
41 | if (stats) | |
42 | kmem_cache_free(taskstats_cache, stats); | |
43 | } | |
c757249a | 44 | |
ad4ecbcb SN |
45 | static inline void taskstats_tgid_free(struct signal_struct *sig) |
46 | { | |
093a8e8a ON |
47 | if (sig->stats) |
48 | kmem_cache_free(taskstats_cache, sig->stats); | |
ad4ecbcb SN |
49 | } |
50 | ||
115085ea | 51 | extern void taskstats_exit(struct task_struct *, int group_dead); |
ad4ecbcb | 52 | extern void taskstats_init_early(void); |
c757249a | 53 | #else |
115085ea | 54 | static inline void taskstats_exit(struct task_struct *tsk, int group_dead) |
ad4ecbcb SN |
55 | {} |
56 | static inline void taskstats_tgid_init(struct signal_struct *sig) | |
57 | {} | |
b8534d7b | 58 | static inline void taskstats_tgid_alloc(struct task_struct *tsk) |
ad4ecbcb SN |
59 | {} |
60 | static inline void taskstats_tgid_free(struct signal_struct *sig) | |
c757249a SN |
61 | {} |
62 | static inline void taskstats_init_early(void) | |
63 | {} | |
64 | #endif /* CONFIG_TASKSTATS */ | |
65 | ||
66 | #endif | |
67 |