qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 3/3] aio-posix: keep aio_notify_me disabled during polling


From: Stefan Hajnoczi
Subject: Re: [PATCH v2 3/3] aio-posix: keep aio_notify_me disabled during polling
Date: Thu, 6 Aug 2020 11:52:41 +0100

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

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]