ret = 0;
        if (unlikely(!list_empty(&q->list))) {
-               /*
-                * If an SI_TIMER entry is already queue just increment
-                * the overrun count.
-                */
-               q->info.si_overrun++;
                result = TRACE_SIGNAL_ALREADY_PENDING;
                goto out;
        }
-       q->info.si_overrun = 0;
 
        signalfd_notify(t, sig);
        pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending;
 
  * The siginfo si_overrun field and the return value of timer_getoverrun(2)
  * are of type int. Clamp the overrun value to INT_MAX
  */
-static inline int timer_overrun_to_int(struct k_itimer *timr, int baseval)
+static inline int timer_overrun_to_int(struct k_itimer *timr)
 {
-       s64 sum = timr->it_overrun_last + (s64)baseval;
+       if (timr->it_overrun_last > (s64)INT_MAX)
+               return INT_MAX;
 
-       return sum > (s64)INT_MAX ? INT_MAX : (int)sum;
+       return (int)timr->it_overrun_last;
 }
 
 static void common_hrtimer_rearm(struct k_itimer *timr)
                timr->it_overrun = -1LL;
                ++timr->it_signal_seq;
 
-               info->si_overrun = timer_overrun_to_int(timr, info->si_overrun);
+               info->si_overrun = timer_overrun_to_int(timr);
        }
        ret = true;
 
        if (!timr)
                return -EINVAL;
 
-       overrun = timer_overrun_to_int(timr, 0);
+       overrun = timer_overrun_to_int(timr);
        unlock_timer(timr, flags);
 
        return overrun;