debuggers.hg
changeset 17988:3d5f28d6e777
iommu: Fix hvm_dpci_eoi for smp guest in ioapic interrupt mode
My testing shows, for some smp guests, ent->fields.mask will not be
unmasked when hvm_dpci_eoi() is invoked at the first time. In that
case, we should rely on timeout call back to do pirq_guest_eoi() and
should not stop the per-irq timer too early.
From: Wei Wang <wei.wang2@amd.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
My testing shows, for some smp guests, ent->fields.mask will not be
unmasked when hvm_dpci_eoi() is invoked at the first time. In that
case, we should rely on timeout call back to do pirq_guest_eoi() and
should not stop the per-irq timer too early.
From: Wei Wang <wei.wang2@amd.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
author | Keir Fraser <keir.fraser@citrix.com> |
---|---|
date | Wed Jul 02 17:28:27 2008 +0100 (2008-07-02) |
parents | 97b4c5c511f0 |
children | e65fe28b5288 |
files | xen/drivers/passthrough/io.c |
line diff
1.1 --- a/xen/drivers/passthrough/io.c Wed Jul 02 17:26:42 2008 +0100 1.2 +++ b/xen/drivers/passthrough/io.c Wed Jul 02 17:28:27 2008 +0100 1.3 @@ -258,10 +258,12 @@ void hvm_dpci_eoi(struct domain *d, unsi 1.4 { 1.5 spin_unlock(&hvm_irq_dpci->dirq_lock); 1.6 1.7 - stop_timer(&hvm_irq_dpci->hvm_timer[ 1.8 - domain_irq_to_vector(d, machine_gsi)]); 1.9 if ( (ent == NULL) || !ent->fields.mask ) 1.10 + { 1.11 + stop_timer(&hvm_irq_dpci->hvm_timer[ 1.12 + domain_irq_to_vector(d, machine_gsi)]); 1.13 pirq_guest_eoi(d, machine_gsi); 1.14 + } 1.15 } 1.16 else 1.17 spin_unlock(&hvm_irq_dpci->dirq_lock);