]> git.ipfire.org Git - thirdparty/qemu.git/commit - meson.build
target/i386: implement RDPID in TCG
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 20 Jun 2023 22:47:31 +0000 (00:47 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 26 Jun 2023 08:23:56 +0000 (10:23 +0200)
commit6750485bf42a9917a29487aec899687669104e07
treef3041f5dcd012248e81091fb384e28767fe12195
parent53b9b4cc9fb956279c6494bfa7d7ea61f07bb214
target/i386: implement RDPID in TCG

RDPID corresponds to a RDMSR(TSC_AUX); however, it is unprivileged
so for user-mode emulation we must provide the value that the kernel
places in the MSR.  For Linux, it is a combination of the current CPU
and the current NUMA node, both of which can be retrieved with getcpu(2).
Also try sched_getcpu(), which might be there on the BSDs.  If there is
no portable way to retrieve the current CPU id from userspace, return 0.

RDTSCP is reimplemented as RDTSC + RDPID ECX; the differences in terms
of serializability are not relevant to QEMU.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
meson.build
target/i386/cpu.c
target/i386/helper.h
target/i386/tcg/misc_helper.c
target/i386/tcg/translate.c