aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/emulate.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm/emulate.c')
-rw-r--r--arch/x86/kvm/emulate.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 27f677ef703e..32d3da82da2e 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -1588,34 +1588,28 @@ static void write_register_operand(struct operand *op)
1588 1588
1589static int writeback(struct x86_emulate_ctxt *ctxt, struct operand *op) 1589static int writeback(struct x86_emulate_ctxt *ctxt, struct operand *op)
1590{ 1590{
1591 int rc;
1592
1593 switch (op->type) { 1591 switch (op->type) {
1594 case OP_REG: 1592 case OP_REG:
1595 write_register_operand(op); 1593 write_register_operand(op);
1596 break; 1594 break;
1597 case OP_MEM: 1595 case OP_MEM:
1598 if (ctxt->lock_prefix) 1596 if (ctxt->lock_prefix)
1599 rc = segmented_cmpxchg(ctxt, 1597 return segmented_cmpxchg(ctxt,
1598 op->addr.mem,
1599 &op->orig_val,
1600 &op->val,
1601 op->bytes);
1602 else
1603 return segmented_write(ctxt,
1600 op->addr.mem, 1604 op->addr.mem,
1601 &op->orig_val,
1602 &op->val, 1605 &op->val,
1603 op->bytes); 1606 op->bytes);
1604 else
1605 rc = segmented_write(ctxt,
1606 op->addr.mem,
1607 &op->val,
1608 op->bytes);
1609 if (rc != X86EMUL_CONTINUE)
1610 return rc;
1611 break; 1607 break;
1612 case OP_MEM_STR: 1608 case OP_MEM_STR:
1613 rc = segmented_write(ctxt, 1609 return segmented_write(ctxt,
1614 op->addr.mem, 1610 op->addr.mem,
1615 op->data, 1611 op->data,
1616 op->bytes * op->count); 1612 op->bytes * op->count);
1617 if (rc != X86EMUL_CONTINUE)
1618 return rc;
1619 break; 1613 break;
1620 case OP_XMM: 1614 case OP_XMM:
1621 write_sse_reg(ctxt, &op->vec_val, op->addr.xmm); 1615 write_sse_reg(ctxt, &op->vec_val, op->addr.xmm);