qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: qemu-devel@nongnu.org
Cc: Blue Swirl <blauwirbel@gmail.com>,
	Andrea Arcangeli <andrea@qumranet.com>
Subject: Re: [Qemu-devel] [RFC 1/1] pci-dma-api-v2
Date: Tue, 02 Dec 2008 11:45:25 +0200	[thread overview]
Message-ID: <493503B5.9090902@redhat.com> (raw)
In-Reply-To: <493412E6.9020308@codemonkey.ws>

Anthony Liguori wrote:

>>>
>>> What should be fixed?  Are these emulated functions wrong?
>>>
>>> There's a lack of symmetry here.  We should have a bdrv_readv and 
>>> bdrv_aio_readv.  bdrv_read and bdrv_aio_read should disappear.  We 
>>> can maintain wrappers that create a compatible interface for older 
>>> code but just adding a new API is wrong.
>>>
>>
>> It was understood a real aio readv/writev was being worked on, so the 
>> emulation could be a temporary step.
>
> Yes, but that's orthogonal to what I'm saying here.  I'm saying that 
> instead of adding an optional ->aio_readv() member, we should 
> eliminate the ->aio_read() member and replace it with ->aio_readv().  
> There are only three or four places in the code that implement aio so 
> it's not a big change.  It avoids introducing a new API too.

The api replacement would make a lot more sense when there's an 
implementation backing it up.  I have no concrete objection to this 
though, maybe Andrea can whip up a follow on patch to kill aio_read.

> I also think we should have complimentary synchronous vector functions 
> although I'd like to see the synchronous API disappear completely.

I don't see a user for the synchronous ops.  I think the sync ops are 
used only by the implementation of block formats, not by disk controller 
emulation, and these only use them to access metadata.  Haven't checked 
this though.

>>>
>>> struct iovec does not exist on Windows.  I also don't think you've 
>>> got the abstraction right.  Reading and writing may require actions 
>>> to happen.  I don't think you can just introduce something as simple 
>>> as an iovec here.  I think we need something more active.
>>>
>>
>> Can you elaborate?  Actions happen in the completion callback.  This 
>> is just an straightforward extension of the block API, I don't think 
>> a dma api should materially change the block api.
>
> If we're not going to try and fold in the IOMMU/PCI BUS API at this 
> pass, then this is less important.  But to implement a proper PCI bus 
> API, I think there has to be function pointers associated with each 
> element of the scatter/gather list that control how data is copied in 
> and out of each element.

Certainly not with each element, that would increase overhead for the 
common zero copy case.  The way to do transformation is before/after 
bouncing, in the slow path.

The way I see it is:
- transformations that only manipulate addresses, maintaining alignment 
requirements, can be done at the sg->iovec transform phase without any 
need for further manipulation
- if there are alignment problems, we bounce, but again no need for 
further manipulation
- transformations that manipulate data are bounced and manipulated on 
the bounce buffer

It can all be done within the dma api, no need to involve the block 
layer with callbacks.  That's not its job.


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

  reply	other threads:[~2008-12-02  9:45 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-27 12:35 [Qemu-devel] [RFC 1/2] pci-dma-api-v1 Andrea Arcangeli
2008-11-27 12:43 ` [Qemu-devel] [RFC 2/2] bdrv_aio_readv/writev_em Andrea Arcangeli
2008-11-28 11:09   ` Jamie Lokier
2008-11-27 19:14 ` [Qemu-devel] [RFC 1/2] pci-dma-api-v1 Blue Swirl
2008-11-28  1:56   ` Andrea Arcangeli
2008-11-28 17:59     ` Blue Swirl
2008-11-28 18:50       ` Andrea Arcangeli
2008-11-28 19:03         ` Blue Swirl
2008-11-28 19:18           ` Jamie Lokier
2008-11-29 19:49             ` Avi Kivity
2008-11-30 17:20             ` Andrea Arcangeli
2008-11-30 22:31             ` Anthony Liguori
2008-11-30 18:04           ` Andrea Arcangeli
2008-11-30 17:41         ` [Qemu-devel] [RFC 1/1] pci-dma-api-v2 Andrea Arcangeli
2008-11-30 18:36           ` [Qemu-devel] " Blue Swirl
2008-11-30 19:04             ` Andrea Arcangeli
2008-11-30 19:11               ` Blue Swirl
2008-11-30 19:20                 ` Andrea Arcangeli
2008-11-30 21:36                   ` Blue Swirl
2008-11-30 22:54                     ` Anthony Liguori
2008-11-30 22:50           ` [Qemu-devel] " Anthony Liguori
2008-12-01  9:41             ` Avi Kivity
2008-12-01 16:37               ` Anthony Liguori
2008-12-02  9:45                 ` Avi Kivity [this message]
2008-11-30 22:38         ` [Qemu-devel] [RFC 1/2] pci-dma-api-v1 Anthony Liguori
2008-11-30 22:51           ` Jamie Lokier
2008-11-30 22:34       ` Anthony Liguori
2008-11-29 19:48   ` Avi Kivity
2008-11-30 17:29     ` Andrea Arcangeli
2008-11-30 20:27       ` Avi Kivity
2008-11-30 22:33         ` Andrea Arcangeli
2008-11-30 22:33   ` Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=493503B5.9090902@redhat.com \
    --to=avi@redhat.com \
    --cc=andrea@qumranet.com \
    --cc=blauwirbel@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).