From: Sean Christopherson <seanjc@google.com>
To: Vishal Annapurve <vannapurve@google.com>
Cc: x86@kernel.org, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
pbonzini@redhat.com, vkuznets@redhat.com, wanpengli@tencent.com,
jmattson@google.com, joro@8bytes.org, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
hpa@zytor.com, shuah@kernel.org, yang.zhong@intel.com,
drjones@redhat.com, ricarkol@google.com, aaronlewis@google.com,
wei.w.wang@intel.com, kirill.shutemov@linux.intel.com,
corbet@lwn.net, hughd@google.com, jlayton@kernel.org,
bfields@fieldses.org, akpm@linux-foundation.org,
chao.p.peng@linux.intel.com, yu.c.zhang@linux.intel.com,
jun.nakajima@intel.com, dave.hansen@intel.com,
michael.roth@amd.com, qperret@google.com, steven.price@arm.com,
ak@linux.intel.com, david@redhat.com, luto@kernel.org,
vbabka@suse.cz, marcorr@google.com, erdemaktas@google.com,
pgonda@google.com, nikunj@amd.com, diviness@google.com,
maz@kernel.org, dmatlack@google.com, axelrasmussen@google.com,
maciej.szmigiero@oracle.com, mizhang@google.com,
bgardon@google.com
Subject: Re: [RFC V3 PATCH 5/6] selftests: kvm: x86: Execute VMs with private memory
Date: Thu, 6 Oct 2022 20:17:38 +0000 [thread overview]
Message-ID: <Yz834mGQDtkdwn7q@google.com> (raw)
In-Reply-To: <20220819174659.2427983-6-vannapurve@google.com>
On Fri, Aug 19, 2022, Vishal Annapurve wrote:
> +/*
> + * Execute KVM hypercall to change memory access type for a given gpa range.
> + *
> + * Input Args:
> + * type - memory conversion type TO_SHARED/TO_PRIVATE
> + * gpa - starting gpa address
> + * size - size of the range starting from gpa for which memory access needs
> + * to be changed
> + *
> + * Output Args: None
> + *
> + * Return: None
> + *
> + * Function called by guest logic in selftests to update the memory access type
> + * for a given gpa range. This API is useful in exercising implicit conversion
> + * path.
> + */
> +void guest_update_mem_access(enum mem_conversion_type type, uint64_t gpa,
> + uint64_t size)
Provide wrappers to self-document what's going on, then the massive block comments
go away. And the guts of this and guest_update_mem_map() are nearly identical.
Hmm, and we probably want to make it possible to do negative testing.
Then the one-off enums for TO_PRIVATE and whatnot go way too.
> +{
> + int ret = kvm_hypercall(KVM_HC_MAP_GPA_RANGE, gpa, size >> MIN_PAGE_SHIFT,
Needs an assert that @size is page aligned. And since these are x86-64 specific,
just use PAGE_SHIFT. Huh, IS_ALIGNED() doesn't exist in selftests. That should
be added, either by pulling in align.h or by adding the generic macros to
kvm_util_base.h.
And then x86-64's processor.h can defined IS_PAGE_ALIGNED().
E.g.
static inline void __kvm_hypercall_map_gpa_range(uint64_t gpa, uint64_t size,
uint64_t flags)
{
return = kvm_hypercall(KVM_HC_MAP_GPA_RANGE, gpa, size >> PAGE_SHIFT, flags, 0);
}
static inline void kvm_hypercall_map_gpa_range(uint64_t gpa, uint64_t size,
uint64_t flags)
{
int ret;
GUEST_ASSERT_2(IS_PAGE_ALIGNED(gpa) && IS_PAGE_ALIGNED(size), gpa, size);
ret = __kvm_hypercall_map_gpa_range(gpa, size, flags);
GUEST_ASSERT_1(!ret, ret);
}
static inline kvm_hypercall_map_shared(uint64_t gpa, uint64_t size)
{
kvm_hypercall_map_gpa_range(gpa, size, KVM_CLR_GPA_RANGE_ENC_ACCESS);
}
static inline kvm_hypercall_map_private(uint64_t gpa, uint64_t size)
{
kvm_hypercall_map_gpa_range(gpa, size, KVM_MARK_GPA_RANGE_ENC_ACCESS);
}
> +static void handle_vm_exit_map_gpa_hypercall(struct kvm_vm *vm,
> + volatile struct kvm_run *run)
Pass in @vcpu, not a vm+run.
> +{
> + uint64_t gpa, npages, attrs, size;
> +
> + TEST_ASSERT(run->hypercall.nr == KVM_HC_MAP_GPA_RANGE,
> + "Unhandled Hypercall %lld\n", run->hypercall.nr);
> + gpa = run->hypercall.args[0];
> + npages = run->hypercall.args[1];
> + size = npages << MIN_PAGE_SHIFT;
> + attrs = run->hypercall.args[2];
> + pr_info("Explicit conversion off 0x%lx size 0x%lx to %s\n", gpa, size,
> + (attrs & KVM_MAP_GPA_RANGE_ENCRYPTED) ? "private" : "shared");
> +
> + if (attrs & KVM_MAP_GPA_RANGE_ENCRYPTED)
> + vm_update_private_mem(vm, gpa, size, ALLOCATE_MEM);
> + else
> + vm_update_private_mem(vm, gpa, size, UNBACK_MEM);
> +
> + run->hypercall.ret = 0;
> +}
> +
> +static void handle_vm_exit_memory_error(struct kvm_vm *vm, volatile struct kvm_run *run)
Same here, take a @vcpu.
next prev parent reply other threads:[~2022-10-06 20:17 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-19 17:46 [RFC V3 PATCH 0/6] selftests: KVM: selftests for fd-based private memory Vishal Annapurve
2022-08-19 17:46 ` [RFC V3 PATCH 1/6] kvm: x86: Add support for testing " Vishal Annapurve
2022-08-19 17:46 ` [RFC V3 PATCH 2/6] selftests: kvm: Add support for " Vishal Annapurve
2022-08-19 17:46 ` [RFC V3 PATCH 3/6] selftests: kvm: ucall: Allow querying ucall pool gpa Vishal Annapurve
2022-10-06 20:02 ` Sean Christopherson
2022-10-14 9:33 ` Vishal Annapurve
2022-10-14 18:47 ` Sean Christopherson
2022-10-17 10:00 ` Vishal Annapurve
2022-10-17 18:08 ` Sean Christopherson
2022-10-18 13:11 ` Vishal Annapurve
2022-08-19 17:46 ` [RFC V3 PATCH 4/6] selftests: kvm: x86: Execute hypercall as per the cpu Vishal Annapurve
2022-08-25 0:07 ` Sean Christopherson
2022-09-06 22:48 ` Vishal Annapurve
2022-08-19 17:46 ` [RFC V3 PATCH 5/6] selftests: kvm: x86: Execute VMs with private memory Vishal Annapurve
2022-10-06 20:17 ` Sean Christopherson [this message]
2022-10-14 9:35 ` Vishal Annapurve
2022-08-19 17:46 ` [RFC V3 PATCH 6/6] sefltests: kvm: x86: Add selftest for " Vishal Annapurve
2022-10-06 20:23 ` Sean Christopherson
2022-10-14 9:41 ` Vishal Annapurve
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=Yz834mGQDtkdwn7q@google.com \
--to=seanjc@google.com \
--cc=aaronlewis@google.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=bfields@fieldses.org \
--cc=bgardon@google.com \
--cc=bp@alien8.de \
--cc=chao.p.peng@linux.intel.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=david@redhat.com \
--cc=diviness@google.com \
--cc=dmatlack@google.com \
--cc=drjones@redhat.com \
--cc=erdemaktas@google.com \
--cc=hpa@zytor.com \
--cc=hughd@google.com \
--cc=jlayton@kernel.org \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=jun.nakajima@intel.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=luto@kernel.org \
--cc=maciej.szmigiero@oracle.com \
--cc=marcorr@google.com \
--cc=maz@kernel.org \
--cc=michael.roth@amd.com \
--cc=mingo@redhat.com \
--cc=mizhang@google.com \
--cc=nikunj@amd.com \
--cc=pbonzini@redhat.com \
--cc=pgonda@google.com \
--cc=qperret@google.com \
--cc=ricarkol@google.com \
--cc=shuah@kernel.org \
--cc=steven.price@arm.com \
--cc=tglx@linutronix.de \
--cc=vannapurve@google.com \
--cc=vbabka@suse.cz \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
--cc=wei.w.wang@intel.com \
--cc=x86@kernel.org \
--cc=yang.zhong@intel.com \
--cc=yu.c.zhang@linux.intel.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.