All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Eugenio Perez Martin <eperezma@redhat.com>
Cc: qemu-devel@nongnu.org, Parav Pandit <parav@mellanox.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Si-Wei Liu <si-wei.liu@oracle.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Harpreet Singh Anand <hanand@xilinx.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Gautam Dawar <gdawar@xilinx.com>,
	Liuxiangdong <liuxiangdong5@huawei.com>,
	Stefano Garzarella <sgarzare@redhat.com>,
	Cindy Lu <lulu@redhat.com>, Eli Cohen <eli@mellanox.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Zhu Lingshan <lingshan.zhu@intel.com>,
	kvm@vger.kernel.org, "Gonglei (Arei)" <arei.gonglei@huawei.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v6 05/10] vdpa: move SVQ vring features check to net/
Date: Fri, 11 Nov 2022 16:07:01 +0800	[thread overview]
Message-ID: <CACGkMEvQm_0VqF5q2XtWmaHXmSj0Xjg7br3ydOQVVcHJ0yb_GA@mail.gmail.com> (raw)
In-Reply-To: <CAJaqyWfmTn1_o2z2S_o=bu2mD=r0+T=1+dh_WOwbpQaYQK0YSQ@mail.gmail.com>

On Fri, Nov 11, 2022 at 3:56 PM Eugenio Perez Martin
<eperezma@redhat.com> wrote:
>
> On Fri, Nov 11, 2022 at 8:34 AM Jason Wang <jasowang@redhat.com> wrote:
> >
> >
> > 在 2022/11/10 21:09, Eugenio Perez Martin 写道:
> > > On Thu, Nov 10, 2022 at 6:40 AM Jason Wang <jasowang@redhat.com> wrote:
> > >>
> > >> 在 2022/11/9 01:07, Eugenio Pérez 写道:
> > >>> The next patches will start control SVQ if possible. However, we don't
> > >>> know if that will be possible at qemu boot anymore.
> > >>
> > >> If I was not wrong, there's no device specific feature that is checked
> > >> in the function. So it should be general enough to be used by devices
> > >> other than net. Then I don't see any advantage of doing this.
> > >>
> > > Because vhost_vdpa_init_svq is called at qemu boot, failing if it is
> > > not possible to shadow the Virtqueue.
> > >
> > > Now the CVQ will be shadowed if possible, so we need to check this at
> > > device start, not at initialization.
> >
> >
> > Any reason we can't check this at device start? We don't need
> > driver_features and we can do any probing to make sure cvq has an unique
> > group during initialization time.
> >
>
> We need the CVQ index to check if it has an independent group. CVQ
> index depends on the features the guest's ack:
> * If it acks _F_MQ, it is the last one.
> * If it doesn't, CVQ idx is 2.
>
> We cannot have acked features at initialization, and they could
> change: It is valid for a guest to ack _F_MQ, then reset the device,
> then not ack it.

Can we do some probing by negotiating _F_MQ if the device offers it,
then we can know if cvq has a unique group?

>
> >
> > >   To store this information at boot
> > > time is not valid anymore, because v->shadow_vqs_enabled is not valid
> > > at this time anymore.
> >
> >
> > Ok, but this doesn't explain why it is net specific but vhost-vdpa specific.
> >
>
> We can try to move it to a vhost op, but we have the same problem as
> the svq array allocation: We don't have the right place in vhost ops
> to check this. Maybe vhost_set_features is the right one here?

If we can do all the probing at the initialization phase, we can do
everything there.

Thanks

>
> Thanks!
>
> > Thanks
> >
> >
> > >
> > > Thanks!
> > >
> > >> Thanks
> > >>
> > >>
> > >>> Since the moved checks will be already evaluated at net/ to know if it
> > >>> is ok to shadow CVQ, move them.
> > >>>
> > >>> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
> > >>> ---
> > >>>    hw/virtio/vhost-vdpa.c | 33 ++-------------------------------
> > >>>    net/vhost-vdpa.c       |  3 ++-
> > >>>    2 files changed, 4 insertions(+), 32 deletions(-)
> > >>>
> > >>> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> > >>> index 3df2775760..146f0dcb40 100644
> > >>> --- a/hw/virtio/vhost-vdpa.c
> > >>> +++ b/hw/virtio/vhost-vdpa.c
> > >>> @@ -402,29 +402,9 @@ static int vhost_vdpa_get_dev_features(struct vhost_dev *dev,
> > >>>        return ret;
> > >>>    }
> > >>>
> > >>> -static int vhost_vdpa_init_svq(struct vhost_dev *hdev, struct vhost_vdpa *v,
> > >>> -                               Error **errp)
> > >>> +static void vhost_vdpa_init_svq(struct vhost_dev *hdev, struct vhost_vdpa *v)
> > >>>    {
> > >>>        g_autoptr(GPtrArray) shadow_vqs = NULL;
> > >>> -    uint64_t dev_features, svq_features;
> > >>> -    int r;
> > >>> -    bool ok;
> > >>> -
> > >>> -    if (!v->shadow_vqs_enabled) {
> > >>> -        return 0;
> > >>> -    }
> > >>> -
> > >>> -    r = vhost_vdpa_get_dev_features(hdev, &dev_features);
> > >>> -    if (r != 0) {
> > >>> -        error_setg_errno(errp, -r, "Can't get vdpa device features");
> > >>> -        return r;
> > >>> -    }
> > >>> -
> > >>> -    svq_features = dev_features;
> > >>> -    ok = vhost_svq_valid_features(svq_features, errp);
> > >>> -    if (unlikely(!ok)) {
> > >>> -        return -1;
> > >>> -    }
> > >>>
> > >>>        shadow_vqs = g_ptr_array_new_full(hdev->nvqs, vhost_svq_free);
> > >>>        for (unsigned n = 0; n < hdev->nvqs; ++n) {
> > >>> @@ -436,7 +416,6 @@ static int vhost_vdpa_init_svq(struct vhost_dev *hdev, struct vhost_vdpa *v,
> > >>>        }
> > >>>
> > >>>        v->shadow_vqs = g_steal_pointer(&shadow_vqs);
> > >>> -    return 0;
> > >>>    }
> > >>>
> > >>>    static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
> > >>> @@ -461,11 +440,7 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
> > >>>        dev->opaque =  opaque ;
> > >>>        v->listener = vhost_vdpa_memory_listener;
> > >>>        v->msg_type = VHOST_IOTLB_MSG_V2;
> > >>> -    ret = vhost_vdpa_init_svq(dev, v, errp);
> > >>> -    if (ret) {
> > >>> -        goto err;
> > >>> -    }
> > >>> -
> > >>> +    vhost_vdpa_init_svq(dev, v);
> > >>>        vhost_vdpa_get_iova_range(v);
> > >>>
> > >>>        if (!vhost_vdpa_first_dev(dev)) {
> > >>> @@ -476,10 +451,6 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
> > >>>                                   VIRTIO_CONFIG_S_DRIVER);
> > >>>
> > >>>        return 0;
> > >>> -
> > >>> -err:
> > >>> -    ram_block_discard_disable(false);
> > >>> -    return ret;
> > >>>    }
> > >>>
> > >>>    static void vhost_vdpa_host_notifier_uninit(struct vhost_dev *dev,
> > >>> diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> > >>> index d3b1de481b..fb35b17ab4 100644
> > >>> --- a/net/vhost-vdpa.c
> > >>> +++ b/net/vhost-vdpa.c
> > >>> @@ -117,9 +117,10 @@ static bool vhost_vdpa_net_valid_svq_features(uint64_t features, Error **errp)
> > >>>        if (invalid_dev_features) {
> > >>>            error_setg(errp, "vdpa svq does not work with features 0x%" PRIx64,
> > >>>                       invalid_dev_features);
> > >>> +        return false;
> > >>>        }
> > >>>
> > >>> -    return !invalid_dev_features;
> > >>> +    return vhost_svq_valid_features(features, errp);
> > >>>    }
> > >>>
> > >>>    static int vhost_vdpa_net_check_device_id(struct vhost_net *net)
> >
>


  reply	other threads:[~2022-11-11  8:08 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-08 17:07 [PATCH v6 00/10] ASID support in vhost-vdpa net Eugenio Pérez
2022-11-08 17:07 ` [PATCH v6 01/10] vdpa: Use v->shadow_vqs_enabled in vhost_vdpa_svqs_start & stop Eugenio Pérez
2022-11-10  5:21   ` Jason Wang
2022-11-10 12:54     ` Eugenio Perez Martin
2022-11-11  7:24       ` Jason Wang
2022-11-08 17:07 ` [PATCH v6 02/10] vhost: set SVQ device call handler at SVQ start Eugenio Pérez
2022-11-10  5:22   ` Jason Wang
2022-11-08 17:07 ` [PATCH v6 03/10] vhost: Allocate SVQ device file descriptors at device start Eugenio Pérez
2022-11-10  5:28   ` Jason Wang
2022-11-08 17:07 ` [PATCH v6 04/10] vdpa: add vhost_vdpa_net_valid_svq_features Eugenio Pérez
2022-11-10  5:29   ` Jason Wang
2022-11-08 17:07 ` [PATCH v6 05/10] vdpa: move SVQ vring features check to net/ Eugenio Pérez
2022-11-10  5:40   ` Jason Wang
2022-11-10 13:09     ` Eugenio Perez Martin
2022-11-11  7:34       ` Jason Wang
2022-11-11  7:55         ` Eugenio Perez Martin
2022-11-11  8:07           ` Jason Wang [this message]
2022-11-11 12:58             ` Eugenio Perez Martin
2022-11-14  4:26               ` Jason Wang
2022-11-14 10:10                 ` Eugenio Perez Martin
2022-11-08 17:07 ` [PATCH v6 06/10] vdpa: Allocate SVQ unconditionally Eugenio Pérez
2022-11-08 17:07 ` [PATCH v6 07/10] vdpa: Add asid parameter to vhost_vdpa_dma_map/unmap Eugenio Pérez
2022-11-10  5:50   ` Jason Wang
2022-11-10 13:22     ` Eugenio Perez Martin
2022-11-11  7:41       ` Jason Wang
2022-11-11 13:02         ` Eugenio Perez Martin
2022-11-14  4:27           ` Jason Wang
2022-11-08 17:07 ` [PATCH v6 08/10] vdpa: Store x-svq parameter in VhostVDPAState Eugenio Pérez
2022-11-08 17:07 ` [PATCH v6 09/10] vdpa: Add listener_shadow_vq to vhost_vdpa Eugenio Pérez
2022-11-10  6:00   ` Jason Wang
2022-11-10 13:47     ` Eugenio Perez Martin
2022-11-11  7:48       ` Jason Wang
2022-11-11 13:12         ` Eugenio Perez Martin
2022-11-14  4:30           ` Jason Wang
2022-11-14 16:30             ` Eugenio Perez Martin
2022-11-15  3:04               ` Jason Wang
2022-11-15 11:24                 ` Eugenio Perez Martin
2022-11-16  3:33                   ` Jason Wang
2022-11-08 17:07 ` [PATCH v6 10/10] vdpa: Always start CVQ in SVQ mode Eugenio Pérez
2022-11-10  6:24   ` Jason Wang
2022-11-10 16:07     ` Eugenio Perez Martin
2022-11-11  8:02       ` Jason Wang
2022-11-11 14:38         ` Eugenio Perez Martin
2022-11-14  4:36           ` Jason Wang
2022-11-10 12:25 ` [PATCH v6 00/10] ASID support in vhost-vdpa net Michael S. Tsirkin
2022-11-10 12:56   ` Eugenio Perez Martin

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=CACGkMEvQm_0VqF5q2XtWmaHXmSj0Xjg7br3ydOQVVcHJ0yb_GA@mail.gmail.com \
    --to=jasowang@redhat.com \
    --cc=arei.gonglei@huawei.com \
    --cc=cohuck@redhat.com \
    --cc=eli@mellanox.com \
    --cc=eperezma@redhat.com \
    --cc=gdawar@xilinx.com \
    --cc=hanand@xilinx.com \
    --cc=kvm@vger.kernel.org \
    --cc=lingshan.zhu@intel.com \
    --cc=liuxiangdong5@huawei.com \
    --cc=lulu@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mst@redhat.com \
    --cc=parav@mellanox.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sgarzare@redhat.com \
    --cc=si-wei.liu@oracle.com \
    --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.