* [Qemu-devel] [PATCH v2 0/2] i386/kvm: enable Hyper-V PV IPI mechanism @ 2018-10-09 13:08 Vitaly Kuznetsov 2018-10-09 13:08 ` [Qemu-devel] [PATCH v2 1/2] linux-headers: update to pre-4.20 (kvm/queue) Vitaly Kuznetsov 2018-10-09 13:08 ` [Qemu-devel] [PATCH v2 2/2] i386/kvm: add support for Hyper-V IPI send Vitaly Kuznetsov 0 siblings, 2 replies; 4+ messages in thread From: Vitaly Kuznetsov @ 2018-10-09 13:08 UTC (permalink / raw) To: qemu-devel Cc: Paolo Bonzini, Richard Henderson, Eduardo Habkost, Marcelo Tosatti, Roman Kagan Hyper-V PV IPI enlightenment was merged to KVM (kvm/queue currently). Support the feature enablement in Qemu. Changes since v1 [Roman Kagan]: - Strip kvm.h with 'make headers_install' before putting to Qemu. - Add Reviewed-by: to PATCH2 Vitaly Kuznetsov (2): linux-headers: update to pre-4.20 (kvm/queue) i386/kvm: add support for Hyper-V IPI send linux-headers/linux/kvm.h | 3 +++ target/i386/cpu.c | 1 + target/i386/cpu.h | 1 + target/i386/hyperv-proto.h | 1 + target/i386/kvm.c | 14 +++++++++++++- 5 files changed, 19 insertions(+), 1 deletion(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH v2 1/2] linux-headers: update to pre-4.20 (kvm/queue) 2018-10-09 13:08 [Qemu-devel] [PATCH v2 0/2] i386/kvm: enable Hyper-V PV IPI mechanism Vitaly Kuznetsov @ 2018-10-09 13:08 ` Vitaly Kuznetsov 2018-10-09 13:08 ` [Qemu-devel] [PATCH v2 2/2] i386/kvm: add support for Hyper-V IPI send Vitaly Kuznetsov 1 sibling, 0 replies; 4+ messages in thread From: Vitaly Kuznetsov @ 2018-10-09 13:08 UTC (permalink / raw) To: qemu-devel Cc: Paolo Bonzini, Richard Henderson, Eduardo Habkost, Marcelo Tosatti, Roman Kagan This brings us three new defines: KVM_CAP_ARM_INJECT_SERROR_ESR, KVM_CAP_MSR_PLATFORM_INFO and KVM_CAP_HYPERV_SEND_IPI. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> --- linux-headers/linux/kvm.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h index 66790724f1..711f5a2c8e 100644 --- a/linux-headers/linux/kvm.h +++ b/linux-headers/linux/kvm.h @@ -951,6 +951,9 @@ struct kvm_ppc_resize_hpt { #define KVM_CAP_HYPERV_TLBFLUSH 155 #define KVM_CAP_S390_HPAGE_1M 156 #define KVM_CAP_NESTED_STATE 157 +#define KVM_CAP_ARM_INJECT_SERROR_ESR 158 +#define KVM_CAP_MSR_PLATFORM_INFO 159 +#define KVM_CAP_HYPERV_SEND_IPI 160 #ifdef KVM_CAP_IRQ_ROUTING -- 2.17.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH v2 2/2] i386/kvm: add support for Hyper-V IPI send 2018-10-09 13:08 [Qemu-devel] [PATCH v2 0/2] i386/kvm: enable Hyper-V PV IPI mechanism Vitaly Kuznetsov 2018-10-09 13:08 ` [Qemu-devel] [PATCH v2 1/2] linux-headers: update to pre-4.20 (kvm/queue) Vitaly Kuznetsov @ 2018-10-09 13:08 ` Vitaly Kuznetsov 2018-10-18 12:38 ` Paolo Bonzini 1 sibling, 1 reply; 4+ messages in thread From: Vitaly Kuznetsov @ 2018-10-09 13:08 UTC (permalink / raw) To: qemu-devel Cc: Paolo Bonzini, Richard Henderson, Eduardo Habkost, Marcelo Tosatti, Roman Kagan Hyper-V PV IPI support is merged to KVM, enable the feature in Qemu. When enabled, this allows Windows guests to send IPIs to other vCPUs with a single hypercall even when there are >64 vCPUs in the request. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Reviewed-by: Roman Kagan <rkagan@virtuozzo.com> --- target/i386/cpu.c | 1 + target/i386/cpu.h | 1 + target/i386/hyperv-proto.h | 1 + target/i386/kvm.c | 14 +++++++++++++- 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index c88876dfe3..32ea041c06 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5564,6 +5564,7 @@ static Property x86_cpu_properties[] = { DEFINE_PROP_BOOL("hv-frequencies", X86CPU, hyperv_frequencies, false), DEFINE_PROP_BOOL("hv-reenlightenment", X86CPU, hyperv_reenlightenment, false), DEFINE_PROP_BOOL("hv-tlbflush", X86CPU, hyperv_tlbflush, false), + DEFINE_PROP_BOOL("hv-ipi", X86CPU, hyperv_ipi, false), DEFINE_PROP_BOOL("check", X86CPU, check_cpuid, true), DEFINE_PROP_BOOL("enforce", X86CPU, enforce_cpuid, false), DEFINE_PROP_BOOL("kvm", X86CPU, expose_kvm, true), diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 730c06f80a..caa1544b2e 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1382,6 +1382,7 @@ struct X86CPU { bool hyperv_frequencies; bool hyperv_reenlightenment; bool hyperv_tlbflush; + bool hyperv_ipi; bool check_cpuid; bool enforce_cpuid; bool expose_kvm; diff --git a/target/i386/hyperv-proto.h b/target/i386/hyperv-proto.h index d6d5a79293..87f36d14e8 100644 --- a/target/i386/hyperv-proto.h +++ b/target/i386/hyperv-proto.h @@ -58,6 +58,7 @@ #define HV_APIC_ACCESS_RECOMMENDED (1u << 3) #define HV_SYSTEM_RESET_RECOMMENDED (1u << 4) #define HV_RELAXED_TIMING_RECOMMENDED (1u << 5) +#define HV_CLUSTER_IPI_RECOMMENDED (1u << 10) #define HV_EX_PROCESSOR_MASKS_RECOMMENDED (1u << 11) /* diff --git a/target/i386/kvm.c b/target/i386/kvm.c index dc4047b02f..795aa52938 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -608,7 +608,8 @@ static bool hyperv_enabled(X86CPU *cpu) cpu->hyperv_synic || cpu->hyperv_stimer || cpu->hyperv_reenlightenment || - cpu->hyperv_tlbflush); + cpu->hyperv_tlbflush || + cpu->hyperv_ipi); } static int kvm_arch_set_tsc_khz(CPUState *cs) @@ -888,6 +889,17 @@ int kvm_arch_init_vcpu(CPUState *cs) c->eax |= HV_REMOTE_TLB_FLUSH_RECOMMENDED; c->eax |= HV_EX_PROCESSOR_MASKS_RECOMMENDED; } + if (cpu->hyperv_ipi) { + if (kvm_check_extension(cs->kvm_state, + KVM_CAP_HYPERV_SEND_IPI) <= 0) { + fprintf(stderr, "Hyper-V IPI send support " + "(requested by 'hv-ipi' cpu flag) " + " is not supported by kernel\n"); + return -ENOSYS; + } + c->eax |= HV_CLUSTER_IPI_RECOMMENDED; + c->eax |= HV_EX_PROCESSOR_MASKS_RECOMMENDED; + } c->ebx = cpu->hyperv_spinlock_attempts; -- 2.17.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/2] i386/kvm: add support for Hyper-V IPI send 2018-10-09 13:08 ` [Qemu-devel] [PATCH v2 2/2] i386/kvm: add support for Hyper-V IPI send Vitaly Kuznetsov @ 2018-10-18 12:38 ` Paolo Bonzini 0 siblings, 0 replies; 4+ messages in thread From: Paolo Bonzini @ 2018-10-18 12:38 UTC (permalink / raw) To: Vitaly Kuznetsov, qemu-devel Cc: Marcelo Tosatti, Roman Kagan, Eduardo Habkost, Richard Henderson On 09/10/2018 15:08, Vitaly Kuznetsov wrote: > Hyper-V PV IPI support is merged to KVM, enable the feature in Qemu. When > enabled, this allows Windows guests to send IPIs to other vCPUs with a > single hypercall even when there are >64 vCPUs in the request. > > Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> > Reviewed-by: Roman Kagan <rkagan@virtuozzo.com> > --- > target/i386/cpu.c | 1 + > target/i386/cpu.h | 1 + > target/i386/hyperv-proto.h | 1 + > target/i386/kvm.c | 14 +++++++++++++- > 4 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c > index c88876dfe3..32ea041c06 100644 > --- a/target/i386/cpu.c > +++ b/target/i386/cpu.c > @@ -5564,6 +5564,7 @@ static Property x86_cpu_properties[] = { > DEFINE_PROP_BOOL("hv-frequencies", X86CPU, hyperv_frequencies, false), > DEFINE_PROP_BOOL("hv-reenlightenment", X86CPU, hyperv_reenlightenment, false), > DEFINE_PROP_BOOL("hv-tlbflush", X86CPU, hyperv_tlbflush, false), > + DEFINE_PROP_BOOL("hv-ipi", X86CPU, hyperv_ipi, false), > DEFINE_PROP_BOOL("check", X86CPU, check_cpuid, true), > DEFINE_PROP_BOOL("enforce", X86CPU, enforce_cpuid, false), > DEFINE_PROP_BOOL("kvm", X86CPU, expose_kvm, true), > diff --git a/target/i386/cpu.h b/target/i386/cpu.h > index 730c06f80a..caa1544b2e 100644 > --- a/target/i386/cpu.h > +++ b/target/i386/cpu.h > @@ -1382,6 +1382,7 @@ struct X86CPU { > bool hyperv_frequencies; > bool hyperv_reenlightenment; > bool hyperv_tlbflush; > + bool hyperv_ipi; > bool check_cpuid; > bool enforce_cpuid; > bool expose_kvm; > diff --git a/target/i386/hyperv-proto.h b/target/i386/hyperv-proto.h > index d6d5a79293..87f36d14e8 100644 > --- a/target/i386/hyperv-proto.h > +++ b/target/i386/hyperv-proto.h > @@ -58,6 +58,7 @@ > #define HV_APIC_ACCESS_RECOMMENDED (1u << 3) > #define HV_SYSTEM_RESET_RECOMMENDED (1u << 4) > #define HV_RELAXED_TIMING_RECOMMENDED (1u << 5) > +#define HV_CLUSTER_IPI_RECOMMENDED (1u << 10) > #define HV_EX_PROCESSOR_MASKS_RECOMMENDED (1u << 11) > > /* > diff --git a/target/i386/kvm.c b/target/i386/kvm.c > index dc4047b02f..795aa52938 100644 > --- a/target/i386/kvm.c > +++ b/target/i386/kvm.c > @@ -608,7 +608,8 @@ static bool hyperv_enabled(X86CPU *cpu) > cpu->hyperv_synic || > cpu->hyperv_stimer || > cpu->hyperv_reenlightenment || > - cpu->hyperv_tlbflush); > + cpu->hyperv_tlbflush || > + cpu->hyperv_ipi); > } > > static int kvm_arch_set_tsc_khz(CPUState *cs) > @@ -888,6 +889,17 @@ int kvm_arch_init_vcpu(CPUState *cs) > c->eax |= HV_REMOTE_TLB_FLUSH_RECOMMENDED; > c->eax |= HV_EX_PROCESSOR_MASKS_RECOMMENDED; > } > + if (cpu->hyperv_ipi) { > + if (kvm_check_extension(cs->kvm_state, > + KVM_CAP_HYPERV_SEND_IPI) <= 0) { > + fprintf(stderr, "Hyper-V IPI send support " > + "(requested by 'hv-ipi' cpu flag) " > + " is not supported by kernel\n"); > + return -ENOSYS; > + } > + c->eax |= HV_CLUSTER_IPI_RECOMMENDED; > + c->eax |= HV_EX_PROCESSOR_MASKS_RECOMMENDED; > + } > > c->ebx = cpu->hyperv_spinlock_attempts; > > Queued patch 2, thanks. Paolo ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-10-18 12:38 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-10-09 13:08 [Qemu-devel] [PATCH v2 0/2] i386/kvm: enable Hyper-V PV IPI mechanism Vitaly Kuznetsov 2018-10-09 13:08 ` [Qemu-devel] [PATCH v2 1/2] linux-headers: update to pre-4.20 (kvm/queue) Vitaly Kuznetsov 2018-10-09 13:08 ` [Qemu-devel] [PATCH v2 2/2] i386/kvm: add support for Hyper-V IPI send Vitaly Kuznetsov 2018-10-18 12:38 ` Paolo Bonzini
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).