On Wed, 2016-08-17 at 09:16 +0800, Wanpeng Li wrote: >  > @@ -694,6 +699,12 @@ static cputime_t get_vtime_delta(struct > task_struct *tsk) >   unsigned long now = READ_ONCE(jiffies); >   cputime_t delta, other; >   > + /* > +  * The interval returned by account_other_time() is NOT > +  * rounded down to the nearest jiffy, while the base > +  * interval it is subtracted from is. So the max cputime > +  * limit is required to avoid underflow. > +  */ >   delta = jiffies_to_cputime(now - tsk->vtime_snap); >   other = account_other_time(delta); >   WARN_ON_ONCE(tsk->vtime_snap_whence == VTIME_INACTIVE); That comment makes sense in the context of the discussion we have been having over the past few days, but could be somewhat cryptic to someone looking at it 3 years from now. How about something like the following? /*  * Unlike tick based timing, vtime based timing never has lost  * ticks, and no need for steal time accounting to make up for  * lost ticks. Vtime accounts a rounded version of actual  * elapsed time. Limit account_other_time to prevent rounding  * errors from causing elapsed vtime to go negative.  */ --  All Rights Reversed.