Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge tag 'tracing-pull-request' of https://gitlab.com/stefanha/qemu
…into staging

Pull request

# -----BEGIN PGP SIGNATURE-----
#
# iQEzBAABCAAdFiEEhpWov9P5fNqsNXdanKSrs4Grc8gFAmR3pGwACgkQnKSrs4Gr
# c8i8RAf8CvZEWjXySRer/8pLdGPVxuNDJ2Ju4gbpQ3chW+31T8LhfZ+KUtJnUcgX
# 43ICKIZTppq7QxXLcty7yqB7O0OlLylDjrU39uSp60qSdxGFpPk3Pu09bvg+rFua
# k84weSS2BRg6A9BGB7GCiN9IM2TLSCF72Am9ufVUn6kjhTAQr78bxijw+HB/nqXc
# +F//aEiEV8UMvfK+bPoTB2ZyLDnO50McbyXbpcZ3Mugz8qFqh71ZbxL7VONyPQaa
# mfWiPUcUvT42iK71hPBMSnn11SmJpjtS5FIrj+eOmnDX5MmECEVc0Cjxrfnu5suT
# ZPGAloA+1ORXtpjcDt27ub1YzMjq2w==
# =tuOx
# -----END PGP SIGNATURE-----
# gpg: Signature made Wed 31 May 2023 12:47:56 PM PDT
# gpg:                using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8
# gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [full]
# gpg:                 aka "Stefan Hajnoczi <stefanha@gmail.com>" [full]

* tag 'tracing-pull-request' of https://gitlab.com/stefanha/qemu:
  accel/tcg: include cs_base in our hash calculations
  hw/9pfs: use qemu_xxhash4
  tcg: remove the final vestiges of dstate
  trace: remove control-vcpu.h
  trace: remove code that depends on setting vcpu
  qapi: make the vcpu parameters deprecated for 8.1
  docs/deprecated: move QMP events bellow QMP command section
  scripts/qapi: document the tool that generated the file
  trace: remove vcpu_id from the TraceEvent structure
  trace-events: remove the remaining vcpu trace events
  *-user: remove the guest_user_syscall tracepoints

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
  • Loading branch information
rth7680 committed May 31, 2023
2 parents ab72522 + 2e7eda5 commit 2d786cd
Show file tree
Hide file tree
Showing 28 changed files with 94 additions and 496 deletions.
7 changes: 1 addition & 6 deletions accel/tcg/cpu-exec.c
Expand Up @@ -175,7 +175,6 @@ struct tb_desc {
tb_page_addr_t page_addr0;
uint32_t flags;
uint32_t cflags;
uint32_t trace_vcpu_dstate;
};

static bool tb_lookup_cmp(const void *p, const void *d)
Expand All @@ -187,7 +186,6 @@ static bool tb_lookup_cmp(const void *p, const void *d)
tb_page_addr0(tb) == desc->page_addr0 &&
tb->cs_base == desc->cs_base &&
tb->flags == desc->flags &&
tb->trace_vcpu_dstate == desc->trace_vcpu_dstate &&
tb_cflags(tb) == desc->cflags) {
/* check next page if needed */
tb_page_addr_t tb_phys_page1 = tb_page_addr1(tb);
Expand Down Expand Up @@ -228,15 +226,14 @@ static TranslationBlock *tb_htable_lookup(CPUState *cpu, target_ulong pc,
desc.cs_base = cs_base;
desc.flags = flags;
desc.cflags = cflags;
desc.trace_vcpu_dstate = *cpu->trace_dstate;
desc.pc = pc;
phys_pc = get_page_addr_code(desc.env, pc);
if (phys_pc == -1) {
return NULL;
}
desc.page_addr0 = phys_pc;
h = tb_hash_func(phys_pc, (cflags & CF_PCREL ? 0 : pc),
flags, cflags, *cpu->trace_dstate);
flags, cs_base, cflags);
return qht_lookup_custom(&tb_ctx.htable, &desc, h, tb_lookup_cmp);
}

Expand All @@ -263,7 +260,6 @@ static inline TranslationBlock *tb_lookup(CPUState *cpu, target_ulong pc,
jc->array[hash].pc == pc &&
tb->cs_base == cs_base &&
tb->flags == flags &&
tb->trace_vcpu_dstate == *cpu->trace_dstate &&
tb_cflags(tb) == cflags)) {
return tb;
}
Expand All @@ -282,7 +278,6 @@ static inline TranslationBlock *tb_lookup(CPUState *cpu, target_ulong pc,
tb->pc == pc &&
tb->cs_base == cs_base &&
tb->flags == flags &&
tb->trace_vcpu_dstate == *cpu->trace_dstate &&
tb_cflags(tb) == cflags)) {
return tb;
}
Expand Down
6 changes: 3 additions & 3 deletions accel/tcg/tb-hash.h
Expand Up @@ -61,10 +61,10 @@ static inline unsigned int tb_jmp_cache_hash_func(target_ulong pc)
#endif /* CONFIG_SOFTMMU */

static inline
uint32_t tb_hash_func(tb_page_addr_t phys_pc, target_ulong pc, uint32_t flags,
uint32_t cf_mask, uint32_t trace_vcpu_dstate)
uint32_t tb_hash_func(tb_page_addr_t phys_pc, target_ulong pc,
uint32_t flags, uint64_t flags2, uint32_t cf_mask)
{
return qemu_xxhash7(phys_pc, pc, flags, cf_mask, trace_vcpu_dstate);
return qemu_xxhash8(phys_pc, pc, flags2, flags, cf_mask);
}

#endif
5 changes: 2 additions & 3 deletions accel/tcg/tb-maint.c
Expand Up @@ -50,7 +50,6 @@ static bool tb_cmp(const void *ap, const void *bp)
a->cs_base == b->cs_base &&
a->flags == b->flags &&
(tb_cflags(a) & ~CF_INVALID) == (tb_cflags(b) & ~CF_INVALID) &&
a->trace_vcpu_dstate == b->trace_vcpu_dstate &&
tb_page_addr0(a) == tb_page_addr0(b) &&
tb_page_addr1(a) == tb_page_addr1(b));
}
Expand Down Expand Up @@ -888,7 +887,7 @@ static void do_tb_phys_invalidate(TranslationBlock *tb, bool rm_from_page_list)
/* remove the TB from the hash list */
phys_pc = tb_page_addr0(tb);
h = tb_hash_func(phys_pc, (orig_cflags & CF_PCREL ? 0 : tb->pc),
tb->flags, orig_cflags, tb->trace_vcpu_dstate);
tb->flags, tb->cs_base, orig_cflags);
if (!qht_remove(&tb_ctx.htable, tb, h)) {
return;
}
Expand Down Expand Up @@ -969,7 +968,7 @@ TranslationBlock *tb_link_page(TranslationBlock *tb, tb_page_addr_t phys_pc,

/* add in the hash table */
h = tb_hash_func(phys_pc, (tb->cflags & CF_PCREL ? 0 : tb->pc),
tb->flags, tb->cflags, tb->trace_vcpu_dstate);
tb->flags, tb->cs_base, tb->cflags);
qht_insert(&tb_ctx.htable, tb, h, &existing_tb);

/* remove TB from the page(s) if we couldn't insert it */
Expand Down
6 changes: 0 additions & 6 deletions accel/tcg/translate-all.c
Expand Up @@ -65,11 +65,6 @@
#include "internal.h"
#include "perf.h"

/* Make sure all possible CPU event bits fit in tb->trace_vcpu_dstate */
QEMU_BUILD_BUG_ON(CPU_TRACE_DSTATE_MAX_EVENTS >
sizeof_field(TranslationBlock, trace_vcpu_dstate)
* BITS_PER_BYTE);

TBContext tb_ctx;

/*
Expand Down Expand Up @@ -352,7 +347,6 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
tb->cs_base = cs_base;
tb->flags = flags;
tb->cflags = cflags;
tb->trace_vcpu_dstate = *cpu->trace_dstate;
tb_set_page_addr0(tb, phys_pc);
tb_set_page_addr1(tb, -1);
tcg_ctx->gen_tb = tb;
Expand Down
2 changes: 0 additions & 2 deletions bsd-user/freebsd/os-syscall.c
Expand Up @@ -531,7 +531,6 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1,
CPUState *cpu = env_cpu(cpu_env);
abi_long ret;

trace_guest_user_syscall(cpu, num, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
if (do_strace) {
print_freebsd_syscall(num, arg1, arg2, arg3, arg4, arg5, arg6);
}
Expand All @@ -541,7 +540,6 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1,
if (do_strace) {
print_freebsd_syscall_ret(num, ret);
}
trace_guest_user_syscall_ret(cpu, num, ret);

return ret;
}
Expand Down
25 changes: 16 additions & 9 deletions docs/about/deprecated.rst
Expand Up @@ -218,6 +218,22 @@ instruction per translated block" mode (which can be set on the
command line or via the HMP, but not via QMP). The information remains
available via the HMP 'info jit' command.

QEMU Machine Protocol (QMP) events
----------------------------------

``MEM_UNPLUG_ERROR`` (since 6.2)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Use the more generic event ``DEVICE_UNPLUG_GUEST_ERROR`` instead.

``vcpu`` trace events (since 8.1)
'''''''''''''''''''''''''''''''''

The ability to instrument QEMU helper functions with vCPU-aware trace
points was removed in 7.0. However QMP still exposed the vcpu
parameter. This argument has now been deprecated and the remaining
remaining trace points that used it are selected just by name.

Human Monitor Protocol (HMP) commands
-------------------------------------

Expand Down Expand Up @@ -251,15 +267,6 @@ it. Since all recent x86 hardware from the past >10 years is capable of the
64-bit x86 extensions, a corresponding 64-bit OS should be used instead.


QEMU API (QAPI) events
----------------------

``MEM_UNPLUG_ERROR`` (since 6.2)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Use the more generic event ``DEVICE_UNPLUG_GUEST_ERROR`` instead.


System emulator machines
------------------------

Expand Down
5 changes: 2 additions & 3 deletions hw/9pfs/9p.c
Expand Up @@ -738,15 +738,14 @@ static VariLenAffix affixForIndex(uint64_t index)
return invertAffix(&prefix); /* convert prefix to suffix */
}

/* creative abuse of tb_hash_func7, which is based on xxhash */
static uint32_t qpp_hash(QppEntry e)
{
return qemu_xxhash7(e.ino_prefix, e.dev, 0, 0, 0);
return qemu_xxhash4(e.ino_prefix, e.dev);
}

static uint32_t qpf_hash(QpfEntry e)
{
return qemu_xxhash7(e.ino, e.dev, 0, 0, 0);
return qemu_xxhash4(e.ino, e.dev);
}

static bool qpd_cmp_func(const void *obj, const void *userp)
Expand Down
6 changes: 2 additions & 4 deletions hw/core/cpu-common.c
Expand Up @@ -32,7 +32,7 @@
#include "sysemu/tcg.h"
#include "hw/boards.h"
#include "hw/qdev-properties.h"
#include "trace/trace-root.h"
#include "trace.h"
#include "qemu/plugin.h"

CPUState *cpu_by_arch_id(int64_t id)
Expand Down Expand Up @@ -113,7 +113,7 @@ void cpu_reset(CPUState *cpu)
{
device_cold_reset(DEVICE(cpu));

trace_guest_cpu_reset(cpu);
trace_cpu_reset(cpu->cpu_index);
}

static void cpu_common_reset_hold(Object *obj)
Expand Down Expand Up @@ -211,15 +211,13 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp)
}

/* NOTE: latest generic point where the cpu is fully realized */
trace_init_vcpu(cpu);
}

static void cpu_common_unrealizefn(DeviceState *dev)
{
CPUState *cpu = CPU(dev);

/* NOTE: latest generic point before the cpu is fully unrealized */
trace_fini_vcpu(cpu);
cpu_exec_unrealizefn(cpu);
}

Expand Down
3 changes: 3 additions & 0 deletions hw/core/trace-events
Expand Up @@ -29,3 +29,6 @@ clock_set(const char *clk, uint64_t old, uint64_t new) "'%s', %"PRIu64"Hz->%"PRI
clock_propagate(const char *clk) "'%s'"
clock_update(const char *clk, const char *src, uint64_t hz, int cb) "'%s', src='%s', val=%"PRIu64"Hz cb=%d"
clock_set_mul_div(const char *clk, uint32_t oldmul, uint32_t mul, uint32_t olddiv, uint32_t div) "'%s', mul: %u -> %u, div: %u -> %u"

# cpu-common.c
cpu_reset(int cpu_index) "%d"
3 changes: 0 additions & 3 deletions include/exec/exec-all.h
Expand Up @@ -545,9 +545,6 @@ struct TranslationBlock {
#define CF_CLUSTER_MASK 0xff000000 /* Top 8 bits are cluster ID */
#define CF_CLUSTER_SHIFT 24

/* Per-vCPU dynamic tracing state used to generate this TB */
uint32_t trace_vcpu_dstate;

/*
* Above fields used for comparing
*/
Expand Down
5 changes: 0 additions & 5 deletions include/hw/core/cpu.h
Expand Up @@ -266,7 +266,6 @@ typedef void (*run_on_cpu_func)(CPUState *cpu, run_on_cpu_data data);
struct qemu_work_item;

#define CPU_UNSET_NUMA_NODE_ID -1
#define CPU_TRACE_DSTATE_MAX_EVENTS 32

/**
* CPUState:
Expand Down Expand Up @@ -407,10 +406,6 @@ struct CPUState {
/* Use by accel-block: CPU is executing an ioctl() */
QemuLockCnt in_ioctl_lock;

/* Used for events with 'vcpu' and *without* the 'disabled' properties */
DECLARE_BITMAP(trace_dstate_delayed, CPU_TRACE_DSTATE_MAX_EVENTS);
DECLARE_BITMAP(trace_dstate, CPU_TRACE_DSTATE_MAX_EVENTS);

DECLARE_BITMAP(plugin_mask, QEMU_PLUGIN_EV_MAX);

#ifdef CONFIG_PLUGIN
Expand Down
23 changes: 17 additions & 6 deletions include/qemu/xxhash.h
Expand Up @@ -48,8 +48,8 @@
* xxhash32, customized for input variables that are not guaranteed to be
* contiguous in memory.
*/
static inline uint32_t
qemu_xxhash7(uint64_t ab, uint64_t cd, uint32_t e, uint32_t f, uint32_t g)
static inline uint32_t qemu_xxhash8(uint64_t ab, uint64_t cd, uint64_t ef,
uint32_t g, uint32_t h)
{
uint32_t v1 = QEMU_XXHASH_SEED + PRIME32_1 + PRIME32_2;
uint32_t v2 = QEMU_XXHASH_SEED + PRIME32_2;
Expand All @@ -59,6 +59,8 @@ qemu_xxhash7(uint64_t ab, uint64_t cd, uint32_t e, uint32_t f, uint32_t g)
uint32_t b = ab >> 32;
uint32_t c = cd;
uint32_t d = cd >> 32;
uint32_t e = ef;
uint32_t f = ef >> 32;
uint32_t h32;

v1 += a * PRIME32_2;
Expand Down Expand Up @@ -89,6 +91,9 @@ qemu_xxhash7(uint64_t ab, uint64_t cd, uint32_t e, uint32_t f, uint32_t g)
h32 += g * PRIME32_3;
h32 = rol32(h32, 17) * PRIME32_4;

h32 += h * PRIME32_3;
h32 = rol32(h32, 17) * PRIME32_4;

h32 ^= h32 >> 15;
h32 *= PRIME32_2;
h32 ^= h32 >> 13;
Expand All @@ -100,23 +105,29 @@ qemu_xxhash7(uint64_t ab, uint64_t cd, uint32_t e, uint32_t f, uint32_t g)

static inline uint32_t qemu_xxhash2(uint64_t ab)
{
return qemu_xxhash7(ab, 0, 0, 0, 0);
return qemu_xxhash8(ab, 0, 0, 0, 0);
}

static inline uint32_t qemu_xxhash4(uint64_t ab, uint64_t cd)
{
return qemu_xxhash7(ab, cd, 0, 0, 0);
return qemu_xxhash8(ab, cd, 0, 0, 0);
}

static inline uint32_t qemu_xxhash5(uint64_t ab, uint64_t cd, uint32_t e)
{
return qemu_xxhash7(ab, cd, e, 0, 0);
return qemu_xxhash8(ab, cd, 0, e, 0);
}

static inline uint32_t qemu_xxhash6(uint64_t ab, uint64_t cd, uint32_t e,
uint32_t f)
{
return qemu_xxhash7(ab, cd, e, f, 0);
return qemu_xxhash8(ab, cd, 0, e, f);
}

static inline uint32_t qemu_xxhash7(uint64_t ab, uint64_t cd, uint64_t ef,
uint32_t g)
{
return qemu_xxhash8(ab, cd, ef, g, 0);
}

/*
Expand Down
4 changes: 0 additions & 4 deletions include/user/syscall-trace.h
Expand Up @@ -26,17 +26,13 @@ static inline void record_syscall_start(void *cpu, int num,
abi_long arg5, abi_long arg6,
abi_long arg7, abi_long arg8)
{
trace_guest_user_syscall(cpu, num,
arg1, arg2, arg3, arg4,
arg5, arg6, arg7, arg8);
qemu_plugin_vcpu_syscall(cpu, num,
arg1, arg2, arg3, arg4,
arg5, arg6, arg7, arg8);
}

static inline void record_syscall_return(void *cpu, int num, abi_long ret)
{
trace_guest_user_syscall_ret(cpu, num, ret);
qemu_plugin_vcpu_syscall_ret(cpu, num, ret);
}

Expand Down

0 comments on commit 2d786cd

Please sign in to comment.