[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] x86: re-inject emulated level pirqs in PV on HVM guests if still asserted
This patch is a backport of CS 24007 for xen-4.1-testing. PV on HVM guests can loose level interrupts coming from emulated devices if they have been remapped onto event channels. The reason is that we are missing the code to inject a pirq again in the guest when the guest EOIs it, if it corresponds to an emulated level interrupt and the interrupt is still asserted. Fix this issue and also return error when the guest tries to get the irq_status of a non-existing pirq. Changes in v2: - move the spinlock afterward to cover the new code only. Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> CC: Jan Beulich <JBeulich@xxxxxxxx> diff -r e73ada19a69d xen/arch/x86/physdev.c --- a/xen/arch/x86/physdev.c Thu Nov 17 09:13:25 2011 +0000 +++ b/xen/arch/x86/physdev.c Fri Nov 18 09:42:03 2011 +0000 @@ -268,6 +268,20 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_H ret = pirq_guest_eoi(v->domain, eoi.irq); else ret = 0; + spin_lock(&v->domain->event_lock); + if ( is_hvm_domain(v->domain) && + domain_pirq_to_emuirq(v->domain, eoi.irq) > 0 ) + { + struct hvm_irq *hvm_irq = &v->domain->arch.hvm_domain.irq; + int gsi = domain_pirq_to_emuirq(v->domain, eoi.irq); + + /* if this is a level irq and count > 0, send another + * notification */ + if ( gsi >= NR_ISAIRQS /* ISA irqs are edge triggered */ + && hvm_irq->gsi_assert_count[gsi] ) + send_guest_pirq(v->domain, eoi.irq); + } + spin_unlock(&v->domain->event_lock); break; } @@ -323,9 +337,10 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_H break; irq_status_query.flags = 0; if ( is_hvm_domain(v->domain) && - domain_pirq_to_irq(v->domain, irq) <= 0 ) + domain_pirq_to_irq(v->domain, irq) <= 0 && + domain_pirq_to_emuirq(v->domain, irq) == IRQ_UNBOUND ) { - ret = copy_to_guest(arg, &irq_status_query, 1) ? -EFAULT : 0; + ret = -EINVAL; break; } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |