# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1208861201 -3600
# Node ID ee2f56063f5c6442b60de439b8a204076409b461
# Parent 1cc4df5c7fe8b34de2a3258f1cafec94540d1712
x86 iommu: Better synchronisation on dirq_mask.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
xen/arch/x86/hvm/svm/intr.c | 4 +++-
xen/arch/x86/hvm/vmx/intr.c | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff -r 1cc4df5c7fe8 -r ee2f56063f5c xen/arch/x86/hvm/svm/intr.c
--- a/xen/arch/x86/hvm/svm/intr.c Tue Apr 22 11:44:56 2008 +0100
+++ b/xen/arch/x86/hvm/svm/intr.c Tue Apr 22 11:46:41 2008 +0100
@@ -109,8 +109,10 @@ static void svm_dirq_assist(struct vcpu
irq < NR_IRQS;
irq = find_next_bit(hvm_irq_dpci->dirq_mask, NR_IRQS, irq + 1) )
{
+ if ( !test_and_clear_bit(irq, &hvm_irq_dpci->dirq_mask) )
+ continue;
+
stop_timer(&hvm_irq_dpci->hvm_timer[irq_to_vector(irq)]);
- clear_bit(irq, &hvm_irq_dpci->dirq_mask);
list_for_each_entry ( digl, &hvm_irq_dpci->mirq[irq].digl_list, list )
{
diff -r 1cc4df5c7fe8 -r ee2f56063f5c xen/arch/x86/hvm/vmx/intr.c
--- a/xen/arch/x86/hvm/vmx/intr.c Tue Apr 22 11:44:56 2008 +0100
+++ b/xen/arch/x86/hvm/vmx/intr.c Tue Apr 22 11:46:41 2008 +0100
@@ -118,8 +118,10 @@ static void vmx_dirq_assist(struct vcpu
irq < NR_IRQS;
irq = find_next_bit(hvm_irq_dpci->dirq_mask, NR_IRQS, irq + 1) )
{
+ if ( !test_and_clear_bit(irq, &hvm_irq_dpci->dirq_mask) )
+ continue;
+
stop_timer(&hvm_irq_dpci->hvm_timer[irq_to_vector(irq)]);
- clear_bit(irq, &hvm_irq_dpci->dirq_mask);
list_for_each_entry ( digl, &hvm_irq_dpci->mirq[irq].digl_list, list )
{
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|