File tree Expand file tree Collapse file tree 4 files changed +12
-7
lines changed Expand file tree Collapse file tree 4 files changed +12
-7
lines changed Original file line number Diff line number Diff line change @@ -1226,6 +1226,7 @@ void kvm_define_shared_msr(unsigned index, u32 msr);
1226
1226
int kvm_set_shared_msr (unsigned index , u64 val , u64 mask );
1227
1227
1228
1228
u64 kvm_scale_tsc (struct kvm_vcpu * vcpu , u64 tsc );
1229
+ u64 kvm_read_l1_tsc (struct kvm_vcpu * vcpu , u64 host_tsc );
1229
1230
1230
1231
unsigned long kvm_get_linear_rip (struct kvm_vcpu * vcpu );
1231
1232
bool kvm_is_linear_rip (struct kvm_vcpu * vcpu , unsigned long linear_rip );
Original file line number Diff line number Diff line change @@ -1250,7 +1250,7 @@ void wait_lapic_expire(struct kvm_vcpu *vcpu)
1250
1250
1251
1251
tsc_deadline = apic -> lapic_timer .expired_tscdeadline ;
1252
1252
apic -> lapic_timer .expired_tscdeadline = 0 ;
1253
- guest_tsc = kvm_x86_ops -> read_l1_tsc (vcpu , rdtsc ());
1253
+ guest_tsc = kvm_read_l1_tsc (vcpu , rdtsc ());
1254
1254
trace_kvm_wait_lapic_expire (vcpu -> vcpu_id , guest_tsc - tsc_deadline );
1255
1255
1256
1256
/* __delay is delay_tsc whenever the hardware has TSC, thus always. */
@@ -1318,7 +1318,7 @@ static void start_apic_timer(struct kvm_lapic *apic)
1318
1318
local_irq_save (flags );
1319
1319
1320
1320
now = apic -> lapic_timer .timer .base -> get_time ();
1321
- guest_tsc = kvm_x86_ops -> read_l1_tsc (vcpu , rdtsc ());
1321
+ guest_tsc = kvm_read_l1_tsc (vcpu , rdtsc ());
1322
1322
if (likely (tscdeadline > guest_tsc )) {
1323
1323
ns = (tscdeadline - guest_tsc ) * 1000000ULL ;
1324
1324
do_div (ns , this_tsc_khz );
Original file line number Diff line number Diff line change @@ -2984,8 +2984,7 @@ static int cr8_write_interception(struct vcpu_svm *svm)
2984
2984
static u64 svm_read_l1_tsc (struct kvm_vcpu * vcpu , u64 host_tsc )
2985
2985
{
2986
2986
struct vmcb * vmcb = get_host_vmcb (to_svm (vcpu ));
2987
- return vmcb -> control .tsc_offset +
2988
- kvm_scale_tsc (vcpu , host_tsc );
2987
+ return vmcb -> control .tsc_offset + host_tsc ;
2989
2988
}
2990
2989
2991
2990
static int svm_get_msr (struct kvm_vcpu * vcpu , struct msr_data * msr_info )
Original file line number Diff line number Diff line change @@ -1401,6 +1401,12 @@ static u64 kvm_compute_tsc_offset(struct kvm_vcpu *vcpu, u64 target_tsc)
1401
1401
return target_tsc - tsc ;
1402
1402
}
1403
1403
1404
+ u64 kvm_read_l1_tsc (struct kvm_vcpu * vcpu , u64 host_tsc )
1405
+ {
1406
+ return kvm_x86_ops -> read_l1_tsc (vcpu , kvm_scale_tsc (vcpu , host_tsc ));
1407
+ }
1408
+ EXPORT_SYMBOL_GPL (kvm_read_l1_tsc );
1409
+
1404
1410
void kvm_write_tsc (struct kvm_vcpu * vcpu , struct msr_data * msr )
1405
1411
{
1406
1412
struct kvm * kvm = vcpu -> kvm ;
@@ -1738,7 +1744,7 @@ static int kvm_guest_time_update(struct kvm_vcpu *v)
1738
1744
kernel_ns = get_kernel_ns ();
1739
1745
}
1740
1746
1741
- tsc_timestamp = kvm_x86_ops -> read_l1_tsc (v , host_tsc );
1747
+ tsc_timestamp = kvm_read_l1_tsc (v , host_tsc );
1742
1748
1743
1749
/*
1744
1750
* We may have to catch up the TSC to match elapsed wall clock
@@ -6545,8 +6551,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
6545
6551
if (hw_breakpoint_active ())
6546
6552
hw_breakpoint_restore ();
6547
6553
6548
- vcpu -> arch .last_guest_tsc = kvm_x86_ops -> read_l1_tsc (vcpu ,
6549
- rdtsc ());
6554
+ vcpu -> arch .last_guest_tsc = kvm_read_l1_tsc (vcpu , rdtsc ());
6550
6555
6551
6556
vcpu -> mode = OUTSIDE_GUEST_MODE ;
6552
6557
smp_wmb ();
You can’t perform that action at this time.
0 commit comments