cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

cpu-timers.h (2422B)


      1/*
      2 * CPU timers state API
      3 *
      4 * Copyright 2020 SUSE LLC
      5 *
      6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
      7 * See the COPYING file in the top-level directory.
      8 *
      9 */
     10#ifndef SYSEMU_CPU_TIMERS_H
     11#define SYSEMU_CPU_TIMERS_H
     12
     13#include "qemu/timer.h"
     14
     15/* init the whole cpu timers API, including icount, ticks, and cpu_throttle */
     16void cpu_timers_init(void);
     17
     18/* icount - Instruction Counter API */
     19
     20/*
     21 * icount enablement state:
     22 *
     23 * 0 = Disabled - Do not count executed instructions.
     24 * 1 = Enabled - Fixed conversion of insn to ns via "shift" option
     25 * 2 = Enabled - Runtime adaptive algorithm to compute shift
     26 */
     27#ifdef CONFIG_TCG
     28extern int use_icount;
     29#define icount_enabled() (use_icount)
     30#else
     31#define icount_enabled() 0
     32#endif
     33
     34/*
     35 * Update the icount with the executed instructions. Called by
     36 * cpus-tcg vCPU thread so the main-loop can see time has moved forward.
     37 */
     38void icount_update(CPUState *cpu);
     39
     40/* get raw icount value */
     41int64_t icount_get_raw(void);
     42
     43/* return the virtual CPU time in ns, based on the instruction counter. */
     44int64_t icount_get(void);
     45/*
     46 * convert an instruction counter value to ns, based on the icount shift.
     47 * This shift is set as a fixed value with the icount "shift" option
     48 * (precise mode), or it is constantly approximated and corrected at
     49 * runtime in adaptive mode.
     50 */
     51int64_t icount_to_ns(int64_t icount);
     52
     53/* configure the icount options, including "shift" */
     54void icount_configure(QemuOpts *opts, Error **errp);
     55
     56/* used by tcg vcpu thread to calc icount budget */
     57int64_t icount_round(int64_t count);
     58
     59/* if the CPUs are idle, start accounting real time to virtual clock. */
     60void icount_start_warp_timer(void);
     61void icount_account_warp_timer(void);
     62
     63/*
     64 * CPU Ticks and Clock
     65 */
     66
     67/* Caller must hold BQL */
     68void cpu_enable_ticks(void);
     69/* Caller must hold BQL */
     70void cpu_disable_ticks(void);
     71
     72/*
     73 * return the time elapsed in VM between vm_start and vm_stop.
     74 * cpu_get_ticks() uses units of the host CPU cycle counter.
     75 */
     76int64_t cpu_get_ticks(void);
     77
     78/*
     79 * Returns the monotonic time elapsed in VM, i.e.,
     80 * the time between vm_start and vm_stop
     81 */
     82int64_t cpu_get_clock(void);
     83
     84void qemu_timer_notify_cb(void *opaque, QEMUClockType type);
     85
     86/* get the VIRTUAL clock and VM elapsed ticks via the cpus accel interface */
     87int64_t cpus_get_virtual_clock(void);
     88int64_t cpus_get_elapsed_ticks(void);
     89
     90#endif /* SYSEMU_CPU_TIMERS_H */