[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves |
Date: |
Tue, 16 Jul 2013 08:16:42 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7 |
Il 16/07/2013 01:04, Alex Bligh ha scritto:
> Paolo,
>
> --On 15 July 2013 22:53:17 +0200 Paolo Bonzini <address@hidden> wrote:
>
>> So far you are right.
>>
>> But this only happens if qemu_aio_wait() actually returns, so that on
>> the next call we poll for timers. If QEMU is stuck in qemu_aio_wait()'s
>> infinite-timeout poll(), it will never advance and process the timed
>> bottom halves.
>
> I may have misunderstood the code here. I thought what it was doing was
> setting the timeout to poll() to 0 if there was a bh queued, 10ms if
> there was a bh->idle timeout queued, or infinite otherwise.
>
> What I changed it to do was set the timeout to:
> * 0 if there was an untimed bh ready (no change)
> * 10ms if there was an untimed idle bh ready (no change)
> * the number of ms to expiry if there is a timed bh ready (rounded up)
> * infinite otherwise (no change)
> * and if there is more the one, the minimum of those
You did. But aio_wait() ignores the timeout. It is only used by the
main loop.
> So the infinite timeout poll should not be entered if there is a timed
> bh there. This of course assumes a single thread as else there is a TOCTOU
> problem if a timed bh gets inserted between calculating the expiry time
> and the poll.
>
>> This goes to the question of having aio_notify() or not. If you have
>> it, you will immediately process timed BHs that are "born expired". For
>> other bottom halves, there will be no difference if you add it or not.
>
> You've lost me there. I'm taking it by 'born expired' you mean
> when poll() is entered, they're already expired. Timed BH's that are
> 'born expired' should (with the patch I sent) be treated exactly the
> same as untimed BH's, i.e. the timeout to poll should be being
> set to zero.
Yes, that's exactly what I meant. Looks like you understood well! :)
Paolo
- [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/06
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/06
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Paolo Bonzini, 2013/07/15
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/15
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Paolo Bonzini, 2013/07/15
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/15
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves,
Paolo Bonzini <=
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/16
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Paolo Bonzini, 2013/07/16
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/16
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Paolo Bonzini, 2013/07/16
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/16
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Paolo Bonzini, 2013/07/16
- [Qemu-devel] [PATCHv3] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/16
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/16
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Stefan Hajnoczi, 2013/07/16
- Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves, Alex Bligh, 2013/07/17