mirror of
https://gitlab.com/qemu-project/qemu
synced 2025-04-29 09:22:36 +08:00
include/exec: Split out icount.h
Split icount stuff from system/cpu-timers.h. There are 17 files which only require icount.h, 7 that only require cpu-timers.h, and 7 that require both. Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
31030cf0ff
commit
161f5bc8e9
@ -35,7 +35,7 @@
|
||||
#include "exec/log.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "exec/cpu-all.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "exec/replay-core.h"
|
||||
#include "system/tcg.h"
|
||||
#include "exec/helper-proto-common.h"
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include "system/replay.h"
|
||||
#include "system/runstate.h"
|
||||
#include "hw/core/cpu.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/cpu-timers-internal.h"
|
||||
|
||||
/*
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "qapi/qapi-commands-machine.h"
|
||||
#include "monitor/monitor.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/tcg.h"
|
||||
#include "tcg/tcg.h"
|
||||
#include "internal-common.h"
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "system/replay.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/guest-random.h"
|
||||
#include "hw/core/cpu.h"
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "system/tcg.h"
|
||||
#include "system/replay.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/notify.h"
|
||||
#include "qemu/guest-random.h"
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "qemu/lockable.h"
|
||||
#include "system/tcg.h"
|
||||
#include "system/replay.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/notify.h"
|
||||
#include "qemu/guest-random.h"
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "system/accel-ops.h"
|
||||
#include "system/tcg.h"
|
||||
#include "system/replay.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/guest-random.h"
|
||||
#include "qemu/timer.h"
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "system/tcg.h"
|
||||
#include "exec/replay-core.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "tcg/startup.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
@ -55,7 +55,7 @@
|
||||
#include "qemu/cacheinfo.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "exec/log.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/tcg.h"
|
||||
#include "qapi/error.h"
|
||||
#include "accel/tcg/cpu-ops.h"
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "migration/vmstate.h"
|
||||
#include "qemu/host-utils.h"
|
||||
#include "exec/replay-core.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/qtest.h"
|
||||
#include "block/aio.h"
|
||||
#include "hw/clock.h"
|
||||
|
68
include/exec/icount.h
Normal file
68
include/exec/icount.h
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* icount - Instruction Counter API
|
||||
* CPU timers state API
|
||||
*
|
||||
* Copyright 2020 SUSE LLC
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#ifndef EXEC_ICOUNT_H
|
||||
#define EXEC_ICOUNT_H
|
||||
|
||||
/**
|
||||
* ICountMode: icount enablement state:
|
||||
*
|
||||
* @ICOUNT_DISABLED: Disabled - Do not count executed instructions.
|
||||
* @ICOUNT_PRECISE: Enabled - Fixed conversion of insn to ns via "shift" option
|
||||
* @ICOUNT_ADAPTATIVE: Enabled - Runtime adaptive algorithm to compute shift
|
||||
*/
|
||||
typedef enum {
|
||||
ICOUNT_DISABLED = 0,
|
||||
ICOUNT_PRECISE,
|
||||
ICOUNT_ADAPTATIVE,
|
||||
} ICountMode;
|
||||
|
||||
#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY)
|
||||
extern ICountMode use_icount;
|
||||
#define icount_enabled() (use_icount)
|
||||
#else
|
||||
#define icount_enabled() ICOUNT_DISABLED
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Update the icount with the executed instructions. Called by
|
||||
* cpus-tcg vCPU thread so the main-loop can see time has moved forward.
|
||||
*/
|
||||
void icount_update(CPUState *cpu);
|
||||
|
||||
/* get raw icount value */
|
||||
int64_t icount_get_raw(void);
|
||||
|
||||
/* return the virtual CPU time in ns, based on the instruction counter. */
|
||||
int64_t icount_get(void);
|
||||
/*
|
||||
* convert an instruction counter value to ns, based on the icount shift.
|
||||
* This shift is set as a fixed value with the icount "shift" option
|
||||
* (precise mode), or it is constantly approximated and corrected at
|
||||
* runtime in adaptive mode.
|
||||
*/
|
||||
int64_t icount_to_ns(int64_t icount);
|
||||
|
||||
/**
|
||||
* icount_configure: configure the icount options, including "shift"
|
||||
* @opts: Options to parse
|
||||
* @errp: pointer to a NULL-initialized error object
|
||||
*
|
||||
* Return: true on success, else false setting @errp with error
|
||||
*/
|
||||
bool icount_configure(QemuOpts *opts, Error **errp);
|
||||
|
||||
/* used by tcg vcpu thread to calc icount budget */
|
||||
int64_t icount_round(int64_t count);
|
||||
|
||||
/* if the CPUs are idle, start accounting real time to virtual clock. */
|
||||
void icount_start_warp_timer(void);
|
||||
void icount_account_warp_timer(void);
|
||||
void icount_notify_exit(void);
|
||||
|
||||
#endif /* EXEC_ICOUNT_H */
|
@ -15,64 +15,6 @@
|
||||
/* init the whole cpu timers API, including icount, ticks, and cpu_throttle */
|
||||
void cpu_timers_init(void);
|
||||
|
||||
/* icount - Instruction Counter API */
|
||||
|
||||
/**
|
||||
* ICountMode: icount enablement state:
|
||||
*
|
||||
* @ICOUNT_DISABLED: Disabled - Do not count executed instructions.
|
||||
* @ICOUNT_PRECISE: Enabled - Fixed conversion of insn to ns via "shift" option
|
||||
* @ICOUNT_ADAPTATIVE: Enabled - Runtime adaptive algorithm to compute shift
|
||||
*/
|
||||
typedef enum {
|
||||
ICOUNT_DISABLED = 0,
|
||||
ICOUNT_PRECISE,
|
||||
ICOUNT_ADAPTATIVE,
|
||||
} ICountMode;
|
||||
|
||||
#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY)
|
||||
extern ICountMode use_icount;
|
||||
#define icount_enabled() (use_icount)
|
||||
#else
|
||||
#define icount_enabled() ICOUNT_DISABLED
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Update the icount with the executed instructions. Called by
|
||||
* cpus-tcg vCPU thread so the main-loop can see time has moved forward.
|
||||
*/
|
||||
void icount_update(CPUState *cpu);
|
||||
|
||||
/* get raw icount value */
|
||||
int64_t icount_get_raw(void);
|
||||
|
||||
/* return the virtual CPU time in ns, based on the instruction counter. */
|
||||
int64_t icount_get(void);
|
||||
/*
|
||||
* convert an instruction counter value to ns, based on the icount shift.
|
||||
* This shift is set as a fixed value with the icount "shift" option
|
||||
* (precise mode), or it is constantly approximated and corrected at
|
||||
* runtime in adaptive mode.
|
||||
*/
|
||||
int64_t icount_to_ns(int64_t icount);
|
||||
|
||||
/**
|
||||
* icount_configure: configure the icount options, including "shift"
|
||||
* @opts: Options to parse
|
||||
* @errp: pointer to a NULL-initialized error object
|
||||
*
|
||||
* Return: true on success, else false setting @errp with error
|
||||
*/
|
||||
bool icount_configure(QemuOpts *opts, Error **errp);
|
||||
|
||||
/* used by tcg vcpu thread to calc icount budget */
|
||||
int64_t icount_round(int64_t count);
|
||||
|
||||
/* if the CPUs are idle, start accounting real time to virtual clock. */
|
||||
void icount_start_warp_timer(void);
|
||||
void icount_account_warp_timer(void);
|
||||
void icount_notify_exit(void);
|
||||
|
||||
/*
|
||||
* CPU Ticks and Clock
|
||||
*/
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/replay.h"
|
||||
#include "system/runstate.h"
|
||||
#include "replay-internal.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
|
||||
/* icount - Instruction Counter API */
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "hw/core/cpu.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "system/cpu-timers-internal.h"
|
||||
#include "exec/icount.h"
|
||||
|
||||
/* clock and ticks */
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include "trace.h"
|
||||
#include "qemu/thread.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "qemu/range.h"
|
||||
|
||||
/* #define DEBUG_IOMMU */
|
||||
|
@ -89,6 +89,7 @@
|
||||
#include "audio/audio.h"
|
||||
#include "system/cpus.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "migration/colo.h"
|
||||
#include "migration/postcopy-ram.h"
|
||||
#include "system/kvm.h"
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "exec/translation-block.h"
|
||||
#include "hw/irq.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/kvm.h"
|
||||
#include "system/tcg.h"
|
||||
#include "qapi/error.h"
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include "accel/tcg/cpu-ops.h"
|
||||
#include "trace.h"
|
||||
#include "semihosting/common-semi.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "cpu_bits.h"
|
||||
#include "debug.h"
|
||||
#include "pmp.h"
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "exec/exec-all.h"
|
||||
#include "exec/cputlb.h"
|
||||
#include "exec/tb-flush.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "qemu/guest-random.h"
|
||||
#include "qapi/error.h"
|
||||
#include <stdbool.h>
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "exec/helper-proto.h"
|
||||
#include "exec/watchpoint.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
|
||||
/*
|
||||
* The following M-mode trigger CSRs are implemented:
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "system/kvm.h"
|
||||
#include "migration/cpu.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "debug.h"
|
||||
|
||||
static bool pmp_needed(void *opaque)
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "qemu/timer.h"
|
||||
#include "cpu.h"
|
||||
#include "pmu.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/device_tree.h"
|
||||
|
||||
#define RISCV_TIMEBASE_FREQ 1000000000 /* 1Ghz */
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include "block/raw-aio.h"
|
||||
#include "qemu/coroutine_int.h"
|
||||
#include "qemu/coroutine-tls.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "trace.h"
|
||||
|
||||
/***********************************************************/
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/replay.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "block/aio.h"
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "qemu/timer.h"
|
||||
#include "qemu/lockable.h"
|
||||
#include "system/cpu-timers.h"
|
||||
#include "exec/icount.h"
|
||||
#include "system/replay.h"
|
||||
#include "system/cpus.h"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user