All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch 0/2] QEMU/KVM: PIT no interrupt reinjection support
@ 2008-12-29 17:42 Marcelo Tosatti
  2008-12-29 17:42 ` [patch 1/2] libkvm: pit not reinject support Marcelo Tosatti
  2008-12-29 17:42 ` [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection Marcelo Tosatti
  0 siblings, 2 replies; 7+ messages in thread
From: Marcelo Tosatti @ 2008-12-29 17:42 UTC (permalink / raw)
  To: kvm; +Cc: avi, sheng

Userspace support for KVM_PIT_NO_REINJECT.

-- 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 1/2] libkvm: pit not reinject support
  2008-12-29 17:42 [patch 0/2] QEMU/KVM: PIT no interrupt reinjection support Marcelo Tosatti
@ 2008-12-29 17:42 ` Marcelo Tosatti
  2008-12-30 10:09   ` Avi Kivity
  2008-12-29 17:42 ` [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection Marcelo Tosatti
  1 sibling, 1 reply; 7+ messages in thread
From: Marcelo Tosatti @ 2008-12-29 17:42 UTC (permalink / raw)
  To: kvm; +Cc: avi, sheng, Marcelo Tosatti

[-- Attachment #1: libkvm-pit-no-reinject --]
[-- Type: text/plain, Size: 1064 bytes --]

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

Index: kvm-userspace.pit/libkvm/libkvm-x86.c
===================================================================
--- kvm-userspace.pit.orig/libkvm/libkvm-x86.c
+++ kvm-userspace.pit/libkvm/libkvm-x86.c
@@ -75,6 +75,20 @@ int kvm_create_pit(kvm_context_t kvm)
 	return 0;
 }
 
+int kvm_pit_no_reinjection(kvm_context_t kvm)
+{
+#ifdef KVM_CAP_PIT_NO_REINJECT
+    int r;
+
+    r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_PIT_NO_REINJECT);
+    if (r > 0) {
+        r = ioctl(kvm->vm_fd, KVM_PIT_NO_REINJECT);
+        return r;
+    }
+#endif
+    return -1;
+}
+
 int kvm_arch_create(kvm_context_t kvm, unsigned long phys_mem_bytes,
  			void **vm_mem)
 {
Index: kvm-userspace.pit/libkvm/libkvm.h
===================================================================
--- kvm-userspace.pit.orig/libkvm/libkvm.h
+++ kvm-userspace.pit/libkvm/libkvm.h
@@ -648,6 +648,8 @@ int kvm_set_pit(kvm_context_t kvm, struc
 
 #endif
 
+int kvm_pit_no_reinjection(kvm_context_t kvm);
+
 #ifdef KVM_CAP_VAPIC
 
 /*!

-- 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection
  2008-12-29 17:42 [patch 0/2] QEMU/KVM: PIT no interrupt reinjection support Marcelo Tosatti
  2008-12-29 17:42 ` [patch 1/2] libkvm: pit not reinject support Marcelo Tosatti
@ 2008-12-29 17:42 ` Marcelo Tosatti
  2008-12-30  3:28   ` Sheng Yang
  2008-12-30 10:10   ` Avi Kivity
  1 sibling, 2 replies; 7+ messages in thread
From: Marcelo Tosatti @ 2008-12-29 17:42 UTC (permalink / raw)
  To: kvm; +Cc: avi, sheng, Marcelo Tosatti

[-- Attachment #1: kvm-pit-no-reinject --]
[-- Type: text/plain, Size: 2622 bytes --]

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

Index: kvm-userspace.pit/qemu/qemu-kvm.c
===================================================================
--- kvm-userspace.pit.orig/qemu/qemu-kvm.c
+++ kvm-userspace.pit/qemu/qemu-kvm.c
@@ -11,6 +11,7 @@
 int kvm_allowed = 1;
 int kvm_irqchip = 1;
 int kvm_pit = 1;
+int kvm_pit_no_reinject = 0;
 int kvm_nested = 0;
 
 #include <assert.h>
@@ -795,6 +796,12 @@ int kvm_qemu_create_context(void)
     r = kvm_arch_qemu_create_context();
     if(r <0)
 	kvm_qemu_destroy();
+    if (kvm_pit_no_reinject) {
+        if (kvm_pit_no_reinjection(kvm_context)) {
+            fprintf(stderr, "failure to disable in-kernel PIT reinjection\n");
+            return -1;
+        }
+    }
 #ifdef TARGET_I386
     destroy_region_works = kvm_destroy_memory_region_works(kvm_context);
 #endif
Index: kvm-userspace.pit/qemu/vl.c
===================================================================
--- kvm-userspace.pit.orig/qemu/vl.c
+++ kvm-userspace.pit/qemu/vl.c
@@ -4071,6 +4071,7 @@ static void help(int exitcode)
 #endif
 	   "-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC\n"
 	   "-no-kvm-pit	    disable KVM kernel mode PIT\n"
+	   "-kvm-pit-no-reinject disable KVM kernel mode PIT interrupt reinjection\n"
 	   "-enable-nesting enable support for running a VM inside the VM (AMD only)\n"
 #if defined(TARGET_I386) || defined(TARGET_X86_64) || defined(TARGET_IA64) || defined(__linux__)
            "-pcidevice host=bus:dev.func[,dma=none][,name=string]\n"
@@ -4202,6 +4203,7 @@ enum {
     QEMU_OPTION_no_kvm,
     QEMU_OPTION_no_kvm_irqchip,
     QEMU_OPTION_no_kvm_pit,
+    QEMU_OPTION_kvm_pit_no_reinject,
 #if defined(TARGET_I386) || defined(TARGET_X86_64) || defined(TARGET_IA64) || defined(__linux__)
     QEMU_OPTION_pcidevice,
 #endif
@@ -4298,6 +4300,7 @@ static const QEMUOption qemu_options[] =
 #endif
     { "no-kvm-irqchip", 0, QEMU_OPTION_no_kvm_irqchip },
     { "no-kvm-pit", 0, QEMU_OPTION_no_kvm_pit },
+    { "kvm-pit-no-reinject", 0, QEMU_OPTION_kvm_pit_no_reinject },
     { "enable-nesting", 0, QEMU_OPTION_enable_nesting },
 #if defined(TARGET_I386) || defined(TARGET_X86_64) || defined(TARGET_IA64) || defined(__linux__)
     { "pcidevice", HAS_ARG, QEMU_OPTION_pcidevice },
@@ -5267,6 +5270,11 @@ int main(int argc, char **argv, char **e
 		kvm_pit = 0;
 		break;
 	    }
+            case QEMU_OPTION_kvm_pit_no_reinject: {
+                extern int kvm_pit_no_reinject;
+                kvm_pit_no_reinject = 1;
+                break;
+            }
 	    case QEMU_OPTION_enable_nesting: {
 		kvm_nested = 1;
 		break;

-- 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection
  2008-12-29 17:42 ` [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection Marcelo Tosatti
@ 2008-12-30  3:28   ` Sheng Yang
  2008-12-30 10:10   ` Avi Kivity
  1 sibling, 0 replies; 7+ messages in thread
From: Sheng Yang @ 2008-12-30  3:28 UTC (permalink / raw)
  To: Marcelo Tosatti; +Cc: kvm, avi

On Tuesday 30 December 2008 01:42:35 Marcelo Tosatti wrote:
> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
>
>--
>  #if defined(TARGET_I386) || defined(TARGET_X86_64) || defined(TARGET_IA64)
> || defined(__linux__) { "pcidevice", HAS_ARG, QEMU_OPTION_pcidevice },
> @@ -5267,6 +5270,11 @@ int main(int argc, char **argv, char **e
>  		kvm_pit = 0;
>  		break;
>  	    }
> +            case QEMU_OPTION_kvm_pit_no_reinject: {
> +                extern int kvm_pit_no_reinject;
> +                kvm_pit_no_reinject = 1;
> +                break;
> +            }
>  	    case QEMU_OPTION_enable_nesting: {
>  		kvm_nested = 1;
>  		break;

Do we need check the conflict of --kvm-pit-no-reinject and --no-kvm-pit/--no-
kvm-irqchip? Check it ahead of kvm_qemu_create_context() seems a little 
better...

-- 
regards
Yang, Sheng




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [patch 1/2] libkvm: pit not reinject support
  2008-12-29 17:42 ` [patch 1/2] libkvm: pit not reinject support Marcelo Tosatti
@ 2008-12-30 10:09   ` Avi Kivity
  0 siblings, 0 replies; 7+ messages in thread
From: Avi Kivity @ 2008-12-30 10:09 UTC (permalink / raw)
  To: Marcelo Tosatti; +Cc: kvm, sheng

Marcelo Tosatti wrote:
> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
>
> Index: kvm-userspace.pit/libkvm/libkvm-x86.c
> ===================================================================
> --- kvm-userspace.pit.orig/libkvm/libkvm-x86.c
> +++ kvm-userspace.pit/libkvm/libkvm-x86.c
> @@ -75,6 +75,20 @@ int kvm_create_pit(kvm_context_t kvm)
>  	return 0;
>  }
>  
> +int kvm_pit_no_reinjection(kvm_context_t kvm)
> +{
> +#ifdef KVM_CAP_PIT_NO_REINJECT
> +    int r;
> +
> +    r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_PIT_NO_REINJECT);
> +    if (r > 0) {
> +        r = ioctl(kvm->vm_fd, KVM_PIT_NO_REINJECT);
> +        return r;
> +    }
> +#endif
> +    return -1;
> +}
>   

Most (not all unfortunately) return -errno on error.

>  
> +int kvm_pit_no_reinjection(kvm_context_t kvm);
> +
>   

Don't use nonpositive logic.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection
  2008-12-29 17:42 ` [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection Marcelo Tosatti
  2008-12-30  3:28   ` Sheng Yang
@ 2008-12-30 10:10   ` Avi Kivity
  1 sibling, 0 replies; 7+ messages in thread
From: Avi Kivity @ 2008-12-30 10:10 UTC (permalink / raw)
  To: Marcelo Tosatti; +Cc: kvm, sheng

Marcelo Tosatti wrote:
>      { "no-kvm-irqchip", 0, QEMU_OPTION_no_kvm_irqchip },
>      { "no-kvm-pit", 0, QEMU_OPTION_no_kvm_pit },
> +    { "kvm-pit-no-reinject", 0, QEMU_OPTION_kvm_pit_no_reinject },
>   

no-kvm-pit-reinjection?
no-kvm-pit-compensation?

Hard to find a user friendly name for this.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection
  2008-12-30 17:48 [patch 0/2] QEMU/KVM: PIT interrupt reinjection control support (v2) Marcelo Tosatti
@ 2008-12-30 17:48 ` Marcelo Tosatti
  0 siblings, 0 replies; 7+ messages in thread
From: Marcelo Tosatti @ 2008-12-30 17:48 UTC (permalink / raw)
  To: kvm; +Cc: avi, sheng, Marcelo Tosatti

[-- Attachment #1: kvm-pit-no-reinject --]
[-- Type: text/plain, Size: 2642 bytes --]

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

Index: kvm-userspace.pit/qemu/qemu-kvm.c
===================================================================
--- kvm-userspace.pit.orig/qemu/qemu-kvm.c
+++ kvm-userspace.pit/qemu/qemu-kvm.c
@@ -11,6 +11,7 @@
 int kvm_allowed = 1;
 int kvm_irqchip = 1;
 int kvm_pit = 1;
+int kvm_pit_reinject = 1;
 int kvm_nested = 0;
 
 #include <assert.h>
@@ -795,6 +796,12 @@ int kvm_qemu_create_context(void)
     r = kvm_arch_qemu_create_context();
     if(r <0)
 	kvm_qemu_destroy();
+    if (kvm_pit && !kvm_pit_reinject) {
+        if (kvm_pit_reinject_control(kvm_context, 0)) {
+            fprintf(stderr, "failure to disable in-kernel PIT reinjection\n");
+            return -1;
+        }
+    }
 #ifdef TARGET_I386
     destroy_region_works = kvm_destroy_memory_region_works(kvm_context);
 #endif
Index: kvm-userspace.pit/qemu/vl.c
===================================================================
--- kvm-userspace.pit.orig/qemu/vl.c
+++ kvm-userspace.pit/qemu/vl.c
@@ -4071,6 +4071,7 @@ static void help(int exitcode)
 #endif
 	   "-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC\n"
 	   "-no-kvm-pit	    disable KVM kernel mode PIT\n"
+	   "-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection\n"
 	   "-enable-nesting enable support for running a VM inside the VM (AMD only)\n"
 #if defined(TARGET_I386) || defined(TARGET_X86_64) || defined(TARGET_IA64) || defined(__linux__)
            "-pcidevice host=bus:dev.func[,dma=none][,name=string]\n"
@@ -4202,6 +4203,7 @@ enum {
     QEMU_OPTION_no_kvm,
     QEMU_OPTION_no_kvm_irqchip,
     QEMU_OPTION_no_kvm_pit,
+    QEMU_OPTION_no_kvm_pit_reinjection,
 #if defined(TARGET_I386) || defined(TARGET_X86_64) || defined(TARGET_IA64) || defined(__linux__)
     QEMU_OPTION_pcidevice,
 #endif
@@ -4298,6 +4300,7 @@ static const QEMUOption qemu_options[] =
 #endif
     { "no-kvm-irqchip", 0, QEMU_OPTION_no_kvm_irqchip },
     { "no-kvm-pit", 0, QEMU_OPTION_no_kvm_pit },
+    { "no-kvm-pit-reinjection", 0, QEMU_OPTION_no_kvm_pit_reinjection },
     { "enable-nesting", 0, QEMU_OPTION_enable_nesting },
 #if defined(TARGET_I386) || defined(TARGET_X86_64) || defined(TARGET_IA64) || defined(__linux__)
     { "pcidevice", HAS_ARG, QEMU_OPTION_pcidevice },
@@ -5267,6 +5270,11 @@ int main(int argc, char **argv, char **e
 		kvm_pit = 0;
 		break;
 	    }
+            case QEMU_OPTION_no_kvm_pit_reinjection: {
+                extern int kvm_pit_reinject;
+                kvm_pit_reinject = 0;
+                break;
+            }
 	    case QEMU_OPTION_enable_nesting: {
 		kvm_nested = 1;
 		break;

-- 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-12-30 18:03 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-29 17:42 [patch 0/2] QEMU/KVM: PIT no interrupt reinjection support Marcelo Tosatti
2008-12-29 17:42 ` [patch 1/2] libkvm: pit not reinject support Marcelo Tosatti
2008-12-30 10:09   ` Avi Kivity
2008-12-29 17:42 ` [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection Marcelo Tosatti
2008-12-30  3:28   ` Sheng Yang
2008-12-30 10:10   ` Avi Kivity
  -- strict thread matches above, loose matches on Subject: below --
2008-12-30 17:48 [patch 0/2] QEMU/KVM: PIT interrupt reinjection control support (v2) Marcelo Tosatti
2008-12-30 17:48 ` [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection Marcelo Tosatti

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.