home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / acct.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  5.7 KB  |  206 lines

  1. /*
  2.  *  BSD Process Accounting for Linux - Definitions
  3.  *
  4.  *  Author: Marco van Wieringen (mvw@planets.elm.net)
  5.  *
  6.  *  This header file contains the definitions needed to implement
  7.  *  BSD-style process accounting. The kernel accounting code and all
  8.  *  user-level programs that try to do something useful with the
  9.  *  process accounting log must include this file.
  10.  *
  11.  *  Copyright (C) 1995 - 1997 Marco van Wieringen - ELM Consultancy B.V.
  12.  *
  13.  */
  14.  
  15. #ifndef _LINUX_ACCT_H
  16. #define _LINUX_ACCT_H
  17.  
  18. #include <linux/types.h>
  19.  
  20. #include <asm/param.h>
  21. #include <asm/byteorder.h>
  22.  
  23. /* 
  24.  *  comp_t is a 16-bit "floating" point number with a 3-bit base 8
  25.  *  exponent and a 13-bit fraction.
  26.  *  comp2_t is 24-bit with 5-bit base 2 exponent and 20 bit fraction
  27.  *  (leading 1 not stored).
  28.  *  See linux/kernel/acct.c for the specific encoding systems used.
  29.  */
  30.  
  31. typedef __u16    comp_t;
  32. typedef __u32    comp2_t;
  33.  
  34. /*
  35.  *   accounting file record
  36.  *
  37.  *   This structure contains all of the information written out to the
  38.  *   process accounting file whenever a process exits.
  39.  */
  40.  
  41. #define ACCT_COMM    16
  42.  
  43. struct acct
  44. {
  45.     char        ac_flag;        /* Flags */
  46.     char        ac_version;        /* Always set to ACCT_VERSION */
  47.     /* for binary compatibility back until 2.0 */
  48.     __u16        ac_uid16;        /* LSB of Real User ID */
  49.     __u16        ac_gid16;        /* LSB of Real Group ID */
  50.     __u16        ac_tty;            /* Control Terminal */
  51.     __u32        ac_btime;        /* Process Creation Time */
  52.     comp_t        ac_utime;        /* User Time */
  53.     comp_t        ac_stime;        /* System Time */
  54.     comp_t        ac_etime;        /* Elapsed Time */
  55.     comp_t        ac_mem;            /* Average Memory Usage */
  56.     comp_t        ac_io;            /* Chars Transferred */
  57.     comp_t        ac_rw;            /* Blocks Read or Written */
  58.     comp_t        ac_minflt;        /* Minor Pagefaults */
  59.     comp_t        ac_majflt;        /* Major Pagefaults */
  60.     comp_t        ac_swaps;        /* Number of Swaps */
  61. /* m68k had no padding here. */
  62. #if !defined(CONFIG_M68K) || !defined(__KERNEL__)
  63.     __u16        ac_ahz;            /* AHZ */
  64. #endif
  65.     __u32        ac_exitcode;        /* Exitcode */
  66.     char        ac_comm[ACCT_COMM + 1];    /* Command Name */
  67.     __u8        ac_etime_hi;        /* Elapsed Time MSB */
  68.     __u16        ac_etime_lo;        /* Elapsed Time LSB */
  69.     __u32        ac_uid;            /* Real User ID */
  70.     __u32        ac_gid;            /* Real Group ID */
  71. };
  72.  
  73. struct acct_v3
  74. {
  75.     char        ac_flag;        /* Flags */
  76.     char        ac_version;        /* Always set to ACCT_VERSION */
  77.     __u16        ac_tty;            /* Control Terminal */
  78.     __u32        ac_exitcode;        /* Exitcode */
  79.     __u32        ac_uid;            /* Real User ID */
  80.     __u32        ac_gid;            /* Real Group ID */
  81.     __u32        ac_pid;            /* Process ID */
  82.     __u32        ac_ppid;        /* Parent Process ID */
  83.     __u32        ac_btime;        /* Process Creation Time */
  84. #ifdef __KERNEL__
  85.     __u32        ac_etime;        /* Elapsed Time */
  86. #else
  87.     float        ac_etime;        /* Elapsed Time */
  88. #endif
  89.     comp_t        ac_utime;        /* User Time */
  90.     comp_t        ac_stime;        /* System Time */
  91.     comp_t        ac_mem;            /* Average Memory Usage */
  92.     comp_t        ac_io;            /* Chars Transferred */
  93.     comp_t        ac_rw;            /* Blocks Read or Written */
  94.     comp_t        ac_minflt;        /* Minor Pagefaults */
  95.     comp_t        ac_majflt;        /* Major Pagefaults */
  96.     comp_t        ac_swaps;        /* Number of Swaps */
  97.     char        ac_comm[ACCT_COMM];    /* Command Name */
  98. };
  99.  
  100. /*
  101.  *  accounting flags
  102.  */
  103.                 /* bit set when the process ... */
  104. #define AFORK        0x01    /* ... executed fork, but did not exec */
  105. #define ASU        0x02    /* ... used super-user privileges */
  106. #define ACOMPAT        0x04    /* ... used compatibility mode (VAX only not used) */
  107. #define ACORE        0x08    /* ... dumped core */
  108. #define AXSIG        0x10    /* ... was killed by a signal */
  109.  
  110. #ifdef __BIG_ENDIAN
  111. #define ACCT_BYTEORDER    0x80    /* accounting file is big endian */
  112. #else
  113. #define ACCT_BYTEORDER    0x00    /* accounting file is little endian */
  114. #endif
  115.  
  116. #ifdef __KERNEL__
  117.  
  118.  
  119. #ifdef CONFIG_BSD_PROCESS_ACCT
  120. struct vfsmount;
  121. struct super_block;
  122. extern void acct_auto_close_mnt(struct vfsmount *m);
  123. extern void acct_auto_close(struct super_block *sb);
  124. extern void acct_process(long exitcode);
  125. extern void acct_update_integrals(struct task_struct *tsk);
  126. extern void acct_clear_integrals(struct task_struct *tsk);
  127. #else
  128. #define acct_auto_close_mnt(x)    do { } while (0)
  129. #define acct_auto_close(x)    do { } while (0)
  130. #define acct_process(x)        do { } while (0)
  131. #define acct_update_integrals(x)        do { } while (0)
  132. #define acct_clear_integrals(task)    do { } while (0)
  133. #endif
  134.  
  135. /*
  136.  * ACCT_VERSION numbers as yet defined:
  137.  * 0: old format (until 2.6.7) with 16 bit uid/gid
  138.  * 1: extended variant (binary compatible on M68K)
  139.  * 2: extended variant (binary compatible on everything except M68K)
  140.  * 3: new binary incompatible format (64 bytes)
  141.  * 4: new binary incompatible format (128 bytes)
  142.  * 5: new binary incompatible format (128 bytes, second half)
  143.  *
  144.  */
  145.  
  146. #ifdef CONFIG_BSD_PROCESS_ACCT_V3
  147. #define ACCT_VERSION    3
  148. #define AHZ        100
  149. typedef struct acct_v3 acct_t;
  150. #else
  151. #ifdef CONFIG_M68K
  152. #define ACCT_VERSION    1
  153. #else
  154. #define ACCT_VERSION    2
  155. #endif
  156. #define AHZ        (USER_HZ)
  157. typedef struct acct acct_t;
  158. #endif
  159.  
  160. #else
  161. #define ACCT_VERSION    2
  162. #define AHZ        (HZ)
  163. #endif    /* __KERNEL */
  164.  
  165. #ifdef __KERNEL__
  166. #include <linux/jiffies.h>
  167. /*
  168.  * Yet another set of HZ to *HZ helper functions.
  169.  * See <linux/jiffies.h> for the original.
  170.  */
  171.  
  172. static inline u32 jiffies_to_AHZ(unsigned long x)
  173. {
  174. #if (TICK_NSEC % (NSEC_PER_SEC / AHZ)) == 0
  175.     return x / (HZ / AHZ);
  176. #else
  177.         u64 tmp = (u64)x * TICK_NSEC;
  178.         do_div(tmp, (NSEC_PER_SEC / AHZ));
  179.         return (long)tmp;
  180. #endif
  181. }
  182.  
  183. static inline u64 nsec_to_AHZ(u64 x)
  184. {
  185. #if (NSEC_PER_SEC % AHZ) == 0
  186.     do_div(x, (NSEC_PER_SEC / AHZ));
  187. #elif (AHZ % 512) == 0
  188.     x *= AHZ/512;
  189.     do_div(x, (NSEC_PER_SEC / 512));
  190. #else
  191.     /*
  192.          * max relative error 5.7e-8 (1.8s per year) for AHZ <= 1024,
  193.          * overflow after 64.99 years.
  194.          * exact for AHZ=60, 72, 90, 120, 144, 180, 300, 600, 900, ...
  195.          */
  196.     x *= 9;
  197.     do_div(x, (unsigned long)((9ull * NSEC_PER_SEC + (AHZ/2))
  198.                               / AHZ));
  199. #endif
  200.     return x;
  201. }
  202.  
  203. #endif  /* __KERNEL */
  204.  
  205. #endif    /* _LINUX_ACCT_H */
  206.