[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86 iommu: Better synchronisation on dirq_mask.
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |