2016-05-18 15:10 GMT+08:00 Rik van Riel <riel@xxxxxxxxxx>: > On Tue, 2016-05-10 at 13:34 +0800, Wanpeng Li wrote: >> >> +++ b/kernel/sched/cputime.c >> >> @@ -691,8 +691,11 @@ static cputime_t get_vtime_delta(struct >> task_struct *tsk) >> >> static void __vtime_account_system(struct task_struct *tsk) >> { >> + unsigned long steal_time = steal_account_process_tick(); >> cputime_t delta_cpu = get_vtime_delta(tsk); >> >> + delta_cpu = steal_time ? (delta_cpu - >> + jiffies_to_cputime(steal_time)) : delta_cpu; >> account_system_time(tsk, irq_count(), delta_cpu, >> cputime_to_scaled(delta_cpu)); >> } >> > > Sorry to have to go back on my previous email, but > this is now a NAK > > The above code can end up passing a negative number > to account_system_time(), which in turn can cause a > divide by zero in scale_stime() > > The code needs to ensure that if all the time that > passed was accounted as steal time (which could be > more jiffies than expected, due to remaining partial > jiffies in steal_account_process_tick), the function > does not call account_system_time(). Yeah, I will fix it in next version, thank Rik very much for debugging with me to figure out the root cause of divide zero. Regards, Wanpeng Li -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html