From: David Vrabel Date: Tue, 16 Jun 2015 10:30:16 +0000 (+0200) Subject: evtchn: factor out freeing an event channel X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~3086^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a622b5ade2bdf79ad95e6088a4041e75253c43f3;p=xen.git evtchn: factor out freeing an event channel We're going to want to free an event channel from two places. Factor out the code into a free_evtchn() function. Signed-off-by: David Vrabel --- diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c index bf9b2f8ecd..947880f8ff 100644 --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -192,6 +192,17 @@ static int get_free_port(struct domain *d) return port; } +static void free_evtchn(struct domain *d, struct evtchn *chn) +{ + /* Clear pending event to avoid unexpected behavior on re-bind. */ + evtchn_port_clear_pending(d, chn); + + /* Reset binding to vcpu0 when the channel is freed. */ + chn->state = ECS_FREE; + chn->notify_vcpu_id = 0; + + xsm_evtchn_close_post(chn); +} static long evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc) { @@ -569,14 +580,7 @@ static long __evtchn_close(struct domain *d1, int port1) BUG(); } - /* Clear pending event to avoid unexpected behavior on re-bind. */ - evtchn_port_clear_pending(d1, chn1); - - /* Reset binding to vcpu0 when the channel is freed. */ - chn1->state = ECS_FREE; - chn1->notify_vcpu_id = 0; - - xsm_evtchn_close_post(chn1); + free_evtchn(d1, chn1); out: if ( d2 != NULL )