[Qemu-devel] [PATCH v2] nvme: correct locking around completion

Paolo Bonzini posted 1 patch 7 years, 2 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20180814062739.19640-1-pbonzini@redhat.com
Test checkpatch passed
Test docker-mingw@fedora passed
Test docker-clang@ubuntu passed
Test docker-quick@centos7 passed
block/nvme.c | 2 --
1 file changed, 2 deletions(-)
[Qemu-devel] [PATCH v2] nvme: correct locking around completion
Posted by Paolo Bonzini 7 years, 2 months ago
nvme_poll_queues is already protected by q->lock, and
AIO callbacks are invoked outside the AioContext lock.
So remove the acquire/release pair in nvme_handle_event.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/nvme.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/block/nvme.c b/block/nvme.c
index 6f71122bf5..42116907ed 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -489,10 +489,8 @@ static void nvme_handle_event(EventNotifier *n)
     BDRVNVMeState *s = container_of(n, BDRVNVMeState, irq_notifier);
 
     trace_nvme_handle_event(s);
-    aio_context_acquire(s->aio_context);
     event_notifier_test_and_clear(n);
     nvme_poll_queues(s);
-    aio_context_release(s->aio_context);
 }
 
 static bool nvme_add_io_queue(BlockDriverState *bs, Error **errp)
-- 
2.17.1


Re: [Qemu-devel] [PATCH v2] nvme: correct locking around completion
Posted by Fam Zheng 7 years, 2 months ago
On Tue, 08/14 08:27, Paolo Bonzini wrote:
> nvme_poll_queues is already protected by q->lock, and
> AIO callbacks are invoked outside the AioContext lock.
> So remove the acquire/release pair in nvme_handle_event.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/nvme.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/block/nvme.c b/block/nvme.c
> index 6f71122bf5..42116907ed 100644
> --- a/block/nvme.c
> +++ b/block/nvme.c
> @@ -489,10 +489,8 @@ static void nvme_handle_event(EventNotifier *n)
>      BDRVNVMeState *s = container_of(n, BDRVNVMeState, irq_notifier);
>  
>      trace_nvme_handle_event(s);
> -    aio_context_acquire(s->aio_context);
>      event_notifier_test_and_clear(n);
>      nvme_poll_queues(s);
> -    aio_context_release(s->aio_context);
>  }
>  
>  static bool nvme_add_io_queue(BlockDriverState *bs, Error **errp)
> -- 
> 2.17.1
> 

This patch and the other

    [PATCH v2] nvme: simplify code around completion

only differ in subject. Which one to ignore? :)

Fam

Re: [Qemu-devel] [PATCH v2] nvme: correct locking around completion
Posted by Paolo Bonzini 7 years, 2 months ago
On 14/08/2018 08:45, Fam Zheng wrote:
> On Tue, 08/14 08:27, Paolo Bonzini wrote:
>> nvme_poll_queues is already protected by q->lock, and
>> AIO callbacks are invoked outside the AioContext lock.
>> So remove the acquire/release pair in nvme_handle_event.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  block/nvme.c | 2 --
>>  1 file changed, 2 deletions(-)
>>
>> diff --git a/block/nvme.c b/block/nvme.c
>> index 6f71122bf5..42116907ed 100644
>> --- a/block/nvme.c
>> +++ b/block/nvme.c
>> @@ -489,10 +489,8 @@ static void nvme_handle_event(EventNotifier *n)
>>      BDRVNVMeState *s = container_of(n, BDRVNVMeState, irq_notifier);
>>  
>>      trace_nvme_handle_event(s);
>> -    aio_context_acquire(s->aio_context);
>>      event_notifier_test_and_clear(n);
>>      nvme_poll_queues(s);
>> -    aio_context_release(s->aio_context);
>>  }
>>  
>>  static bool nvme_add_io_queue(BlockDriverState *bs, Error **errp)
>> -- 
>> 2.17.1
>>
> 
> This patch and the other
> 
>     [PATCH v2] nvme: simplify code around completion
> 
> only differ in subject. Which one to ignore? :)

"Correct locking" is better.  I thought I had hit Ctrl-C in time. :)

Paolo

Re: [Qemu-devel] [Qemu-block] [PATCH v2] nvme: correct locking around completion
Posted by John Snow 7 years ago

On 08/14/2018 02:27 AM, Paolo Bonzini wrote:
> nvme_poll_queues is already protected by q->lock, and
> AIO callbacks are invoked outside the AioContext lock.
> So remove the acquire/release pair in nvme_handle_event.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/nvme.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/block/nvme.c b/block/nvme.c
> index 6f71122bf5..42116907ed 100644
> --- a/block/nvme.c
> +++ b/block/nvme.c
> @@ -489,10 +489,8 @@ static void nvme_handle_event(EventNotifier *n)
>      BDRVNVMeState *s = container_of(n, BDRVNVMeState, irq_notifier);
>  
>      trace_nvme_handle_event(s);
> -    aio_context_acquire(s->aio_context);
>      event_notifier_test_and_clear(n);
>      nvme_poll_queues(s);
> -    aio_context_release(s->aio_context);
>  }
>  
>  static bool nvme_add_io_queue(BlockDriverState *bs, Error **errp)
> 

This is over a month old (and seemingly didn't land); do we still want it?

Re: [Qemu-devel] [Qemu-block] [PATCH v2] nvme: correct locking around completion
Posted by Paolo Bonzini 7 years ago
On 09/10/2018 21:37, John Snow wrote:
> 
> 
> On 08/14/2018 02:27 AM, Paolo Bonzini wrote:
>> nvme_poll_queues is already protected by q->lock, and
>> AIO callbacks are invoked outside the AioContext lock.
>> So remove the acquire/release pair in nvme_handle_event.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  block/nvme.c | 2 --
>>  1 file changed, 2 deletions(-)
>>
>> diff --git a/block/nvme.c b/block/nvme.c
>> index 6f71122bf5..42116907ed 100644
>> --- a/block/nvme.c
>> +++ b/block/nvme.c
>> @@ -489,10 +489,8 @@ static void nvme_handle_event(EventNotifier *n)
>>      BDRVNVMeState *s = container_of(n, BDRVNVMeState, irq_notifier);
>>  
>>      trace_nvme_handle_event(s);
>> -    aio_context_acquire(s->aio_context);
>>      event_notifier_test_and_clear(n);
>>      nvme_poll_queues(s);
>> -    aio_context_release(s->aio_context);
>>  }
>>  
>>  static bool nvme_add_io_queue(BlockDriverState *bs, Error **errp)
>>
> 
> This is over a month old (and seemingly didn't land); do we still want it?
> 

Yes, we do.

Paolo

Re: [Qemu-devel] [Qemu-block] [PATCH v2] nvme: correct locking around completion
Posted by Fam Zheng 7 years ago
On Wed, 10/10 13:19, Paolo Bonzini wrote:
> On 09/10/2018 21:37, John Snow wrote:
> > 
> > 
> > On 08/14/2018 02:27 AM, Paolo Bonzini wrote:
> >> nvme_poll_queues is already protected by q->lock, and
> >> AIO callbacks are invoked outside the AioContext lock.
> >> So remove the acquire/release pair in nvme_handle_event.
> >>
> >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> >> ---
> >>  block/nvme.c | 2 --
> >>  1 file changed, 2 deletions(-)
> >>
> >> diff --git a/block/nvme.c b/block/nvme.c
> >> index 6f71122bf5..42116907ed 100644
> >> --- a/block/nvme.c
> >> +++ b/block/nvme.c
> >> @@ -489,10 +489,8 @@ static void nvme_handle_event(EventNotifier *n)
> >>      BDRVNVMeState *s = container_of(n, BDRVNVMeState, irq_notifier);
> >>  
> >>      trace_nvme_handle_event(s);
> >> -    aio_context_acquire(s->aio_context);
> >>      event_notifier_test_and_clear(n);
> >>      nvme_poll_queues(s);
> >> -    aio_context_release(s->aio_context);
> >>  }
> >>  
> >>  static bool nvme_add_io_queue(BlockDriverState *bs, Error **errp)
> >>
> > 
> > This is over a month old (and seemingly didn't land); do we still want it?
> > 
> 
> Yes, we do.
> 

I'll send a pull request today. Thanks!

Fam

Re: [Qemu-devel] [Qemu-block] [PATCH v2] nvme: correct locking around completion
Posted by Fam Zheng 7 years ago
On Wed, 10/10 13:19, Paolo Bonzini wrote:
> On 09/10/2018 21:37, John Snow wrote:
> > 
> > 
> > On 08/14/2018 02:27 AM, Paolo Bonzini wrote:
> >> nvme_poll_queues is already protected by q->lock, and
> >> AIO callbacks are invoked outside the AioContext lock.
> >> So remove the acquire/release pair in nvme_handle_event.
> >>
> >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> >> ---
> >>  block/nvme.c | 2 --
> >>  1 file changed, 2 deletions(-)
> >>
> >> diff --git a/block/nvme.c b/block/nvme.c
> >> index 6f71122bf5..42116907ed 100644
> >> --- a/block/nvme.c
> >> +++ b/block/nvme.c
> >> @@ -489,10 +489,8 @@ static void nvme_handle_event(EventNotifier *n)
> >>      BDRVNVMeState *s = container_of(n, BDRVNVMeState, irq_notifier);
> >>  
> >>      trace_nvme_handle_event(s);
> >> -    aio_context_acquire(s->aio_context);
> >>      event_notifier_test_and_clear(n);
> >>      nvme_poll_queues(s);
> >> -    aio_context_release(s->aio_context);
> >>  }
> >>  
> >>  static bool nvme_add_io_queue(BlockDriverState *bs, Error **errp)
> >>
> > 
> > This is over a month old (and seemingly didn't land); do we still want it?
> > 
> 
> Yes, we do.

Queued, thanks!

Fam