taskstats_kern.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. #ifndef _LINUX_TASKSTATS_KERN_H
  7. #define _LINUX_TASKSTATS_KERN_H
  8. #include <linux/taskstats.h>
  9. #include <linux/sched.h>
  10. #include <net/genetlink.h>
  11. #ifdef CONFIG_TASKSTATS
  12. extern struct kmem_cache *taskstats_cache;
  13. extern struct mutex taskstats_exit_mutex;
  14. static inline void taskstats_tgid_init(struct signal_struct *sig)
  15. {
  16. sig->stats = NULL;
  17. }
  18. static inline void taskstats_tgid_alloc(struct task_struct *tsk)
  19. {
  20. struct signal_struct *sig = tsk->signal;
  21. struct taskstats *stats;
  22. if (sig->stats != NULL)
  23. return;
  24. /* No problem if kmem_cache_zalloc() fails */
  25. stats = kmem_cache_zalloc(taskstats_cache, GFP_KERNEL);
  26. spin_lock_irq(&tsk->sighand->siglock);
  27. if (!sig->stats) {
  28. sig->stats = stats;
  29. stats = NULL;
  30. }
  31. spin_unlock_irq(&tsk->sighand->siglock);
  32. if (stats)
  33. kmem_cache_free(taskstats_cache, stats);
  34. }
  35. static inline void taskstats_tgid_free(struct signal_struct *sig)
  36. {
  37. if (sig->stats)
  38. kmem_cache_free(taskstats_cache, sig->stats);
  39. }
  40. extern void taskstats_exit(struct task_struct *, int group_dead);
  41. extern void taskstats_init_early(void);
  42. #else
  43. static inline void taskstats_exit(struct task_struct *tsk, int group_dead)
  44. {}
  45. static inline void taskstats_tgid_init(struct signal_struct *sig)
  46. {}
  47. static inline void taskstats_tgid_alloc(struct task_struct *tsk)
  48. {}
  49. static inline void taskstats_tgid_free(struct signal_struct *sig)
  50. {}
  51. static inline void taskstats_init_early(void)
  52. {}
  53. #endif /* CONFIG_TASKSTATS */
  54. #endif