|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8.1 12/27] xsplice: Implement support for applying/reverting/replacing patches.
>>> On 22.04.16 at 19:26, <konrad.wilk@xxxxxxxxxx> wrote:
>> >+/* Defines an outstanding patching action. */
>> >+struct xsplice_work
>> >+{
>> >+ atomic_t semaphore; /* Used for rendezvous. */
>> >+ atomic_t irq_semaphore; /* Used to signal all IRQs disabled. */
>>
>> Why do you, btw, need two of them? I would seem to me that having just one
>> for both purposes should be fine.
>
> The 'semaphore' is used to get all of the CPUs synced up in the code. Once
> they have been synced up (so semaphore == total_cpus-1) we go to the next
> stage
> where all of them disable their IRQs -- and the master patches. Once the
> patching
> is done all of them renable their IRQs.
>
> I am not exactly sure how I would reuse the 'semaphore' on the second part
> of this
> (disable IRQs).
Right now you have
+ timeout = xsplice_work.timeout + NOW();
+ if ( xsplice_spin(&xsplice_work.semaphore, timeout, cpus, "CPU") )
+ goto abort;
+
+ /* All CPUs are waiting, now signal to disable IRQs. */
+ xsplice_work.ready = 1;
+ smp_wmb();
+
+ atomic_inc(&xsplice_work.irq_semaphore);
This atomic_inc() could simply become
atomic_set(&xsplice_work.semaphore, 0), while at the same time
getting moved up ahead of the setting of xsplice_work.ready (with
suitable addition of barriers).
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |