Hmm. Agreed. I'll fix this and send a patch in the next few days. Otherwise, I think all else looks good.This looks very good ! Our results are almost similar now. However, I think
that with this new
patch we're still arming the timer needlessly at least once. This is the
case when we're trying to remove the first (oldest) hrtimer with
timer->expires = cpu->expires_next, but we forgo the reprogramming, when we
really shouldn't. At this point, with the current scheme of things, we will
needlessly wakeup and simply correct the expires_next value by
traversing up the rbtree, to the parent node.
That only happens, when that timer is the last one in both trees. Then
the resulting reprogramming value is KTIME_MAX and we skip the
reprogramming. That's easy to fix by removing the KTIME_MAX check.