[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v9 12/27] xsplice: Implement support for applying/reverting/replacing patches.
On 27.04.2016 05:39, Konrad Rzeszutek Wilk wrote: [...] > + /* "Mask" NMIs. */ > + arch_xsplice_mask(); You mask here ... > + barrier(); /* MUST do it after get_cpu_maps. */ > + cpus = num_online_cpus() - 1; > + > + if ( cpus ) > + { > + dprintk(XENLOG_DEBUG, XSPLICE "%s: CPU%u - IPIing the other %u > CPUs\n", > + p->name, cpu, cpus); > + smp_call_function(reschedule_fn, NULL, 0); > + } > + > + timeout = xsplice_work.timeout + NOW(); > + if ( xsplice_spin(&xsplice_work.semaphore, timeout, cpus, "CPU") ) > + goto abort; ... and potentially abort here, but the abort path does not unmask, so you lose the NMI handler. > + > + /* All CPUs are waiting, now signal to disable IRQs. */ > + atomic_set(&xsplice_work.semaphore, 0); > + /* > + * MUST have a barrier after semaphore so that the other CPUs don't > + * leak out of the 'Wait for all CPUs to rendezvous' loop and > increment > + * 'semaphore' before we set it to zero. > + */ > + smp_wmb(); > + xsplice_work.ready = 1; > + > + if ( !xsplice_spin(&xsplice_work.semaphore, timeout, cpus, "IRQ") ) > + { > + local_irq_save(flags); > + /* Do the patching. */ > + xsplice_do_action(); > + /* Serialize and flush out the CPU via CPUID instruction (on > x86). */ > + arch_xsplice_post_action(); > + local_irq_restore(flags); > + } > + arch_xsplice_unmask(); > + > + abort: > + per_cpu(work_to_do, cpu) = 0; > + xsplice_work.do_work = 0; > + > + /* put_cpu_maps has an barrier(). */ > + put_cpu_maps(); > + > + printk(XENLOG_INFO XSPLICE "%s finished %s with rc=%d\n", > + p->name, names[xsplice_work.cmd], p->rc); > + } > + else [...] Martin Amazon Development Center Germany GmbH Berlin - Dresden - Aachen main office: Krausenstr. 38, 10117 Berlin Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger Ust-ID: DE289237879 Eingetragen am Amtsgericht Charlottenburg HRB 149173 B _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |