Add function to set the guestmem attributes.
diff --git a/include/kvm/kvm.h b/include/kvm/kvm.h
index f972bc1..7bea712 100644
--- a/include/kvm/kvm.h
+++ b/include/kvm/kvm.h
@@ -229,6 +229,7 @@
void map_guest(struct kvm *kvm);
void unmap_guest_private(struct kvm *kvm);
void set_guest_memory_private(struct kvm *kvm);
+int set_guest_memory_attributes(struct kvm *kvm, u64 gpa, u64 size, u64 attributes);
bool kvm__arch_load_kernel_image(struct kvm *kvm, int fd_kernel, int fd_initrd,
const char *kernel_cmdline);
diff --git a/kvm.c b/kvm.c
index 99f4535..76955ff 100644
--- a/kvm.c
+++ b/kvm.c
@@ -603,31 +603,14 @@
static int set_guest_bank_private(struct kvm *kvm, struct kvm_mem_bank *bank, void *data)
{
- struct kvm_memory_attributes attr = {
- .address = bank->guest_phys_addr,
- .size = bank->size,
- .attributes = KVM_MEMORY_ATTRIBUTE_PRIVATE,
- .flags = 0,
- };
- int ret;
-
pr_debug("%s gpa 0x%llx (size: %llu)",
__func__,
(unsigned long long)bank->guest_phys_addr,
(unsigned long long)bank->size);
- ret = ioctl(kvm->vm_fd, KVM_SET_MEMORY_ATTRIBUTES, &attr);
- //if (ret || attr.size != 0)
- if (ret) // TODO: might change
- ret = -errno;
-
- if (ret)
- pr_warning("%s hva 0x%llx (size: %llu) failed with error %d",
- __func__,
- (unsigned long long)bank->host_addr,
- (unsigned long long)bank->size,
- ret);
- return 0;
+ return set_guest_memory_attributes(kvm, bank->guest_phys_addr,
+ bank->size,
+ KVM_MEMORY_ATTRIBUTE_PRIVATE);
}
void map_guest_range(struct kvm *kvm, u64 gpa, u64 size)
@@ -678,6 +661,30 @@
kvm__for_each_mem_bank(kvm, KVM_MEM_TYPE_GUESTFD, set_guest_bank_private, NULL);
}
+int set_guest_memory_attributes(struct kvm *kvm, u64 gpa, u64 size, u64 attributes)
+{
+ struct kvm_memory_attributes attr = {
+ .address = gpa,
+ .size = size,
+ .attributes = attributes,
+ .flags = 0,
+ };
+ int ret;
+
+ ret = ioctl(kvm->vm_fd, KVM_SET_MEMORY_ATTRIBUTES, &attr);
+ //if (ret || attr.size != 0)
+ if (ret) // TODO: might change
+ ret = -errno;
+
+ if (ret)
+ pr_warning("%s hva 0x%llx (size: %llu) failed with error %d",
+ __func__,
+ (unsigned long long)gpa,
+ (unsigned long long)size,
+ ret);
+ return ret;
+}
+
int kvm__recommended_cpus(struct kvm *kvm)
{
int ret;