# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID e995d090bba912d26579538130c8fdfc525e5902
# Parent fbc3a2657fefa4621e52de168efc3f99f74c8f03
SVM patch to fix problem with instruction decode.
Signed-off-by: Tom Woller <thomas.woller@xxxxxxx>
diff -r fbc3a2657fef -r e995d090bba9 xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c Tue Mar 21 21:57:47 2006
+++ b/xen/arch/x86/hvm/svm/svm.c Wed Mar 22 09:35:35 2006
@@ -1243,20 +1243,19 @@
"svm_io_instruction: port 0x%lx real %d, eip=%lx:%lx, "
"exit_qualification = %lx",
(unsigned long) port, real, cs, eip, (unsigned
long)info.bytes);
-
- /*
- * On SVM, the RIP of the intruction following the IN/OUT is saved in
- * ExitInfo2
- */
- vmcb->rip = vmcb->exitinfo2;
-
/* string instruction */
if (info.fields.str)
{
unsigned long addr, count = 1;
int sign = regs->eflags & EF_DF ? -1 : 1;
+ /* Need the original rip, here. */
addr = svm_get_io_address(vmcb, regs, dir, real);
+ /*
+ * On SVM, the RIP of the intruction following the IN/OUT is saved in
+ * ExitInfo2
+ */
+ vmcb->rip = vmcb->exitinfo2;
/* "rep" prefix */
if (info.fields.rep)
@@ -1295,6 +1294,12 @@
}
else
{
+ /*
+ * On SVM, the RIP of the intruction following the IN/OUT is saved in
+ * ExitInfo2
+ */
+ vmcb->rip = vmcb->exitinfo2;
+
if (port == 0xe9 && dir == IOREQ_WRITE && size == 1)
hvm_print_line(v, regs->eax); /* guest debug output */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|