]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kvm tools: Set correct virtio pci device class code
authorAsias He <asias.hejun@gmail.com>
Thu, 27 Oct 2011 12:47:28 +0000 (20:47 +0800)
committerPekka Enberg <penberg@kernel.org>
Thu, 27 Oct 2011 13:59:50 +0000 (16:59 +0300)
All the virtio pci device is set to class code 0x010000, this is wrong.
This patch sets the correct class code and makes lspci report correct
class type. For example, the net device:

Before:
$ lspci
00:03.0 SCSI storage controller: Red Hat, Inc Virtio network device

After:
$ lspci
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device

Acked-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
tools/kvm/include/kvm/virtio-pci-dev.h
tools/kvm/include/kvm/virtio-pci.h
tools/kvm/virtio/9p.c
tools/kvm/virtio/balloon.c
tools/kvm/virtio/blk.c
tools/kvm/virtio/console.c
tools/kvm/virtio/net.c
tools/kvm/virtio/pci.c
tools/kvm/virtio/rng.c

index bfcb076f793f1b2b2ad05e628151ef671afe0796..e692bddd4c371fc688adf06ce0792dd240888225 100644 (file)
 #define PCI_SUBSYSTEM_ID_VESA                  0x0004
 #define PCI_SUBSYSTEM_ID_PCI_SHMEM             0x0001
 
+#define PCI_CLASS_BLK                          0x018000
+#define PCI_CLASS_NET                          0x020000
+#define PCI_CLASS_CONSOLE                      0x078000
+/*
+ * 0xFF Device does not fit in any defined classes
+ */
+#define PCI_CLASS_RNG                          0xff0000
+#define PCI_CLASS_BLN                          0xff0000
+#define PCI_CLASS_P9                           0xff0000
+
 #endif /* VIRTIO_PCI_DEV_H_ */
index ce44e846c8f5798e405e95d266a31ceaf3481cf0..d6d98df01ad463ce55eb01fb45339b7ef320eefb 100644 (file)
@@ -52,7 +52,7 @@ struct virtio_pci {
 };
 
 int virtio_pci__init(struct kvm *kvm, struct virtio_pci *vpci, void *dev,
-                       int device_id, int subsys_id);
+                       int device_id, int subsys_id, int class);
 int virtio_pci__signal_vq(struct kvm *kvm, struct virtio_pci *vpci, u32 vq);
 int virtio_pci__signal_config(struct kvm *kvm, struct virtio_pci *vpci);
 
index 8dbd016c9d524c4ec1988b77fb4ffcb6e8766c20..1569bb279e9f231c0d19dd80c2001a201a34ab5d 100644 (file)
@@ -1193,7 +1193,7 @@ int virtio_9p__init(struct kvm *kvm)
        struct p9_dev *p9dev;
 
        list_for_each_entry(p9dev, &devs, list) {
-               virtio_pci__init(kvm, &p9dev->vpci, p9dev, PCI_DEVICE_ID_VIRTIO_P9, VIRTIO_ID_9P);
+               virtio_pci__init(kvm, &p9dev->vpci, p9dev, PCI_DEVICE_ID_VIRTIO_P9, VIRTIO_ID_9P, PCI_CLASS_P9);
                p9dev->vpci.ops = (struct virtio_pci_ops) {
                        .set_config             = set_config,
                        .get_config             = get_config,
index 0228686c9df5381df100cd92f33950d37e813e1c..9a52108c1f2b071fdaeb94d3a8f0d658375f3223 100644 (file)
@@ -242,7 +242,7 @@ void virtio_bln__init(struct kvm *kvm)
        bdev.stat_waitfd        = eventfd(0, 0);
        memset(&bdev.config, 0, sizeof(struct virtio_balloon_config));
 
-       virtio_pci__init(kvm, &bdev.vpci, &bdev, PCI_DEVICE_ID_VIRTIO_BLN, VIRTIO_ID_BALLOON);
+       virtio_pci__init(kvm, &bdev.vpci, &bdev, PCI_DEVICE_ID_VIRTIO_BLN, VIRTIO_ID_BALLOON, PCI_CLASS_BLN);
        bdev.vpci.ops = (struct virtio_pci_ops) {
                .set_config             = set_config,
                .get_config             = get_config,
index 86059510c5941020ceea6c270161cb8b2d466821..6ffa75384e7430247469f85da26a4b43c59f2aeb 100644 (file)
@@ -206,7 +206,7 @@ void virtio_blk__init(struct kvm *kvm, struct disk_image *disk)
                },
        };
 
-       virtio_pci__init(kvm, &bdev->vpci, bdev, PCI_DEVICE_ID_VIRTIO_BLK, VIRTIO_ID_BLOCK);
+       virtio_pci__init(kvm, &bdev->vpci, bdev, PCI_DEVICE_ID_VIRTIO_BLK, VIRTIO_ID_BLOCK, PCI_CLASS_BLK);
        bdev->vpci.ops = (struct virtio_pci_ops) {
                .set_config             = set_config,
                .get_config             = get_config,
index 36997bd70b1a504910f372d785d3d2c05aae4db7..f0e4bf8b033e3ef4bdb4d143d391bb8d01176475 100644 (file)
@@ -177,7 +177,7 @@ static int get_size_vq(struct kvm *kvm, void *dev, u32 vq)
 
 void virtio_console__init(struct kvm *kvm)
 {
-       virtio_pci__init(kvm, &cdev.vpci, &cdev, PCI_DEVICE_ID_VIRTIO_CONSOLE, VIRTIO_ID_CONSOLE);
+       virtio_pci__init(kvm, &cdev.vpci, &cdev, PCI_DEVICE_ID_VIRTIO_CONSOLE, VIRTIO_ID_CONSOLE, PCI_CLASS_CONSOLE);
        cdev.vpci.ops = (struct virtio_pci_ops) {
                .set_config             = set_config,
                .get_config             = get_config,
index bfa2c7b4a0f50a5d1ad88f9b5a845713152f249d..1b59972e18fdc8e47df019926f86b13ae7c42e64 100644 (file)
@@ -399,7 +399,7 @@ void virtio_net__init(const struct virtio_net_params *params)
                ndev->ops = &uip_ops;
        }
 
-       virtio_pci__init(kvm, &ndev->vpci, ndev, PCI_DEVICE_ID_VIRTIO_NET, VIRTIO_ID_NET);
+       virtio_pci__init(kvm, &ndev->vpci, ndev, PCI_DEVICE_ID_VIRTIO_NET, VIRTIO_ID_NET, PCI_CLASS_NET);
        ndev->vpci.ops = (struct virtio_pci_ops) {
                .set_config             = set_config,
                .get_config             = get_config,
index 73d55a97a822cbacba26d233031c3e8869b8cb94..fe3f746982732ab407280b3df6c7dda3a37e3bb8 100644 (file)
@@ -256,7 +256,7 @@ int virtio_pci__signal_config(struct kvm *kvm, struct virtio_pci *vpci)
 }
 
 int virtio_pci__init(struct kvm *kvm, struct virtio_pci *vpci, void *dev,
-                       int device_id, int subsys_id)
+                       int device_id, int subsys_id, int class)
 {
        u8 pin, line, ndev;
 
@@ -273,7 +273,7 @@ int virtio_pci__init(struct kvm *kvm, struct virtio_pci *vpci, void *dev,
                .device_id              = device_id,
                .header_type            = PCI_HEADER_TYPE_NORMAL,
                .revision_id            = 0,
-               .class                  = 0x010000,
+               .class                  = class,
                .subsys_vendor_id       = PCI_SUBSYSTEM_VENDOR_ID_REDHAT_QUMRANET,
                .subsys_id              = subsys_id,
                .bar[0]                 = vpci->base_addr | PCI_BASE_ADDRESS_SPACE_IO,
index c7e7f2d296b3f916b4cdc3a16d606e93087ef729..efb94c9284c8530f144bd9b0a02300faf0f6e305 100644 (file)
@@ -150,7 +150,7 @@ void virtio_rng__init(struct kvm *kvm)
        if (rdev->fd < 0)
                die("Failed initializing RNG");
 
-       virtio_pci__init(kvm, &rdev->vpci, rdev, PCI_DEVICE_ID_VIRTIO_RNG, VIRTIO_ID_RNG);
+       virtio_pci__init(kvm, &rdev->vpci, rdev, PCI_DEVICE_ID_VIRTIO_RNG, VIRTIO_ID_RNG, PCI_CLASS_RNG);
        rdev->vpci.ops = (struct virtio_pci_ops) {
                .set_config             = set_config,
                .get_config             = get_config,