Keir:
This patch is used to remove redundant call to vmx_intr_assit
when a domain switch happen due to VM_EXIT.
Thx,eddie
# HG changeset patch
# User root@xxxxxxxxxxxxxxxxxxxxx
# Node ID 2db140c256195ae15b98d2ca38e20e768418eef4
# Parent 99914b54f7bffc8c27757a1ac2bc7a0d97597ac8
remove dual invoke of vmx_intr_assit when VM_EXIT cause domain switch.
signed-off-by Eddie (eddie.dong@xxxxxxxxx)
signed-off-by Edwin (edwin.zhai@xxxxxxxxx)
diff -r 99914b54f7bf -r 2db140c25619 xen/arch/x86/vmx.c
--- a/xen/arch/x86/vmx.c Thu Aug 18 18:40:02 2005
+++ b/xen/arch/x86/vmx.c Mon Aug 22 08:09:17 2005
@@ -1713,7 +1713,6 @@
__vmx_bug(®s); /* should not happen */
}
- vmx_intr_assist(v);
return;
}
diff -r 99914b54f7bf -r 2db140c25619 xen/arch/x86/vmx_io.c
--- a/xen/arch/x86/vmx_io.c Thu Aug 18 18:40:02 2005
+++ b/xen/arch/x86/vmx_io.c Mon Aug 22 08:09:17 2005
@@ -631,12 +631,14 @@
return ((eflags & X86_EFLAGS_IF) == 0);
}
-void vmx_intr_assist(struct vcpu *v)
+asmlinkage void vmx_intr_assist()
{
int intr_type = 0;
- int highest_vector = find_highest_pending_irq(v, &intr_type);
+ int highest_vector;
unsigned long intr_fields, eflags, interruptibility,
cpu_exec_control;
-
+ struct vcpu *v = current;
+
+ highest_vector = find_highest_pending_irq(v, &intr_type);
__vmread(CPU_BASED_VM_EXEC_CONTROL, &cpu_exec_control);
if (highest_vector == -1) {
@@ -714,7 +716,6 @@
ASSERT(!test_bit(ARCH_VMX_IO_WAIT, &d->arch.arch_vmx.flags));
/* We always check for interrupts before resuming guest */
- vmx_intr_assist(d);
}
#endif /* CONFIG_VMX */
diff -r 99914b54f7bf -r 2db140c25619 xen/arch/x86/x86_32/entry.S
--- a/xen/arch/x86/x86_32/entry.S Thu Aug 18 18:40:02 2005
+++ b/xen/arch/x86/x86_32/entry.S Mon Aug 22 08:09:17 2005
@@ -140,6 +140,7 @@
jnz 2f
/* vmx_restore_all_guest */
+ call vmx_intr_assist
call load_cr2
.endif
VMX_RESTORE_ALL_NOSEGREGS
diff -r 99914b54f7bf -r 2db140c25619 xen/arch/x86/x86_64/entry.S
--- a/xen/arch/x86/x86_64/entry.S Thu Aug 18 18:40:02 2005
+++ b/xen/arch/x86/x86_64/entry.S Mon Aug 22 08:09:17 2005
@@ -233,6 +233,7 @@
jnz 2f
/* vmx_restore_all_guest */
+ call vmx_intr_assist
call load_cr2
.endif
/*
diff -r 99914b54f7bf -r 2db140c25619 xen/include/asm-x86/vmx.h
--- a/xen/include/asm-x86/vmx.h Thu Aug 18 18:40:02 2005
+++ b/xen/include/asm-x86/vmx.h Mon Aug 22 08:09:17 2005
@@ -31,7 +31,7 @@
extern void vmx_asm_vmexit_handler(struct cpu_user_regs);
extern void vmx_asm_do_resume(void);
extern void vmx_asm_do_launch(void);
-extern void vmx_intr_assist(struct vcpu *d);
+extern void vmx_intr_assist();
extern void arch_vmx_do_launch(struct vcpu *);
extern void arch_vmx_do_resume(struct vcpu *);
remove_intr_dual_invoke.patch
Description: remove_intr_dual_invoke.patch
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|