On 2019-08-16 17:32:38 [+0100], Julien Grall wrote: > Hi Sebastian, Hi Julien, > hrtimer_callback_running() will be returning true as the callback is > running somewhere else. This means hrtimer_try_to_cancel() > would return -1. Therefore hrtimer_grab_expiry_lock() would > be called. > > Did I miss anything? nope, you are right. I assumed that we had code to deal with this but didn't find it… diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index 7d7db88021311..40d83c709503e 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -934,7 +934,7 @@ void hrtimer_grab_expiry_lock(const struct hrtimer *timer) { struct hrtimer_clock_base *base = timer->base; - if (base && base->cpu_base) { + if (base && base->cpu_base && base->index < MASK_SHIFT) { spin_lock(&base->cpu_base->softirq_expiry_lock); spin_unlock(&base->cpu_base->softirq_expiry_lock); } This should deal with it. > Cheers, Sebastian _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm