[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap
From: |
Avi Kivity |
Subject: |
Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap |
Date: |
Tue, 11 Sep 2012 15:20:16 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120828 Thunderbird/15.0 |
On 09/11/2012 02:08 PM, Jan Kiszka wrote:
> On 2012-09-11 13:03, Avi Kivity wrote:
>> On 09/11/2012 01:04 PM, Jan Kiszka wrote:
>>
>>>> DMA is inherently asynchronous, so we already drop the lock between
>>>> initiation and completion; we need to find a way to make it easy to use
>>>> the API without taking the lock while the transfer takes place.
>>>
>>> We will have to review/rework device models that want to use the new
>>> locking scheme in a way that they can drop their own lock while issuing
>>> DMA. But that is surely non-trivial.
>>
>> Most DMA today happens without the big qemu lock. We only need to
>> convert the paths that actually access memory, these are the block and
>> network layers (for the respective devices).
>
> ...and the devices themselves, of course.
Right, for descriptors and stuff. So a guest can set a DMA address to
point at its own BAR, and cause qemu to deadlock.
The problem is not limited to locking. A guest can also cause a write
to a BAR to initiate a synchronous write with the same address and data,
triggering infinite recursion.
Perhaps one fix is the mythical DMA API, which will provide each DMA
initiator with its own view of memory (a private MemoryRegion root
node). Even that can be worked around with a pair of devices accessing
each other.
>
>>
>>> The other option is to keep DMA requests issued by devices synchronous
>>> but let them fail if we are about to lock up. Still requires changes,
>>> but is probably more comprehensible for device model developers.
>>
>> How do you handle failures?
>
> By not sending a network frame or dropping an incoming one, e.g., and
> signaling this in a device specific way.
Doesn't work for block devices.
--
error compiling committee.c: too many arguments to function
- Re: [Qemu-devel] [PATCH V3 05/11] memory: introduce ref, unref interface for MemoryRegionOps, (continued)
- [Qemu-devel] [PATCH V3 07/11] memory: implement e1000's MemoryRegionOps ref/unref, Liu Ping Fan, 2012/09/11
- [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Liu Ping Fan, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Avi Kivity, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, liu ping fan, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Avi Kivity, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Jan Kiszka, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Avi Kivity, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Jan Kiszka, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap,
Avi Kivity <=
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Jan Kiszka, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Avi Kivity, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Jan Kiszka, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Avi Kivity, 2012/09/11
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Peter Crosthwaite, 2012/09/19
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Edgar E. Iglesias, 2012/09/19
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Peter Crosthwaite, 2012/09/19
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Avi Kivity, 2012/09/19
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Edgar E. Iglesias, 2012/09/19
- Re: [Qemu-devel] [PATCH V3 10/11] vcpu: introduce lockmap, Avi Kivity, 2012/09/19