Re: [PATCH] sched/cputime: Fix a mostly theoretical divide by zero
From: Vincent Guittot
Date: Mon Jun 16 2025 - 08:52:26 EST
On Mon, 16 Jun 2025 at 13:46, Li,Rongqing <lirongqing@xxxxxxxxx> wrote:
>
> >
> > Sum of utime and stime can overflow to 0, when a process with many threads
> > run over total 2^64 ns
Theoretical is the right word; If all 2^32 possible threads belong to
the process, we can get an overflow to 0 after ~4sec run time of each
thread. But then how long will it take to have those 2^32 threads run
4sec on a system ...
It would be good to get number to show how realistic or not it could
be to reach this value
> >
> > Signed-off-by: Li RongQing <lirongqing@xxxxxxxxx>
>
>
> Ping
>
> Thanks
>
> -Li
>
> > ---
> > kernel/sched/cputime.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c index
> > 6dab4854..c35fc4c 100644
> > --- a/kernel/sched/cputime.c
> > +++ b/kernel/sched/cputime.c
> > @@ -579,7 +579,8 @@ void cputime_adjust(struct task_cputime *curr, struct
> > prev_cputime *prev,
> > goto update;
> > }
> >
> > - stime = mul_u64_u64_div_u64(stime, rtime, stime + utime);
> > + if (likely(stime + utime))
> > + stime = mul_u64_u64_div_u64(stime, rtime, stime + utime);
> > /*
> > * Because mul_u64_u64_div_u64() can approximate on some
> > * achitectures; enforce the constraint that: a*b/(b+c) <= a.
> > --
> > 2.9.4
>