kvm: libkvm: export a new function to disable irqchip creation
Signed-off-by: Qing He <[EMAIL PROTECTED]>
Signed-off-by: Yaozu (Eddie) Dong <[EMAIL PROTECTED]>
---
user/kvmctl.c | 25 ++++++++++++++++++-------
user/kvmctl.h | 10 ++++++++++
2 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/user/kvmctl.c b/user/kvmctl.c
index 8038245..f79d935 100644
--- a/user/kvmctl.c
+++ b/user/kvmctl.c
@@ -66,6 +66,9 @@ struct kvm_context {
int dirty_pages_log_all;
/// memory regions parameters
struct kvm_memory_region mem_regions[KVM_MAX_NUM_MEM_REGIONS];
+ /// do not create in-kernel irqchip if set
+ int no_irqchip_creation;
+ /// in-kernel irqchip status
int irqchip_in_kernel;
};
@@ -187,6 +190,7 @@ kvm_context_t kvm_init(struct kvm_callbacks
*callbacks,
kvm->callbacks = callbacks;
kvm->opaque = opaque;
kvm->dirty_pages_log_all = 0;
+ kvm->no_irqchip_creation = 0;
memset(&kvm->mem_regions, 0, sizeof(kvm->mem_regions));
return kvm;
@@ -205,6 +209,11 @@ void kvm_finalize(kvm_context_t kvm)
free(kvm);
}
+void kvm_disable_irqchip_creation(kvm_context_t kvm)
+{
+ kvm->no_irqchip_creation = 1;
+}
+
int kvm_create_vcpu(kvm_context_t kvm, int slot)
{
long mmap_size;
@@ -290,13 +299,15 @@ int kvm_create(kvm_context_t kvm, unsigned long
memory, void **vm_mem)
close(zfd);
kvm->irqchip_in_kernel = 0;
- r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_IRQCHIP);
- if (r > 0) { /* kernel irqchip supported */
- r = ioctl(fd, KVM_CREATE_IRQCHIP);
- if (r >= 0)
- kvm->irqchip_in_kernel = 1;
- else
- printf("Create kernel PIC irqchip failed\n");
+ if (!kvm->no_irqchip_creation) {
+ r = ioctl(kvm->fd, KVM_CHECK_EXTENSION,
KVM_CAP_IRQCHIP);
+ if (r > 0) { /* kernel irqchip supported */
+ r = ioctl(fd, KVM_CREATE_IRQCHIP);
+ if (r >= 0)
+ kvm->irqchip_in_kernel = 1;
+ else
+ printf("Create kernel PIC irqchip
failed\n");
+ }
}
r = kvm_create_vcpu(kvm, 0);
if (r < 0)
diff --git a/user/kvmctl.h b/user/kvmctl.h
index 6fecd56..608ee14 100644
--- a/user/kvmctl.h
+++ b/user/kvmctl.h
@@ -94,6 +94,16 @@ kvm_context_t kvm_init(struct kvm_callbacks
*callbacks,
void kvm_finalize(kvm_context_t kvm);
/*!
+ * \brief Disable the in-kernel IRQCHIP creation
+ *
+ * In-kernel irqchip is enabled by default. If userspace irqchip is to
be used,
+ * this should be called prior to kvm_create().
+ *
+ * \param kvm Pointer to the kvm_context
+ */
+void kvm_disable_irqchip_creation(kvm_context_t kvm);
+
+/*!
* \brief Create new virtual machine
*
* This creates a new virtual machine, maps physical RAM to it, and
creates a
kvm-libkvm-no-irqchip-creation.patch
Description: kvm-libkvm-no-irqchip-creation.patch
------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________ kvm-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/kvm-devel
