On Fri, 19 Jun 2026 at 01:32, Ackerley Tng via B4 Relay <[email protected]> wrote: > > From: Sean Christopherson <[email protected]> > > Introduce vm_mem_set_memory_attributes(), which handles setting of memory > attributes for a range of guest physical addresses, regardless of whether > the attributes should be set via guest_memfd or via the memory attributes > at the VM level. > > Refactor existing vm_mem_set_{shared,private} functions to use the new > function. Opportunistically update the size parameter to use size_t instead > of u64. > > Signed-off-by: Sean Christopherson <[email protected]> > Co-developed-by: Ackerley Tng <[email protected]> > Signed-off-by: Ackerley Tng <[email protected]>
Reviewed-by: Fuad Tabba <[email protected]> Cheers, /fuad > --- > tools/testing/selftests/kvm/include/kvm_util.h | 46 > +++++++++++++++++++------- > 1 file changed, 34 insertions(+), 12 deletions(-) > > diff --git a/tools/testing/selftests/kvm/include/kvm_util.h > b/tools/testing/selftests/kvm/include/kvm_util.h > index 3a6b1fa7f26ef..db1442da21bb1 100644 > --- a/tools/testing/selftests/kvm/include/kvm_util.h > +++ b/tools/testing/selftests/kvm/include/kvm_util.h > @@ -454,18 +454,6 @@ static inline void vm_set_memory_attributes(struct > kvm_vm *vm, gpa_t gpa, > vm_ioctl(vm, KVM_SET_MEMORY_ATTRIBUTES, &attr); > } > > -static inline void vm_mem_set_private(struct kvm_vm *vm, gpa_t gpa, > - u64 size) > -{ > - vm_set_memory_attributes(vm, gpa, size, KVM_MEMORY_ATTRIBUTE_PRIVATE); > -} > - > -static inline void vm_mem_set_shared(struct kvm_vm *vm, gpa_t gpa, > - u64 size) > -{ > - vm_set_memory_attributes(vm, gpa, size, 0); > -} > - > static inline int __gmem_set_memory_attributes(int fd, u64 offset, > size_t size, u64 attributes, > u64 *error_offset) > @@ -532,6 +520,40 @@ static inline void gmem_set_shared(int fd, u64 offset, > size_t size) > gmem_set_memory_attributes(fd, offset, size, 0); > } > > +static inline void vm_mem_set_memory_attributes(struct kvm_vm *vm, gpa_t gpa, > + size_t size, u64 attrs) > +{ > + if (kvm_has_gmem_attributes) { > + gpa_t end = gpa + size; > + off_t fd_offset; > + gpa_t addr; > + size_t len; > + int fd; > + > + for (addr = gpa; addr < end; addr += len) { > + fd = kvm_gpa_to_guest_memfd(vm, addr, &fd_offset, > &len); > + len = min(end - addr, len); > + > + gmem_set_memory_attributes(fd, fd_offset, len, attrs); > + } > + } else { > + vm_set_memory_attributes(vm, gpa, size, attrs); > + } > +} > + > +static inline void vm_mem_set_private(struct kvm_vm *vm, gpa_t gpa, > + size_t size) > +{ > + vm_mem_set_memory_attributes(vm, gpa, size, > + KVM_MEMORY_ATTRIBUTE_PRIVATE); > +} > + > +static inline void vm_mem_set_shared(struct kvm_vm *vm, gpa_t gpa, > + size_t size) > +{ > + vm_mem_set_memory_attributes(vm, gpa, size, 0); > +} > + > void vm_guest_mem_fallocate(struct kvm_vm *vm, gpa_t gpa, u64 size, > bool punch_hole); > > > -- > 2.55.0.rc0.738.g0c8ab3ebcc-goog > >
