Il 29/07/2013 05:16, Liu Ping Fan ha scritto: > After disabling the QemuClock, we should make sure that no QemuTimers > are still in flight. To implement that, the caller of disabling will > wait until the last user's exit. > > Note, the callers of qemu_clock_enable() should be sync by themselves, > not protected by this patch. > > Signed-off-by: Liu Ping Fan <pingf...@linux.vnet.ibm.com>
This is an interesting approach. > - if (!clock->enabled) > - return; > + atomic_inc(&clock->using); > + if (unlikely(!clock->enabled)) { > + goto exit; > + } This can return directly, it doesn't need to increment and decrement clock->using. Paolo > > current_time = qemu_get_clock_ns(clock); > tlist = clock_to_timerlist(clock); > @@ -461,6 +482,15 @@ void qemu_run_timers(QEMUClock *clock) > /* run the callback (the timer list can be modified) */ > ts->cb(ts->opaque); > } > + > +exit: > + qemu_mutex_lock(&clock->lock); > + if (atomic_fetch_dec(&clock->using) == 1) { > + if (unlikely(!clock->enabled)) { > + qemu_cond_signal(&clock->wait_using); > + } > + } > + qemu_mutex_unlock(&clock->lock); > } > > int64_t qemu_get_clock_ns(QEMUClock *clock) >