aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2014-02-04 16:54:05 +0000
committerWill Deacon <will.deacon@arm.com>2015-06-01 16:39:55 +0100
commitd97dadecbd7744cd7fc1cac470e09a22b0a7ebef (patch)
treebc758fa0ee9419a43893122f92fb10f6b274ac65
parent6606883c7d50b8eaa119459ee6a0a8b1698fc563 (diff)
downloadkvmtool-d97dadecbd7744cd7fc1cac470e09a22b0a7ebef.tar.gz
kvm tools: ARM: allow default virtio transport to be passed on cmdline
This patch changes VIRTIO_DEFAULT_TRANS to take a struct kvm parameter, allowing architectures to choose the default transport dynamically. For ARM, this is driven by an arch-specific cmdline option. Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--arm/include/arm-common/kvm-arch.h3
-rw-r--r--arm/include/arm-common/kvm-config-arch.h12
-rw-r--r--powerpc/include/kvm/kvm-arch.h2
-rw-r--r--virtio/9p.c2
-rw-r--r--virtio/balloon.c2
-rw-r--r--virtio/blk.c2
-rw-r--r--virtio/console.c2
-rw-r--r--virtio/rng.c2
-rw-r--r--virtio/scsi.c2
-rw-r--r--x86/include/kvm/kvm-arch.h2
10 files changed, 18 insertions, 13 deletions
diff --git a/arm/include/arm-common/kvm-arch.h b/arm/include/arm-common/kvm-arch.h
index 8adfcd49..b6c4bf8d 100644
--- a/arm/include/arm-common/kvm-arch.h
+++ b/arm/include/arm-common/kvm-arch.h
@@ -32,7 +32,8 @@
#define KVM_IRQ_OFFSET GIC_SPI_IRQ_BASE
-#define VIRTIO_DEFAULT_TRANS VIRTIO_MMIO
+#define VIRTIO_DEFAULT_TRANS(kvm) \
+ ((kvm)->cfg.arch.virtio_trans_pci ? VIRTIO_PCI : VIRTIO_MMIO)
static inline bool arm_addr_in_ioport_region(u64 phys_addr)
{
diff --git a/arm/include/arm-common/kvm-config-arch.h b/arm/include/arm-common/kvm-config-arch.h
index f3baf392..a8ebd94a 100644
--- a/arm/include/arm-common/kvm-config-arch.h
+++ b/arm/include/arm-common/kvm-config-arch.h
@@ -4,9 +4,10 @@
#include "kvm/parse-options.h"
struct kvm_config_arch {
- const char *dump_dtb_filename;
- unsigned int force_cntfrq;
- bool aarch32_guest;
+ const char *dump_dtb_filename;
+ unsigned int force_cntfrq;
+ bool virtio_trans_pci;
+ bool aarch32_guest;
};
#define OPT_ARCH_RUN(pfx, cfg) \
@@ -17,6 +18,9 @@ struct kvm_config_arch {
OPT_UINTEGER('\0', "override-bad-firmware-cntfrq", &(cfg)->force_cntfrq,\
"Specify Generic Timer frequency in guest DT to " \
"work around buggy secure firmware *Firmware should be " \
- "updated to program CNTFRQ correctly*"),
+ "updated to program CNTFRQ correctly*"), \
+ OPT_BOOLEAN('\0', "force-pci", &(cfg)->virtio_trans_pci, \
+ "Force virtio devices to use PCI as their default " \
+ "transport"),
#endif /* ARM_COMMON__KVM_CONFIG_ARCH_H */
diff --git a/powerpc/include/kvm/kvm-arch.h b/powerpc/include/kvm/kvm-arch.h
index d2b52bf0..f8627a2a 100644
--- a/powerpc/include/kvm/kvm-arch.h
+++ b/powerpc/include/kvm/kvm-arch.h
@@ -44,7 +44,7 @@
#define KVM_IRQ_OFFSET 16
-#define VIRTIO_DEFAULT_TRANS VIRTIO_PCI
+#define VIRTIO_DEFAULT_TRANS(kvm) VIRTIO_PCI
struct spapr_phb;
diff --git a/virtio/9p.c b/virtio/9p.c
index 127b13af..25cdd8c2 100644
--- a/virtio/9p.c
+++ b/virtio/9p.c
@@ -1392,7 +1392,7 @@ int virtio_9p__init(struct kvm *kvm)
list_for_each_entry(p9dev, &devs, list) {
virtio_init(kvm, p9dev, &p9dev->vdev, &p9_dev_virtio_ops,
- VIRTIO_DEFAULT_TRANS, PCI_DEVICE_ID_VIRTIO_9P,
+ VIRTIO_DEFAULT_TRANS(kvm), PCI_DEVICE_ID_VIRTIO_9P,
VIRTIO_ID_9P, PCI_CLASS_9P);
}
diff --git a/virtio/balloon.c b/virtio/balloon.c
index 48635358..f7dfb0be 100644
--- a/virtio/balloon.c
+++ b/virtio/balloon.c
@@ -262,7 +262,7 @@ int virtio_bln__init(struct kvm *kvm)
memset(&bdev.config, 0, sizeof(struct virtio_balloon_config));
virtio_init(kvm, &bdev, &bdev.vdev, &bln_dev_virtio_ops,
- VIRTIO_DEFAULT_TRANS, PCI_DEVICE_ID_VIRTIO_BLN,
+ VIRTIO_DEFAULT_TRANS(kvm), PCI_DEVICE_ID_VIRTIO_BLN,
VIRTIO_ID_BALLOON, PCI_CLASS_BLN);
if (compat_id == -1)
diff --git a/virtio/blk.c b/virtio/blk.c
index ab187167..4bed3a97 100644
--- a/virtio/blk.c
+++ b/virtio/blk.c
@@ -260,7 +260,7 @@ static int virtio_blk__init_one(struct kvm *kvm, struct disk_image *disk)
};
virtio_init(kvm, bdev, &bdev->vdev, &blk_dev_virtio_ops,
- VIRTIO_DEFAULT_TRANS, PCI_DEVICE_ID_VIRTIO_BLK,
+ VIRTIO_DEFAULT_TRANS(kvm), PCI_DEVICE_ID_VIRTIO_BLK,
VIRTIO_ID_BLOCK, PCI_CLASS_BLK);
list_add_tail(&bdev->list, &bdevs);
diff --git a/virtio/console.c b/virtio/console.c
index f982dab7..0474e2b0 100644
--- a/virtio/console.c
+++ b/virtio/console.c
@@ -210,7 +210,7 @@ int virtio_console__init(struct kvm *kvm)
pthread_cond_init(&cdev.poll_cond, NULL);
virtio_init(kvm, &cdev, &cdev.vdev, &con_dev_virtio_ops,
- VIRTIO_DEFAULT_TRANS, PCI_DEVICE_ID_VIRTIO_CONSOLE,
+ VIRTIO_DEFAULT_TRANS(kvm), PCI_DEVICE_ID_VIRTIO_CONSOLE,
VIRTIO_ID_CONSOLE, PCI_CLASS_CONSOLE);
if (compat_id == -1)
compat_id = virtio_compat_add_message("virtio-console", "CONFIG_VIRTIO_CONSOLE");
diff --git a/virtio/rng.c b/virtio/rng.c
index 394de710..8031368a 100644
--- a/virtio/rng.c
+++ b/virtio/rng.c
@@ -171,7 +171,7 @@ int virtio_rng__init(struct kvm *kvm)
}
r = virtio_init(kvm, rdev, &rdev->vdev, &rng_dev_virtio_ops,
- VIRTIO_DEFAULT_TRANS, PCI_DEVICE_ID_VIRTIO_RNG,
+ VIRTIO_DEFAULT_TRANS(kvm), PCI_DEVICE_ID_VIRTIO_RNG,
VIRTIO_ID_RNG, PCI_CLASS_RNG);
if (r < 0)
goto cleanup;
diff --git a/virtio/scsi.c b/virtio/scsi.c
index 8da24209..be254f30 100644
--- a/virtio/scsi.c
+++ b/virtio/scsi.c
@@ -252,7 +252,7 @@ static int virtio_scsi_init_one(struct kvm *kvm, struct disk_image *disk)
sdev->target.vhost_tpgt = strtol(disk->tpgt, NULL, 0);
virtio_init(kvm, sdev, &sdev->vdev, &scsi_dev_virtio_ops,
- VIRTIO_DEFAULT_TRANS, PCI_DEVICE_ID_VIRTIO_SCSI,
+ VIRTIO_DEFAULT_TRANS(kvm), PCI_DEVICE_ID_VIRTIO_SCSI,
VIRTIO_ID_SCSI, PCI_CLASS_BLK);
list_add_tail(&sdev->list, &sdevs);
diff --git a/x86/include/kvm/kvm-arch.h b/x86/include/kvm/kvm-arch.h
index 29953a76..a9f23b81 100644
--- a/x86/include/kvm/kvm-arch.h
+++ b/x86/include/kvm/kvm-arch.h
@@ -27,7 +27,7 @@
#define KVM_IRQ_OFFSET 5
-#define VIRTIO_DEFAULT_TRANS VIRTIO_PCI
+#define VIRTIO_DEFAULT_TRANS(kvm) VIRTIO_PCI
struct kvm_arch {
u16 boot_selector;