1 /* taskstats_kern.h - kernel header for per-task statistics interface
3 * Copyright (C) Shailabh Nagar, IBM Corp. 2006
4 * (C) Balbir Singh, IBM Corp. 2006
7 #ifndef _LINUX_TASKSTATS_KERN_H
8 #define _LINUX_TASKSTATS_KERN_H
10 #include <linux/taskstats.h>
11 #include <linux/sched.h>
12 #include <net/genetlink.h>
15 TASKSTATS_MSG_UNICAST, /* send data only to requester */
16 TASKSTATS_MSG_MULTICAST, /* send data to a group */
19 #ifdef CONFIG_TASKSTATS
20 extern kmem_cache_t *taskstats_cache;
21 extern struct mutex taskstats_exit_mutex;
23 static inline int taskstats_has_listeners(void)
27 return netlink_has_listeners(genl_sock, TASKSTATS_LISTEN_GROUP);
31 static inline void taskstats_exit_alloc(struct taskstats **ptidstats)
34 if (taskstats_has_listeners())
35 *ptidstats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
38 static inline void taskstats_exit_free(struct taskstats *tidstats)
41 kmem_cache_free(taskstats_cache, tidstats);
44 static inline void taskstats_tgid_init(struct signal_struct *sig)
46 spin_lock_init(&sig->stats_lock);
50 static inline void taskstats_tgid_alloc(struct signal_struct *sig)
52 struct taskstats *stats;
55 stats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
59 spin_lock_irqsave(&sig->stats_lock, flags);
64 spin_unlock_irqrestore(&sig->stats_lock, flags);
67 kmem_cache_free(taskstats_cache, stats);
70 static inline void taskstats_tgid_free(struct signal_struct *sig)
72 struct taskstats *stats = NULL;
75 spin_lock_irqsave(&sig->stats_lock, flags);
80 spin_unlock_irqrestore(&sig->stats_lock, flags);
82 kmem_cache_free(taskstats_cache, stats);
85 extern void taskstats_exit_send(struct task_struct *, struct taskstats *, int);
86 extern void taskstats_init_early(void);
87 extern void taskstats_tgid_alloc(struct signal_struct *);
89 static inline void taskstats_exit_alloc(struct taskstats **ptidstats)
91 static inline void taskstats_exit_free(struct taskstats *ptidstats)
93 static inline void taskstats_exit_send(struct task_struct *tsk,
94 struct taskstats *tidstats,
97 static inline void taskstats_tgid_init(struct signal_struct *sig)
99 static inline void taskstats_tgid_alloc(struct signal_struct *sig)
101 static inline void taskstats_tgid_free(struct signal_struct *sig)
103 static inline void taskstats_init_early(void)
105 #endif /* CONFIG_TASKSTATS */