acct.h 2.51 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
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>
Linus Torvalds's avatar
Linus Torvalds committed
18 19 20 21



#ifdef CONFIG_BSD_PROCESS_ACCT
22
struct vfsmount;
Linus Torvalds's avatar
Linus Torvalds committed
23
struct super_block;
24
struct pacct_struct;
25
struct pid_namespace;
Dave Young's avatar
Dave Young committed
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 *);
Linus Torvalds's avatar
Linus Torvalds committed
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)
Linus Torvalds's avatar
Linus Torvalds committed
34 35 36 37 38 39 40 41 42 43 44 45 46
#endif

/*
 * 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)
 *
 */

47 48 49
#undef ACCT_VERSION
#undef AHZ

Linus Torvalds's avatar
Linus Torvalds committed
50 51 52 53 54 55 56 57 58 59 60 61 62 63
#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

64
#include <linux/jiffies.h>
Linus Torvalds's avatar
Linus Torvalds committed
65 66
/*
 * Yet another set of HZ to *HZ helper functions.
67
 * See <linux/jiffies.h> for the original.
Linus Torvalds's avatar
Linus Torvalds committed
68 69 70 71 72
 */

static inline u32 jiffies_to_AHZ(unsigned long x)
{
#if (TICK_NSEC % (NSEC_PER_SEC / AHZ)) == 0
73 74 75
# if HZ < AHZ
	return x * (AHZ / HZ);
# else
76
	return x / (HZ / AHZ);
77
# endif
Linus Torvalds's avatar
Linus Torvalds committed
78 79 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
#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 */