Create a "taskstats" interface based on generic netlink (NETLINK_GENERIC family), for getting statistics of tasks and thread groups during their lifetime and when they exit. The interface is intended for use by multiple accounting packages though it is being created in the context of delay accounting. This patch creates the interface without populating the fields of the data that is sent to the user in response to a command or upon the exit of a task. Each accounting package interested in using taskstats has to provide an additional patch to add its stats to the common structure. [akpm@osdl.org: cleanups, Kconfig fix] Signed-off-by: Shailabh Nagar <nagar@us.ibm.com> Signed-off-by: Balbir Singh <balbir@in.ibm.com> Cc: Jes Sorensen <jes@sgi.com> Cc: Peter Chubb <peterc@gelato.unsw.edu.au> Cc: Erich Focht <efocht@ess.nec.de> Cc: Levent Serinol <lserinol@gmail.com> Cc: Jay Lan <jlan@engr.sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
/* taskstats_kern.h - kernel header for per-task statistics interface
|
|
*
|
|
* Copyright (C) Shailabh Nagar, IBM Corp. 2006
|
|
* (C) Balbir Singh, IBM Corp. 2006
|
|
*/
|
|
|
|
#ifndef _LINUX_TASKSTATS_KERN_H
|
|
#define _LINUX_TASKSTATS_KERN_H
|
|
|
|
#include <linux/taskstats.h>
|
|
#include <linux/sched.h>
|
|
|
|
enum {
|
|
TASKSTATS_MSG_UNICAST, /* send data only to requester */
|
|
TASKSTATS_MSG_MULTICAST, /* send data to a group */
|
|
};
|
|
|
|
#ifdef CONFIG_TASKSTATS
|
|
extern kmem_cache_t *taskstats_cache;
|
|
|
|
static inline void taskstats_exit_alloc(struct taskstats **ptidstats,
|
|
struct taskstats **ptgidstats)
|
|
{
|
|
*ptidstats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
|
|
*ptgidstats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
|
|
}
|
|
|
|
static inline void taskstats_exit_free(struct taskstats *tidstats,
|
|
struct taskstats *tgidstats)
|
|
{
|
|
if (tidstats)
|
|
kmem_cache_free(taskstats_cache, tidstats);
|
|
if (tgidstats)
|
|
kmem_cache_free(taskstats_cache, tgidstats);
|
|
}
|
|
|
|
extern void taskstats_exit_send(struct task_struct *, struct taskstats *,
|
|
struct taskstats *);
|
|
extern void taskstats_init_early(void);
|
|
|
|
#else
|
|
static inline void taskstats_exit_alloc(struct taskstats **ptidstats,
|
|
struct taskstats **ptgidstats)
|
|
{}
|
|
static inline void taskstats_exit_free(struct taskstats *ptidstats,
|
|
struct taskstats *ptgidstats)
|
|
{}
|
|
static inline void taskstats_exit_send(struct task_struct *tsk,
|
|
struct taskstats *tidstats,
|
|
struct taskstats *tgidstats)
|
|
{}
|
|
static inline void taskstats_init_early(void)
|
|
{}
|
|
#endif /* CONFIG_TASKSTATS */
|
|
|
|
#endif
|
|
|