summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_racct.c
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2012-11-13 11:29:08 +0000
committertrasz <trasz@FreeBSD.org>2012-11-13 11:29:08 +0000
commit974b82f77de16221515a7323e98f7e2514ff4e13 (patch)
treee8f8c455c5ebb300ae9b90e2b60d0ebbcce7ee18 /sys/kern/kern_racct.c
parentc9968192edf76254b6af4a2c3b6710138cce4952 (diff)
downloadFreeBSD-src-974b82f77de16221515a7323e98f7e2514ff4e13.zip
FreeBSD-src-974b82f77de16221515a7323e98f7e2514ff4e13.tar.gz
Don't divide by zero.
Tested by: swills
Diffstat (limited to 'sys/kern/kern_racct.c')
-rw-r--r--sys/kern/kern_racct.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c
index df1c457..4532f217 100644
--- a/sys/kern/kern_racct.c
+++ b/sys/kern/kern_racct.c
@@ -921,9 +921,12 @@ racct_proc_exit(struct proc *p)
#endif
microuptime(&wallclock);
timevalsub(&wallclock, &p->p_stats->p_start);
- pct_estimate = (1000000 * runtime * 100) /
- ((uint64_t)wallclock.tv_sec * 1000000 +
- wallclock.tv_usec);
+ if (wallclock.tv_sec > 0 || wallclock.tv_usec > 0) {
+ pct_estimate = (1000000 * runtime * 100) /
+ ((uint64_t)wallclock.tv_sec * 1000000 +
+ wallclock.tv_usec);
+ } else
+ pct_estimate = 0;
pct = racct_getpcpu(p, pct_estimate);
mtx_lock(&racct_lock);
@@ -1136,9 +1139,12 @@ racctd(void)
runtime = p->p_prev_runtime;
#endif
p->p_prev_runtime = runtime;
- pct_estimate = (1000000 * runtime * 100) /
- ((uint64_t)wallclock.tv_sec * 1000000 +
- wallclock.tv_usec);
+ if (wallclock.tv_sec > 0 || wallclock.tv_usec > 0) {
+ pct_estimate = (1000000 * runtime * 100) /
+ ((uint64_t)wallclock.tv_sec * 1000000 +
+ wallclock.tv_usec);
+ } else
+ pct_estimate = 0;
pct = racct_getpcpu(p, pct_estimate);
mtx_lock(&racct_lock);
racct_set_force_locked(p, RACCT_PCTCPU, pct);
OpenPOWER on IntegriCloud