From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Maxim Levitsky <mlevitsk@redhat.com>
Cc: Sean Christopherson <seanjc@google.com>,
Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>,
Michael Kelley <mikelley@microsoft.com>,
Siddharth Chandrasekaran <sidcha@amazon.de>,
linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
kvm@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v3 14/34] KVM: x86: Introduce .post_hv_l2_tlb_flush() nested hook
Date: Wed, 18 May 2022 14:43:07 +0200 [thread overview]
Message-ID: <871qwrui3o.fsf@redhat.com> (raw)
In-Reply-To: <deae695da02d7f22dcfa4635eec53ab61baf9026.camel@redhat.com>
Maxim Levitsky <mlevitsk@redhat.com> writes:
> On Thu, 2022-04-14 at 15:19 +0200, Vitaly Kuznetsov wrote:
>> Hyper-V supports injecting synthetic L2->L1 exit after performing
>> L2 TLB flush operation but the procedure is vendor specific.
>> Introduce .post_hv_l2_tlb_flush() nested hook for it.
>>
>> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
>> ---
>> arch/x86/include/asm/kvm_host.h | 1 +
>> arch/x86/kvm/Makefile | 3 ++-
>> arch/x86/kvm/svm/hyperv.c | 11 +++++++++++
>> arch/x86/kvm/svm/hyperv.h | 2 ++
>> arch/x86/kvm/svm/nested.c | 1 +
>> arch/x86/kvm/vmx/evmcs.c | 4 ++++
>> arch/x86/kvm/vmx/evmcs.h | 1 +
>> arch/x86/kvm/vmx/nested.c | 1 +
>> 8 files changed, 23 insertions(+), 1 deletion(-)
>> create mode 100644 arch/x86/kvm/svm/hyperv.c
>>
>> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
>> index 8b2a52bf26c0..ce62fde5f4ff 100644
>> --- a/arch/x86/include/asm/kvm_host.h
>> +++ b/arch/x86/include/asm/kvm_host.h
>> @@ -1558,6 +1558,7 @@ struct kvm_x86_nested_ops {
>> int (*enable_evmcs)(struct kvm_vcpu *vcpu,
>> uint16_t *vmcs_version);
>> uint16_t (*get_evmcs_version)(struct kvm_vcpu *vcpu);
>> + void (*post_hv_l2_tlb_flush)(struct kvm_vcpu *vcpu);
>> };
>>
>> struct kvm_x86_init_ops {
>> diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile
>> index 30f244b64523..b6d53b045692 100644
>> --- a/arch/x86/kvm/Makefile
>> +++ b/arch/x86/kvm/Makefile
>> @@ -25,7 +25,8 @@ kvm-intel-y += vmx/vmx.o vmx/vmenter.o vmx/pmu_intel.o vmx/vmcs12.o \
>> vmx/evmcs.o vmx/nested.o vmx/posted_intr.o
>> kvm-intel-$(CONFIG_X86_SGX_KVM) += vmx/sgx.o
>>
>> -kvm-amd-y += svm/svm.o svm/vmenter.o svm/pmu.o svm/nested.o svm/avic.o svm/sev.o
>> +kvm-amd-y += svm/svm.o svm/vmenter.o svm/pmu.o svm/nested.o svm/avic.o \
>> + svm/sev.o svm/hyperv.o
>>
>> ifdef CONFIG_HYPERV
>> kvm-amd-y += svm/svm_onhyperv.o
>> diff --git a/arch/x86/kvm/svm/hyperv.c b/arch/x86/kvm/svm/hyperv.c
>> new file mode 100644
>> index 000000000000..c0749fc282fe
>> --- /dev/null
>> +++ b/arch/x86/kvm/svm/hyperv.c
>> @@ -0,0 +1,11 @@
>> +// SPDX-License-Identifier: GPL-2.0-only
>> +/*
>> + * AMD SVM specific code for Hyper-V on KVM.
>> + *
>> + * Copyright 2022 Red Hat, Inc. and/or its affiliates.
>> + */
>> +#include "hyperv.h"
>> +
>> +void svm_post_hv_l2_tlb_flush(struct kvm_vcpu *vcpu)
>> +{
>> +}
>> diff --git a/arch/x86/kvm/svm/hyperv.h b/arch/x86/kvm/svm/hyperv.h
>> index 8cf702fed7e5..a2b0d7580b0d 100644
>> --- a/arch/x86/kvm/svm/hyperv.h
>> +++ b/arch/x86/kvm/svm/hyperv.h
>> @@ -48,4 +48,6 @@ static inline void nested_svm_hv_update_vm_vp_ids(struct kvm_vcpu *vcpu)
>> hv_vcpu->nested.vp_id = hve->hv_vp_id;
>> }
>>
>> +void svm_post_hv_l2_tlb_flush(struct kvm_vcpu *vcpu);
>> +
>> #endif /* __ARCH_X86_KVM_SVM_HYPERV_H__ */
>> diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
>> index 2d1a76343404..de3f27301b5c 100644
>> --- a/arch/x86/kvm/svm/nested.c
>> +++ b/arch/x86/kvm/svm/nested.c
>> @@ -1665,4 +1665,5 @@ struct kvm_x86_nested_ops svm_nested_ops = {
>> .get_nested_state_pages = svm_get_nested_state_pages,
>> .get_state = svm_get_nested_state,
>> .set_state = svm_set_nested_state,
>> + .post_hv_l2_tlb_flush = svm_post_hv_l2_tlb_flush,
>> };
>> diff --git a/arch/x86/kvm/vmx/evmcs.c b/arch/x86/kvm/vmx/evmcs.c
>> index 87e3dc10edf4..e390e67496df 100644
>> --- a/arch/x86/kvm/vmx/evmcs.c
>> +++ b/arch/x86/kvm/vmx/evmcs.c
>> @@ -437,3 +437,7 @@ int nested_enable_evmcs(struct kvm_vcpu *vcpu,
>>
>> return 0;
>> }
>> +
>> +void vmx_post_hv_l2_tlb_flush(struct kvm_vcpu *vcpu)
>> +{
>> +}
>> diff --git a/arch/x86/kvm/vmx/evmcs.h b/arch/x86/kvm/vmx/evmcs.h
>> index 8d70f9aea94b..b120b0ead4f3 100644
>> --- a/arch/x86/kvm/vmx/evmcs.h
>> +++ b/arch/x86/kvm/vmx/evmcs.h
>> @@ -244,5 +244,6 @@ int nested_enable_evmcs(struct kvm_vcpu *vcpu,
>> uint16_t *vmcs_version);
>> void nested_evmcs_filter_control_msr(u32 msr_index, u64 *pdata);
>> int nested_evmcs_check_controls(struct vmcs12 *vmcs12);
>> +void vmx_post_hv_l2_tlb_flush(struct kvm_vcpu *vcpu);
>>
>> #endif /* __KVM_X86_VMX_EVMCS_H */
>> diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c
>> index ee88921c6156..cc6c944b5815 100644
>> --- a/arch/x86/kvm/vmx/nested.c
>> +++ b/arch/x86/kvm/vmx/nested.c
>> @@ -6850,4 +6850,5 @@ struct kvm_x86_nested_ops vmx_nested_ops = {
>> .write_log_dirty = nested_vmx_write_pml_buffer,
>> .enable_evmcs = nested_enable_evmcs,
>> .get_evmcs_version = nested_get_evmcs_version,
>> + .post_hv_l2_tlb_flush = vmx_post_hv_l2_tlb_flush,
>> };
>
>
> I think that the name of the function is misleading, since it is not called
> after each L2 HV tlb flush, but only after a flush which needs to inject
> that synthetic VM exit.
>
> I think something like 'inject_synthetic_l2_hv_tlb_flush_vmexit'
> (not a good name IMHO, but you get the idea) would be better.
>
Naming is hard indeed,
hv_inject_synthetic_vmexit_post_tlb_flush()
seems to be accurate.
--
Vitaly
next prev parent reply other threads:[~2022-05-18 12:47 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-14 13:19 [PATCH v3 00/34] KVM: x86: hyper-v: Fine-grained TLB flush + L2 TLB flush feature Vitaly Kuznetsov
2022-04-14 13:19 ` [PATCH v3 01/34] KVM: x86: hyper-v: Resurrect dedicated KVM_REQ_HV_TLB_FLUSH flag Vitaly Kuznetsov
2022-05-11 11:18 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 02/34] KVM: x86: hyper-v: Introduce TLB flush ring Vitaly Kuznetsov
2022-05-11 11:19 ` Maxim Levitsky
2022-05-16 14:29 ` Vitaly Kuznetsov
2022-05-16 19:34 ` Sean Christopherson
2022-05-17 13:31 ` Vitaly Kuznetsov
2022-04-14 13:19 ` [PATCH v3 03/34] KVM: x86: hyper-v: Add helper to read hypercall data for array Vitaly Kuznetsov
2022-05-11 11:20 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 04/34] KVM: x86: hyper-v: Handle HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST{,EX} calls gently Vitaly Kuznetsov
2022-05-11 11:22 ` Maxim Levitsky
2022-05-18 9:39 ` Vitaly Kuznetsov
2022-05-18 14:18 ` Sean Christopherson
2022-05-18 14:43 ` Vitaly Kuznetsov
2022-05-18 14:55 ` Sean Christopherson
2022-05-16 19:41 ` Sean Christopherson
2022-05-17 13:41 ` Vitaly Kuznetsov
2022-04-14 13:19 ` [PATCH v3 05/34] KVM: x86: hyper-v: Expose support for extended gva ranges for flush hypercalls Vitaly Kuznetsov
2022-05-11 11:23 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 06/34] KVM: x86: Prepare kvm_hv_flush_tlb() to handle L2's GPAs Vitaly Kuznetsov
2022-05-11 11:23 ` Maxim Levitsky
2022-05-11 11:23 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 07/34] x86/hyperv: Introduce HV_MAX_SPARSE_VCPU_BANKS/HV_VCPUS_PER_SPARSE_BANK constants Vitaly Kuznetsov
2022-04-25 15:47 ` Wei Liu
2022-04-25 17:34 ` Michael Kelley (LINUX)
2022-04-25 19:09 ` Christophe JAILLET
2022-04-25 19:16 ` Christophe JAILLET
2022-05-03 14:59 ` Vitaly Kuznetsov
2022-05-03 11:11 ` Wei Liu
2022-05-11 11:23 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 08/34] KVM: x86: hyper-v: Use HV_MAX_SPARSE_VCPU_BANKS/HV_VCPUS_PER_SPARSE_BANK instead of raw '64' Vitaly Kuznetsov
2022-05-11 11:24 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 09/34] KVM: x86: hyper-v: Don't use sparse_set_to_vcpu_mask() in kvm_hv_send_ipi() Vitaly Kuznetsov
2022-05-11 11:24 ` Maxim Levitsky
2022-05-16 19:52 ` Sean Christopherson
2022-04-14 13:19 ` [PATCH v3 10/34] KVM: x86: hyper-v: Create a separate ring for L2 TLB flush Vitaly Kuznetsov
2022-05-11 11:24 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 11/34] KVM: x86: hyper-v: Use preallocated buffer in 'struct kvm_vcpu_hv' instead of on-stack 'sparse_banks' Vitaly Kuznetsov
2022-05-11 11:25 ` Maxim Levitsky
2022-05-16 20:05 ` Sean Christopherson
2022-05-17 13:51 ` Vitaly Kuznetsov
2022-05-17 14:04 ` Sean Christopherson
2022-05-17 14:19 ` Vitaly Kuznetsov
2022-04-14 13:19 ` [PATCH v3 12/34] KVM: nVMX: Keep track of hv_vm_id/hv_vp_id when eVMCS is in use Vitaly Kuznetsov
2022-05-11 11:25 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 13/34] KVM: nSVM: Keep track of Hyper-V hv_vm_id/hv_vp_id Vitaly Kuznetsov
2022-05-11 11:27 ` Maxim Levitsky
2022-05-18 12:25 ` Vitaly Kuznetsov
2022-05-18 12:45 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 14/34] KVM: x86: Introduce .post_hv_l2_tlb_flush() nested hook Vitaly Kuznetsov
2022-05-11 11:32 ` Maxim Levitsky
2022-05-18 12:43 ` Vitaly Kuznetsov [this message]
2022-05-18 12:49 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 15/34] KVM: x86: hyper-v: Introduce kvm_hv_is_tlb_flush_hcall() Vitaly Kuznetsov
2022-05-11 11:25 ` Maxim Levitsky
2022-05-16 20:09 ` Sean Christopherson
2022-04-14 13:19 ` [PATCH v3 16/34] KVM: x86: hyper-v: L2 TLB flush Vitaly Kuznetsov
2022-05-11 11:29 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 17/34] KVM: x86: hyper-v: Introduce fast kvm_hv_l2_tlb_flush_exposed() check Vitaly Kuznetsov
2022-05-11 11:30 ` Maxim Levitsky
2022-05-19 13:25 ` Vitaly Kuznetsov
2022-05-19 13:28 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 18/34] x86/hyperv: Fix 'struct hv_enlightened_vmcs' definition Vitaly Kuznetsov
2022-05-11 11:30 ` Maxim Levitsky
2022-04-14 13:19 ` [PATCH v3 19/34] KVM: nVMX: hyper-v: Enable L2 TLB flush Vitaly Kuznetsov
2022-05-11 11:31 ` Maxim Levitsky
2022-05-16 20:16 ` Sean Christopherson
2022-04-14 13:19 ` [PATCH v3 20/34] KVM: x86: KVM_REQ_TLB_FLUSH_CURRENT is a superset of KVM_REQ_HV_TLB_FLUSH too Vitaly Kuznetsov
2022-05-11 11:33 ` Maxim Levitsky
2022-05-19 9:12 ` Vitaly Kuznetsov
2022-05-19 23:44 ` Sean Christopherson
2022-04-14 13:20 ` [PATCH v3 21/34] KVM: nSVM: hyper-v: Enable L2 TLB flush Vitaly Kuznetsov
2022-05-11 11:33 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 22/34] KVM: x86: Expose Hyper-V L2 TLB flush feature Vitaly Kuznetsov
2022-05-11 11:34 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 23/34] KVM: selftests: Better XMM read/write helpers Vitaly Kuznetsov
2022-05-11 11:34 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 24/34] KVM: selftests: Hyper-V PV IPI selftest Vitaly Kuznetsov
2022-05-11 11:35 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 25/34] KVM: selftests: Make it possible to replace PTEs with __virt_pg_map() Vitaly Kuznetsov
2022-05-11 11:34 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 26/34] KVM: selftests: Hyper-V PV TLB flush selftest Vitaly Kuznetsov
2022-05-11 12:17 ` Maxim Levitsky
2022-05-24 14:51 ` Vitaly Kuznetsov
2022-04-14 13:20 ` [PATCH v3 27/34] KVM: selftests: Sync 'struct hv_enlightened_vmcs' definition with hyperv-tlfs.h Vitaly Kuznetsov
2022-05-11 12:17 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 28/34] KVM: selftests: nVMX: Allocate Hyper-V partition assist page Vitaly Kuznetsov
2022-05-11 12:17 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 29/34] KVM: selftests: nSVM: Allocate Hyper-V partition assist and VP assist pages Vitaly Kuznetsov
2022-05-11 12:17 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 30/34] KVM: selftests: Sync 'struct hv_vp_assist_page' definition with hyperv-tlfs.h Vitaly Kuznetsov
2022-05-11 12:18 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 31/34] KVM: selftests: evmcs_test: Introduce L2 TLB flush test Vitaly Kuznetsov
2022-05-11 12:18 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 32/34] KVM: selftests: Move Hyper-V VP assist page enablement out of evmcs.h Vitaly Kuznetsov
2022-05-11 12:18 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 33/34] KVM: selftests: hyperv_svm_test: Introduce L2 TLB flush test Vitaly Kuznetsov
2022-05-11 12:19 ` Maxim Levitsky
2022-04-14 13:20 ` [PATCH v3 34/34] KVM: x86: Rename 'enable_direct_tlbflush' to 'enable_l2_tlb_flush' Vitaly Kuznetsov
2022-05-11 12:18 ` Maxim Levitsky
2022-05-03 15:01 ` [PATCH v3 00/34] KVM: x86: hyper-v: Fine-grained TLB flush + L2 TLB flush feature Vitaly Kuznetsov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871qwrui3o.fsf@redhat.com \
--to=vkuznets@redhat.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mikelley@microsoft.com \
--cc=mlevitsk@redhat.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=sidcha@amazon.de \
--cc=wanpengli@tencent.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.