|
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
[Prev in Thread] | Current Thread | [Next in Thread] |