* [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
* 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
* [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 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 0/2] QEMU/KVM: PIT interrupt reinjection control support (v2) @ 2008-12-30 17:48 Marcelo Tosatti 2008-12-30 17:48 ` [patch 2/2] QEMU/KVM: provide an option to disable in-kernel PIT int reinjection Marcelo Tosatti 0 siblings, 1 reply; 7+ messages in thread From: Marcelo Tosatti @ 2008-12-30 17:48 UTC (permalink / raw) To: kvm; +Cc: avi, sheng Userspace support for KVM_PIT_REINJECT_CONTROL. -- ^ 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.