From ddea967990dde974ab8290363f51952d098a8370 Mon Sep 17 00:00:00 2001 From: Jerone Young Date: Tue, 6 Nov 2007 10:48:47 -0600 Subject: [PATCH] kvm: libkvm: move kvm_create_kernel_phys_mem to libkvm-x86.c This patch moves kvm_create_kernel_phys_mem to x86 as this is the only arch that will be allocating memory for guest in the kernel (at least for older kvm versions). Signed-off-by: Jerone Young Signed-off-by: Avi Kivity --- kvm/libkvm/kvm-x86.h | 5 +++++ kvm/libkvm/libkvm-x86.c | 32 ++++++++++++++++++++++++++++++++ kvm/libkvm/libkvm.c | 32 -------------------------------- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/kvm/libkvm/kvm-x86.h b/kvm/libkvm/kvm-x86.h index 082d32d586..0cb81d3c1e 100644 --- a/kvm/libkvm/kvm-x86.h +++ b/kvm/libkvm/kvm-x86.h @@ -20,6 +20,8 @@ #include "kvm-common.h" +#include "kvm-common.h" + #define PAGE_SIZE 4096ul #define PAGE_MASK (~(PAGE_SIZE - 1)) @@ -33,4 +35,7 @@ int kvm_alloc_userspace_memory(kvm_context_t kvm, unsigned long memory, int kvm_set_tss_addr(kvm_context_t kvm, unsigned long addr); +void *kvm_create_kernel_phys_mem(kvm_context_t kvm, unsigned long phys_start, + unsigned long len, int log, int writable); + #endif diff --git a/kvm/libkvm/libkvm-x86.c b/kvm/libkvm/libkvm-x86.c index d56521b5dc..49f1e2126b 100644 --- a/kvm/libkvm/libkvm-x86.c +++ b/kvm/libkvm/libkvm-x86.c @@ -261,4 +261,36 @@ int kvm_arch_create(kvm_context_t kvm, unsigned long phys_mem_bytes, return 0; } +void *kvm_create_kernel_phys_mem(kvm_context_t kvm, unsigned long phys_start, + unsigned long len, int log, int writable) +{ + int r; + int prot = PROT_READ; + void *ptr; + struct kvm_memory_region memory = { + .memory_size = len, + .guest_phys_addr = phys_start, + .flags = log ? KVM_MEM_LOG_DIRTY_PAGES : 0, + }; + + memory.slot = get_free_slot(kvm); + r = ioctl(kvm->vm_fd, KVM_SET_MEMORY_REGION, &memory); + if (r == -1) { + fprintf(stderr, "create_kernel_phys_mem: %s", strerror(errno)); + return 0; + } + register_slot(memory.slot, memory.guest_phys_addr); + kvm_memory_region_save_params(kvm, &memory); + + if (writable) + prot |= PROT_WRITE; + + ptr = mmap(NULL, len, prot, MAP_SHARED, kvm->vm_fd, phys_start); + if (ptr == MAP_FAILED) { + fprintf(stderr, "create_kernel_phys_mem: %s", strerror(errno)); + return 0; + } + + return ptr; +} diff --git a/kvm/libkvm/libkvm.c b/kvm/libkvm/libkvm.c index f70097d0ca..571b9768af 100644 --- a/kvm/libkvm/libkvm.c +++ b/kvm/libkvm/libkvm.c @@ -399,38 +399,6 @@ int kvm_create(kvm_context_t kvm, unsigned long phys_mem_bytes, void **vm_mem) return 0; } -void *kvm_create_kernel_phys_mem(kvm_context_t kvm, unsigned long phys_start, - unsigned long len, int log, int writable) -{ - int r; - int prot = PROT_READ; - void *ptr; - struct kvm_memory_region memory = { - .memory_size = len, - .guest_phys_addr = phys_start, - .flags = log ? KVM_MEM_LOG_DIRTY_PAGES : 0, - }; - - memory.slot = get_free_slot(kvm); - r = ioctl(kvm->vm_fd, KVM_SET_MEMORY_REGION, &memory); - if (r == -1) { - fprintf(stderr, "create_kernel_phys_mem: %s", strerror(errno)); - return 0; - } - register_slot(memory.slot, memory.guest_phys_addr); - kvm_memory_region_save_params(kvm, &memory); - - if (writable) - prot |= PROT_WRITE; - - ptr = mmap(NULL, len, prot, MAP_SHARED, kvm->vm_fd, phys_start); - if (ptr == MAP_FAILED) { - fprintf(stderr, "create_kernel_phys_mem: %s", strerror(errno)); - return 0; - } - - return ptr; -} #ifdef KVM_CAP_USER_MEMORY -- 2.11.4.GIT