This patch introduces a helper virtio_compat_add_message() to simplify
adding compat message for virtio device.

Signed-off-by: Asias He <asias.he...@gmail.com>
---
 tools/kvm/include/kvm/virtio.h |    1 +
 tools/kvm/virtio/9p.c          |    7 +------
 tools/kvm/virtio/balloon.c     |    7 +------
 tools/kvm/virtio/blk.c         |    7 +------
 tools/kvm/virtio/console.c     |    7 +------
 tools/kvm/virtio/core.c        |   33 +++++++++++++++++++++++++++++++++
 tools/kvm/virtio/net.c         |    7 +------
 tools/kvm/virtio/rng.c         |    7 +------
 8 files changed, 40 insertions(+), 36 deletions(-)

diff --git a/tools/kvm/include/kvm/virtio.h b/tools/kvm/include/kvm/virtio.h
index 68eff15..a957a5b 100644
--- a/tools/kvm/include/kvm/virtio.h
+++ b/tools/kvm/include/kvm/virtio.h
@@ -98,4 +98,5 @@ struct virtio_ops {
 int virtio_init(struct kvm *kvm, void *dev, struct virtio_device *vdev,
                struct virtio_ops *ops, enum virtio_trans trans,
                int device_id, int subsys_id, int class);
+int virtio_compat_add_message(const char *device, const char *config);
 #endif /* KVM__VIRTIO_H */
diff --git a/tools/kvm/virtio/9p.c b/tools/kvm/virtio/9p.c
index 4108e02..b388d66 100644
--- a/tools/kvm/virtio/9p.c
+++ b/tools/kvm/virtio/9p.c
@@ -1313,12 +1313,7 @@ int virtio_9p__register(struct kvm *kvm, const char 
*root, const char *tag_name)
        list_add(&p9dev->list, &devs);
 
        if (compat_id != -1)
-               compat_id = compat__add_message("virtio-9p device was not 
detected",
-                                               "While you have requested a 
virtio-9p device, "
-                                               "the guest kernel did not 
initialize it.\n"
-                                               "Please make sure that the 
guest kernel was "
-                                               "compiled with 
CONFIG_NET_9P_VIRTIO=y enabled "
-                                               "in its .config");
+               compat_id = virtio_compat_add_message("virtio-9p", 
"CONFIG_NET_9P_VIRTIO");
 
        return err;
 
diff --git a/tools/kvm/virtio/balloon.c b/tools/kvm/virtio/balloon.c
index 9f1d9bd..e442714 100644
--- a/tools/kvm/virtio/balloon.c
+++ b/tools/kvm/virtio/balloon.c
@@ -263,10 +263,5 @@ void virtio_bln__init(struct kvm *kvm)
                    VIRTIO_PCI, PCI_DEVICE_ID_VIRTIO_BLN, VIRTIO_ID_BALLOON, 
PCI_CLASS_BLN);
 
        if (compat_id != -1)
-               compat_id = compat__add_message("virtio-balloon device was not 
detected",
-                                               "While you have requested a 
virtio-balloon device, "
-                                               "the guest kernel did not 
initialize it.\n"
-                                               "Please make sure that the 
guest kernel was "
-                                               "compiled with 
CONFIG_VIRTIO_BALLOON=y enabled "
-                                               "in its .config");
+               compat_id = virtio_compat_add_message("virtio-balloon", 
"CONFIG_VIRTIO_BALLOON");
 }
diff --git a/tools/kvm/virtio/blk.c b/tools/kvm/virtio/blk.c
index 9256646..55ce26f 100644
--- a/tools/kvm/virtio/blk.c
+++ b/tools/kvm/virtio/blk.c
@@ -250,12 +250,7 @@ static int virtio_blk__init_one(struct kvm *kvm, struct 
disk_image *disk)
        disk_image__set_callback(bdev->disk, virtio_blk_complete);
 
        if (compat_id != -1)
-               compat_id = compat__add_message("virtio-blk device was not 
detected",
-                                               "While you have requested a 
virtio-blk device, "
-                                               "the guest kernel did not 
initialize it.\n"
-                                               "Please make sure that the 
guest kernel was "
-                                               "compiled with 
CONFIG_VIRTIO_BLK=y enabled "
-                                               "in its .config");
+               compat_id = virtio_compat_add_message("virtio-blk", 
"CONFIG_VIRTIO_BLK");
        return 0;
 }
 
diff --git a/tools/kvm/virtio/console.c b/tools/kvm/virtio/console.c
index 42472eb..3493905 100644
--- a/tools/kvm/virtio/console.c
+++ b/tools/kvm/virtio/console.c
@@ -189,10 +189,5 @@ void virtio_console__init(struct kvm *kvm)
        virtio_init(kvm, &cdev, &cdev.vdev, &con_dev_virtio_ops,
                    VIRTIO_PCI, PCI_DEVICE_ID_VIRTIO_CONSOLE, 
VIRTIO_ID_CONSOLE, PCI_CLASS_CONSOLE);
        if (compat_id != -1)
-               compat_id = compat__add_message("virtio-console device was not 
detected",
-                                               "While you have requested a 
virtio-console device, "
-                                               "the guest kernel did not 
initialize it.\n"
-                                               "Please make sure that the 
guest kernel was "
-                                               "compiled with 
CONFIG_VIRTIO_CONSOLE=y enabled "
-                                               "in its .config");
+               compat_id = virtio_compat_add_message("virtio-console", 
"CONFIG_VIRTIO_CONSOLE");
 }
diff --git a/tools/kvm/virtio/core.c b/tools/kvm/virtio/core.c
index da27492..8e0f63b 100644
--- a/tools/kvm/virtio/core.c
+++ b/tools/kvm/virtio/core.c
@@ -3,6 +3,7 @@
 #include <sys/uio.h>
 #include <stdlib.h>
 
+#include "kvm/guest_compat.h"
 #include "kvm/barrier.h"
 #include "kvm/virtio.h"
 #include "kvm/virtio-pci.h"
@@ -198,3 +199,35 @@ int virtio_init(struct kvm *kvm, void *dev, struct 
virtio_device *vdev,
 
        return 0;
 }
+
+int virtio_compat_add_message(const char *device, const char *config)
+{
+       int len = 1024;
+       int compat_id;
+       char *title;
+       char *desc;
+
+       title = malloc(len);
+       if (!title)
+               return -ENOMEM;
+
+       desc = malloc(len);
+       if (!desc) {
+               free(title);
+               return -ENOMEM;
+       }
+
+       snprintf(title, len, "%s device was not detected", device);
+       snprintf(desc,  len, "While you have requested a %s device, "
+                            "the guest kernel did not initialize it.\n"
+                            "Please make sure that the guest kernel was "
+                            "compiled with %s=y enabled in its .config",
+                            device, config);
+
+       compat_id = compat__add_message(title, desc);
+
+       free(desc);
+       free(title);
+
+       return compat_id;
+}
diff --git a/tools/kvm/virtio/net.c b/tools/kvm/virtio/net.c
index 50bef74..da44198 100644
--- a/tools/kvm/virtio/net.c
+++ b/tools/kvm/virtio/net.c
@@ -548,10 +548,5 @@ void virtio_net__init(const struct virtio_net_params 
*params)
                virtio_net__io_thread_init(params->kvm, ndev);
 
        if (compat_id != -1)
-               compat_id = compat__add_message("virtio-net device was not 
detected",
-                                               "While you have requested a 
virtio-net device, "
-                                               "the guest kernel did not 
initialize it.\n"
-                                               "Please make sure that the 
guest kernel was "
-                                               "compiled with 
CONFIG_VIRTIO_NET=y enabled "
-                                               "in its .config");
+               compat_id = virtio_compat_add_message("virtio-net", 
"CONFIG_VIRTIO_NET");
 }
diff --git a/tools/kvm/virtio/rng.c b/tools/kvm/virtio/rng.c
index 105a429..202104c 100644
--- a/tools/kvm/virtio/rng.c
+++ b/tools/kvm/virtio/rng.c
@@ -171,12 +171,7 @@ int virtio_rng__init(struct kvm *kvm)
        list_add_tail(&rdev->list, &rdevs);
 
        if (compat_id != -1)
-               compat_id = compat__add_message("virtio-rng device was not 
detected",
-                                               "While you have requested a 
virtio-rng device, "
-                                               "the guest kernel did not 
initialize it.\n"
-                                               "Please make sure that the 
guest kernel was "
-                                               "compiled with 
CONFIG_HW_RANDOM_VIRTIO=y enabled "
-                                               "in its .config");
+               compat_id = virtio_compat_add_message("virtio-rng", 
"CONFIG_HW_RANDOM_VIRTIO");
        return 0;
 cleanup:
        close(rdev->fd);
-- 
1.7.10.2

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to