Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 166919
b: refs/heads/master
c: 20824f3
h: refs/heads/master
i:
  166917: 9232cb7
  166915: 6098f9d
  166911: ef70879
v: v3
  • Loading branch information
Joerg Roedel authored and Avi Kivity committed Oct 4, 2009
1 parent fc255ba commit e8f63e8
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 77b1ab1732feb5e3dcbaf31d2f7547c5229f5f3a
refs/heads/master: 20824f30bb0b8ae0a4099895fd4509f54cf2e1e2
23 changes: 17 additions & 6 deletions trunk/arch/x86/kvm/svm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2059,10 +2059,14 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 *data)

switch (ecx) {
case MSR_IA32_TSC: {
u64 tsc;
u64 tsc_offset;

rdtscll(tsc);
*data = svm->vmcb->control.tsc_offset + tsc;
if (is_nested(svm))
tsc_offset = svm->nested.hsave->control.tsc_offset;
else
tsc_offset = svm->vmcb->control.tsc_offset;

*data = tsc_offset + native_read_tsc();
break;
}
case MSR_K6_STAR:
Expand Down Expand Up @@ -2148,10 +2152,17 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 data)

switch (ecx) {
case MSR_IA32_TSC: {
u64 tsc;
u64 tsc_offset = data - native_read_tsc();
u64 g_tsc_offset = 0;

if (is_nested(svm)) {
g_tsc_offset = svm->vmcb->control.tsc_offset -
svm->nested.hsave->control.tsc_offset;
svm->nested.hsave->control.tsc_offset = tsc_offset;
}

svm->vmcb->control.tsc_offset = tsc_offset + g_tsc_offset;

rdtscll(tsc);
svm->vmcb->control.tsc_offset = data - tsc;
break;
}
case MSR_K6_STAR:
Expand Down

0 comments on commit e8f63e8

Please sign in to comment.