c9e3853c04
24448-x86-pt-irq-leak.patch - Upstream patches from Jan 24261-x86-cpuidle-Westmere-EX.patch 24417-amd-erratum-573.patch 24429-mceinj-tool.patch 24447-x86-TXT-INIT-SIPI-delay.patch ioemu-9868-MSI-X.patch - bnc#732884 - remove private runlevel 4 from init scripts xen.no-default-runlevel-4.patch - bnc#727515 - Fragmented packets hang network boot of HVM guest ipxe-gcc45-warnings.patch ipxe-ipv4-fragment.patch ipxe-enable-nics.patch - fate#310510 - fix xenpaging update xenpaging.autostart.patch, make changes with mem-swap-target permanent update xenpaging.doc.patch, mention issues with live migration - fate#310510 - fix xenpaging add xenpaging.evict_mmap_readonly.patch update xenpaging.error-handling.patch, reduce debug output - bnc#736824 - Microcode patches for AMD's 15h processors panic the system 24189-x86-p2m-pod-locking.patch 24412-x86-AMD-errata-model-shift.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=164
32 lines
1.1 KiB
Diff
32 lines
1.1 KiB
Diff
References: bnc#735806
|
|
|
|
# HG changeset patch
|
|
# User Jan Beulich <jbeulich@suse.com>
|
|
# Date 1325492779 -3600
|
|
# Node ID 3a22ed3ec534799b3cab55b0dc0a7380e701ecbe
|
|
# Parent a7b2610b8e5c9a15b1f5de9a3eabf7f19d0b4199
|
|
x86/passthrough: don't leak guest IRQs
|
|
|
|
As unmap_domain_pirq_emuirq() fails on a never mapped pIRQ, it must not
|
|
be called for the non-emu-IRQ case (to prevent the entire unmap
|
|
operation failing).
|
|
|
|
Based on a suggestion from Stefano.
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|
Tested-by: Yongjie Ren <yongjie.ren@intel.com>
|
|
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
|
|
|
|
--- a/xen/arch/x86/physdev.c
|
|
+++ b/xen/arch/x86/physdev.c
|
|
@@ -228,7 +228,8 @@ static int physdev_unmap_pirq(struct phy
|
|
if ( is_hvm_domain(d) )
|
|
{
|
|
spin_lock(&d->event_lock);
|
|
- ret = unmap_domain_pirq_emuirq(d, unmap->pirq);
|
|
+ if ( domain_pirq_to_emuirq(d, unmap->pirq) != IRQ_UNBOUND )
|
|
+ ret = unmap_domain_pirq_emuirq(d, unmap->pirq);
|
|
spin_unlock(&d->event_lock);
|
|
if ( unmap->domid == DOMID_SELF || ret )
|
|
goto free_domain;
|