[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup
From: |
Jason Wang |
Subject: |
Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup |
Date: |
Fri, 9 Sep 2022 14:40:39 +0800 |
On Fri, Sep 9, 2022 at 2:38 PM Jason Wang <jasowang@redhat.com> wrote:
>
> On Wed, Sep 7, 2022 at 12:36 AM Eugenio Pérez <eperezma@redhat.com> wrote:
> >
> > To have enabled vlans at device startup may happen in the destination of
> > a live migration, so this configuration must be restored.
> >
> > At this moment the code is not accessible, since SVQ refuses to start if
> > vlan feature is exposed by the device.
> >
> > Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
> > ---
> > net/vhost-vdpa.c | 46 ++++++++++++++++++++++++++++++++++++++++++++--
> > 1 file changed, 44 insertions(+), 2 deletions(-)
> >
> > diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> > index 4bc3fd01a8..ecbfd08eb9 100644
> > --- a/net/vhost-vdpa.c
> > +++ b/net/vhost-vdpa.c
> > @@ -100,6 +100,8 @@ static const uint64_t vdpa_svq_device_features =
> > BIT_ULL(VIRTIO_NET_F_RSC_EXT) |
> > BIT_ULL(VIRTIO_NET_F_STANDBY);
> >
> > +#define MAX_VLAN (1 << 12) /* Per 802.1Q definition */
> > +
> > VHostNetState *vhost_vdpa_get_vhost_net(NetClientState *nc)
> > {
> > VhostVDPAState *s = DO_UPCAST(VhostVDPAState, nc, nc);
> > @@ -423,6 +425,47 @@ static int vhost_vdpa_net_load_mq(VhostVDPAState *s,
> > return *s->status != VIRTIO_NET_OK;
> > }
> >
> > +static int vhost_vdpa_net_load_single_vlan(VhostVDPAState *s,
> > + const VirtIONet *n,
> > + uint16_t vid)
> > +{
> > + ssize_t dev_written = vhost_vdpa_net_load_cmd(s, VIRTIO_NET_CTRL_VLAN,
> > + VIRTIO_NET_CTRL_VLAN_ADD,
> > + &vid, sizeof(vid));
> > + if (unlikely(dev_written < 0)) {
> > + return dev_written;
> > + }
> > +
> > + if (unlikely(*s->status != VIRTIO_NET_OK)) {
> > + return -EINVAL;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +static int vhost_vdpa_net_load_vlan(VhostVDPAState *s,
> > + const VirtIONet *n)
> > +{
> > + uint64_t features = n->parent_obj.guest_features;
> > +
> > + if (!(features & BIT_ULL(VIRTIO_NET_F_CTRL_VLAN))) {
> > + return 0;
> > + }
> > +
> > + for (int i = 0; i < MAX_VLAN >> 5; i++) {
> > + for (int j = 0; n->vlans[i] && j <= 0x1f; j++) {
> > + if (n->vlans[i] & (1U << j)) {
> > + int r = vhost_vdpa_net_load_single_vlan(s, n, (i << 5) +
> > j);
>
> This seems to cause a lot of latency if the driver has a lot of vlans.
>
> I wonder if it's simply to let all vlan traffic go by disabling
> CTRL_VLAN feature at vDPA layer.
Another idea is to extend the spec to allow us to accept a bitmap of
the vlan ids via a single command, then we will be fine.
Thanks
>
> Thanks
>
> > + if (unlikely(r != 0)) {
> > + return r;
> > + }
> > + }
> > + }
> > + }
> > +
> > + return 0;
> > +}
> > +
> > static int vhost_vdpa_net_load(NetClientState *nc)
> > {
> > VhostVDPAState *s = DO_UPCAST(VhostVDPAState, nc, nc);
> > @@ -445,8 +488,7 @@ static int vhost_vdpa_net_load(NetClientState *nc)
> > if (unlikely(r)) {
> > return r;
> > }
> > -
> > - return 0;
> > + return vhost_vdpa_net_load_vlan(s, n);
> > }
> >
> > static NetClientInfo net_vhost_vdpa_cvq_info = {
> > --
> > 2.31.1
> >
- [PATCH 0/3] Vhost-vdpa Shadow Virtqueue VLAN support, Eugenio Pérez, 2022/09/06
- [PATCH 1/3] virtio-net: do not reset vlan filtering at set_features, Eugenio Pérez, 2022/09/06
- [PATCH 2/3] vdpa: load vlan configuration at NIC startup, Eugenio Pérez, 2022/09/06
- Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup, Jason Wang, 2022/09/09
- Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup, Jason Wang, 2022/09/13
- Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup, Eugenio Perez Martin, 2022/09/14
- Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup, Si-Wei Liu, 2022/09/14
- Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup, Eugenio Perez Martin, 2022/09/14
- Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup, Si-Wei Liu, 2022/09/14
- Re: [PATCH 2/3] vdpa: load vlan configuration at NIC startup, Jason Wang, 2022/09/14