KVM: SVM: copy instruction bytes from VMCB
In case of a nested page fault or an intercepted #PF newer SVM implementations provide a copy of the faulting instruction bytes in the VMCB. Use these bytes to feed the instruction emulator and avoid the costly guest instruction fetch in this case. Signed-off-by: Andre Przywara <andre.przywara@amd.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
committed by
Avi Kivity
parent
df4f310856
commit
dc25e89e07
@ -2610,7 +2610,7 @@ done:
|
||||
}
|
||||
|
||||
int
|
||||
x86_decode_insn(struct x86_emulate_ctxt *ctxt)
|
||||
x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len)
|
||||
{
|
||||
struct x86_emulate_ops *ops = ctxt->ops;
|
||||
struct decode_cache *c = &ctxt->decode;
|
||||
@ -2621,7 +2621,10 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt)
|
||||
struct operand memop = { .type = OP_NONE };
|
||||
|
||||
c->eip = ctxt->eip;
|
||||
c->fetch.start = c->fetch.end = c->eip;
|
||||
c->fetch.start = c->eip;
|
||||
c->fetch.end = c->fetch.start + insn_len;
|
||||
if (insn_len > 0)
|
||||
memcpy(c->fetch.data, insn, insn_len);
|
||||
ctxt->cs_base = seg_base(ctxt, ops, VCPU_SREG_CS);
|
||||
|
||||
switch (mode) {
|
||||
|
Reference in New Issue
Block a user