From: Paolo Bonzini <pbonzini@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org
Subject: Re: [RFC PATCH 0/8] virtio: new API for addition of buffers, scatterlist changes
Date: Thu, 07 Feb 2013 14:20:53 +0100 [thread overview]
Message-ID: <5113AA35.3010209@redhat.com> (raw)
In-Reply-To: <20130207132349.GA21707@redhat.com>
Il 07/02/2013 14:23, Michael S. Tsirkin ha scritto:
> On Thu, Feb 07, 2013 at 02:14:24PM +0100, Paolo Bonzini wrote:
>> Il 07/02/2013 14:09, Michael S. Tsirkin ha scritto:
>>>> One major difference between virtqueue_add_buf and virtqueue_add_sg
>>>> is that the latter uses scatterlist iterators, which follow chained
>>>> scatterlist structs and stop at ending markers. In order to avoid code
>>>> duplication, and use the new API from virtqueue_add_buf (patch 8), we need
>>>> to change all existing callers of virtqueue_add_buf to provide well-formed
>>>> scatterlists. This is what patches 2-7 do. For virtio-blk it is easiest
>>>> to just switch to the new API, just like for virtio-scsi. For virtio-net
>>>> the ending marker must be reset after calling virtqueue_add_buf, in
>>>> preparation for the next usage of the scatterlist. Other drivers are
>>>> safe already.
>>>
>>> What are the changes as compared to the previous version?
>>> How about some comments made on the previous version?
>>> See e.g.
>>> https://patchwork.kernel.org/patch/1891541/
>>
>> Two changes: 1) added virtqueue_add_sg_single; 2) reimplemented
>> virtqueue_add_buf in terms of the new API, which requires virtio-blk and
>> virtio-net changes.
>>
>> The virtio-blk and virtio-net changes are based on some ideas in the
>> patch Rusty posted, but virtio-net is a bit simpler and virtio-blk was
>> redone from scratch.
>>
>>> Generally we have code for direct and indirect which is already
>>> painful. We do not want 4 more variants of this code.
>>
>> Yes, indeed, the other main difference is that I'm now reimplementing
>> virtqueue_add_buf using the new functions. So:
>>
>> - we previously had 2 variants (direct/indirect)
>>
>> - v1 had 4 variants (direct/indirect x add_buf/add_sg)
>>
>> - v2 has 4 variants (direct/indirect x add_sg/add_sg_single)
>
> single is never indirect so should have a single variant.
Single means *this piece* (for example a request header) is single. It
could still end up in an indirect buffer because QEMU does not support
mixed direct/indirect buffers.
Paolo
>>>> This is an RFC for two reasons. First, because I haven't done enough
>>>> testing yet (especially with all the variations on receiving that
>>>> virtio-net has). Second, because I still have two struct vring_desc *
>>>> fields in virtqueue API, which is a layering violation. I'm not really
>>>> sure how important that is and how to fix that---except by making the
>>>> fields void*.
>>>
>>> Hide the whole structure as part of vring struct, the problem will go
>>> away.
>>
>> Yes, that's the other possibility. Will do for the next submission.
>>
>> Paolo
>>
>>>> Paolo
>>>> Paolo Bonzini (8):
>>>> virtio: add functions for piecewise addition of buffers
>>>> virtio-blk: reorganize virtblk_add_req
>>>> virtio-blk: use virtqueue_start_buf on bio path
>>>> virtio-blk: use virtqueue_start_buf on req path
>>>> scatterlist: introduce sg_unmark_end
>>>> virtio-net: unmark scatterlist ending after virtqueue_add_buf
>>>> virtio-scsi: use virtqueue_start_buf
>>>> virtio: reimplement virtqueue_add_buf using new functions
>>>>
>>>> block/blk-integrity.c | 2 +-
>>>> block/blk-merge.c | 2 +-
>>>> drivers/block/virtio_blk.c | 165 +++++++++--------
>>>> drivers/net/virtio_net.c | 21 ++-
>>>> drivers/scsi/virtio_scsi.c | 103 +++++------
>>>> drivers/virtio/virtio_ring.c | 417 +++++++++++++++++++++++++++---------------
>>>> include/linux/scatterlist.h | 16 ++
>>>> include/linux/virtio.h | 25 +++
>>>> 8 files changed, 460 insertions(+), 291 deletions(-)
WARNING: multiple messages have this Message-ID (diff)
From: Paolo Bonzini <pbonzini@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: linux-kernel@vger.kernel.org,
Wanlong Gao <gaowanlong@cn.fujitsu.com>,
asias@redhat.com, Rusty Russell <rusty@rustcorp.com.au>,
kvm@vger.kernel.org, virtualization@lists.linux-foundation.org
Subject: Re: [RFC PATCH 0/8] virtio: new API for addition of buffers, scatterlist changes
Date: Thu, 07 Feb 2013 14:20:53 +0100 [thread overview]
Message-ID: <5113AA35.3010209@redhat.com> (raw)
In-Reply-To: <20130207132349.GA21707@redhat.com>
Il 07/02/2013 14:23, Michael S. Tsirkin ha scritto:
> On Thu, Feb 07, 2013 at 02:14:24PM +0100, Paolo Bonzini wrote:
>> Il 07/02/2013 14:09, Michael S. Tsirkin ha scritto:
>>>> One major difference between virtqueue_add_buf and virtqueue_add_sg
>>>> is that the latter uses scatterlist iterators, which follow chained
>>>> scatterlist structs and stop at ending markers. In order to avoid code
>>>> duplication, and use the new API from virtqueue_add_buf (patch 8), we need
>>>> to change all existing callers of virtqueue_add_buf to provide well-formed
>>>> scatterlists. This is what patches 2-7 do. For virtio-blk it is easiest
>>>> to just switch to the new API, just like for virtio-scsi. For virtio-net
>>>> the ending marker must be reset after calling virtqueue_add_buf, in
>>>> preparation for the next usage of the scatterlist. Other drivers are
>>>> safe already.
>>>
>>> What are the changes as compared to the previous version?
>>> How about some comments made on the previous version?
>>> See e.g.
>>> https://patchwork.kernel.org/patch/1891541/
>>
>> Two changes: 1) added virtqueue_add_sg_single; 2) reimplemented
>> virtqueue_add_buf in terms of the new API, which requires virtio-blk and
>> virtio-net changes.
>>
>> The virtio-blk and virtio-net changes are based on some ideas in the
>> patch Rusty posted, but virtio-net is a bit simpler and virtio-blk was
>> redone from scratch.
>>
>>> Generally we have code for direct and indirect which is already
>>> painful. We do not want 4 more variants of this code.
>>
>> Yes, indeed, the other main difference is that I'm now reimplementing
>> virtqueue_add_buf using the new functions. So:
>>
>> - we previously had 2 variants (direct/indirect)
>>
>> - v1 had 4 variants (direct/indirect x add_buf/add_sg)
>>
>> - v2 has 4 variants (direct/indirect x add_sg/add_sg_single)
>
> single is never indirect so should have a single variant.
Single means *this piece* (for example a request header) is single. It
could still end up in an indirect buffer because QEMU does not support
mixed direct/indirect buffers.
Paolo
>>>> This is an RFC for two reasons. First, because I haven't done enough
>>>> testing yet (especially with all the variations on receiving that
>>>> virtio-net has). Second, because I still have two struct vring_desc *
>>>> fields in virtqueue API, which is a layering violation. I'm not really
>>>> sure how important that is and how to fix that---except by making the
>>>> fields void*.
>>>
>>> Hide the whole structure as part of vring struct, the problem will go
>>> away.
>>
>> Yes, that's the other possibility. Will do for the next submission.
>>
>> Paolo
>>
>>>> Paolo
>>>> Paolo Bonzini (8):
>>>> virtio: add functions for piecewise addition of buffers
>>>> virtio-blk: reorganize virtblk_add_req
>>>> virtio-blk: use virtqueue_start_buf on bio path
>>>> virtio-blk: use virtqueue_start_buf on req path
>>>> scatterlist: introduce sg_unmark_end
>>>> virtio-net: unmark scatterlist ending after virtqueue_add_buf
>>>> virtio-scsi: use virtqueue_start_buf
>>>> virtio: reimplement virtqueue_add_buf using new functions
>>>>
>>>> block/blk-integrity.c | 2 +-
>>>> block/blk-merge.c | 2 +-
>>>> drivers/block/virtio_blk.c | 165 +++++++++--------
>>>> drivers/net/virtio_net.c | 21 ++-
>>>> drivers/scsi/virtio_scsi.c | 103 +++++------
>>>> drivers/virtio/virtio_ring.c | 417 +++++++++++++++++++++++++++---------------
>>>> include/linux/scatterlist.h | 16 ++
>>>> include/linux/virtio.h | 25 +++
>>>> 8 files changed, 460 insertions(+), 291 deletions(-)
next prev parent reply other threads:[~2013-02-07 13:20 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-07 12:22 [RFC PATCH 0/8] virtio: new API for addition of buffers, scatterlist changes Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 12:22 ` [RFC PATCH 1/8] virtio: add functions for piecewise addition of buffers Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 12:22 ` [RFC PATCH 2/8] virtio-blk: reorganize virtblk_add_req Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 12:22 ` [RFC PATCH 3/8] virtio-blk: use virtqueue_start_buf on bio path Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 12:22 ` [RFC PATCH 4/8] virtio-blk: use virtqueue_start_buf on req path Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 12:22 ` [RFC PATCH 5/8] scatterlist: introduce sg_unmark_end Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 12:35 ` Jens Axboe
2013-02-07 12:35 ` Jens Axboe
2013-02-07 12:22 ` [RFC PATCH 6/8] virtio-net: unmark scatterlist ending after virtqueue_add_buf Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 12:22 ` [RFC PATCH 7/8] virtio-scsi: use virtqueue_start_buf Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 12:22 ` [RFC PATCH 8/8] virtio: reimplement virtqueue_add_buf using new functions Paolo Bonzini
2013-02-07 12:22 ` Paolo Bonzini
2013-02-07 13:09 ` [RFC PATCH 0/8] virtio: new API for addition of buffers, scatterlist changes Michael S. Tsirkin
2013-02-07 13:09 ` Michael S. Tsirkin
2013-02-07 13:14 ` Paolo Bonzini
2013-02-07 13:14 ` Paolo Bonzini
2013-02-07 13:23 ` Michael S. Tsirkin
2013-02-07 13:23 ` Michael S. Tsirkin
2013-02-07 13:20 ` Paolo Bonzini [this message]
2013-02-07 13:20 ` Paolo Bonzini
2013-02-07 13:31 ` Michael S. Tsirkin
2013-02-07 13:31 ` Michael S. Tsirkin
2013-02-07 13:30 ` Paolo Bonzini
2013-02-07 13:30 ` Paolo Bonzini
2013-02-08 4:05 ` Rusty Russell
2013-02-08 4:05 ` Rusty Russell
2013-02-08 6:35 ` Paolo Bonzini
2013-02-08 6:35 ` Paolo Bonzini
2013-02-08 11:52 ` Jens Axboe
2013-02-13 9:46 ` Rusty Russell
2013-02-13 9:46 ` Rusty Russell
2013-02-08 11:52 ` Jens Axboe
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=5113AA35.3010209@redhat.com \
--to=pbonzini@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=virtualization@lists.linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.