Skip to content

Commit 437ae00

Browse files
committed
[libhv] add missing implementations for vmm_cpu_{get,set}_msr
1 parent c0931cf commit 437ae00

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

src/vmm_kvm.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,36 @@ vmm_cpu_get_register(vmm_vm_t vm, vmm_cpu_t cpu, vmm_x64_reg_t reg, uint64_t *va
455455
return 0;
456456
}
457457

458+
int
459+
vmm_cpu_get_msr(vmm_vm_t vm, vmm_cpu_t cpu, uint32_t msr, uint64_t *value)
460+
{
461+
char buf[offsetof(struct kvm_msrs, entries) + sizeof(struct kvm_msr_entry)];
462+
struct kvm_msrs *kmsrs = (struct kvm_msrs *) buf;
463+
464+
kmsrs->nmsrs = 1;
465+
kmsrs->entries[0].index = msr;
466+
int r;
467+
if ((r = ioctl(cpu->vcpufd, KVM_GET_MSRS, kmsrs)) < 0)
468+
return -errno;
469+
*value = kmsrs->entries[0].data;
470+
return 0;
471+
}
472+
473+
int
474+
vmm_cpu_set_msr(vmm_vm_t vm, vmm_cpu_t cpu, uint32_t msr, uint64_t value)
475+
{
476+
char buf[offsetof(struct kvm_msrs, entries) + sizeof(struct kvm_msr_entry)];
477+
struct kvm_msrs *kmsrs = (struct kvm_msrs *) buf;
478+
479+
kmsrs->nmsrs = 1;
480+
kmsrs->entries[0].index = msr;
481+
kmsrs->entries[0].data = value;
482+
int r;
483+
if ((r = ioctl(cpu->vcpufd, KVM_SET_MSRS, kmsrs)) < 0)
484+
return -errno;
485+
return 0;
486+
}
487+
458488
int
459489
vmm_cpu_get_state(vmm_vm_t vm, vmm_cpu_t cpu, int id, uint64_t *value)
460490
{

0 commit comments

Comments
 (0)