Fix VIRTUAL and PROF interval timers for short intervals, broken at r247903.

Due to the way those timers are implemented, we can't handle very short
intervals.  In addition to that mentioned patch caused math overflows
for short intervals.  To avoid that round those intervals to 1 tick.

PR:		kern/187668
MFC after:	1 week
This commit is contained in:
Alexander Motin 2014-04-16 18:37:46 +00:00
parent 57a4f20b8d
commit d10a1df8d7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=264550

View File

@ -774,6 +774,14 @@ kern_setitimer(struct thread *td, u_int which, struct itimerval *aitv,
timevalsub(&oitv->it_value, &ctv);
}
} else {
if (aitv->it_interval.tv_sec == 0 &&
aitv->it_interval.tv_usec != 0 &&
aitv->it_interval.tv_usec < tick)
aitv->it_interval.tv_usec = tick;
if (aitv->it_value.tv_sec == 0 &&
aitv->it_value.tv_usec != 0 &&
aitv->it_value.tv_usec < tick)
aitv->it_value.tv_usec = tick;
PROC_SLOCK(p);
*oitv = p->p_stats->p_timer[which];
p->p_stats->p_timer[which] = *aitv;