On Wed, May 31, 2023 at 3:47 AM Jason Wang <jasow...@redhat.com> wrote:
>
> On Mon, May 29, 2023 at 9:18 PM Hawkins Jiawei <yin31...@gmail.com> wrote:
> >
> > This patch introduces vhost_vdpa_net_load_offloads() to
> > restore offloads state at device's startup.
> >
> > Signed-off-by: Hawkins Jiawei <yin31...@gmail.com>
> > ---
> >  net/vhost-vdpa.c | 26 ++++++++++++++++++++++++++
> >  1 file changed, 26 insertions(+)
> >
> > diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> > index 37cdc84562..682c749b19 100644
> > --- a/net/vhost-vdpa.c
> > +++ b/net/vhost-vdpa.c
> > @@ -680,6 +680,28 @@ static int vhost_vdpa_net_load_mq(VhostVDPAState *s,
> >      return *s->status != VIRTIO_NET_OK;
> >  }
> >
> > +static int vhost_vdpa_net_load_offloads(VhostVDPAState *s,
> > +                                        const VirtIONet *n)
> > +{
> > +    uint64_t features, offloads;
> > +    ssize_t dev_written;
> > +
> > +    features = n->parent_obj.guest_features;
>
> Any reason you need to do tricks like this instead of using
> virtio_xxx_has_features()?
>

It can be replaced by virtio_vdev_has_feature, yes.

Current code of vhost_vdpa_net_load_mac and vhost_vdpa_net_load_mq
access to guest_features directly too, so I think we should change all
of them at once.

Thanks!

> > +    if (!(features & BIT_ULL(VIRTIO_NET_F_CTRL_GUEST_OFFLOADS))) {
> > +        return 0;
> > +    }
> > +
> > +    offloads = cpu_to_le64(n->curr_guest_offloads);
> > +    dev_written = vhost_vdpa_net_load_cmd(s, 
> > VIRTIO_NET_CTRL_GUEST_OFFLOADS,
> > +                                          
> > VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET,
> > +                                          &offloads, sizeof(offloads));
> > +    if (unlikely(dev_written < 0)) {
> > +        return dev_written;
> > +    }
> > +
> > +    return *s->status != VIRTIO_NET_OK;
> > +}
> > +
> >  static int vhost_vdpa_net_load(NetClientState *nc)
> >  {
> >      VhostVDPAState *s = DO_UPCAST(VhostVDPAState, nc, nc);
> > @@ -702,6 +724,10 @@ static int vhost_vdpa_net_load(NetClientState *nc)
> >      if (unlikely(r)) {
> >          return r;
> >      }
> > +    r = vhost_vdpa_net_load_offloads(s, n);
> > +    if (unlikely(r)) {
> > +        return r;
> > +    }
> >
> >      return 0;
> >  }
> > --
> > 2.25.1
> >
>


Reply via email to