From f2b16ac2e2c1d8d63794a1ef048f5155e3cbb514 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Wed, 20 Apr 2011 15:43:05 +0300 Subject: [PATCH] --- yaml --- r: 248063 b: refs/heads/master c: 6c3287f7c5050076b554145f11bdba058de287d1 h: refs/heads/master i: 248061: 0c747aef1046397203bec5146dbf150fed8651fa 248059: e52ecb19682047b5a8a07456dba10c8fa085c4f6 248055: d51b4cc176a1f46c1ef3caab0f42cad87ccae7c2 248047: b729e3a4acaa64898a2a67a6aac55da07538bd81 248031: 52a510580b6c307817c5f031af46ed1ea794f240 247999: f73106a3ae4bc26c25f3b4a89689d22a8e38e492 247935: e271e2d1be639462d3bc8a7ee874ce75640b288f 247807: 3d0bcdca1244640f3c455c296e8068e97f4e01cd v: v3 --- [refs] | 2 +- trunk/arch/x86/include/asm/kvm_emulate.h | 1 + trunk/arch/x86/kvm/emulate.c | 2 +- trunk/arch/x86/kvm/x86.c | 6 ++++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index f920b3cc6512..4d93696b7408 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3cb16fe78ce91991a876c74fc5dc99419b737b7a +refs/heads/master: 6c3287f7c5050076b554145f11bdba058de287d1 diff --git a/trunk/arch/x86/include/asm/kvm_emulate.h b/trunk/arch/x86/include/asm/kvm_emulate.h index f89076943701..d30f1e9b7544 100644 --- a/trunk/arch/x86/include/asm/kvm_emulate.h +++ b/trunk/arch/x86/include/asm/kvm_emulate.h @@ -186,6 +186,7 @@ struct x86_emulate_ops { int (*set_dr)(struct x86_emulate_ctxt *ctxt, int dr, ulong value); int (*set_msr)(struct x86_emulate_ctxt *ctxt, u32 msr_index, u64 data); int (*get_msr)(struct x86_emulate_ctxt *ctxt, u32 msr_index, u64 *pdata); + void (*halt)(struct x86_emulate_ctxt *ctxt); void (*get_fpu)(struct x86_emulate_ctxt *ctxt); /* disables preempt */ void (*put_fpu)(struct x86_emulate_ctxt *ctxt); /* reenables preempt */ int (*intercept)(struct x86_emulate_ctxt *ctxt, diff --git a/trunk/arch/x86/kvm/emulate.c b/trunk/arch/x86/kvm/emulate.c index 5d774e91388e..210df51b76a4 100644 --- a/trunk/arch/x86/kvm/emulate.c +++ b/trunk/arch/x86/kvm/emulate.c @@ -3913,7 +3913,7 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt) c->dst.type = OP_NONE; /* Disable writeback. */ break; case 0xf4: /* hlt */ - ctxt->vcpu->arch.halt_request = 1; + ctxt->ops->halt(ctxt); break; case 0xf5: /* cmc */ /* complement carry flag from eflags reg */ diff --git a/trunk/arch/x86/kvm/x86.c b/trunk/arch/x86/kvm/x86.c index 8af49b3df675..2246cf1a4ee0 100644 --- a/trunk/arch/x86/kvm/x86.c +++ b/trunk/arch/x86/kvm/x86.c @@ -4351,6 +4351,11 @@ static int emulator_set_msr(struct x86_emulate_ctxt *ctxt, return kvm_set_msr(emul_to_vcpu(ctxt), msr_index, data); } +static void emulator_halt(struct x86_emulate_ctxt *ctxt) +{ + emul_to_vcpu(ctxt)->arch.halt_request = 1; +} + static void emulator_get_fpu(struct x86_emulate_ctxt *ctxt) { preempt_disable(); @@ -4400,6 +4405,7 @@ static struct x86_emulate_ops emulate_ops = { .set_dr = emulator_set_dr, .set_msr = emulator_set_msr, .get_msr = emulator_get_msr, + .halt = emulator_halt, .get_fpu = emulator_get_fpu, .put_fpu = emulator_put_fpu, .intercept = emulator_intercept,