diff mbox series

[v8,33/39] KVM: selftests: nVMX: Allocate Hyper-V partition assist page

Message ID 20220714134929.1125828-34-vkuznets@redhat.com (mailing list archive)
State New, archived
Headers show
Series KVM: x86: hyper-v: Fine-grained TLB flush + L2 TLB flush features | expand

Commit Message

Vitaly Kuznetsov July 14, 2022, 1:49 p.m. UTC
In preparation to testing Hyper-V L2 TLB flush hypercalls, allocate
so-called Partition assist page and link it to 'struct vmx_pages'.

Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
 tools/testing/selftests/kvm/include/x86_64/vmx.h | 4 ++++
 tools/testing/selftests/kvm/lib/x86_64/vmx.c     | 7 +++++++
 2 files changed, 11 insertions(+)

Comments

Sean Christopherson July 21, 2022, 9:34 p.m. UTC | #1
On Thu, Jul 14, 2022, Vitaly Kuznetsov wrote:
> In preparation to testing Hyper-V L2 TLB flush hypercalls, allocate
> so-called Partition assist page and link it to 'struct vmx_pages'.
> 
> Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
> ---
>  tools/testing/selftests/kvm/include/x86_64/vmx.h | 4 ++++
>  tools/testing/selftests/kvm/lib/x86_64/vmx.c     | 7 +++++++
>  2 files changed, 11 insertions(+)
> 
> diff --git a/tools/testing/selftests/kvm/include/x86_64/vmx.h b/tools/testing/selftests/kvm/include/x86_64/vmx.h
> index cc3604f8f1d3..f7c8184c1de8 100644
> --- a/tools/testing/selftests/kvm/include/x86_64/vmx.h
> +++ b/tools/testing/selftests/kvm/include/x86_64/vmx.h
> @@ -570,6 +570,10 @@ struct vmx_pages {
>  	uint64_t enlightened_vmcs_gpa;
>  	void *enlightened_vmcs;
>  
> +	void *partition_assist_hva;
> +	uint64_t partition_assist_gpa;
> +	void *partition_assist;

Rather than duplicate this and other Hyper-V stuff, can you first add a struct
to hold the Hyper-V pages, along with a helper to populate them?  I'd even throw
in the eVMCS stuff, it's trivial for the helper to have a flag saying "don't bother
allocating eVMCS".  That will give us an easier path to allocating these pages
if and only if the test actually wants to enable Hyper-V stuff.
Vitaly Kuznetsov Aug. 3, 2022, 1:22 p.m. UTC | #2
Sean Christopherson <seanjc@google.com> writes:

> On Thu, Jul 14, 2022, Vitaly Kuznetsov wrote:
>> In preparation to testing Hyper-V L2 TLB flush hypercalls, allocate
>> so-called Partition assist page and link it to 'struct vmx_pages'.
>> 
>> Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
>> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
>> ---
>>  tools/testing/selftests/kvm/include/x86_64/vmx.h | 4 ++++
>>  tools/testing/selftests/kvm/lib/x86_64/vmx.c     | 7 +++++++
>>  2 files changed, 11 insertions(+)
>> 
>> diff --git a/tools/testing/selftests/kvm/include/x86_64/vmx.h b/tools/testing/selftests/kvm/include/x86_64/vmx.h
>> index cc3604f8f1d3..f7c8184c1de8 100644
>> --- a/tools/testing/selftests/kvm/include/x86_64/vmx.h
>> +++ b/tools/testing/selftests/kvm/include/x86_64/vmx.h
>> @@ -570,6 +570,10 @@ struct vmx_pages {
>>  	uint64_t enlightened_vmcs_gpa;
>>  	void *enlightened_vmcs;
>>  
>> +	void *partition_assist_hva;
>> +	uint64_t partition_assist_gpa;
>> +	void *partition_assist;
>
> Rather than duplicate this and other Hyper-V stuff, can you first add a struct
> to hold the Hyper-V pages, along with a helper to populate them?  I'd even throw
> in the eVMCS stuff, it's trivial for the helper to have a flag saying "don't bother
> allocating eVMCS".  That will give us an easier path to allocating these pages
> if and only if the test actually wants to enable Hyper-V stuff.

Good suggestion and a good excuse to do another refresh/rebase as this
apparently missed 5.20 merge window. 

v9 is coming to rescue!
diff mbox series

Patch

diff --git a/tools/testing/selftests/kvm/include/x86_64/vmx.h b/tools/testing/selftests/kvm/include/x86_64/vmx.h
index cc3604f8f1d3..f7c8184c1de8 100644
--- a/tools/testing/selftests/kvm/include/x86_64/vmx.h
+++ b/tools/testing/selftests/kvm/include/x86_64/vmx.h
@@ -570,6 +570,10 @@  struct vmx_pages {
 	uint64_t enlightened_vmcs_gpa;
 	void *enlightened_vmcs;
 
+	void *partition_assist_hva;
+	uint64_t partition_assist_gpa;
+	void *partition_assist;
+
 	void *eptp_hva;
 	uint64_t eptp_gpa;
 	void *eptp;
diff --git a/tools/testing/selftests/kvm/lib/x86_64/vmx.c b/tools/testing/selftests/kvm/lib/x86_64/vmx.c
index 381432741df4..2655450dd4dd 100644
--- a/tools/testing/selftests/kvm/lib/x86_64/vmx.c
+++ b/tools/testing/selftests/kvm/lib/x86_64/vmx.c
@@ -119,6 +119,13 @@  vcpu_alloc_vmx(struct kvm_vm *vm, vm_vaddr_t *p_vmx_gva)
 	vmx->enlightened_vmcs_gpa =
 		addr_gva2gpa(vm, (uintptr_t)vmx->enlightened_vmcs);
 
+	/* Setup of a region of guest memory for the partition assist page. */
+	vmx->partition_assist = (void *)vm_vaddr_alloc_page(vm);
+	vmx->partition_assist_hva =
+		addr_gva2hva(vm, (uintptr_t)vmx->partition_assist);
+	vmx->partition_assist_gpa =
+		addr_gva2gpa(vm, (uintptr_t)vmx->partition_assist);
+
 	*p_vmx_gva = vmx_gva;
 	return vmx;
 }