lkml.org 
[lkml]   [2008]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 18/19] KVM: x86 emulator: emulate clflush
    Date
    From: Glauber Costa <gcosta@redhat.com>

    If the guest issues a clflush in a mmio address, the instruction
    can trap into the hypervisor. Currently, we do not decode clflush
    properly, causing the guest to hang. This patch fixes this emulating
    clflush (opcode 0f ae).

    Signed-off-by: Glauber Costa <gcosta@redhat.com>
    Signed-off-by: Avi Kivity <avi@qumranet.com>
    ---
    arch/x86/kvm/x86_emulate.c | 4 +++-
    1 files changed, 3 insertions(+), 1 deletions(-)

    diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c
    index 8bc63f6..f2f9046 100644
    --- a/arch/x86/kvm/x86_emulate.c
    +++ b/arch/x86/kvm/x86_emulate.c
    @@ -219,7 +219,7 @@ static u16 twobyte_table[256] = {
    /* 0xA0 - 0xA7 */
    0, 0, 0, DstMem | SrcReg | ModRM | BitOp, 0, 0, 0, 0,
    /* 0xA8 - 0xAF */
    - 0, 0, 0, DstMem | SrcReg | ModRM | BitOp, 0, 0, 0, 0,
    + 0, 0, 0, DstMem | SrcReg | ModRM | BitOp, 0, 0, ModRM, 0,
    /* 0xB0 - 0xB7 */
    ByteOp | DstMem | SrcReg | ModRM, DstMem | SrcReg | ModRM, 0,
    DstMem | SrcReg | ModRM | BitOp,
    @@ -1947,6 +1947,8 @@ twobyte_insn:
    c->src.val &= (c->dst.bytes << 3) - 1;
    emulate_2op_SrcV_nobyte("bts", c->src, c->dst, ctxt->eflags);
    break;
    + case 0xae: /* clflush */
    + break;
    case 0xb0 ... 0xb1: /* cmpxchg */
    /*
    * Save real source value, then compare EAX against
    --
    1.5.6.1


    \
     
     \ /
      Last update: 2008-07-15 14:19    [W:0.023 / U:120.632 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site