taskstats_kern.h revision e18b890bb0881bbab6f4f1a6cd20d9c60d66b003
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> 12#include <net/genetlink.h> 13 14#ifdef CONFIG_TASKSTATS 15extern struct kmem_cache *taskstats_cache; 16extern struct mutex taskstats_exit_mutex; 17 18static inline void taskstats_exit_free(struct taskstats *tidstats) 19{ 20 if (tidstats) 21 kmem_cache_free(taskstats_cache, tidstats); 22} 23 24static inline void taskstats_tgid_init(struct signal_struct *sig) 25{ 26 sig->stats = NULL; 27} 28 29static inline void taskstats_tgid_alloc(struct task_struct *tsk) 30{ 31 struct signal_struct *sig = tsk->signal; 32 struct taskstats *stats; 33 34 if (sig->stats != NULL) 35 return; 36 37 /* No problem if kmem_cache_zalloc() fails */ 38 stats = kmem_cache_zalloc(taskstats_cache, GFP_KERNEL); 39 40 spin_lock_irq(&tsk->sighand->siglock); 41 if (!sig->stats) { 42 sig->stats = stats; 43 stats = NULL; 44 } 45 spin_unlock_irq(&tsk->sighand->siglock); 46 47 if (stats) 48 kmem_cache_free(taskstats_cache, stats); 49} 50 51static inline void taskstats_tgid_free(struct signal_struct *sig) 52{ 53 if (sig->stats) 54 kmem_cache_free(taskstats_cache, sig->stats); 55} 56 57extern void taskstats_exit_alloc(struct taskstats **, unsigned int *); 58extern void taskstats_exit_send(struct task_struct *, struct taskstats *, int, unsigned int); 59extern void taskstats_init_early(void); 60#else 61static inline void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu) 62{} 63static inline void taskstats_exit_free(struct taskstats *ptidstats) 64{} 65static inline void taskstats_exit_send(struct task_struct *tsk, 66 struct taskstats *tidstats, 67 int group_dead, unsigned int cpu) 68{} 69static inline void taskstats_tgid_init(struct signal_struct *sig) 70{} 71static inline void taskstats_tgid_alloc(struct task_struct *tsk) 72{} 73static inline void taskstats_tgid_free(struct signal_struct *sig) 74{} 75static inline void taskstats_init_early(void) 76{} 77#endif /* CONFIG_TASKSTATS */ 78 79#endif 80 81