diff options
author | Kaixing Hong <hongkaixing@huawei.com> | 2012-02-17 15:14:25 +0800 |
---|---|---|
committer | Kaixing Hong <hongkaixing@huawei.com> | 2012-02-17 15:14:25 +0800 |
commit | 47cf584883df7caf997b51eed15a84ae5a7ce324 (patch) | |
tree | f8ccc4e926c51c56515dc02de977c9f037ae73ee | |
parent | 5cf63642892bbb673a576475c2a223c7caef169d (diff) | |
download | xen-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.c | 3 |
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; |