]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
drivers/virtio: Remove redundant parameter from ops->features_set()
authorMichalis Pappas <michalis@unikraft.io>
Wed, 20 Sep 2023 15:24:13 +0000 (17:24 +0200)
committerRazvan Deaconescu <razvand@unikraft.io>
Fri, 20 Oct 2023 16:35:55 +0000 (19:35 +0300)
Remove the `features` parameter from ops->features_set() as the vdev
parameter already provides access to the features.

Update `vdev->features` with the features supported by virtio-ring.

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

drivers/virtio/9p/virtio_9p.c
drivers/virtio/blk/virtio_blk.c
drivers/virtio/bus/include/virtio/virtio_bus.h
drivers/virtio/mmio/virtio_mmio.c
drivers/virtio/net/virtio_net.c
drivers/virtio/pci/virtio_pci.c

index d4e9afe7e7a94e30c6ce759f341bed8d1f22bb78..228261bf5bb86063f7e9b7abf6d14dc83685eeea 100644 (file)
@@ -371,7 +371,8 @@ static int virtio_9p_feature_negotiate(struct virtio_9p_device *d)
        d->tag[tag_len] = '\0';
 
        d->vdev->features &= host_features;
-       virtio_feature_set(d->vdev, d->vdev->features);
+       virtio_feature_set(d->vdev);
+
        return 0;
 
 free_mem:
index ad9413f12387e336ab929d698a4f9b2dea193c1a..df5163459d74dd1a0b64cf976fb0a794c10c6d9a 100644 (file)
@@ -874,7 +874,7 @@ static int virtio_blkdev_feature_negotiate(struct virtio_blk_device *vbdev)
         * Mask out features supported by both driver and device.
         */
        vbdev->vdev->features &= host_features;
-       virtio_feature_set(vbdev->vdev, vbdev->vdev->features);
+       virtio_feature_set(vbdev->vdev);
 
 exit:
        return rc;
index 447f7e9c639a36e89d5d1b87eed73de805184827..1d2c23e7479331435a5fc07ce1d4b9c109eda789 100644 (file)
@@ -101,7 +101,7 @@ struct virtio_config_ops {
        /** Get the feature */
        __u64 (*features_get)(struct virtio_dev *vdev);
        /** Set the feature */
-       void (*features_set)(struct virtio_dev *vdev, __u64 features);
+       void (*features_set)(struct virtio_dev *vdev);
        /** Get and Set Status */
        __u8 (*status_get)(struct virtio_dev *vdev);
        void (*status_set)(struct virtio_dev *vdev, __u8 status);
@@ -222,17 +222,15 @@ static inline __u64 virtio_feature_get(struct virtio_dev *vdev)
 
 /**
  * The function to set the negotiated features.
- * @param vdev
- *     Reference to the virtio device.
- * @param feature
- *     A bit map of the feature negotiated.
+ *
+ * @param vdev Reference to the virtio device.
  */
-static inline void virtio_feature_set(struct virtio_dev *vdev, __u32 feature)
+static inline void virtio_feature_set(struct virtio_dev *vdev)
 {
        UK_ASSERT(vdev);
 
        if (likely(vdev->cops->features_set))
-               vdev->cops->features_set(vdev, feature);
+               vdev->cops->features_set(vdev);
 }
 
 /**
index 6b006bc94c0ef2bf3d98acbed81d8e51650bb55f..db1eff11b094caf4a8380a227b7fb91de60c9ef6 100644 (file)
@@ -100,28 +100,31 @@ static __u64 vm_get_features(struct virtio_dev *vdev)
        return features;
 }
 
-static void vm_set_features(struct virtio_dev *vdev,
-                                        __u64 features)
+static void vm_set_features(struct virtio_dev *vdev)
 {
-       struct virtio_mmio_device *vm_dev = to_virtio_mmio_device(vdev);
+       struct virtio_mmio_device *vm_dev;
+
+       UK_ASSERT(vdev);
+
+       vm_dev = to_virtio_mmio_device(vdev);
 
        /* Give virtio_ring a chance to accept features. */
-       virtqueue_feature_negotiate(features);
+       vdev->features = virtqueue_feature_negotiate(vdev->features);
 
        /* Make sure there are no mixed devices */
        if (vm_dev->version == 2 &&
-               !uk_test_bit(VIRTIO_F_VERSION_1, &vdev->features)) {
-               uk_pr_err("New virtio-mmio devices (version 2) must provide VIRTIO_F_VERSION_1 feature!\n");
+           !uk_test_bit(VIRTIO_F_VERSION_1, &vdev->features)) {
+               uk_pr_err("Modern virtio devices must set VIRTIO_F_VERSION_1\n");
                return;
        }
 
        virtio_cwrite32(vm_dev->base, VIRTIO_MMIO_DRIVER_FEATURES_SEL, 1);
        virtio_cwrite32(vm_dev->base, VIRTIO_MMIO_DRIVER_FEATURES,
-                                               (__u32)(vdev->features >> 32));
+                       (__u32)(vdev->features >> 32));
 
        virtio_cwrite32(vm_dev->base, VIRTIO_MMIO_DRIVER_FEATURES_SEL, 0);
        virtio_cwrite32(vm_dev->base, VIRTIO_MMIO_DRIVER_FEATURES,
-                                               (__u32)vdev->features);
+                       (__u32)vdev->features);
 }
 
 static int vm_get(struct virtio_dev *vdev, __u16 offset,
index ab93f79a1f2b06db33ad503b6432aa5f1ee91221..d036805b5a0518eb8236b6e1c16dc8b0f0a5758d 100644 (file)
@@ -942,7 +942,7 @@ static int virtio_netdev_feature_negotiate(struct uk_netdev *n)
         * Announce our enabled driver features back to the backend device
         */
        vndev->vdev->features = drv_features;
-       virtio_feature_set(vndev->vdev, vndev->vdev->features);
+       virtio_feature_set(vndev->vdev);
 
        /**
         * According to Virtio specification, section 2.3.1. Config fields
index e47e0f60589b0b6e8b4c4b5bd8ff15190d9d7fb5..9de6da71c901b97d82cca4478b722a9c993ca37d 100644 (file)
@@ -79,8 +79,7 @@ static int vpci_legacy_pci_config_set(struct virtio_dev *vdev, __u16 offset,
 static int vpci_legacy_pci_config_get(struct virtio_dev *vdev, __u16 offset,
                                      void *buf, __u32 len, __u8 type_len);
 static __u64 vpci_legacy_pci_features_get(struct virtio_dev *vdev);
-static void vpci_legacy_pci_features_set(struct virtio_dev *vdev,
-                                        __u64 features);
+static void vpci_legacy_pci_features_set(struct virtio_dev *vdev);
 static int vpci_legacy_pci_vq_find(struct virtio_dev *vdev, __u16 num_vq,
                                   __u16 *qdesc_size);
 static void vpci_legacy_pci_status_set(struct virtio_dev *vdev, __u8 status);
@@ -353,17 +352,19 @@ static __u64 vpci_legacy_pci_features_get(struct virtio_dev *vdev)
        return features;
 }
 
-static void vpci_legacy_pci_features_set(struct virtio_dev *vdev,
-                                        __u64 features)
+static void vpci_legacy_pci_features_set(struct virtio_dev *vdev)
 {
        struct virtio_pci_dev *vpdev = NULL;
 
        UK_ASSERT(vdev);
+
        vpdev = to_virtiopcidev(vdev);
+
        /* Mask out features not supported by the virtqueue driver */
-       features = virtqueue_feature_negotiate(features);
+       vdev->features = virtqueue_feature_negotiate(vdev->features);
+
        virtio_cwrite32((void *) (unsigned long)vpdev->pci_base_addr,
-                       VIRTIO_PCI_GUEST_FEATURES, (__u32)features);
+                       VIRTIO_PCI_GUEST_FEATURES, (__u32)vdev->features);
 }
 
 static int virtio_pci_legacy_add_dev(struct pci_device *pci_dev,