summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/acct.c4
-rw-r--r--kernel/exit.c4
-rw-r--r--kernel/sched.c5
-rw-r--r--kernel/sysctl.c11
4 files changed, 19 insertions, 5 deletions
diff --git a/kernel/acct.c b/kernel/acct.c
index 32e39accbb86..78ed87b13de6 100644
--- a/kernel/acct.c
+++ b/kernel/acct.c
@@ -534,10 +534,8 @@ void acct_process(long exitcode)
* acct_update_integrals
* - update mm integral fields in task_struct
*/
-void acct_update_integrals(void)
+void acct_update_integrals(struct task_struct *tsk)
{
- struct task_struct *tsk = current;
-
if (likely(tsk->mm)) {
long delta = tsk->stime - tsk->acct_stimexpd;
diff --git a/kernel/exit.c b/kernel/exit.c
index f40a50f69850..4173fa7536dc 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -806,8 +806,8 @@ fastcall NORET_TYPE void do_exit(long code)
current->comm, current->pid,
preempt_count());
- acct_update_integrals();
- update_mem_hiwater();
+ acct_update_integrals(tsk);
+ update_mem_hiwater(tsk);
group_dead = atomic_dec_and_test(&tsk->signal->live);
if (group_dead)
acct_process(code);
diff --git a/kernel/sched.c b/kernel/sched.c
index 95042b27d30c..f32101f5e31a 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -45,6 +45,7 @@
#include <linux/seq_file.h>
#include <linux/syscalls.h>
#include <linux/times.h>
+#include <linux/acct.h>
#include <asm/tlb.h>
#include <asm/unistd.h>
@@ -2379,6 +2380,10 @@ void account_system_time(struct task_struct *p, int hardirq_offset,
cpustat->iowait = cputime64_add(cpustat->iowait, tmp);
else
cpustat->idle = cputime64_add(cpustat->idle, tmp);
+ /* Account for system time used */
+ acct_update_integrals(p);
+ /* Update rss highwater mark */
+ update_mem_hiwater(p);
}
/*
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index a72dd5677c8f..cc93403f27a7 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -121,6 +121,8 @@ extern int sysctl_hz_timer;
extern int acct_parm[];
#endif
+int randomize_va_space = 1;
+
static int parse_table(int __user *, int, void __user *, size_t __user *, void __user *, size_t,
ctl_table *, void **);
static int proc_doutsstring(ctl_table *table, int write, struct file *filp,
@@ -632,6 +634,15 @@ static ctl_table kern_table[] = {
.proc_handler = &proc_dointvec,
},
#endif
+ {
+ .ctl_name = KERN_RANDOMIZE,
+ .procname = "randomize_va_space",
+ .data = &randomize_va_space,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = &proc_dointvec,
+ },
+
{ .ctl_name = 0 }
};