This happens because the &desc->lock is taken with spin_lock_irqsave and
just a spin_lock. In the try_one_irq(), this lock really should be a
spin_lock_irqsave().
Cc'ed Ingo and Thomas.
The reason is that try_one_irq() is called both from hardirq context and softirq
context. And by default the timer handler poll_all_shared_irqs() is
called with irq enabled.
Then the two usage will cause inconsistent.
So I think the following patch is also workable to you.