WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] hvm: Support PUSH from mmio area (opcode

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] hvm: Support PUSH from mmio area (opcode 0xFF/6).
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sun, 18 Feb 2007 09:30:08 -0800
Delivery-date: Sun, 18 Feb 2007 11:09:00 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir@xxxxxxxxxxxxx>
# Date 1171812580 0
# Node ID b5fc88aad1b0eb35d12e503982c70fdc27f0544a
# Parent  c5ff7671b9f29d7862f00ef6e6bdb464d96c2c10
hvm: Support PUSH from mmio area (opcode 0xFF/6).
Also fix a bogus assertion in vlapic device model.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/hvm/io.c        |    5 +++++
 xen/arch/x86/hvm/platform.c  |   20 ++++++++++++++++++++
 xen/arch/x86/hvm/vlapic.c    |    2 +-
 xen/include/asm-x86/hvm/io.h |    1 +
 4 files changed, 27 insertions(+), 1 deletion(-)

diff -r c5ff7671b9f2 -r b5fc88aad1b0 xen/arch/x86/hvm/io.c
--- a/xen/arch/x86/hvm/io.c     Sat Feb 17 13:26:33 2007 +0000
+++ b/xen/arch/x86/hvm/io.c     Sun Feb 18 15:29:40 2007 +0000
@@ -686,6 +686,11 @@ static void hvm_mmio_assist(struct cpu_u
             set_reg_value(size, index, 0, regs, p->data);
         }
         break;
+
+    case INSTR_PUSH:
+        mmio_opp->addr += hvm_get_segment_base(current, x86_seg_ss);
+        hvm_copy_to_guest_virt(mmio_opp->addr, &p->data, size);
+        break;
     }
 }
 
diff -r c5ff7671b9f2 -r b5fc88aad1b0 xen/arch/x86/hvm/platform.c
--- a/xen/arch/x86/hvm/platform.c       Sat Feb 17 13:26:33 2007 +0000
+++ b/xen/arch/x86/hvm/platform.c       Sun Feb 18 15:29:40 2007 +0000
@@ -716,6 +716,11 @@ static int mmio_decode(int address_bytes
             mmio_op->instr = INSTR_SUB;
             return DECODE_success;
 
+        case 6: /* push */
+            mmio_op->instr = INSTR_PUSH;
+            mmio_op->operand[0] = mmio_op->operand[1];
+            return DECODE_success;
+
         default:
             printk("%x/%x, This opcode isn't handled yet!\n",
                    *opcode, ins_subtype);
@@ -1129,6 +1134,21 @@ void handle_mmio(unsigned long gpa)
 
     case INSTR_XOR:
         mmio_operands(IOREQ_TYPE_XOR, gpa, mmio_op, op_size);
+        break;
+
+    case INSTR_PUSH:
+        if ( ad_size == WORD )
+        {
+            mmio_op->addr = (uint16_t)(regs->esp - op_size);
+            regs->esp = mmio_op->addr | (regs->esp & ~0xffff);
+        }
+        else
+        {
+            regs->esp -= op_size;
+            mmio_op->addr = regs->esp;
+        }
+        /* send the request and wait for the value */
+        send_mmio_req(IOREQ_TYPE_COPY, gpa, 1, op_size, 0, IOREQ_READ, df, 0);
         break;
 
     case INSTR_CMP:        /* Pass through */
diff -r c5ff7671b9f2 -r b5fc88aad1b0 xen/arch/x86/hvm/vlapic.c
--- a/xen/arch/x86/hvm/vlapic.c Sat Feb 17 13:26:33 2007 +0000
+++ b/xen/arch/x86/hvm/vlapic.c Sun Feb 18 15:29:40 2007 +0000
@@ -459,7 +459,7 @@ static void vlapic_read_aligned(struct v
 static void vlapic_read_aligned(struct vlapic *vlapic, unsigned int offset,
                          unsigned int len, unsigned int *result)
 {
-    ASSERT((len == 4) && (offset > 0) && (offset <= APIC_TDCR));
+    ASSERT((len == 4) && (offset >= 0) && (offset <= APIC_TDCR));
 
     switch ( offset )
     {
diff -r c5ff7671b9f2 -r b5fc88aad1b0 xen/include/asm-x86/hvm/io.h
--- a/xen/include/asm-x86/hvm/io.h      Sat Feb 17 13:26:33 2007 +0000
+++ b/xen/include/asm-x86/hvm/io.h      Sun Feb 18 15:29:40 2007 +0000
@@ -65,6 +65,7 @@
 #define INSTR_XCHG  14
 #define INSTR_SUB   15
 #define INSTR_ADD   16
+#define INSTR_PUSH  17
 
 #define MAX_INST_LEN      15 /* Maximum instruction length = 15 bytes */
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] hvm: Support PUSH from mmio area (opcode 0xFF/6)., Xen patchbot-unstable <=