repository: /home/avi/kvm branch: (no branch) commit 9105435f46ca4e110237eae57272e4f5deaf8dd6 Author: Jerone Young <[EMAIL PROTECTED]> Date: Tue Nov 6 10:48:52 2007 -0600
kvm: libkvm: move msr functions to libkvm-x86.c This patch moves functions: kvm_msr_list move kvm_get_msrs move kvm_set_msrs Signed-off-by: Jerone Young <[EMAIL PROTECTED]> Signed-off-by: Avi Kivity <[EMAIL PROTECTED]> diff --git a/libkvm/kvm-x86.h b/libkvm/kvm-x86.h index bcc6981..b531a3b 100644 --- a/libkvm/kvm-x86.h +++ b/libkvm/kvm-x86.h @@ -42,4 +42,8 @@ int kvm_run_abi10(kvm_context_t kvm, int vcpu); void kvm_show_code(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-x86.c b/libkvm/libkvm-x86.c index 68564f4..b9ff47d 100644 --- a/libkvm/libkvm-x86.c +++ b/libkvm/libkvm-x86.c @@ -576,3 +576,71 @@ void kvm_show_code(kvm_context_t kvm, int vcpu) fprintf(stderr, "code:%s\n", code_str); } + +/* + * 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.c b/libkvm/libkvm.c index 715e0bb..e6a5f05 100644 --- a/libkvm/libkvm.c +++ b/libkvm/libkvm.c @@ -703,73 +703,6 @@ int kvm_set_sregs(kvm_context_t kvm, int vcpu, struct kvm_sregs *sregs) 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 index 048a7fd..09c6b8b 100644 --- a/libkvm/libkvm.h +++ b/libkvm/libkvm.h @@ -335,10 +335,6 @@ int kvm_get_sregs(kvm_context_t kvm, int vcpu, struct kvm_sregs *regs); */ 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-commits mailing list kvm-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-commits