> What shall I do... play with lockdep (print_irqtrace_events) in > del_timer_sync()? I recalled that when Jiri was thinking towards a "compiler bug" that the part in del_timer_sync() emebedded in the "ifdef CONFIG_LOCKDEP" is somehow "mis-compiled". Furthermore, I see that try_to_del_timer_sync() is invoked within del_timer_sync() which does a spin_unlock_irqrestore(). [ kernel/time/timer.c ] int del_timer_sync(struct timer_list *timer) { #ifdef CONFIG_LOCKDEP unsigned long flags; /* * If lockdep gives a backtrace here, please reference * the synchronization rules above. */ local_irq_save(flags); lock_map_acquire(&timer->lockdep_map); lock_map_release(&timer->lockdep_map); local_irq_restore(flags); #endif /* * don't use it in hardirq context, because it * could lead to deadlock. */ WARN_ON(in_irq() && !(timer->flags & TIMER_IRQSAFE)); for (;;) { int ret = try_to_del_timer_sync(timer); if (ret >= 0) return ret; cpu_relax(); } } EXPORT_SYMBOL(del_timer_sync); #endif ... int try_to_del_timer_sync(struct timer_list *timer) { struct tvec_base *base; unsigned long flags; int ret = -1; debug_assert_init(timer); base = lock_timer_base(timer, &flags); if (base->running_timer != timer) { timer_stats_timer_clear_start_info(timer); ret = detach_if_pending(timer, base, true); } spin_unlock_irqrestore(&base->lock, flags); return ret; } EXPORT_SYMBOL(try_to_del_timer_sync); ... Is the attached patch suitable for a test? I remember I tried to turn lockdep kernel-config for amd64 but that was somehow tricky. Shall I ask timer folks? Thoughts? Thanks! - Sedat -