]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
drivers/virtio/bus: Add basic support for modern virtio
authorMichalis Pappas <michalis@unikraft.io>
Wed, 20 Sep 2023 16:17:44 +0000 (18:17 +0200)
committerRazvan Deaconescu <razvand@unikraft.io>
Fri, 20 Oct 2023 16:35:55 +0000 (19:35 +0300)
This commit adds the minimum set of changes required for modern virtio
support.

Signed-off-by: Andrei Tudor Topală <topala.andrei@gmail.com>
Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Marco Schlumpp <marco@unikraft.io>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
GitHub-Closes: #1115

drivers/virtio/bus/include/virtio/virtio_bus.h
drivers/virtio/bus/virtio_bus.c

index 1d2c23e7479331435a5fc07ce1d4b9c109eda789..ac916bb7cf277d2dea56324b97d7ce99ad81d67a 100644 (file)
@@ -345,7 +345,12 @@ static inline void virtio_vqueue_release(struct virtio_dev *vdev,
 
 static inline void virtio_dev_drv_up(struct virtio_dev *vdev)
 {
-       virtio_dev_status_update(vdev, VIRTIO_CONFIG_STATUS_DRIVER_OK);
+       __u8 status = VIRTIO_CONFIG_STATUS_ACK |
+                     VIRTIO_CONFIG_STATUS_DRIVER |
+                     VIRTIO_CONFIG_STATUS_FEATURES_OK |
+                     VIRTIO_CONFIG_STATUS_DRIVER_OK;
+
+       virtio_dev_status_update(vdev, status);
 }
 
 #define VIRTIO_BUS_REGISTER_DRIVER(b)  \
index f41c75435eea4b6b16241f2bbfcfde4c885a3388..ef96a5717ad904bf73ef3029b938af562bf05a9b 100644 (file)
@@ -110,15 +110,16 @@ static int virtio_device_reinit(struct virtio_dev *vdev)
        }
        /* Acknowledge the virtio device */
        rc = virtio_dev_status_update(vdev, VIRTIO_CONFIG_STATUS_ACK);
-       if (rc != 0) {
+       if (unlikely(rc)) {
                uk_pr_err("Failed to acknowledge the virtio device %p: %d\n",
                          vdev, rc);
                return rc;
        }
 
        /* Acknowledge the virtio driver */
-       rc = virtio_dev_status_update(vdev, VIRTIO_CONFIG_STATUS_DRIVER);
-       if (rc != 0) {
+       rc = virtio_dev_status_update(vdev, (VIRTIO_CONFIG_STATUS_ACK |
+                                            VIRTIO_CONFIG_STATUS_DRIVER));
+       if (unlikely(rc)) {
                uk_pr_err("Failed to acknowledge the virtio driver %p: %d\n",
                          vdev, rc);
                return rc;