[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] hvm: Fix save/restore when callback_via line is routed through a PCI
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Date 1186394937 -3600 # Node ID e1435c1f3382069ca5044808b3233bda8b09d150 # Parent fd20c1333e3ee8f58e879aed79d74a75bc1969e6 hvm: Fix save/restore when callback_via line is routed through a PCI INTx wire. Signed-off-by: Edwin Zhai <edwin.zhai@xxxxxxxxx> Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- xen/arch/x86/hvm/irq.c | 26 +++++++++++++++++++++++++- 1 files changed, 25 insertions(+), 1 deletion(-) diff -r fd20c1333e3e -r e1435c1f3382 xen/arch/x86/hvm/irq.c --- a/xen/arch/x86/hvm/irq.c Mon Aug 06 10:13:34 2007 +0100 +++ b/xen/arch/x86/hvm/irq.c Mon Aug 06 11:08:57 2007 +0100 @@ -395,9 +395,33 @@ static int irq_save_pci(struct domain *d static int irq_save_pci(struct domain *d, hvm_domain_context_t *h) { struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq; + unsigned int asserted, pdev, pintx; + int rc; + + spin_lock(&d->arch.hvm_domain.irq_lock); + + pdev = hvm_irq->callback_via.pci.dev; + pintx = hvm_irq->callback_via.pci.intx; + asserted = (hvm_irq->callback_via_asserted && + (hvm_irq->callback_via_type == HVMIRQ_callback_pci_intx)); + + /* + * Deassert virtual interrupt via PCI INTx line. The virtual interrupt + * status is not save/restored, so the INTx line must be deasserted in + * the restore context. + */ + if ( asserted ) + __hvm_pci_intx_deassert(d, pdev, pintx); /* Save PCI IRQ lines */ - return ( hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx) ); + rc = hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx); + + if ( asserted ) + __hvm_pci_intx_assert(d, pdev, pintx); + + spin_unlock(&d->arch.hvm_domain.irq_lock); + + return rc; } static int irq_save_isa(struct domain *d, hvm_domain_context_t *h) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |