# HG changeset patch # User Jerone Young <[EMAIL PROTECTED]> # Date 1193849564 18000 # Node ID 2046856ab739f070a37294645cfe22fd14923ee5 # Parent 93f50f2aeecde3b78c110712acecce60e47e8899 Move msrs functions to kvmctl-x86.c
This patch moves functions: kvm_msr_list move kvm_get_msrs move kvm_set_msrs Signed-off-by: Jerone Young <[EMAIL PROTECTED]> 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,6 @@ #include "libkvm.h" #include "kvm-abi-10.h" +#include <string.h> #include <unistd.h> #include <stropts.h> #include <sys/mman.h> @@ -585,4 +586,70 @@ more: return r; } - +/* + * Returns available msr list. User must free. + */ +struct kvm_msr_list *kvm_get_msr_list(kvm_context_t kvm) +{ + struct kvm_msr_list sizer, *msrs; + int r, e; + + sizer.nmsrs = 0; + r = ioctl(kvm->fd, KVM_GET_MSR_INDEX_LIST, &sizer); + if (r == -1 && errno != E2BIG) + return NULL; + msrs = malloc(sizeof *msrs + sizer.nmsrs * sizeof *msrs->indices); + if (!msrs) { + errno = ENOMEM; + return NULL; + } + msrs->nmsrs = sizer.nmsrs; + r = ioctl(kvm->fd, KVM_GET_MSR_INDEX_LIST, msrs); + if (r == -1) { + e = errno; + free(msrs); + errno = e; + return NULL; + } + return msrs; +} + +int kvm_get_msrs(kvm_context_t kvm, int vcpu, struct kvm_msr_entry *msrs, + int n) +{ + struct kvm_msrs *kmsrs = malloc(sizeof *kmsrs + n * sizeof *msrs); + int r, e; + + if (!kmsrs) { + errno = ENOMEM; + return -1; + } + kmsrs->nmsrs = n; + memcpy(kmsrs->entries, msrs, n * sizeof *msrs); + r = ioctl(kvm->vcpu_fd[vcpu], KVM_GET_MSRS, kmsrs); + e = errno; + memcpy(msrs, kmsrs->entries, n * sizeof *msrs); + free(kmsrs); + errno = e; + return r; +} + +int kvm_set_msrs(kvm_context_t kvm, int vcpu, struct kvm_msr_entry *msrs, + int n) +{ + struct kvm_msrs *kmsrs = malloc(sizeof *kmsrs + n * sizeof *msrs); + int r, e; + + if (!kmsrs) { + errno = ENOMEM; + return -1; + } + kmsrs->nmsrs = n; + memcpy(kmsrs->entries, msrs, n * sizeof *msrs); + r = ioctl(kvm->vcpu_fd[vcpu], KVM_SET_MSRS, kmsrs); + e = errno; + free(kmsrs); + errno = e; + return r; +} + diff --git a/libkvm/libkvm-x86.h b/libkvm/libkvm-x86.h --- a/libkvm/libkvm-x86.h +++ b/libkvm/libkvm-x86.h @@ -58,4 +58,9 @@ int kvm_set_lapic(kvm_context_t kvm, int int kvm_run_abi10(kvm_context_t kvm, int vcpu); +struct kvm_msr_list *kvm_get_msr_list(kvm_context_t); +int kvm_get_msrs(kvm_context_t, int vcpu, struct kvm_msr_entry *msrs, int n); +int kvm_set_msrs(kvm_context_t, int vcpu, struct kvm_msr_entry *msrs, int n); + + #endif diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c --- a/libkvm/libkvm.c +++ b/libkvm/libkvm.c @@ -628,73 +628,6 @@ int kvm_set_sregs(kvm_context_t kvm, int return ioctl(kvm->vcpu_fd[vcpu], KVM_SET_SREGS, sregs); } -/* - * Returns available msr list. User must free. - */ -struct kvm_msr_list *kvm_get_msr_list(kvm_context_t kvm) -{ - struct kvm_msr_list sizer, *msrs; - int r, e; - - sizer.nmsrs = 0; - r = ioctl(kvm->fd, KVM_GET_MSR_INDEX_LIST, &sizer); - if (r == -1 && errno != E2BIG) - return NULL; - msrs = malloc(sizeof *msrs + sizer.nmsrs * sizeof *msrs->indices); - if (!msrs) { - errno = ENOMEM; - return NULL; - } - msrs->nmsrs = sizer.nmsrs; - r = ioctl(kvm->fd, KVM_GET_MSR_INDEX_LIST, msrs); - if (r == -1) { - e = errno; - free(msrs); - errno = e; - return NULL; - } - return msrs; -} - -int kvm_get_msrs(kvm_context_t kvm, int vcpu, struct kvm_msr_entry *msrs, - int n) -{ - struct kvm_msrs *kmsrs = malloc(sizeof *kmsrs + n * sizeof *msrs); - int r, e; - - if (!kmsrs) { - errno = ENOMEM; - return -1; - } - kmsrs->nmsrs = n; - memcpy(kmsrs->entries, msrs, n * sizeof *msrs); - r = ioctl(kvm->vcpu_fd[vcpu], KVM_GET_MSRS, kmsrs); - e = errno; - memcpy(msrs, kmsrs->entries, n * sizeof *msrs); - free(kmsrs); - errno = e; - return r; -} - -int kvm_set_msrs(kvm_context_t kvm, int vcpu, struct kvm_msr_entry *msrs, - int n) -{ - struct kvm_msrs *kmsrs = malloc(sizeof *kmsrs + n * sizeof *msrs); - int r, e; - - if (!kmsrs) { - errno = ENOMEM; - return -1; - } - kmsrs->nmsrs = n; - memcpy(kmsrs->entries, msrs, n * sizeof *msrs); - r = ioctl(kvm->vcpu_fd[vcpu], KVM_SET_MSRS, kmsrs); - e = errno; - free(kmsrs); - errno = e; - return r; -} - static void print_seg(FILE *file, const char *name, struct kvm_segment *seg) { fprintf(stderr, diff --git a/libkvm/libkvm.h b/libkvm/libkvm.h --- a/libkvm/libkvm.h +++ b/libkvm/libkvm.h @@ -369,10 +369,6 @@ int kvm_get_sregs(kvm_context_t kvm, int */ int kvm_set_sregs(kvm_context_t kvm, int vcpu, struct kvm_sregs *regs); -struct kvm_msr_list *kvm_get_msr_list(kvm_context_t); -int kvm_get_msrs(kvm_context_t, int vcpu, struct kvm_msr_entry *msrs, int n); -int kvm_set_msrs(kvm_context_t, int vcpu, struct kvm_msr_entry *msrs, int n); - /*! * \brief Simulate an external vectored interrupt * ------------------------------------------------------------------------- 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