taskstats_kern.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 kmem_cache_t *taskstats_cache;
  13. extern struct mutex taskstats_exit_mutex;
  14. static inline void taskstats_exit_free(struct taskstats *tidstats)
  15. {
  16. if (tidstats)
  17. kmem_cache_free(taskstats_cache, tidstats);
  18. }
  19. static inline void taskstats_tgid_init(struct signal_struct *sig)
  20. {
  21. spin_lock_init(&sig->stats_lock);
  22. sig->stats = NULL;
  23. }
  24. static inline void taskstats_tgid_alloc(struct signal_struct *sig)
  25. {
  26. struct taskstats *stats;
  27. unsigned long flags;
  28. if (sig->stats != NULL)
  29. return;
  30. stats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
  31. if (!stats)
  32. return;
  33. spin_lock_irqsave(&sig->stats_lock, flags);
  34. if (!sig->stats) {
  35. sig->stats = stats;
  36. stats = NULL;
  37. }
  38. spin_unlock_irqrestore(&sig->stats_lock, flags);
  39. if (stats)
  40. kmem_cache_free(taskstats_cache, stats);
  41. }
  42. static inline void taskstats_tgid_free(struct signal_struct *sig)
  43. {
  44. if (sig->stats)
  45. kmem_cache_free(taskstats_cache, sig->stats);
  46. }
  47. extern void taskstats_exit_alloc(struct taskstats **, unsigned int *);
  48. extern void taskstats_exit_send(struct task_struct *, struct taskstats *, int, unsigned int);
  49. extern void taskstats_init_early(void);
  50. extern void taskstats_tgid_alloc(struct signal_struct *);
  51. #else
  52. static inline void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu)
  53. {}
  54. static inline void taskstats_exit_free(struct taskstats *ptidstats)
  55. {}
  56. static inline void taskstats_exit_send(struct task_struct *tsk,
  57. struct taskstats *tidstats,
  58. int group_dead, unsigned int cpu)
  59. {}
  60. static inline void taskstats_tgid_init(struct signal_struct *sig)
  61. {}
  62. static inline void taskstats_tgid_alloc(struct signal_struct *sig)
  63. {}
  64. static inline void taskstats_tgid_free(struct signal_struct *sig)
  65. {}
  66. static inline void taskstats_init_early(void)
  67. {}
  68. #endif /* CONFIG_TASKSTATS */
  69. #endif