qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 11/18] virtio: Add "needs_reset" flag to virtio devi


From: Fam Zheng
Subject: [Qemu-devel] [PATCH 11/18] virtio: Add "needs_reset" flag to virtio device
Date: Fri, 17 Apr 2015 15:59:26 +0800

Signed-off-by: Fam Zheng <address@hidden>
---
 hw/virtio/virtio.c         | 18 ++++++++++++++++++
 include/hw/virtio/virtio.h |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 6dfa181..7ff0dc4 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -623,6 +623,10 @@ void virtio_set_status(VirtIODevice *vdev, uint8_t val)
     VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
     trace_virtio_set_status(vdev, val);
 
+    if (val) {
+        /* Unsetting NEED_RESET bit without reset is ignored. */
+        val |= (vdev->status & VIRTIO_CONFIG_S_NEEDS_RESET);
+    }
     if (k->set_status) {
         k->set_status(vdev, val);
     }
@@ -1384,6 +1388,20 @@ static void virtio_device_realize(DeviceState *dev, 
Error **errp)
     virtio_bus_device_plugged(vdev);
 }
 
+void virtio_device_set_needs_reset(VirtIODevice *vdev)
+{
+    if (vdev->status & VIRTIO_CONFIG_S_NEEDS_RESET) {
+        return;
+    }
+    vdev->status |= VIRTIO_CONFIG_S_NEEDS_RESET;
+    virtio_notify_config(vdev);
+}
+
+bool virtio_device_needs_reset(VirtIODevice *vdev)
+{
+    return vdev->status & VIRTIO_CONFIG_S_NEEDS_RESET;
+}
+
 static void virtio_device_unrealize(DeviceState *dev, Error **errp)
 {
     VirtIODevice *vdev = VIRTIO_DEVICE(dev);
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 52e2b1c..71d98a3 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -131,6 +131,8 @@ VirtQueue *virtio_add_queue(VirtIODevice *vdev, int 
queue_size,
                             void (*handle_output)(VirtIODevice *,
                                                   VirtQueue *),
                             Error **errp);
+void virtio_device_set_needs_reset(VirtIODevice *vdev);
+bool virtio_device_needs_reset(VirtIODevice *vdev);
 
 void virtio_del_queue(VirtIODevice *vdev, int n, Error **errp);
 
-- 
1.9.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]