On Wed, Aug 05, 2020 at 06:37:45PM +0200, Paolo Bonzini wrote: > On 05/08/20 12:00, Stefan Hajnoczi wrote: > > + > > + /* > > + * aio_notify can avoid the expensive event_notifier_set if > > + * everything (file descriptors, bottom halves, timers) will > > + * be re-evaluated before the next blocking poll(). This is > > + * already true when aio_poll is called with blocking == false; > > + * if blocking == true, it is only true after poll() returns, > > + * so disable the optimization now. > > + */ > > + if (use_notify_me) { > > + atomic_set(&ctx->notify_me, atomic_read(&ctx->notify_me) + 2); > > + /* > > + * Write ctx->notify_me before reading ctx->notified. Pairs > > with > > + * smp_mb in aio_notify(). > > + */ > > + smp_mb(); > > + > > + /* Don't block if aio_notify() was called */ > > + if (atomic_read(&ctx->notified)) { > > + timeout = 0; > > + } > > Aha, this is the trick: "timeout = 0" also applies if a timer was moved > early. In this case you uselessly keep notify_me set for a bit, but > it's okay. Nice! > > The code can be simplified a bit more, since the use_notify_me variable > is just "timeout":
Good point. I'll send another revision. Stefan
signature.asc
Description: PGP signature