lkml.org 
[lkml]   [2007]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/10] KVM: x86 emulator: fix access registers for instructions with ModR/M byte and Mod = 3
    Date
    From: Aurelien Jarno <aurelien@aurel32.net>

    The patch belows changes the access type to register from memory for
    instructions that are declared as SrcMem or DstMem, but have a
    ModR/M byte with Mod = 3.

    It fixes (at least) the lmsw and smsw instructions on an AMD64 CPU,
    which are needed for FreeBSD.

    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    Signed-off-by: Avi Kivity <avi@qumranet.com>
    ---
    drivers/kvm/x86_emulate.c | 17 +++++++++++++++++
    1 files changed, 17 insertions(+), 0 deletions(-)

    diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
    index 804e86c..08cd4a3 100644
    --- a/drivers/kvm/x86_emulate.c
    +++ b/drivers/kvm/x86_emulate.c
    @@ -773,6 +773,14 @@ done_prefixes:
    case SrcMem:
    src.bytes = (d & ByteOp) ? 1 : op_bytes;
    srcmem_common:
    + /*
    + * For instructions with a ModR/M byte, switch to register
    + * access if Mod = 3.
    + */
    + if ((d & ModRM) && modrm_mod == 3) {
    + src.type = OP_REG;
    + break;
    + }
    src.type = OP_MEM;
    src.ptr = (unsigned long *)cr2;
    if ((rc = ops->read_emulated((unsigned long)src.ptr,
    @@ -839,6 +847,15 @@ done_prefixes:
    dst.type = OP_MEM;
    dst.ptr = (unsigned long *)cr2;
    dst.bytes = (d & ByteOp) ? 1 : op_bytes;
    + dst.val = 0;
    + /*
    + * For instructions with a ModR/M byte, switch to register
    + * access if Mod = 3.
    + */
    + if ((d & ModRM) && modrm_mod == 3) {
    + dst.type = OP_REG;
    + break;
    + }
    if (d & BitOp) {
    unsigned long mask = ~(dst.bytes * 8 - 1);

    --
    1.5.3


    \
     
     \ /
      Last update: 2007-12-02 12:21    [W:0.019 / U:91.452 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site