taskstats_kern.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. sig->stats = NULL;
  22. }
  23. static inline void taskstats_tgid_alloc(struct task_struct *tsk)
  24. {
  25. struct signal_struct *sig = tsk->signal;
  26. struct taskstats *stats;
  27. if (sig->stats != NULL)
  28. return;
  29. /* No problem if kmem_cache_zalloc() fails */
  30. stats = kmem_cache_zalloc(taskstats_cache, GFP_KERNEL);
  31. spin_lock_irq(&tsk->sighand->siglock);
  32. if (!sig->stats) {
  33. sig->stats = stats;
  34. stats = NULL;
  35. }
  36. spin_unlock_irq(&tsk->sighand->siglock);
  37. if (stats)
  38. kmem_cache_free(taskstats_cache, stats);
  39. }
  40. static inline void taskstats_tgid_free(struct signal_struct *sig)
  41. {
  42. if (sig->stats)
  43. kmem_cache_free(taskstats_cache, sig->stats);
  44. }
  45. extern void taskstats_exit_alloc(struct taskstats **, unsigned int *);
  46. extern void taskstats_exit_send(struct task_struct *, struct taskstats *, int, unsigned int);
  47. extern void taskstats_init_early(void);
  48. #else
  49. static inline void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu)
  50. {}
  51. static inline void taskstats_exit_free(struct taskstats *ptidstats)
  52. {}
  53. static inline void taskstats_exit_send(struct task_struct *tsk,
  54. struct taskstats *tidstats,
  55. int group_dead, unsigned int cpu)
  56. {}
  57. static inline void taskstats_tgid_init(struct signal_struct *sig)
  58. {}
  59. static inline void taskstats_tgid_alloc(struct task_struct *tsk)
  60. {}
  61. static inline void taskstats_tgid_free(struct signal_struct *sig)
  62. {}
  63. static inline void taskstats_init_early(void)
  64. {}
  65. #endif /* CONFIG_TASKSTATS */
  66. #endif