acct.h 2.6 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/*
 *  BSD Process Accounting for Linux - Definitions
 *
 *  Author: Marco van Wieringen (mvw@planets.elm.net)
 *
 *  This header file contains the definitions needed to implement
 *  BSD-style process accounting. The kernel accounting code and all
 *  user-level programs that try to do something useful with the
 *  process accounting log must include this file.
 *
 *  Copyright (C) 1995 - 1997 Marco van Wieringen - ELM Consultancy B.V.
 *
 */
#ifndef _LINUX_ACCT_H
#define _LINUX_ACCT_H

17
#include <uapi/linux/acct.h>
L
Linus Torvalds 已提交
18 19 20 21



#ifdef CONFIG_BSD_PROCESS_ACCT
22
struct vfsmount;
L
Linus Torvalds 已提交
23
struct super_block;
A
Al Viro 已提交
24
struct pacct_struct;
25
struct pid_namespace;
D
Dave Young 已提交
26
extern int acct_parm[]; /* for sysctl */
27 28
extern void acct_collect(long exitcode, int group_dead);
extern void acct_process(void);
29
extern void acct_exit_ns(struct pid_namespace *);
L
Linus Torvalds 已提交
30
#else
31 32
#define acct_collect(x,y)	do { } while (0)
#define acct_process()		do { } while (0)
33
#define acct_exit_ns(ns)	do { } while (0)
L
Linus Torvalds 已提交
34
#endif
A
Al Viro 已提交
35 36
extern void acct_auto_close(struct hlist_head *);
extern void acct_auto_close_mnt(struct hlist_head *);
L
Linus Torvalds 已提交
37 38 39 40 41 42 43 44 45 46 47 48

/*
 * ACCT_VERSION numbers as yet defined:
 * 0: old format (until 2.6.7) with 16 bit uid/gid
 * 1: extended variant (binary compatible on M68K)
 * 2: extended variant (binary compatible on everything except M68K)
 * 3: new binary incompatible format (64 bytes)
 * 4: new binary incompatible format (128 bytes)
 * 5: new binary incompatible format (128 bytes, second half)
 *
 */

49 50 51
#undef ACCT_VERSION
#undef AHZ

L
Linus Torvalds 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64 65
#ifdef CONFIG_BSD_PROCESS_ACCT_V3
#define ACCT_VERSION	3
#define AHZ		100
typedef struct acct_v3 acct_t;
#else
#ifdef CONFIG_M68K
#define ACCT_VERSION	1
#else
#define ACCT_VERSION	2
#endif
#define AHZ		(USER_HZ)
typedef struct acct acct_t;
#endif

66
#include <linux/jiffies.h>
L
Linus Torvalds 已提交
67 68
/*
 * Yet another set of HZ to *HZ helper functions.
69
 * See <linux/jiffies.h> for the original.
L
Linus Torvalds 已提交
70 71 72 73 74
 */

static inline u32 jiffies_to_AHZ(unsigned long x)
{
#if (TICK_NSEC % (NSEC_PER_SEC / AHZ)) == 0
75 76 77
# if HZ < AHZ
	return x * (AHZ / HZ);
# else
78
	return x / (HZ / AHZ);
79
# endif
L
Linus Torvalds 已提交
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
#else
        u64 tmp = (u64)x * TICK_NSEC;
        do_div(tmp, (NSEC_PER_SEC / AHZ));
        return (long)tmp;
#endif
}

static inline u64 nsec_to_AHZ(u64 x)
{
#if (NSEC_PER_SEC % AHZ) == 0
	do_div(x, (NSEC_PER_SEC / AHZ));
#elif (AHZ % 512) == 0
	x *= AHZ/512;
	do_div(x, (NSEC_PER_SEC / 512));
#else
	/*
         * max relative error 5.7e-8 (1.8s per year) for AHZ <= 1024,
         * overflow after 64.99 years.
         * exact for AHZ=60, 72, 90, 120, 144, 180, 300, 600, 900, ...
         */
	x *= 9;
	do_div(x, (unsigned long)((9ull * NSEC_PER_SEC + (AHZ/2))
	                          / AHZ));
#endif
	return x;
}

#endif	/* _LINUX_ACCT_H */