From: Kaixing Hong Date: Fri, 17 Feb 2012 07:14:25 +0000 (+0800) Subject: x86/mm: Make sure the event channel is released accurately X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=47cf584883df7caf997b51eed15a84ae5a7ce324;p=xen.git 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 , Signed-off-by: Zhen Shi Acked-by: Olaf Hering Committed-by: Tim Deegan --- 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;