>>> On 16.11.10 at 22:08, Jeremy Fitzhardinge <jeremy@xxxxxxxx> wrote: > +static void xen_lock_spinning(struct arch_spinlock *lock, unsigned want) > { > - struct xen_spinlock *xl = (struct xen_spinlock *)lock; > - struct xen_spinlock *prev; > int irq = __get_cpu_var(lock_kicker_irq); > - int ret; > + struct xen_lock_waiting *w = &__get_cpu_var(lock_waiting); > + int cpu = smp_processor_id(); > u64 start; > > /* If kicker interrupts not initialized yet, just spin */ > if (irq == -1) > - return 0; > + return; > > start = spin_time_start(); > > - /* announce we're spinning */ > - prev = spinning_lock(xl); > + w->want = want; > + w->lock = lock; > + > + /* This uses set_bit, which atomic and therefore a barrier */ > + cpumask_set_cpu(cpu, &waiting_cpus); Since you don't allow nesting, don't you need to disable interrupts before you touch per-CPU state? Jan _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization