On 10/2/2026 3:37 AM, Lisa Wang wrote: > The default attributes for guest_memfd pages without in-place conversion > is private.
This is wrong. The default memory attribute is of a @gfn is shared without in-place conversion, i.e., with per-vm memory attribute. We don't need this patch actually. And I have tested with reverting this patch, with both out of place conversion and in-place conversion. Both worked. > However, the ucall pages need to be shared between the host > and the guest. Thus, set them as shared. > > Signed-off-by: Lisa Wang <[email protected]> > --- > tools/testing/selftests/kvm/lib/ucall_common.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/tools/testing/selftests/kvm/lib/ucall_common.c > b/tools/testing/selftests/kvm/lib/ucall_common.c > index 029ce21f9f2f..c03dfc763172 100644 > --- a/tools/testing/selftests/kvm/lib/ucall_common.c > +++ b/tools/testing/selftests/kvm/lib/ucall_common.c > @@ -27,6 +27,7 @@ static struct ucall_header *ucall_pool; > > void ucall_init(struct kvm_vm *vm, gpa_t mmio_gpa) > { > + struct userspace_mem_region *region; > struct ucall_header *hdr; > struct ucall *uc; > gva_t gva; > @@ -37,6 +38,13 @@ void ucall_init(struct kvm_vm *vm, gpa_t mmio_gpa) > hdr = (struct ucall_header *)addr_gva2hva(vm, gva); > memset(hdr, 0, sizeof(*hdr)); > > + region = vm_get_mem_region(vm, MEM_REGION_DATA); > + if (region->region.flags & KVM_MEM_GUEST_MEMFD) { > + size_t aligned_sz = align_up(sizeof(*hdr), vm->page_size); > + > + vm_mem_set_shared(vm, addr_gva2gpa(vm, gva), aligned_sz); > + } > + > for (i = 0; i < KVM_MAX_VCPUS; ++i) { > uc = &hdr->ucalls[i]; > uc->hva = uc; >

