On Mon, Jun 29, 2009 at 11:37:00AM +0300, Avi Kivity wrote:
On 06/28/2009 10:34 PM, Michael S. Tsirkin wrote:
This changes bus accesses to use high-level kvm_io_bus_read/kvm_io_bus_writeLooks good. But please split into a locking change patch and an API
functions, which utilize read/write semaphore intead of mutex. in_range now
becomes unused so it is removed from device ops in favor of read/write
callbacks performing range checks internally.
This allows aliasing (mostly for in-kernel virtio), as well as better error
handling by making it possible to pass errors up to userspace. And it's enough
to look at the diffstat to see that it's a better API anyway.
While we are at it, document locking rules for kvm_io_device_ops.
Note: since the use of the new bus_lock is localized to a small number of
places, it will be easy to switch to srcu in the future if we so desire.
change patch (in whatever order makes more sense).
This is harder than it seems. Is this really important?
The locking change itself is about 6 lines, but
1. if I do it after in_range removal I get deadlocks
as after marcelo's change kvm->lock is taken internally by writers.
2. if I do it before in_range removal it's a lot of churn:
one of the reasons for code reorg is so that there are less
places to change locking.