From: "Michael S. Tsirkin" <mst@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>,
Fam Zheng <famz@redhat.com>, Ming Lei <ming.lei@canonical.com>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 14/15] hw/block/virtio-blk: create num_queues vqs if dataplane is enabled
Date: Wed, 30 Jul 2014 17:12:32 +0200 [thread overview]
Message-ID: <20140730151232.GC26313@redhat.com> (raw)
In-Reply-To: <53D8FAD7.1070509@redhat.com>
On Wed, Jul 30, 2014 at 04:01:59PM +0200, Paolo Bonzini wrote:
> Il 30/07/2014 13:39, Ming Lei ha scritto:
> > Now we only support multi vqs for dataplane case.
> >
> > Signed-off-by: Ming Lei <ming.lei@canonical.com>
> > ---
> > hw/block/virtio-blk.c | 18 +++++++++++++++++-
> > include/hw/virtio/virtio-blk.h | 1 +
> > 2 files changed, 18 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> > index ab99156..44e9956 100644
> > --- a/hw/block/virtio-blk.c
> > +++ b/hw/block/virtio-blk.c
> > @@ -556,6 +556,7 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
> > blkcfg.physical_block_exp = get_physical_block_exp(s->conf);
> > blkcfg.alignment_offset = 0;
> > blkcfg.wce = bdrv_enable_write_cache(s->bs);
> > + stw_p(&blkcfg.num_queues, s->blk.num_queues);
> > memcpy(config, &blkcfg, sizeof(struct virtio_blk_config));
> > }
> >
> > @@ -590,6 +591,12 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev, uint32_t features)
> > if (bdrv_is_read_only(s->bs))
> > features |= 1 << VIRTIO_BLK_F_RO;
> >
> > +#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
> > + if (s->blk.num_queues > 1) {
> > + features |= 1 << VIRTIO_BLK_F_MQ;
> > + }
> > +#endif
> > +
> > return features;
> > }
> >
> > @@ -739,8 +746,13 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
> > #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
> > Error *err = NULL;
> > #endif
> > + int i;
> > static int virtio_blk_id;
> >
> > +#ifndef CONFIG_VIRTIO_BLK_DATA_PLANE
> > + blk->num_queues = 1;
> > +#endif
> > +
> > if (!blk->conf.bs) {
> > error_setg(errp, "drive property not set");
> > return;
> > @@ -765,7 +777,10 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
> > s->rq = NULL;
> > s->sector_mask = (s->conf->logical_block_size / BDRV_SECTOR_SIZE) - 1;
> >
> > - s->vq = virtio_add_queue(vdev, 128, virtio_blk_handle_output);
> > + s->vqs = g_malloc0(sizeof(VirtQueue *) * blk->num_queues);
> > + for (i = 0; i < blk->num_queues; i++)
> > + s->vqs[i] = virtio_add_queue(vdev, 128, virtio_blk_handle_output);
> > + s->vq = s->vqs[0];
> > s->complete_request = virtio_blk_complete_request;
> > #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
> > virtio_blk_data_plane_create(vdev, blk, &s->dataplane, &err);
> > @@ -802,6 +817,7 @@ static void virtio_blk_device_unrealize(DeviceState *dev, Error **errp)
> > qemu_del_vm_change_state_handler(s->change);
> > unregister_savevm(dev, "virtio-blk", s);
> > blockdev_mark_auto_del(s->bs);
> > + g_free(s->vqs);
> > virtio_cleanup(vdev);
> > }
> >
> > diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
> > index ad70c9a..b4609dd 100644
> > --- a/include/hw/virtio/virtio-blk.h
> > +++ b/include/hw/virtio/virtio-blk.h
> > @@ -132,6 +132,7 @@ typedef struct VirtIOBlock {
> > VirtIODevice parent_obj;
> > BlockDriverState *bs;
> > VirtQueue *vq;
> > + VirtQueue **vqs;
> > void *rq;
> > QEMUBH *bh;
> > BlockConf *conf;
> >
>
> Dataplane must not be a change to the guest ABI. If you implement this
> feature you have to implement it for both dataplane and non-dataplne.
>
> Paolo
Actually, I think different backends at runtime should be allowed to
change guest visible ABI. For example if you give qemu a read only
backend this is guest visible right?
However relying on ifdefs is wrong.
It should be a runtime thing.
--
MST
next prev parent reply other threads:[~2014-07-30 15:12 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-30 11:39 [Qemu-devel] [PATCH 00/14] dataplane: optimization and multi virtqueue support Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 01/15] qemu coroutine: support bypass mode Ming Lei
2014-07-30 13:45 ` Paolo Bonzini
2014-07-30 17:15 ` Ming Lei
2014-07-30 23:37 ` Paolo Bonzini
2014-07-31 3:55 ` Ming Lei
2014-07-31 7:37 ` Benoît Canet
2014-07-31 9:47 ` Ming Lei
2014-07-31 10:45 ` Paolo Bonzini
2014-08-01 13:38 ` Ming Lei
2014-07-31 8:59 ` Ming Lei
2014-07-31 9:15 ` Paolo Bonzini
2014-07-31 10:06 ` Ming Lei
2014-07-31 16:13 ` Ming Lei
2014-07-31 16:30 ` Paolo Bonzini
2014-08-01 2:54 ` Ming Lei
2014-08-01 13:13 ` Stefan Hajnoczi
2014-08-01 13:48 ` Ming Lei
2014-08-01 14:17 ` Paolo Bonzini
2014-08-01 15:21 ` Ming Lei
2014-08-01 14:52 ` Ming Lei
2014-08-01 16:03 ` Stefan Hajnoczi
2014-08-02 2:42 ` Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 02/15] qemu aio: prepare for supporting selective bypass coroutine Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 03/15] block: support to bypass qemu coroutinue Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 04/15] Revert "raw-posix: drop raw_get_aio_fd() since it is no longer used" Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 05/15] dataplane: enable selective bypassing coroutine Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 06/15] qemu/obj_pool.h: introduce object allocation pool Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 07/15] dataplane: use object pool to speed up allocation for virtio blk request Ming Lei
2014-07-30 14:14 ` Paolo Bonzini
2014-07-30 15:09 ` Michael S. Tsirkin
2014-07-31 3:22 ` Ming Lei
2014-07-31 9:18 ` Paolo Bonzini
2014-08-01 7:42 ` Ming Lei
2014-08-04 10:21 ` Stefan Hajnoczi
2014-08-04 11:42 ` Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 08/15] virtio: decrease size of VirtQueueElement Ming Lei
2014-07-30 13:51 ` Paolo Bonzini
2014-07-30 14:40 ` Michael S. Tsirkin
2014-07-30 14:50 ` Paolo Bonzini
2014-07-31 2:11 ` Ming Lei
2014-07-31 2:07 ` Ming Lei
2014-07-31 9:38 ` Paolo Bonzini
2014-08-01 3:34 ` Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 09/15] linux-aio: fix submit aio as a batch Ming Lei
2014-07-30 13:59 ` Paolo Bonzini
2014-07-30 17:32 ` Ming Lei
2014-07-30 23:41 ` Paolo Bonzini
2014-07-30 11:39 ` [Qemu-devel] [PATCH 10/15] linux-aio: increase max event to 256 Ming Lei
2014-07-30 12:15 ` Eric Blake
2014-07-30 14:00 ` Paolo Bonzini
2014-07-30 17:20 ` Ming Lei
2014-08-04 10:26 ` Stefan Hajnoczi
2014-07-30 11:39 ` [Qemu-devel] [PATCH 11/15] linux-aio: remove 'node' from 'struct qemu_laiocb' Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 12/15] hw/virtio-pci: introduce num_queues property Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 13/15] hw/virtio/virtio-blk.h: introduce VIRTIO_BLK_F_MQ Ming Lei
2014-07-30 11:39 ` [Qemu-devel] [PATCH 14/15] hw/block/virtio-blk: create num_queues vqs if dataplane is enabled Ming Lei
2014-07-30 14:01 ` Paolo Bonzini
2014-07-30 15:12 ` Michael S. Tsirkin [this message]
2014-07-30 15:25 ` Paolo Bonzini
2014-07-31 3:47 ` Ming Lei
2014-07-31 8:52 ` Paolo Bonzini
2014-08-01 3:09 ` Ming Lei
2014-08-01 3:24 ` Ming Lei
2014-08-01 6:10 ` Paolo Bonzini
2014-08-01 7:35 ` Ming Lei
2014-08-01 7:46 ` Paolo Bonzini
2014-07-30 11:39 ` [Qemu-devel] [PATCH 15/15] dataplane: virtio-blk: support mutlti virtqueue Ming Lei
2014-07-30 12:42 ` [Qemu-devel] [PATCH 00/14] dataplane: optimization and multi virtqueue support Christian Borntraeger
2014-08-04 10:16 ` Stefan Hajnoczi
2014-08-04 10:45 ` Ming Lei
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=20140730151232.GC26313@redhat.com \
--to=mst@redhat.com \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=ming.lei@canonical.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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.