Signed-off-by: Gregory Haskins <[EMAIL PROTECTED]>
---

 qemu/qemu-kvm.c |   27 +++++++++++++++++++++++++++
 qemu/qemu-kvm.h |    5 +++++
 qemu/vl.c       |   10 ++++++++++
 qemu/vl.h       |    1 +
 4 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c
index f13db08..106772b 100644
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -10,6 +10,17 @@
 
 int kvm_allowed = KVM_ALLOWED_DEFAULT;
 
+struct kvm_apic
+{
+    int user_specified;
+    int level;
+};
+
+struct kvm_apic kvm_apic = {
+    .user_specified = 0,
+    .level = 1,
+};
+
 #ifdef USE_KVM
 
 #include "exec.h"
@@ -927,4 +938,20 @@ int kvm_get_phys_ram_page_bitmap(unsigned char *bitmap)
  out:
     return r;
 }
+
+int kvm_qemu_set_apic_level(int level)
+{
+    if (level < 0 || level > 1)
+       return -1;
+
+    kvm_apic.user_specified = 1;
+    kvm_apic.level = level;
+    return 0;
+}
+
+int kvm_qemu_get_apic_level(void)
+{
+    return kvm_apic.level;
+}
+
 #endif
diff --git a/qemu/qemu-kvm.h b/qemu/qemu-kvm.h
index 8a1c25d..c4cb34e 100644
--- a/qemu/qemu-kvm.h
+++ b/qemu/qemu-kvm.h
@@ -3,6 +3,8 @@
 
 #include "kvmctl.h"
 
+
+
 int kvm_qemu_init(void);
 int kvm_qemu_create_context(void);
 void kvm_qemu_destroy(void);
@@ -16,6 +18,9 @@ int kvm_physical_memory_set_dirty_tracking(int enable);
 int kvm_update_dirty_pages_log(void);
 int kvm_get_phys_ram_page_bitmap(unsigned char *bitmap);
 
+int kvm_qemu_set_apic_level(int level);
+int kvm_qemu_get_apic_level(void);
+
 #define ALIGN(x, y)  (((x)+(y)-1) & ~((y)-1))
 #define BITMAP_SIZE(m) (ALIGN(((m)>>TARGET_PAGE_BITS), HOST_LONG_BITS) / 8)
 #endif
diff --git a/qemu/vl.c b/qemu/vl.c
index 7df1c80..4bf61e8 100644
--- a/qemu/vl.c
+++ b/qemu/vl.c
@@ -6531,6 +6531,7 @@ enum {
     QEMU_OPTION_vnc,
     QEMU_OPTION_no_acpi,
     QEMU_OPTION_no_kvm,
+    QEMU_OPTION_kvm_apic,
     QEMU_OPTION_no_reboot,
     QEMU_OPTION_daemonize,
     QEMU_OPTION_option_rom,
@@ -6600,6 +6601,7 @@ const QEMUOption qemu_options[] = {
 #endif
 #ifdef USE_KVM
     { "no-kvm", 0, QEMU_OPTION_no_kvm },
+    { "kvm_apic", HAS_ARG, QEMU_OPTION_kvm_apic },
 #endif
 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
     { "g", 1, QEMU_OPTION_g },
@@ -7309,6 +7311,14 @@ int main(int argc, char **argv)
            case QEMU_OPTION_no_kvm:
                kvm_allowed = 0;
                break;
+           case QEMU_OPTION_kvm_apic:
+               if (kvm_qemu_set_apic_level(atoi(optarg)) < 0) {
+                   fprintf(stderr, "kvm_apic = %d is not supported by " \
+                           "userspace\n", atoi(optarg));
+                   exit(1);
+               }
+                       
+               break;
 #endif
             case QEMU_OPTION_usb:
                 usb_enabled = 1;
diff --git a/qemu/vl.h b/qemu/vl.h
index debd17c..4e93a81 100644
--- a/qemu/vl.h
+++ b/qemu/vl.h
@@ -158,6 +158,7 @@ extern int graphic_depth;
 extern const char *keyboard_layout;
 extern int kqemu_allowed;
 extern int kvm_allowed;
+extern struct kvm_apic kvm_apic;
 extern int win2k_install_hack;
 extern int usb_enabled;
 extern int smp_cpus;


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to