aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaixing Hong <hongkaixing@huawei.com>2012-02-17 15:14:25 +0800
committerKaixing Hong <hongkaixing@huawei.com>2012-02-17 15:14:25 +0800
commit47cf584883df7caf997b51eed15a84ae5a7ce324 (patch)
treef8ccc4e926c51c56515dc02de977c9f037ae73ee
parent5cf63642892bbb673a576475c2a223c7caef169d (diff)
downloadxen-47cf584883df7caf997b51eed15a84ae5a7ce324.tar.gz
xen-47cf584883df7caf997b51eed15a84ae5a7ce324.tar.bz2
xen-47cf584883df7caf997b51eed15a84ae5a7ce324.zip
x86/mm: Make sure the event channel is released accurately
In xenpaging source code,there is an interdomain communication between dom0 and domU. In mem_event_enable(),the function alloc_unbound_xen_event_channel() allocates a free port for domU, and then it will be bound with dom0. When xenpaging tears down,it just frees dom0's event channel port by xc_evtchn_unbind(), leaves domU's port still occupied. So we add the patch to free domU's port when xenpaging exits. We need double free interdomain eventchannel. First free domainU port, and leave domain 0 port unbond, Then free domain 0 port. Signed-off-by: Kaixing Hong <hongkaixing@huawei.com>, Signed-off-by: Zhen Shi <bicky.shi@huawei.com> Acked-by: Olaf Hering <olaf@aepfle.de> Committed-by: Tim Deegan <tim@xen.org>
-rw-r--r--xen/arch/x86/mm/mem_event.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/xen/arch/x86/mm/mem_event.c b/xen/arch/x86/mm/mem_event.c
index 3b2267adfb..35bfedd832 100644
--- a/xen/arch/x86/mm/mem_event.c
+++ b/xen/arch/x86/mm/mem_event.c
@@ -243,6 +243,9 @@ static int mem_event_disable(struct domain *d, struct mem_event_domain *med)
return -EBUSY;
}
+ /* Free domU's event channel and leave the other one unbound */
+ free_xen_event_channel(d->vcpu[0], med->xen_port);
+
unmap_domain_page(med->ring_page);
med->ring_page = NULL;