virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Cornelia Huck <cohuck@redhat.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>,
	linux-s390@vger.kernel.org, Eric Farman <farman@linux.ibm.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	kvm@vger.kernel.org, Sebastian Ott <sebott@linux.ibm.com>,
	Farhan Ali <alifm@linux.ibm.com>,
	virtualization@lists.linux-foundation.org,
	Halil Pasic <pasic@linux.ibm.com>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Viktor Mihajlovski <mihajlov@linux.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>
Subject: Re: [RFC PATCH 01/12] virtio/s390: use vring_create_virtqueue
Date: Mon, 8 Apr 2019 08:37:41 -0400	[thread overview]
Message-ID: <20190408083707-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20190408130128.7859febe.cohuck@redhat.com>

On Mon, Apr 08, 2019 at 01:01:28PM +0200, Cornelia Huck wrote:
> On Fri,  5 Apr 2019 01:16:11 +0200
> Halil Pasic <pasic@linux.ibm.com> wrote:
> 
> > The commit 2a2d1382fe9d ("virtio: Add improved queue allocation API")
> > establishes a new way of allocating virtqueues (as a part of the effort
> > that taught DMA to virtio rings).
> > 
> > In the future we will want virtio-ccw to use the DMA API as well.
> > 
> > Let us switch from the legacy method of allocating virtqueues to
> > vring_create_virtqueue() as the first step into that direction.
> > 
> > Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
> > ---
> >  drivers/s390/virtio/virtio_ccw.c | 27 ++++++++-------------------
> >  1 file changed, 8 insertions(+), 19 deletions(-)
> > 
> > diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c
> > index 74c328321889..edf4afe2d688 100644
> > --- a/drivers/s390/virtio/virtio_ccw.c
> > +++ b/drivers/s390/virtio/virtio_ccw.c
> 
> > @@ -516,17 +512,10 @@ static struct virtqueue *virtio_ccw_setup_vq(struct virtio_device *vdev,
> >  		err = info->num;
> >  		goto out_err;
> >  	}
> > -	size = PAGE_ALIGN(vring_size(info->num, KVM_VIRTIO_CCW_RING_ALIGN));
> > -	info->queue = alloc_pages_exact(size, GFP_KERNEL | __GFP_ZERO);
> > -	if (info->queue == NULL) {
> > -		dev_warn(&vcdev->cdev->dev, "no queue\n");
> > -		err = -ENOMEM;
> > -		goto out_err;
> > -	}
> > +	vq = vring_create_virtqueue(i, info->num, KVM_VIRTIO_CCW_RING_ALIGN,
> > +				    vdev, true, true, ctx,
> 
> This second true means 'may_reduce_num'. Looking at the vring code, it
> seems that this parameter is never checked; the code will try to
> allocate a smaller queue if it can't get the requested size in any
> case... this will probably be a problem for legacy virtio-pci, which
> explicitly sets may_reduce_num to false. (I can try to come up with a
> patch to fix that.)

Yes, pls do. Not too late for a bugfix to go into the current linux.

> > +				    virtio_ccw_kvm_notify, callback, name);
> >  
> > -	vq = vring_new_virtqueue(i, info->num, KVM_VIRTIO_CCW_RING_ALIGN, vdev,
> > -				 true, ctx, info->queue, virtio_ccw_kvm_notify,
> > -				 callback, name);
> >  	if (!vq) {
> >  		/* For now, we fail if we can't get the requested size. */
> >  		dev_warn(&vcdev->cdev->dev, "no vq\n");
> > @@ -534,15 +523,17 @@ static struct virtqueue *virtio_ccw_setup_vq(struct virtio_device *vdev,
> >  		goto out_err;
> >  	}
> >  
> > +
> 
> Extra blank line :)
> 
> >  	/* Register it with the host. */
> > +	queue = virtqueue_get_desc_addr(vq);
> >  	if (vcdev->revision == 0) {
> > -		info->info_block->l.queue = (__u64)info->queue;
> > +		info->info_block->l.queue = queue;
> >  		info->info_block->l.align = KVM_VIRTIO_CCW_RING_ALIGN;
> >  		info->info_block->l.index = i;
> >  		info->info_block->l.num = info->num;
> 
> You always fill in the size requested by the host, but the actual size
> may be smaller (see above). I don't think that is allowed for revision
> 0 (which implies !virtio-1). You probably need to call
> vring_create_virtqueue with may_reduce_num=false for revision 0 (and
> wait for the generic vring code to be fixed...)
> 
> >  		ccw->count = sizeof(info->info_block->l);
> >  	} else {
> > -		info->info_block->s.desc = (__u64)info->queue;
> > +		info->info_block->s.desc = queue;
> >  		info->info_block->s.index = i;
> >  		info->info_block->s.num = info->num;
> 
> Here, you need to obtain the actual number via
> virtqueue_get_vring_size().
> 
> >  		info->info_block->s.avail = (__u64)virtqueue_get_avail(vq);

  reply	other threads:[~2019-04-08 12:37 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190404231622.52531-1-pasic@linux.ibm.com>
     [not found] ` <20190404231622.52531-2-pasic@linux.ibm.com>
2019-04-08 11:01   ` [RFC PATCH 01/12] virtio/s390: use vring_create_virtqueue Cornelia Huck
2019-04-08 12:37     ` Michael S. Tsirkin [this message]
     [not found] ` <20190404231622.52531-3-pasic@linux.ibm.com>
2019-04-09  9:57   ` [RFC PATCH 02/12] virtio/s390: DMA support for virtio-ccw Cornelia Huck
     [not found]     ` <20190409132927.5df3bc50@oc2783563651>
2019-04-09 13:01       ` Cornelia Huck
     [not found]         ` <20190409152313.0296e8f1@oc2783563651>
2019-04-09 15:47           ` Cornelia Huck
     [not found] ` <20190404231622.52531-5-pasic@linux.ibm.com>
2019-04-09 10:44   ` [RFC PATCH 04/12] s390/cio: introduce cio DMA pool Cornelia Huck
     [not found]     ` <20190409141114.7dcce94a@oc2783563651>
2019-04-09 17:14       ` Cornelia Huck
     [not found]         ` <20190410173148.067555dc@oc2783563651>
2019-04-10 16:07           ` Cornelia Huck
2019-04-11 18:25   ` Sebastian Ott
     [not found]     ` <20190412132010.3c74cb63@oc2783563651>
2019-04-12 12:12       ` Sebastian Ott
     [not found]         ` <20190412173017.04b768bb@oc2783563651>
2019-04-16 12:50           ` Sebastian Ott
     [not found] ` <20190404231622.52531-4-pasic@linux.ibm.com>
2019-04-09 10:16   ` [RFC PATCH 03/12] s390/mm: force swiotlb for protected virtualization Cornelia Huck
     [not found]     ` <20190409125416.73713f23@oc2783563651>
2019-04-09 17:18       ` Cornelia Huck
2019-04-09 12:22   ` Christoph Hellwig
     [not found] ` <20190404231622.52531-6-pasic@linux.ibm.com>
2019-04-09 17:55   ` [RFC PATCH 05/12] s390/cio: add protected virtualization support to cio Cornelia Huck
     [not found]     ` <20190410021044.4da3e847@oc2783563651>
2019-04-10  8:25       ` Cornelia Huck
     [not found]         ` <20190410150225.61b86cd9@oc2783563651>
2019-04-10 16:16           ` Cornelia Huck
2019-04-11 14:15   ` Sebastian Ott
     [not found] ` <20190404231622.52531-8-pasic@linux.ibm.com>
2019-04-10  8:42   ` [RFC PATCH 07/12] virtio/s390: use DMA memory for ccw I/O Cornelia Huck
     [not found]     ` <20190410164245.53f8b26d@oc2783563651>
2019-04-10 16:21       ` Cornelia Huck
     [not found] ` <20190404231622.52531-11-pasic@linux.ibm.com>
2019-04-10  8:46   ` [RFC PATCH 10/12] virtio/s390: consolidate DMA allocations Cornelia Huck
     [not found]     ` <20190410171254.71206015@oc2783563651>
2019-04-10 16:36       ` Cornelia Huck
     [not found]         ` <20190410194849.511ecc46@oc2783563651>
2019-04-11  9:24           ` Cornelia Huck
2019-04-10  9:20 ` [RFC PATCH 00/12] s390: virtio: support protected virtualization Cornelia Huck
     [not found]   ` <20190410175750.0ed0a454@oc2783563651>
2019-04-10 16:24     ` Cornelia Huck
2019-04-12 13:47 ` David Hildenbrand
     [not found]   ` <20190416131005.6f3e05eb@oc2783563651>
2019-04-16 11:50     ` David Hildenbrand

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=20190408083707-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=alifm@linux.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=farman@linux.ibm.com \
    --cc=frankja@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mihajlov@linux.ibm.com \
    --cc=pasic@linux.ibm.com \
    --cc=schwidefsky@de.ibm.com \
    --cc=sebott@linux.ibm.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 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).