return hvm_monitor_cpuid(inst_len, leaf, subleaf);
}
-static uint64_t _hvm_rdtsc_intercept(void)
-{
- struct vcpu *curr = current;
-#if !defined(NDEBUG) || defined(CONFIG_PERF_COUNTERS)
- struct domain *currd = curr->domain;
-
- if ( currd->arch.vtsc )
- switch ( hvm_guest_x86_mode(curr) )
- {
- case 8:
- case 4:
- case 2:
- if ( unlikely(hvm_get_cpl(curr)) )
- {
- case 1:
- currd->arch.vtsc_usercount++;
- break;
- }
- /* fall through */
- case 0:
- currd->arch.vtsc_kerncount++;
- break;
- }
-#endif
-
- return hvm_get_guest_tsc(curr);
-}
-
void hvm_rdtsc_intercept(struct cpu_user_regs *regs)
{
- msr_split(regs, _hvm_rdtsc_intercept());
+ msr_split(regs, hvm_get_guest_tsc(current));
HVMTRACE_2D(RDTSC, regs->eax, regs->edx);
}
break;
case MSR_IA32_TSC:
- *msr_content = _hvm_rdtsc_intercept();
+ *msr_content = hvm_get_guest_tsc(v);
break;
case MSR_IA32_TSC_ADJUST:
spin_lock(&d->arch.vtsc_lock);
-#if !defined(NDEBUG) || defined(CONFIG_PERF_COUNTERS)
- if ( guest_kernel_mode(v, regs) )
- d->arch.vtsc_kerncount++;
- else
- d->arch.vtsc_usercount++;
-#endif
-
if ( (int64_t)(now - d->arch.vtsc_last) > 0 )
d->arch.vtsc_last = now;
else
printk(",khz=%"PRIu32, d->arch.tsc_khz);
if ( d->arch.incarnation )
printk(",inc=%"PRIu32, d->arch.incarnation);
-#if !defined(NDEBUG) || defined(CONFIG_PERF_COUNTERS)
- if ( d->arch.vtsc_kerncount | d->arch.vtsc_usercount )
- printk(",vtsc count: %"PRIu64" kernel,%"PRIu64" user",
- d->arch.vtsc_kerncount, d->arch.vtsc_usercount);
-#endif
printk("\n");
domcnt++;
}
hardware TSC scaling cases */
uint32_t incarnation; /* incremented every restore or live migrate
(possibly other cases in the future */
-#if !defined(NDEBUG) || defined(CONFIG_PERF_COUNTERS)
- uint64_t vtsc_kerncount;
- uint64_t vtsc_usercount;
-#endif
/* Pseudophysical e820 map (XENMEM_memory_map). */
spinlock_t e820_lock;