On 13.02.2013 12:31, Stefan Bader wrote: > I will try to think of some better way. Not sure the thinking is realistic but > maybe that could happen: > > xen_spin_lock_slow(a) > ... > enables irq and upcalls are pending > upcall processing wants lock b > xen_spin_lock_slow(b) > --- just before replacing lock_spinners --- > xen_spin_unlock_slow(a) > finds other vcpu, triggers > IRQ > lock b is top spinner > going into poll_irq > poll_irq returns > lock a gets restored > so maybe no spinners on b > dropping out to xen_spin_lock > unlock of b not finding any > spinners > lock b acquired > > That way the irq for lock a maybe get lost... Darn, maybe not since the pending status is not cleared when leaving xen_spin_lock_slow. So I assume the interrupted lock does at least one cycle out of slow and back...