[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.0.3-testing] [HVM] Add sub instruction support to HVM MMIO decoder.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Date 1159610921 -3600 # Node ID 2d155d41fe466952c8b9b871b4500b7f7a29f088 # Parent a949bd6ceb85d4ee11a2fd896487299427a41592 [HVM] Add sub instruction support to HVM MMIO decoder. This is needed for SMP PAE windows XP SP2. Signed-off-by: Xin Li <xin.b.li@xxxxxxxxx> --- xen/arch/x86/hvm/io.c | 3 +++ xen/arch/x86/hvm/platform.c | 6 ++++++ xen/include/asm-x86/hvm/io.h | 1 + 3 files changed, 10 insertions(+) diff -r a949bd6ceb85 -r 2d155d41fe46 xen/arch/x86/hvm/io.c --- a/xen/arch/x86/hvm/io.c Sat Sep 30 10:49:08 2006 +0100 +++ b/xen/arch/x86/hvm/io.c Sat Sep 30 11:08:41 2006 +0100 @@ -596,6 +596,7 @@ static void hvm_mmio_assist(struct cpu_u break; case INSTR_CMP: + case INSTR_SUB: if (src & REGISTER) { index = operand_index(src); value = get_reg_value(size, index, 0, regs); @@ -607,6 +608,8 @@ static void hvm_mmio_assist(struct cpu_u index = operand_index(dst); value = get_reg_value(size, index, 0, regs); diff = value - (unsigned long) p->u.data; + if ( mmio_opp->instr == INSTR_SUB ) + set_reg_value(size, index, 0, regs, diff); } /* diff -r a949bd6ceb85 -r 2d155d41fe46 xen/arch/x86/hvm/platform.c --- a/xen/arch/x86/hvm/platform.c Sat Sep 30 10:49:08 2006 +0100 +++ b/xen/arch/x86/hvm/platform.c Sat Sep 30 11:08:41 2006 +0100 @@ -394,6 +394,11 @@ static int hvm_decode(int realmode, unsi GET_OP_SIZE_FOR_NONEBYTE(instr->op_size); return mem_reg(instr->op_size, opcode, instr, rex); + case 0x2B: /* sub m32/16, r32/16 */ + instr->instr = INSTR_SUB; + GET_OP_SIZE_FOR_NONEBYTE(instr->op_size); + return mem_reg(instr->op_size, opcode, instr, rex); + case 0x30: /* xor r8, m8 */ instr->instr = INSTR_XOR; instr->op_size = BYTE; @@ -1011,6 +1016,7 @@ void handle_mmio(unsigned long va, unsig case INSTR_CMP: /* Pass through */ case INSTR_TEST: + case INSTR_SUB: mmio_opp->flags = mmio_inst.flags; mmio_opp->instr = mmio_inst.instr; mmio_opp->operand[0] = mmio_inst.operand[0]; /* source */ diff -r a949bd6ceb85 -r 2d155d41fe46 xen/include/asm-x86/hvm/io.h --- a/xen/include/asm-x86/hvm/io.h Sat Sep 30 10:49:08 2006 +0100 +++ b/xen/include/asm-x86/hvm/io.h Sat Sep 30 11:08:41 2006 +0100 @@ -68,6 +68,7 @@ #define INSTR_TEST 12 #define INSTR_BT 13 #define INSTR_XCHG 14 +#define INSTR_SUB 15 struct instruction { __s8 instr; /* instruction type */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |