[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <diqzmsbcfo4o.fsf@ackerleytng-ctop.c.googlers.com>
Date: Fri, 16 May 2025 10:42:47 -0700
From: Ackerley Tng <ackerleytng@...gle.com>
To: Ira Weiny <ira.weiny@...el.com>, kvm@...r.kernel.org, linux-mm@...ck.org,
linux-kernel@...r.kernel.org, x86@...nel.org, linux-fsdevel@...r.kernel.org
Cc: aik@....com, ajones@...tanamicro.com, akpm@...ux-foundation.org,
amoorthy@...gle.com, anthony.yznaga@...cle.com, anup@...infault.org,
aou@...s.berkeley.edu, bfoster@...hat.com, binbin.wu@...ux.intel.com,
brauner@...nel.org, catalin.marinas@....com, chao.p.peng@...el.com,
chenhuacai@...nel.org, dave.hansen@...el.com, david@...hat.com,
dmatlack@...gle.com, dwmw@...zon.co.uk, erdemaktas@...gle.com,
fan.du@...el.com, fvdl@...gle.com, graf@...zon.com, haibo1.xu@...el.com,
hch@...radead.org, hughd@...gle.com, ira.weiny@...el.com,
isaku.yamahata@...el.com, jack@...e.cz, james.morse@....com,
jarkko@...nel.org, jgg@...pe.ca, jgowans@...zon.com, jhubbard@...dia.com,
jroedel@...e.de, jthoughton@...gle.com, jun.miao@...el.com,
kai.huang@...el.com, keirf@...gle.com, kent.overstreet@...ux.dev,
kirill.shutemov@...el.com, liam.merwick@...cle.com,
maciej.wieczor-retman@...el.com, mail@...iej.szmigiero.name, maz@...nel.org,
mic@...ikod.net, michael.roth@....com, mpe@...erman.id.au,
muchun.song@...ux.dev, nikunj@....com, nsaenz@...zon.es,
oliver.upton@...ux.dev, palmer@...belt.com, pankaj.gupta@....com,
paul.walmsley@...ive.com, pbonzini@...hat.com, pdurrant@...zon.co.uk,
peterx@...hat.com, pgonda@...gle.com, pvorel@...e.cz, qperret@...gle.com,
quic_cvanscha@...cinc.com, quic_eberman@...cinc.com,
quic_mnalajal@...cinc.com, quic_pderrin@...cinc.com, quic_pheragu@...cinc.com,
quic_svaddagi@...cinc.com, quic_tsoni@...cinc.com, richard.weiyang@...il.com,
rick.p.edgecombe@...el.com, rientjes@...gle.com, roypat@...zon.co.uk,
rppt@...nel.org, seanjc@...gle.com, shuah@...nel.org, steven.price@....com,
steven.sistare@...cle.com, suzuki.poulose@....com, tabba@...gle.com,
thomas.lendacky@....com, usama.arif@...edance.com, vannapurve@...gle.com,
vbabka@...e.cz, viro@...iv.linux.org.uk, vkuznets@...hat.com,
wei.w.wang@...el.com, will@...nel.org, willy@...radead.org,
xiaoyao.li@...el.com, yan.y.zhao@...el.com, yilun.xu@...el.com,
yuzenghui@...wei.com, zhiquan1.li@...el.com
Subject: Re: [RFC PATCH v2 03/51] KVM: selftests: Update guest_memfd_test for
INIT_PRIVATE flag
Ira Weiny <ira.weiny@...el.com> writes:
> Ackerley Tng wrote:
>> Test that GUEST_MEMFD_FLAG_INIT_PRIVATE is only valid when
>> GUEST_MEMFD_FLAG_SUPPORT_SHARED is set.
>>
>> Change-Id: I506e236a232047cfaee17bcaed02ee14c8d25bbb
>> Signed-off-by: Ackerley Tng <ackerleytng@...gle.com>
>> ---
>> .../testing/selftests/kvm/guest_memfd_test.c | 36 ++++++++++++-------
>> 1 file changed, 24 insertions(+), 12 deletions(-)
>>
>> diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c
>> index 60aaba5808a5..bf2876cbd711 100644
>> --- a/tools/testing/selftests/kvm/guest_memfd_test.c
>> +++ b/tools/testing/selftests/kvm/guest_memfd_test.c
>> @@ -401,13 +401,31 @@ static void test_with_type(unsigned long vm_type, uint64_t guest_memfd_flags,
>> kvm_vm_release(vm);
>> }
>>
>> +static void test_vm_with_gmem_flag(struct kvm_vm *vm, uint64_t flag,
>> + bool expect_valid)
>> +{
>> + size_t page_size = getpagesize();
>> + int fd;
>> +
>> + fd = __vm_create_guest_memfd(vm, page_size, flag);
>> +
>> + if (expect_valid) {
>> + TEST_ASSERT(fd > 0,
>> + "guest_memfd() with flag '0x%lx' should be valid",
>> + flag);
>> + close(fd);
>> + } else {
>> + TEST_ASSERT(fd == -1 && errno == EINVAL,
>> + "guest_memfd() with flag '0x%lx' should fail with EINVAL",
>> + flag);
>> + }
>> +}
>> +
>> static void test_vm_type_gmem_flag_validity(unsigned long vm_type,
>> uint64_t expected_valid_flags)
>> {
>> - size_t page_size = getpagesize();
>> struct kvm_vm *vm;
>> uint64_t flag = 0;
>> - int fd;
>>
>> if (!(kvm_check_cap(KVM_CAP_VM_TYPES) & BIT(vm_type)))
>> return;
>> @@ -415,17 +433,11 @@ static void test_vm_type_gmem_flag_validity(unsigned long vm_type,
>> vm = vm_create_barebones_type(vm_type);
>>
>> for (flag = BIT(0); flag; flag <<= 1) {
>> - fd = __vm_create_guest_memfd(vm, page_size, flag);
>> + test_vm_with_gmem_flag(vm, flag, flag & expected_valid_flags);
>>
>> - if (flag & expected_valid_flags) {
>> - TEST_ASSERT(fd > 0,
>> - "guest_memfd() with flag '0x%lx' should be valid",
>> - flag);
>> - close(fd);
>> - } else {
>> - TEST_ASSERT(fd == -1 && errno == EINVAL,
>> - "guest_memfd() with flag '0x%lx' should fail with EINVAL",
>> - flag);
>> + if (flag == GUEST_MEMFD_FLAG_SUPPORT_SHARED) {
>> + test_vm_with_gmem_flag(
>> + vm, flag | GUEST_MEMFD_FLAG_INIT_PRIVATE, true);
>
> I don't understand the point of this check. In 2/51 we set
> GUEST_MEMFD_FLAG_INIT_PRIVATE when GUEST_MEMFD_FLAG_SUPPORT_SHARED is set.
>
> When can this check ever fail?
>
> Ira
In 02/51, GUEST_MEMFD_FLAG_INIT_PRIVATE is not set by default,
GUEST_MEMFD_FLAG_INIT_PRIVATE is set as one of the valid_flags.
The intention is that GUEST_MEMFD_FLAG_INIT_PRIVATE is only valid if
GUEST_MEMFD_FLAG_SUPPORT_SHARED is requested by userspace.
In this test, the earlier part before the if block calls
test_vm_with_gmem_flag() all valid flags, and that already tests
GUEST_MEMFD_FLAG_SUPPORT_SHARED individually.
Specifically if GUEST_MEMFD_FLAG_SUPPORT_SHARED is set, this if block
adds a test for when both GUEST_MEMFD_FLAG_SUPPORT_SHARED and
GUEST_MEMFD_FLAG_INIT_PRIVATE are set, and sets that expect_valid is
true.
This second test doesn't fail, it is meant to check that the kernel
allows the pair of flags to be set. Hope that makes sense.
Powered by blists - more mailing lists