[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 01/12] introduce BDRV_POLL_WHILE_UNLOCKED
From: |
Emanuele Giuseppe Esposito |
Subject: |
Re: [PATCH 01/12] introduce BDRV_POLL_WHILE_UNLOCKED |
Date: |
Thu, 3 Feb 2022 14:57:40 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 |
On 26/01/2022 11:49, Stefan Hajnoczi wrote:
> On Tue, Jan 18, 2022 at 11:27:27AM -0500, Emanuele Giuseppe Esposito wrote:
>> Same as BDRV_POLL_WHILE, but uses AIO_WAIT_WHILE_UNLOCKED.
>>
>> Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
>> ---
>> include/block/block-global-state.h | 5 +++++
>> 1 file changed, 5 insertions(+)
>>
>> diff --git a/include/block/block-global-state.h
>> b/include/block/block-global-state.h
>> index 419fe8427f..7ad9496f56 100644
>> --- a/include/block/block-global-state.h
>> +++ b/include/block/block-global-state.h
>> @@ -158,6 +158,11 @@ void bdrv_drain_all(void);
>> AIO_WAIT_WHILE(bdrv_get_aio_context(bs_), \
>> cond); })
>>
>> +#define BDRV_POLL_WHILE_UNLOCKED(bs, cond) ({ \
>> + BlockDriverState *bs_ = (bs); \
>> + AIO_WAIT_WHILE_UNLOCKED(bdrv_get_aio_context(bs_), \
>> + cond); })
>
> No doc comments? When and why is this API useful? Are there any
> preconditions or assumptions (e.g. cond must be thread-safe)?
>
I am planning to add the following comment above the macro:
/*
* Unlocked counterpart of BDRV_POLL_WHILE. Uses AIO_WAIT_WHILE_UNLOCKED,
* so it does not release+acquire the AioContext lock if we are in the
* main loop, therefore the caller does not need to take it.
* This function avoids taking the AioContext lock unnecessarly, so use
* it only when sure that the lock is not taken already, otherwise it
* might cause deadlocks.
*
* @cond must be thread-safe.
*/
Emanuele
- Re: [PATCH 01/12] introduce BDRV_POLL_WHILE_UNLOCKED,
Emanuele Giuseppe Esposito <=