From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: Tiwei Bie <tiwei.bie@intel.com>,
alex.williamson@redhat.com, maxime.coquelin@redhat.com,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
virtualization@lists.linux-foundation.org,
netdev@vger.kernel.org, dan.daly@intel.com,
cunming.liang@intel.com, zhihong.wang@intel.com,
lingshan.zhu@intel.com
Subject: Re: [PATCH] vhost: introduce mdev based hardware backend
Date: Fri, 27 Sep 2019 05:38:43 -0400 [thread overview]
Message-ID: <20190927053829-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <05ab395e-6677-e8c3-becf-57bc1529921f@redhat.com>
On Fri, Sep 27, 2019 at 04:47:43PM +0800, Jason Wang wrote:
>
> On 2019/9/27 下午12:54, Tiwei Bie wrote:
> > On Fri, Sep 27, 2019 at 11:46:06AM +0800, Jason Wang wrote:
> > > On 2019/9/26 下午12:54, Tiwei Bie wrote:
> > > > +
> > > > +static long vhost_mdev_start(struct vhost_mdev *m)
> > > > +{
> > > > + struct mdev_device *mdev = m->mdev;
> > > > + const struct virtio_mdev_device_ops *ops = mdev_get_dev_ops(mdev);
> > > > + struct virtio_mdev_callback cb;
> > > > + struct vhost_virtqueue *vq;
> > > > + int idx;
> > > > +
> > > > + ops->set_features(mdev, m->acked_features);
> > > > +
> > > > + mdev_add_status(mdev, VIRTIO_CONFIG_S_FEATURES_OK);
> > > > + if (!(mdev_get_status(mdev) & VIRTIO_CONFIG_S_FEATURES_OK))
> > > > + goto reset;
> > > > +
> > > > + for (idx = 0; idx < m->nvqs; idx++) {
> > > > + vq = &m->vqs[idx];
> > > > +
> > > > + if (!vq->desc || !vq->avail || !vq->used)
> > > > + break;
> > > > +
> > > > + if (ops->set_vq_state(mdev, idx, vq->last_avail_idx))
> > > > + goto reset;
> > > If we do set_vq_state() in SET_VRING_BASE, we won't need this step here.
> > Yeah, I plan to do it in the next version.
> >
> > > > +
> > > > + /*
> > > > + * In vhost-mdev, userspace should pass ring addresses
> > > > + * in guest physical addresses when IOMMU is disabled or
> > > > + * IOVAs when IOMMU is enabled.
> > > > + */
> > > A question here, consider we're using noiommu mode. If guest physical
> > > address is passed here, how can a device use that?
> > >
> > > I believe you meant "host physical address" here? And it also have the
> > > implication that the HPA should be continuous (e.g using hugetlbfs).
> > The comment is talking about the virtual IOMMU (i.e. iotlb in vhost).
> > It should be rephrased to cover the noiommu case as well. Thanks for
> > spotting this.
> >
> >
> > > > +
> > > > + switch (cmd) {
> > > > + case VHOST_MDEV_SET_STATE:
> > > > + r = vhost_set_state(m, argp);
> > > > + break;
> > > > + case VHOST_GET_FEATURES:
> > > > + r = vhost_get_features(m, argp);
> > > > + break;
> > > > + case VHOST_SET_FEATURES:
> > > > + r = vhost_set_features(m, argp);
> > > > + break;
> > > > + case VHOST_GET_VRING_BASE:
> > > > + r = vhost_get_vring_base(m, argp);
> > > > + break;
> > > Does it mean the SET_VRING_BASE may only take affect after
> > > VHOST_MEV_SET_STATE?
> > Yeah, in this version, SET_VRING_BASE won't set the base to the
> > device directly. But I plan to not delay this anymore in the next
> > version to support the SET_STATUS.
> >
> > > > + default:
> > > > + r = vhost_dev_ioctl(&m->dev, cmd, argp);
> > > > + if (r == -ENOIOCTLCMD)
> > > > + r = vhost_vring_ioctl(&m->dev, cmd, argp);
> > > > + }
> > > > +
> > > > + mutex_unlock(&m->mutex);
> > > > + return r;
> > > > +}
> > > > +
> > > > +static const struct vfio_device_ops vfio_vhost_mdev_dev_ops = {
> > > > + .name = "vfio-vhost-mdev",
> > > > + .open = vhost_mdev_open,
> > > > + .release = vhost_mdev_release,
> > > > + .ioctl = vhost_mdev_unlocked_ioctl,
> > > > +};
> > > > +
> > > > +static int vhost_mdev_probe(struct device *dev)
> > > > +{
> > > > + struct mdev_device *mdev = mdev_from_dev(dev);
> > > > + const struct virtio_mdev_device_ops *ops = mdev_get_dev_ops(mdev);
> > > > + struct vhost_mdev *m;
> > > > + int nvqs, r;
> > > > +
> > > > + m = kzalloc(sizeof(*m), GFP_KERNEL | __GFP_RETRY_MAYFAIL);
> > > > + if (!m)
> > > > + return -ENOMEM;
> > > > +
> > > > + mutex_init(&m->mutex);
> > > > +
> > > > + nvqs = ops->get_queue_max(mdev);
> > > > + m->nvqs = nvqs;
> > > The name could be confusing, get_queue_max() is to get the maximum number of
> > > entries for a virtqueue supported by this device.
> > OK. It might be better to rename it to something like:
> >
> > get_vq_num_max()
> >
> > which is more consistent with the set_vq_num().
> >
> > > It looks to me that we need another API to query the maximum number of
> > > virtqueues supported by the device.
> > Yeah.
> >
> > Thanks,
> > Tiwei
>
>
> One problem here:
>
> Consider if we want to support multiqueue, how did userspace know about
> this?
There's a feature bit for this, isn't there?
> Note this information could be fetched from get_config() via a device
> specific way, do we want ioctl for accessing that area?
>
> Thanks
next prev parent reply other threads:[~2019-09-27 9:38 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-26 4:54 [PATCH] vhost: introduce mdev based hardware backend Tiwei Bie
2019-09-26 8:35 ` Michael S. Tsirkin
2019-09-26 13:14 ` Tiwei Bie
2019-09-26 13:14 ` Tiwei Bie
2019-09-26 13:26 ` Michael S. Tsirkin
2019-09-26 13:26 ` Michael S. Tsirkin
2019-09-26 13:34 ` Tiwei Bie
2019-09-26 13:34 ` Tiwei Bie
2019-09-27 3:27 ` Jason Wang
2019-09-27 9:41 ` Michael S. Tsirkin
2019-09-27 9:41 ` Michael S. Tsirkin
2019-09-27 12:17 ` Jason Wang
2019-09-27 12:17 ` Jason Wang
2019-09-27 12:46 ` Michael S. Tsirkin
2019-09-27 12:46 ` Michael S. Tsirkin
2019-09-27 13:17 ` Jason Wang
2019-09-27 13:23 ` Michael S. Tsirkin
2019-09-27 13:23 ` Michael S. Tsirkin
2019-09-29 7:39 ` Jason Wang
2019-09-29 7:39 ` Jason Wang
2019-09-27 13:17 ` Jason Wang
2019-09-27 3:27 ` Jason Wang
2019-09-26 8:35 ` Michael S. Tsirkin
2019-09-26 14:05 ` kbuild test robot
2019-09-26 14:05 ` kbuild test robot
2019-09-27 3:46 ` Jason Wang
2019-09-27 3:51 ` Jason Wang
2019-09-27 3:51 ` Jason Wang
2019-09-27 4:26 ` Tiwei Bie
2019-09-27 4:26 ` Tiwei Bie
2019-09-27 4:54 ` Tiwei Bie
2019-09-27 7:14 ` Jason Wang
2019-09-27 7:14 ` Jason Wang
2019-09-27 8:04 ` Tiwei Bie
2019-09-27 8:31 ` Jason Wang
2019-09-27 8:31 ` Jason Wang
2019-09-27 8:04 ` Tiwei Bie
2019-09-27 7:17 ` Jason Wang
2019-09-27 7:17 ` Jason Wang
2019-09-27 8:47 ` Jason Wang
2019-09-27 8:47 ` Jason Wang
2019-09-27 9:38 ` Michael S. Tsirkin [this message]
2019-09-27 12:15 ` Jason Wang
2019-09-27 12:15 ` Jason Wang
2019-09-27 9:38 ` Michael S. Tsirkin
2019-09-27 4:54 ` Tiwei Bie
2019-09-27 3:46 ` Jason Wang
-- strict thread matches above, loose matches on Subject: below --
2019-09-26 4:54 Tiwei Bie
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=20190927053829-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=cunming.liang@intel.com \
--cc=dan.daly@intel.com \
--cc=jasowang@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=lingshan.zhu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maxime.coquelin@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=tiwei.bie@intel.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=zhihong.wang@intel.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.