Split the basic accounting taskstats fields into the threadgroup specific ones and the thread specific ones. This should have no effect on the execution.
Signed-off-by: Guillaume Chazarain <[EMAIL PROTECTED]> Cc: Balbir Singh <[EMAIL PROTECTED]> Cc: Jay Lan <[EMAIL PROTECTED]> Cc: Jonathan Lim <[EMAIL PROTECTED]> Cc: Oleg Nesterov <[EMAIL PROTECTED]> --- kernel/tsacct.c | 53 +++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 37 insertions(+), 16 deletions(-) diff --git a/kernel/tsacct.c b/kernel/tsacct.c index 4ab1b58..d32378f 100644 --- a/kernel/tsacct.c +++ b/kernel/tsacct.c @@ -25,13 +25,11 @@ /* * fill in basic accounting fields */ -void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk) +static void fill_wall_times(struct taskstats *stats, struct task_struct *tsk) { struct timespec uptime, ts; s64 ac_etime; - BUILD_BUG_ON(TS_COMM_LEN < TASK_COMM_LEN); - /* calculate task elapsed time in timespec */ do_posix_clock_monotonic_gettime(&uptime); ts = timespec_sub(uptime, tsk->start_time); @@ -40,17 +38,47 @@ void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk) do_div(ac_etime, NSEC_PER_USEC); stats->ac_etime = ac_etime; stats->ac_btime = get_seconds() - ts.tv_sec; - if (thread_group_leader(tsk)) { - stats->ac_exitcode = tsk->exit_code; - if (tsk->flags & PF_FORKNOEXEC) - stats->ac_flag |= AFORK; - } +} + +/* + * Later on, XXX_add_tsk() will need to be called after XXX_fill_threadgroup(), + * so put the functions in this order + */ +static void bacct_fill_threadgroup(struct taskstats *stats, + struct task_struct *tsk); + +void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk) +{ if (tsk->flags & PF_SUPERPRIV) stats->ac_flag |= ASU; if (tsk->flags & PF_DUMPCORE) stats->ac_flag |= ACORE; if (tsk->flags & PF_SIGNALED) stats->ac_flag |= AXSIG; + + stats->ac_utime += cputime_to_msecs(tsk->utime) * USEC_PER_MSEC; + stats->ac_stime += cputime_to_msecs(tsk->stime) * USEC_PER_MSEC; + stats->ac_utimescaled += + cputime_to_msecs(tsk->utimescaled) * USEC_PER_MSEC; + stats->ac_stimescaled += + cputime_to_msecs(tsk->stimescaled) * USEC_PER_MSEC; + stats->ac_minflt += tsk->min_flt; + stats->ac_majflt += tsk->maj_flt; + + bacct_fill_threadgroup(stats, tsk); +} + +static void bacct_fill_threadgroup(struct taskstats *stats, + struct task_struct *tsk) +{ + fill_wall_times(stats, tsk); + + if (thread_group_leader(tsk)) { + stats->ac_exitcode = tsk->exit_code; + if (tsk->flags & PF_FORKNOEXEC) + stats->ac_flag |= AFORK; + } + stats->ac_nice = task_nice(tsk); stats->ac_sched = tsk->policy; stats->ac_uid = tsk->uid; @@ -60,15 +88,8 @@ void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk) stats->ac_ppid = pid_alive(tsk) ? rcu_dereference(tsk->real_parent)->tgid : 0; rcu_read_unlock(); - stats->ac_utime = cputime_to_msecs(tsk->utime) * USEC_PER_MSEC; - stats->ac_stime = cputime_to_msecs(tsk->stime) * USEC_PER_MSEC; - stats->ac_utimescaled = - cputime_to_msecs(tsk->utimescaled) * USEC_PER_MSEC; - stats->ac_stimescaled = - cputime_to_msecs(tsk->stimescaled) * USEC_PER_MSEC; - stats->ac_minflt = tsk->min_flt; - stats->ac_majflt = tsk->maj_flt; + BUILD_BUG_ON(TS_COMM_LEN < TASK_COMM_LEN); strncpy(stats->ac_comm, tsk->comm, sizeof(stats->ac_comm)); } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/