unicorn/qemu
Bill Paul 5b14f0ed52
Correctly re-init EFER state during INIT IPI
When doing a re-initialization of a CPU core, the default state is to _not_
have 64-bit long mode enabled. This means the LME (long mode enable) and LMA
(long mode active) bits in the EFER model-specific register should be cleared.

However, the EFER state is part of the CPU environment which is
preserved by do_cpu_init(), so if EFER.LME and EFER.LMA were set at the
time an INIT IPI was received, they will remain set after the init completes.

This is contrary to what the Intel architecture manual describes and what
happens on real hardware, and it leaves the CPU in a weird state that the
guest can't clear.

To fix this, the 'efer' member of the CPUX86State structure has been moved
to an area outside the region preserved by do_cpu_init(), so that it can
be properly re-initialized by x86_cpu_reset().

Backports commit 2188cc52cb363433751f72b991d8fb05fc60e39d from qemu
2018-02-17 15:23:55 -05:00
..
crypto crypto: move crypto objects out of libqemuutil.la 2018-02-17 15:23:50 -05:00
default-configs arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
docs docs: clarify memory region lifecycle 2018-02-12 15:11:21 -05:00
fpu softfloat: expand out STATUS macro 2018-02-12 13:43:13 -05:00
hw osdep.h: Move some compiler-specific things to compiler.h 2018-02-17 15:23:28 -05:00
include qom/cpu: Add throttle_thread_scheduled member 2018-02-17 15:23:55 -05:00
qapi qerror: Clean up QERR_ macros to expand into a single string 2018-02-17 15:23:09 -05:00
qobject qerror: Finally unused, clean up 2018-02-17 15:23:10 -05:00
qom cpu: initialize cpu->exception_index on reset 2018-02-17 15:23:51 -05:00
scripts Save copies of generated qapi files. 2017-01-21 00:30:50 +11:00
target-arm arm: Remove ELF_MACHINE from cpu.h 2018-02-17 15:23:54 -05:00
target-i386 Correctly re-init EFER state during INIT IPI 2018-02-17 15:23:55 -05:00
target-m68k m68k: Remove ELF_MACHINE from cpu.h 2018-02-17 15:23:54 -05:00
target-mips mips: Remove ELF_MACHINE from cpu.h 2018-02-17 15:23:55 -05:00
target-sparc sparc: Remove ELF_MACHINE from cpu.h 2018-02-17 15:23:55 -05:00
tcg tcg/mips: pass oi to tcg_out_tlb_load 2018-02-17 15:23:54 -05:00
util error: Copy location information in error_copy() 2018-02-17 15:23:53 -05:00
aarch64.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00
aarch64eb.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00
accel.c Automated leading tab to spaces conversion. 2017-01-21 12:28:22 +11:00
arm.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00
armeb.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure tcg: Drop ia64 host support 2018-02-04 18:33:02 -05:00
COPYING import 2015-08-21 15:04:50 +08:00
COPYING.LIB import 2015-08-21 15:04:50 +08:00
cpu-exec-common.c cpu-exec: Migrate some generic fns to cpu-exec-common 2018-02-17 15:23:51 -05:00
cpu-exec.c cpu-exec: Migrate some generic fns to cpu-exec-common 2018-02-17 15:23:51 -05:00
cpus.c cpu-exec: Purge all uses of ENV_GET_CPU() 2018-02-17 15:23:18 -05:00
cputlb.c cputlb: Change tlb_set_dirty() arg to cpu 2018-02-17 15:23:52 -05:00
exec.c cputlb: Change tlb_set_dirty() arg to cpu 2018-02-17 15:23:52 -05:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c crypto: introduce new module for computing hash digests 2018-02-17 15:23:17 -05:00
HACKING import 2015-08-21 15:04:50 +08:00
header_gen.py target-mips: improve exception handling 2018-02-17 15:23:53 -05:00
ioport.c memory: Define API for MemoryRegionOps to take attrs and return status 2018-02-12 17:17:27 -05:00
LICENSE import 2015-08-21 15:04:50 +08:00
m68k.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00
Makefile crypto: move crypto objects out of libqemuutil.la 2018-02-17 15:23:50 -05:00
Makefile.objs crypto: move crypto objects out of libqemuutil.la 2018-02-17 15:23:50 -05:00
Makefile.target tcg: split tcg_op_defs to -common 2018-02-17 15:23:51 -05:00
memory.c osdep.h: Move some compiler-specific things to compiler.h 2018-02-17 15:23:28 -05:00
memory_mapping.c memory_mapping: Rework cpu related includes 2018-02-17 15:23:15 -05:00
mips.h target-mips: improve exception handling 2018-02-17 15:23:53 -05:00
mips64.h target-mips: improve exception handling 2018-02-17 15:23:53 -05:00
mips64el.h target-mips: improve exception handling 2018-02-17 15:23:53 -05:00
mipsel.h target-mips: improve exception handling 2018-02-17 15:23:53 -05:00
powerpc.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00
qapi-schema.json import 2015-08-21 15:04:50 +08:00
qemu-log.c import 2015-08-21 15:04:50 +08:00
qemu-timer.c timer is redundant 2017-01-20 16:46:58 +08:00
rules.mak import 2015-08-21 15:04:50 +08:00
softmmu_template.h softmmu: remove now unused functions 2018-02-17 15:23:38 -05:00
sparc.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00
sparc64.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00
tcg-runtime.c platform.h move #3 2017-01-21 00:13:21 +11:00
translate-all.c translate-all: Move tcg_handle_interrupt() to -common 2018-02-17 15:23:51 -05:00
translate-all.h translate-all: remove unnecessary argument to tb_invalidate_phys_range 2018-02-13 09:04:51 -05:00
translate-common.c translate-all: Move tcg_handle_interrupt() to -common 2018-02-17 15:23:51 -05:00
unicorn_common.h This code should now build the x86_x64-softmmu part 2. 2017-01-19 22:50:28 +11:00
VERSION import 2015-08-21 15:04:50 +08:00
vl.c exec: Add semihosting stubs 2018-02-17 15:23:33 -05:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h cpu-exec: introduce loop exit with restore function 2018-02-17 15:23:38 -05:00