# HG changeset patch
# User Jerone Young <[EMAIL PROTECTED]>
# Date 1194027872 18000
# Node ID 486d6818fcf62f9fda006e9e090bf1eba40e0e14
# Parent  d92515231c6345b7a4b5388089a5edb4c323a392
Move kvm_alloc_userspace_memory to libkvm-x86.c

This moves x86 specific function kvm_alloc_userspace_memory() out
of libkvm.c into libkvm-x86.c.

Signed-off-by: Jerone Young <[EMAIL PROTECTED]>

diff --git a/libkvm/kvm-x86.h b/libkvm/kvm-x86.h
--- a/libkvm/kvm-x86.h
+++ b/libkvm/kvm-x86.h
@@ -25,4 +25,7 @@ int kvm_alloc_kernel_memory(kvm_context_
 int kvm_alloc_kernel_memory(kvm_context_t kvm, unsigned long memory,
                                                                void **vm_mem);
 
+int kvm_alloc_userspace_memory(kvm_context_t kvm, unsigned long memory,
+                                                               void **vm_mem);
+
 #endif
diff --git a/libkvm/libkvm-x86.c b/libkvm/libkvm-x86.c
--- a/libkvm/libkvm-x86.c
+++ b/libkvm/libkvm-x86.c
@@ -1,5 +1,8 @@
 #include "libkvm.h"
 #include "kvm-x86.h"
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <string.h>
 #include <unistd.h>
 #include <stropts.h>
 #include <sys/mman.h>
@@ -79,3 +82,107 @@ int kvm_alloc_kernel_memory(kvm_context_
 
        return 0;
 }
+
+
+#ifdef KVM_CAP_USER_MEMORY
+
+int kvm_alloc_userspace_memory(kvm_context_t kvm, unsigned long memory,
+                                                               void **vm_mem)
+{
+       unsigned long dosmem = 0xa0000;
+       unsigned long exmem = 0xc0000;
+       unsigned long pcimem = 0xe0000000;
+       int r;
+       int tss_ext;
+       struct kvm_userspace_memory_region low_memory = {
+               .memory_size = memory  < dosmem ? memory : dosmem,
+               .guest_phys_addr = 0,
+       };
+       struct kvm_userspace_memory_region extended_memory = {
+               .memory_size = memory < exmem ? 0 : memory - exmem,
+               .guest_phys_addr = exmem,
+       };
+       struct kvm_userspace_memory_region above_4g_memory = {
+               .memory_size = memory < pcimem ? 0 : memory - pcimem,
+               .guest_phys_addr = 0x100000000ULL,
+       };
+
+#ifdef KVM_CAP_SET_TSS_ADDR
+       tss_ext = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_SET_TSS_ADDR);
+#else
+       tss_ext = 0;
+#endif
+
+       if (memory >= pcimem) {
+               extended_memory.memory_size = pcimem - exmem;
+               *vm_mem = mmap(NULL, memory + 0x100000000ULL - pcimem,
+                               PROT_READ|PROT_WRITE, MAP_ANONYMOUS |
+                                                       MAP_SHARED, -1, 0);
+       }
+       else
+               *vm_mem = mmap(NULL, memory, PROT_READ|PROT_WRITE, MAP_ANONYMOUS
+                                                       | MAP_SHARED, -1, 0);
+       if (*vm_mem == MAP_FAILED) {
+               fprintf(stderr, "kvm_alloc_userspace_memory: %s", 
strerror(errno));
+               return -1;
+       }
+
+       low_memory.userspace_addr = (unsigned long)*vm_mem;
+       low_memory.slot = get_free_slot(kvm);
+       /* 640K should be enough. */
+       r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, &low_memory);
+       if (r == -1) {
+               fprintf(stderr, "kvm_create_memory_region: %m\n");
+               return -1;
+       }
+       register_slot(low_memory.slot, low_memory.guest_phys_addr);
+
+       if (extended_memory.memory_size) {
+               r = munmap(*vm_mem + dosmem, exmem - dosmem);
+               if (r == -1) {
+                       fprintf(stderr, "kvm_alloc_userspace_memory: %s",
+                                                       strerror(errno));
+                       return -1;
+               }
+               extended_memory.userspace_addr = (unsigned long)(*vm_mem + 
exmem);
+               if (tss_ext > 0)
+                       extended_memory.slot = get_free_slot(kvm);
+               else
+                       extended_memory.slot = 0;
+               r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, 
&extended_memory);
+               if (r == -1) {
+                       fprintf(stderr, "kvm_create_memory_region: %m\n");
+                       return -1;
+               }
+               register_slot(extended_memory.slot,
+                             extended_memory.guest_phys_addr);
+       }
+
+       if (above_4g_memory.memory_size) {
+               r = munmap(*vm_mem + pcimem, 0x100000000ULL - pcimem);
+               if (r == -1) {
+                       fprintf(stderr, "kvm_alloc_userspace_memory: %s",
+                                                       strerror(errno));
+                       return -1;
+               }
+               above_4g_memory.userspace_addr = (unsigned long)(*vm_mem + 
0x100000000ULL);
+               above_4g_memory.slot = get_free_slot(kvm);
+               r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, 
&above_4g_memory);
+               if (r == -1) {
+                       fprintf(stderr, "kvm_create_memory_region: %m\n");
+                       return -1;
+               }
+               register_slot(above_4g_memory.slot,
+                             above_4g_memory.guest_phys_addr);
+       }
+
+       kvm_userspace_memory_region_save_params(kvm, &low_memory);
+       kvm_userspace_memory_region_save_params(kvm, &extended_memory);
+       if (above_4g_memory.memory_size)
+               kvm_userspace_memory_region_save_params(kvm, &above_4g_memory);
+
+       return 0;
+}
+
+#endif
+
diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c
--- a/libkvm/libkvm.c
+++ b/libkvm/libkvm.c
@@ -317,108 +317,6 @@ int kvm_get_shadow_pages(kvm_context_t k
        return -1;
 }
 
-
-#ifdef KVM_CAP_USER_MEMORY
-
-int kvm_alloc_userspace_memory(kvm_context_t kvm, unsigned long memory,
-                                                               void **vm_mem)
-{
-       unsigned long dosmem = 0xa0000;
-       unsigned long exmem = 0xc0000;
-       unsigned long pcimem = 0xe0000000;
-       int r;
-       int tss_ext;
-       struct kvm_userspace_memory_region low_memory = {
-               .memory_size = memory  < dosmem ? memory : dosmem,
-               .guest_phys_addr = 0,
-       };
-       struct kvm_userspace_memory_region extended_memory = {
-               .memory_size = memory < exmem ? 0 : memory - exmem,
-               .guest_phys_addr = exmem,
-       };
-       struct kvm_userspace_memory_region above_4g_memory = {
-               .memory_size = memory < pcimem ? 0 : memory - pcimem,
-               .guest_phys_addr = 0x100000000ULL,
-       };
-
-#ifdef KVM_CAP_SET_TSS_ADDR
-       tss_ext = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_SET_TSS_ADDR);
-#else
-       tss_ext = 0;
-#endif
-
-       if (memory >= pcimem) {
-               extended_memory.memory_size = pcimem - exmem;
-               *vm_mem = mmap(NULL, memory + 0x100000000ULL - pcimem,
-                               PROT_READ|PROT_WRITE, MAP_ANONYMOUS |
-                                                       MAP_SHARED, -1, 0);
-       }
-       else
-               *vm_mem = mmap(NULL, memory, PROT_READ|PROT_WRITE, MAP_ANONYMOUS
-                                                       | MAP_SHARED, -1, 0);
-       if (*vm_mem == MAP_FAILED) {
-               fprintf(stderr, "kvm_alloc_userspace_memory: %s", 
strerror(errno));
-               return -1;
-       }
-
-       low_memory.userspace_addr = (unsigned long)*vm_mem;
-       low_memory.slot = get_free_slot(kvm);
-       /* 640K should be enough. */
-       r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, &low_memory);
-       if (r == -1) {
-               fprintf(stderr, "kvm_create_memory_region: %m\n");
-               return -1;
-       }
-       register_slot(low_memory.slot, low_memory.guest_phys_addr);
-
-       if (extended_memory.memory_size) {
-               r = munmap(*vm_mem + dosmem, exmem - dosmem);
-               if (r == -1) {
-                       fprintf(stderr, "kvm_alloc_userspace_memory: %s",
-                                                       strerror(errno));
-                       return -1;
-               }
-               extended_memory.userspace_addr = (unsigned long)(*vm_mem + 
exmem);
-               if (tss_ext > 0)
-                       extended_memory.slot = get_free_slot(kvm);
-               else
-                       extended_memory.slot = 0;
-               r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, 
&extended_memory);
-               if (r == -1) {
-                       fprintf(stderr, "kvm_create_memory_region: %m\n");
-                       return -1;
-               }
-               register_slot(extended_memory.slot,
-                             extended_memory.guest_phys_addr);
-       }
-
-       if (above_4g_memory.memory_size) {
-               r = munmap(*vm_mem + pcimem, 0x100000000ULL - pcimem);
-               if (r == -1) {
-                       fprintf(stderr, "kvm_alloc_userspace_memory: %s",
-                                                       strerror(errno));
-                       return -1;
-               }
-               above_4g_memory.userspace_addr = (unsigned long)(*vm_mem + 
0x100000000ULL);
-               above_4g_memory.slot = get_free_slot(kvm);
-               r = ioctl(kvm->vm_fd, KVM_SET_USER_MEMORY_REGION, 
&above_4g_memory);
-               if (r == -1) {
-                       fprintf(stderr, "kvm_create_memory_region: %m\n");
-                       return -1;
-               }
-               register_slot(above_4g_memory.slot,
-                             above_4g_memory.guest_phys_addr);
-       }
-
-       kvm_userspace_memory_region_save_params(kvm, &low_memory);
-       kvm_userspace_memory_region_save_params(kvm, &extended_memory);
-       if (above_4g_memory.memory_size)
-               kvm_userspace_memory_region_save_params(kvm, &above_4g_memory);
-
-       return 0;
-}
-
-#endif
 
 int kvm_create_vm(kvm_context_t kvm)
 {

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to