diff mbox series

[v8,06/12] vhost_net: Add NetClientInfo stop callback

Message ID 20220809173926.1695280-7-eperezma@redhat.com (mailing list archive)
State New, archived
Headers show
Series NIC vhost-vdpa state restore via Shadow CVQ | expand

Commit Message

Eugenio Perez Martin Aug. 9, 2022, 5:39 p.m. UTC
Used by the backend to perform actions after the device is stopped.

In particular, vdpa net use it to unmap CVQ buffers to the device,
cleaning the actions performend in prepare().

Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
 include/net/net.h  | 2 ++
 hw/net/vhost_net.c | 3 +++
 2 files changed, 5 insertions(+)

Comments

Jason Wang Aug. 10, 2022, 5:06 a.m. UTC | #1
On Wed, Aug 10, 2022 at 1:39 AM Eugenio Pérez <eperezma@redhat.com> wrote:
>
> Used by the backend to perform actions after the device is stopped.
>
> In particular, vdpa net use it to unmap CVQ buffers to the device,
> cleaning the actions performend in prepare().

Should be "performed".

Other than this,

Acked-by: Jason Wang <jasowang@redhat.com>

>
> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
> ---
>  include/net/net.h  | 2 ++
>  hw/net/vhost_net.c | 3 +++
>  2 files changed, 5 insertions(+)
>
> diff --git a/include/net/net.h b/include/net/net.h
> index ad9e80083a..476ad45b9a 100644
> --- a/include/net/net.h
> +++ b/include/net/net.h
> @@ -45,6 +45,7 @@ typedef struct NICConf {
>  typedef void (NetPoll)(NetClientState *, bool enable);
>  typedef bool (NetCanReceive)(NetClientState *);
>  typedef int (NetStart)(NetClientState *);
> +typedef void (NetStop)(NetClientState *);
>  typedef ssize_t (NetReceive)(NetClientState *, const uint8_t *, size_t);
>  typedef ssize_t (NetReceiveIOV)(NetClientState *, const struct iovec *, int);
>  typedef void (NetCleanup) (NetClientState *);
> @@ -73,6 +74,7 @@ typedef struct NetClientInfo {
>      NetReceiveIOV *receive_iov;
>      NetCanReceive *can_receive;
>      NetStart *start;
> +    NetStop *stop;
>      NetCleanup *cleanup;
>      LinkStatusChanged *link_status_changed;
>      QueryRxFilter *query_rx_filter;
> diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
> index 2e0baeba26..9d4b334453 100644
> --- a/hw/net/vhost_net.c
> +++ b/hw/net/vhost_net.c
> @@ -320,6 +320,9 @@ static void vhost_net_stop_one(struct vhost_net *net,
>          net->nc->info->poll(net->nc, true);
>      }
>      vhost_dev_stop(&net->dev, dev);
> +    if (net->nc->info->stop) {
> +        net->nc->info->stop(net->nc);
> +    }
>      vhost_dev_disable_notifiers(&net->dev, dev);
>  }
>
> --
> 2.31.1
>
diff mbox series

Patch

diff --git a/include/net/net.h b/include/net/net.h
index ad9e80083a..476ad45b9a 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -45,6 +45,7 @@  typedef struct NICConf {
 typedef void (NetPoll)(NetClientState *, bool enable);
 typedef bool (NetCanReceive)(NetClientState *);
 typedef int (NetStart)(NetClientState *);
+typedef void (NetStop)(NetClientState *);
 typedef ssize_t (NetReceive)(NetClientState *, const uint8_t *, size_t);
 typedef ssize_t (NetReceiveIOV)(NetClientState *, const struct iovec *, int);
 typedef void (NetCleanup) (NetClientState *);
@@ -73,6 +74,7 @@  typedef struct NetClientInfo {
     NetReceiveIOV *receive_iov;
     NetCanReceive *can_receive;
     NetStart *start;
+    NetStop *stop;
     NetCleanup *cleanup;
     LinkStatusChanged *link_status_changed;
     QueryRxFilter *query_rx_filter;
diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
index 2e0baeba26..9d4b334453 100644
--- a/hw/net/vhost_net.c
+++ b/hw/net/vhost_net.c
@@ -320,6 +320,9 @@  static void vhost_net_stop_one(struct vhost_net *net,
         net->nc->info->poll(net->nc, true);
     }
     vhost_dev_stop(&net->dev, dev);
+    if (net->nc->info->stop) {
+        net->nc->info->stop(net->nc);
+    }
     vhost_dev_disable_notifiers(&net->dev, dev);
 }