qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Block I/O outside the QEMU global mutex was "Re: [RFC P


From: Avi Kivity
Subject: Re: [Qemu-devel] Block I/O outside the QEMU global mutex was "Re: [RFC PATCH 00/17] Support for multiple "AIO contexts""
Date: Tue, 09 Oct 2012 14:22:50 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1

On 10/09/2012 02:01 PM, Paolo Bonzini wrote:
> 
>> [could we also avoid refcounting by doing the equivalent of
>> stop_machine() during hotunplug?]
> 
> That's quite an interesting alternative.

It's somewhat unattractive in that we know how much stop_machine is
hated in Linux.  But maybe it makes sense as a transitional path.

Note it's not sufficient to stop vcpu threads, we also have to stop
non-vcpu threads that may be issuing address_space_rw() or family.

But no, it's actually impossible.  Hotplug may be triggered from a vcpu
thread, which clearly it can't be stopped.  The only two solutions are
Ping's garbage collector thread or refcounting.

The original deadlock was:

 read_lock_rcu() / mmap_lock()
 lookup device
 dispatch
   device mmio handler
     memory_region_del_subregion()
       synchronize_rcu() / mmap_lock()
 rcu_read_unlock() / mmap_unlock

stop_machine() is just another name for synchronize_rcu() wrt locking.

-- 
error compiling committee.c: too many arguments to function



reply via email to

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