Signed-off-by: Glauber Costa <[EMAIL PROTECTED]> --- libkvm/libkvm.c | 78 ------------------------------------------------------- qemu/qemu-kvm.c | 11 ++++--- 2 files changed, 6 insertions(+), 83 deletions(-)
diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c index 0bacb43..eb85445 100644 --- a/libkvm/libkvm.c +++ b/libkvm/libkvm.c @@ -504,84 +504,6 @@ int kvm_is_allocated_mem(kvm_context_t kvm, unsigned long phys_start, return 0; } -int kvm_create_mem_hole(kvm_context_t kvm, unsigned long phys_start, - unsigned long len) -{ -#ifdef KVM_CAP_USER_MEMORY - int slot; - int r; - struct kvm_userspace_memory_region rmslot; - struct kvm_userspace_memory_region newslot1; - struct kvm_userspace_memory_region newslot2; - - len = (len + PAGE_SIZE - 1) & PAGE_MASK; - - slot = get_intersecting_slot(phys_start); - /* no need to create hole, as there is already hole */ - if (slot == -1) - return 0; - - memset(&rmslot, 0, sizeof(struct kvm_userspace_memory_region)); - memset(&newslot1, 0, sizeof(struct kvm_userspace_memory_region)); - memset(&newslot2, 0, sizeof(struct kvm_userspace_memory_region)); - - rmslot.guest_phys_addr = slots[slot].phys_addr; - rmslot.slot = slot; - - newslot1.guest_phys_addr = slots[slot].phys_addr; - newslot1.memory_size = phys_start - slots[slot].phys_addr; - newslot1.slot = slot; - newslot1.userspace_addr = slots[slot].userspace_addr; - newslot1.flags = slots[slot].flags; - - newslot2.guest_phys_addr = newslot1.guest_phys_addr + - newslot1.memory_size + len; - newslot2.memory_size = slots[slot].phys_addr + - slots[slot].len - newslot2.guest_phys_addr; - newslot2.userspace_addr = newslot1.userspace_addr + - newslot1.memory_size; - newslot2.slot = get_free_slot(kvm); - newslot2.flags = newslot1.flags; - - r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, &rmslot); - if (r == -1) { - fprintf(stderr, "kvm_create_mem_hole: %s\n", strerror(errno)); - return -1; - } - free_slot(slot); - -#ifdef DEBUG_MEMREG - printf("%s, newslot1: gpa: %llx, size: %llx, uaddr: %llx, slot: %x, flags: %lx\n", - __func__, newslot1.guest_phys_addr, newslot1.memory_size, - newslot1.userspace_addr, newslot1.slot, newslot1.flags); -#endif - - r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, &newslot1); - if (r == -1) { - fprintf(stderr, "kvm_create_mem_hole: %s\n", strerror(errno)); - return -1; - } - register_slot(newslot1.slot, newslot1.guest_phys_addr, - newslot1.memory_size, 1, newslot1.userspace_addr, - newslot1.flags); - -#ifdef DEBUG_MEMREG - printf("%s, newslot2: gpa: %llx, size: %llx, uaddr: %llx, slot: %x, flags: %lx\n", - __func__, newslot2.guest_phys_addr, newslot2.memory_size, - newslot2.userspace_addr, newslot2.slot, newslot2.flags); -#endif - r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, &newslot2); - if (r == -1) { - fprintf(stderr, "kvm_create_mem_hole: %s\n", strerror(errno)); - return -1; - } - register_slot(newslot2.slot, newslot2.guest_phys_addr, - newslot2.memory_size, 1, newslot2.userspace_addr, - newslot2.flags); -#endif - return 0; -} - int kvm_register_userspace_phys_mem(kvm_context_t kvm, unsigned long phys_start, void *userspace_addr, unsigned long len, int log) diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c index f24c436..e6221f8 100644 --- a/qemu/qemu-kvm.c +++ b/qemu/qemu-kvm.c @@ -787,11 +787,12 @@ void kvm_cpu_register_physical_memory(target_phys_addr_t start_addr, if (r) return; r = kvm_is_intersecting_mem(kvm_context, start_addr); - if (r) - kvm_create_mem_hole(kvm_context, start_addr, size); - r = kvm_register_userspace_phys_mem(kvm_context, start_addr, - phys_ram_base + phys_offset, - size, 0); + if (r) { + printf("Ignoring intersecting memory %llx (%lx)\n", start_addr, size); + } else + r = kvm_register_userspace_phys_mem(kvm_context, start_addr, + phys_ram_base + phys_offset, + size, 0); if (r < 0) { printf("kvm_cpu_register_physical_memory: failed\n"); exit(1); -- 1.5.5.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html