aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/compat.c2
-rw-r--r--fs/exec.c2
-rw-r--r--include/linux/acct.h4
-rw-r--r--include/linux/sched.h2
-rw-r--r--include/linux/tsacct_kern.h6
-rw-r--r--kernel/acct.c30
-rw-r--r--kernel/exit.c1
-rw-r--r--kernel/fork.c1
-rw-r--r--kernel/sched.c2
-rw-r--r--kernel/tsacct.c30
10 files changed, 42 insertions, 38 deletions
diff --git a/fs/compat.c b/fs/compat.c
index 6b90bf35f61d..13fb08d096c4 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -44,7 +44,7 @@
44#include <linux/nfsd/syscall.h> 44#include <linux/nfsd/syscall.h>
45#include <linux/personality.h> 45#include <linux/personality.h>
46#include <linux/rwsem.h> 46#include <linux/rwsem.h>
47#include <linux/acct.h> 47#include <linux/tsacct_kern.h>
48#include <linux/mm.h> 48#include <linux/mm.h>
49 49
50#include <net/sock.h> /* siocdevprivate_ioctl */ 50#include <net/sock.h> /* siocdevprivate_ioctl */
diff --git a/fs/exec.c b/fs/exec.c
index a8efe35176b0..0db3fc3c5f0f 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -46,7 +46,7 @@
46#include <linux/security.h> 46#include <linux/security.h>
47#include <linux/syscalls.h> 47#include <linux/syscalls.h>
48#include <linux/rmap.h> 48#include <linux/rmap.h>
49#include <linux/acct.h> 49#include <linux/tsacct_kern.h>
50#include <linux/cn_proc.h> 50#include <linux/cn_proc.h>
51#include <linux/audit.h> 51#include <linux/audit.h>
52 52
diff --git a/include/linux/acct.h b/include/linux/acct.h
index e86bae7324d2..0496d1f09952 100644
--- a/include/linux/acct.h
+++ b/include/linux/acct.h
@@ -124,16 +124,12 @@ extern void acct_auto_close(struct super_block *sb);
124extern void acct_init_pacct(struct pacct_struct *pacct); 124extern void acct_init_pacct(struct pacct_struct *pacct);
125extern void acct_collect(long exitcode, int group_dead); 125extern void acct_collect(long exitcode, int group_dead);
126extern void acct_process(void); 126extern void acct_process(void);
127extern void acct_update_integrals(struct task_struct *tsk);
128extern void acct_clear_integrals(struct task_struct *tsk);
129#else 127#else
130#define acct_auto_close_mnt(x) do { } while (0) 128#define acct_auto_close_mnt(x) do { } while (0)
131#define acct_auto_close(x) do { } while (0) 129#define acct_auto_close(x) do { } while (0)
132#define acct_init_pacct(x) do { } while (0) 130#define acct_init_pacct(x) do { } while (0)
133#define acct_collect(x,y) do { } while (0) 131#define acct_collect(x,y) do { } while (0)
134#define acct_process() do { } while (0) 132#define acct_process() do { } while (0)
135#define acct_update_integrals(x) do { } while (0)
136#define acct_clear_integrals(task) do { } while (0)
137#endif 133#endif
138 134
139/* 135/*
diff --git a/include/linux/sched.h b/include/linux/sched.h
index fc4a9873ec10..4ddeb0f982fb 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -981,7 +981,7 @@ struct task_struct {
981 wait_queue_t *io_wait; 981 wait_queue_t *io_wait;
982/* i/o counters(bytes read/written, #syscalls */ 982/* i/o counters(bytes read/written, #syscalls */
983 u64 rchar, wchar, syscr, syscw; 983 u64 rchar, wchar, syscr, syscw;
984#if defined(CONFIG_BSD_PROCESS_ACCT) 984#if defined(CONFIG_TASK_XACCT)
985 u64 acct_rss_mem1; /* accumulated rss usage */ 985 u64 acct_rss_mem1; /* accumulated rss usage */
986 u64 acct_vm_mem1; /* accumulated virtual memory usage */ 986 u64 acct_vm_mem1; /* accumulated virtual memory usage */
987 clock_t acct_stimexpd; /* clock_t-converted stime since last update */ 987 clock_t acct_stimexpd; /* clock_t-converted stime since last update */
diff --git a/include/linux/tsacct_kern.h b/include/linux/tsacct_kern.h
index 74102dcae67a..7e50ac795b0b 100644
--- a/include/linux/tsacct_kern.h
+++ b/include/linux/tsacct_kern.h
@@ -18,9 +18,15 @@ static inline void bacct_add_tsk(struct taskstats *stats, struct task_struct *ts
18 18
19#ifdef CONFIG_TASK_XACCT 19#ifdef CONFIG_TASK_XACCT
20extern void xacct_add_tsk(struct taskstats *stats, struct task_struct *p); 20extern void xacct_add_tsk(struct taskstats *stats, struct task_struct *p);
21extern void acct_update_integrals(struct task_struct *tsk);
22extern void acct_clear_integrals(struct task_struct *tsk);
21#else 23#else
22static inline void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) 24static inline void xacct_add_tsk(struct taskstats *stats, struct task_struct *p)
23{} 25{}
26static inline void acct_update_integrals(struct task_struct *tsk)
27{}
28static inline void acct_clear_integrals(struct task_struct *tsk)
29{}
24#endif /* CONFIG_TASK_XACCT */ 30#endif /* CONFIG_TASK_XACCT */
25 31
26#endif 32#endif
diff --git a/kernel/acct.c b/kernel/acct.c
index f4330acead46..0aad5ca36a81 100644
--- a/kernel/acct.c
+++ b/kernel/acct.c
@@ -602,33 +602,3 @@ void acct_process(void)
602 do_acct_process(file); 602 do_acct_process(file);
603 fput(file); 603 fput(file);
604} 604}
605
606
607/**
608 * acct_update_integrals - update mm integral fields in task_struct
609 * @tsk: task_struct for accounting
610 */
611void acct_update_integrals(struct task_struct *tsk)
612{
613 if (likely(tsk->mm)) {
614 long delta =
615 cputime_to_jiffies(tsk->stime) - tsk->acct_stimexpd;
616
617 if (delta == 0)
618 return;
619 tsk->acct_stimexpd = tsk->stime;
620 tsk->acct_rss_mem1 += delta * get_mm_rss(tsk->mm);
621 tsk->acct_vm_mem1 += delta * tsk->mm->total_vm;
622 }
623}
624
625/**
626 * acct_clear_integrals - clear the mm integral fields in task_struct
627 * @tsk: task_struct whose accounting fields are cleared
628 */
629void acct_clear_integrals(struct task_struct *tsk)
630{
631 tsk->acct_stimexpd = 0;
632 tsk->acct_rss_mem1 = 0;
633 tsk->acct_vm_mem1 = 0;
634}
diff --git a/kernel/exit.c b/kernel/exit.c
index c189de2927ab..3b47f26985f2 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -18,6 +18,7 @@
18#include <linux/security.h> 18#include <linux/security.h>
19#include <linux/cpu.h> 19#include <linux/cpu.h>
20#include <linux/acct.h> 20#include <linux/acct.h>
21#include <linux/tsacct_kern.h>
21#include <linux/file.h> 22#include <linux/file.h>
22#include <linux/binfmts.h> 23#include <linux/binfmts.h>
23#include <linux/ptrace.h> 24#include <linux/ptrace.h>
diff --git a/kernel/fork.c b/kernel/fork.c
index 1c999f3e0b47..89f666491d1f 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -42,6 +42,7 @@
42#include <linux/profile.h> 42#include <linux/profile.h>
43#include <linux/rmap.h> 43#include <linux/rmap.h>
44#include <linux/acct.h> 44#include <linux/acct.h>
45#include <linux/tsacct_kern.h>
45#include <linux/cn_proc.h> 46#include <linux/cn_proc.h>
46#include <linux/delayacct.h> 47#include <linux/delayacct.h>
47#include <linux/taskstats_kern.h> 48#include <linux/taskstats_kern.h>
diff --git a/kernel/sched.c b/kernel/sched.c
index 74f169ac0773..2bbd948f0169 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -49,7 +49,7 @@
49#include <linux/seq_file.h> 49#include <linux/seq_file.h>
50#include <linux/syscalls.h> 50#include <linux/syscalls.h>
51#include <linux/times.h> 51#include <linux/times.h>
52#include <linux/acct.h> 52#include <linux/tsacct_kern.h>
53#include <linux/kprobes.h> 53#include <linux/kprobes.h>
54#include <linux/delayacct.h> 54#include <linux/delayacct.h>
55#include <asm/tlb.h> 55#include <asm/tlb.h>
diff --git a/kernel/tsacct.c b/kernel/tsacct.c
index 410483490cf6..47c71daa416f 100644
--- a/kernel/tsacct.c
+++ b/kernel/tsacct.c
@@ -88,4 +88,34 @@ void xacct_add_tsk(struct taskstats *stats, struct task_struct *p)
88 stats->read_syscalls = p->syscr; 88 stats->read_syscalls = p->syscr;
89 stats->write_syscalls = p->syscw; 89 stats->write_syscalls = p->syscw;
90} 90}
91
92
93/**
94 * acct_update_integrals - update mm integral fields in task_struct
95 * @tsk: task_struct for accounting
96 */
97void acct_update_integrals(struct task_struct *tsk)
98{
99 if (likely(tsk->mm)) {
100 long delta =
101 cputime_to_jiffies(tsk->stime) - tsk->acct_stimexpd;
102
103 if (delta == 0)
104 return;
105 tsk->acct_stimexpd = tsk->stime;
106 tsk->acct_rss_mem1 += delta * get_mm_rss(tsk->mm);
107 tsk->acct_vm_mem1 += delta * tsk->mm->total_vm;
108 }
109}
110
111/**
112 * acct_clear_integrals - clear the mm integral fields in task_struct
113 * @tsk: task_struct whose accounting fields are cleared
114 */
115void acct_clear_integrals(struct task_struct *tsk)
116{
117 tsk->acct_stimexpd = 0;
118 tsk->acct_rss_mem1 = 0;
119 tsk->acct_vm_mem1 = 0;
120}
91#endif 121#endif