> From: Paolo Bonzini [mailto:pbonz...@redhat.com] > On 13/09/2018 13:13, Pavel Dovgalyuk wrote: > >> From: Paolo Bonzini [mailto:pbonz...@redhat.com] > >> On 12/09/2018 10:19, Pavel Dovgalyuk wrote: > >>> + uint64_t id = replay_get_current_step(); > >>> + replay_add_event(REPLAY_ASYNC_EVENT_BH_ONESHOT, cb, opaque, id); > >> > >> Why does it need an id, while REPLAY_ASYNC_EVENT_BH does not? > > > > Because _oneshot() function takes only context and callback, > > and BH object is created inside that function. > > Therefore to use the normal bh scheduling events we have to refactor > > block code - add bh creation, scheduling, and freeing. > > No, I'm asking only why the id is 0 for REPLAY_ASYNC_EVENT_BH and > replay_get_current_step() for REPLAY_ASYNC_EVENT_BH_ONESHOT. > > Thanks, > > Paolo
Sorry, I missed your point. Maybe you looked at the wrong function, because both of these events have an id: void replay_bh_schedule_event(QEMUBH *bh) { if (events_enabled) { uint64_t id = replay_get_current_step(); replay_add_event(REPLAY_ASYNC_EVENT_BH, bh, NULL, id); } else { qemu_bh_schedule(bh); } } void replay_bh_schedule_oneshot_event(AioContext *ctx, QEMUBHFunc *cb, void *opaque) { if (events_enabled) { uint64_t id = replay_get_current_step(); replay_add_event(REPLAY_ASYNC_EVENT_BH_ONESHOT, cb, opaque, id); } else { aio_bh_schedule_oneshot(ctx, cb, opaque); } } Pavel Dovgalyuk