]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
virtio: allow drivers to validate features
authorMichael S. Tsirkin <mst@redhat.com>
Wed, 29 Mar 2017 16:06:20 +0000 (19:06 +0300)
committerSi-Wei Liu <si-wei.liu@oracle.com>
Fri, 15 Sep 2017 18:24:22 +0000 (14:24 -0400)
Some drivers can't support all features in all configurations.  At the
moment we blindly set FEATURES_OK and later FAILED.  Support this better
by adding a callback drivers can use to do some early checks.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
(cherry picked from commit 404123c2db798027e852480ed9c4accef9f1d9e6)

Orabug: 26584452

Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
drivers/virtio/virtio.c
include/linux/virtio.h

index b1877d73fa563d6d48f2d55b7958f02daa8d9ad7..06c4ee0b48b107a8f62342c665f5d07ab305759a 100644 (file)
@@ -228,6 +228,12 @@ static int virtio_dev_probe(struct device *_d)
                if (device_features & (1ULL << i))
                        __virtio_set_bit(dev, i);
 
+       if (drv->validate) {
+               err = drv->validate(dev);
+               if (err)
+                       goto err;
+       }
+
        err = virtio_finalize_features(dev);
        if (err)
                goto err;
index 8f4d4bfa6d46084d8bea6aa3181f7bd7184fc58c..6bd23216453bb5ad614079fab9c74c2a98596e41 100644 (file)
@@ -144,6 +144,7 @@ struct virtio_driver {
        unsigned int feature_table_size;
        const unsigned int *feature_table_legacy;
        unsigned int feature_table_size_legacy;
+       int (*validate)(struct virtio_device *dev);
        int (*probe)(struct virtio_device *dev);
        void (*scan)(struct virtio_device *dev);
        void (*remove)(struct virtio_device *dev);