Skip to content

Commit

Permalink
i386: Save EFER for 32-bit targets
Browse files Browse the repository at this point in the history
i386 (32 bit) emulation uses EFER in wrmsr and in MMU fault
processing.
But it does not included in VMState, because "efer" field is disabled with

This patch adds a section for 32-bit targets which saves EFER when
it's value is non-zero.

Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
Message-Id: <155913371654.8429.1659082639780315242.stgit@pasha-Precision-3630-Tower>
Reviewed-by: Peter Xu <peterx@redhat.com>
[ehabkost: indentation fix]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
  • Loading branch information
Dovgalyuk authored and ehabkost committed Jun 11, 2019
1 parent 506174b commit 89a44a1
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions target/i386/machine.c
Expand Up @@ -964,6 +964,27 @@ static const VMStateDescription vmstate_svm_npt = {
}
};

#ifndef TARGET_X86_64
static bool intel_efer32_needed(void *opaque)
{
X86CPU *cpu = opaque;
CPUX86State *env = &cpu->env;

return env->efer != 0;
}

static const VMStateDescription vmstate_efer32 = {
.name = "cpu/efer32",
.version_id = 1,
.minimum_version_id = 1,
.needed = intel_efer32_needed,
.fields = (VMStateField[]) {
VMSTATE_UINT64(env.efer, X86CPU),
VMSTATE_END_OF_LIST()
}
};
#endif

VMStateDescription vmstate_x86_cpu = {
.name = "cpu",
.version_id = 12,
Expand Down Expand Up @@ -1089,6 +1110,9 @@ VMStateDescription vmstate_x86_cpu = {
&vmstate_msr_intel_pt,
&vmstate_msr_virt_ssbd,
&vmstate_svm_npt,
#ifndef TARGET_X86_64
&vmstate_efer32,
#endif
NULL
}
};

0 comments on commit 89a44a1

Please sign in to comment.