[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu
The resource behind an event channel is domain centric rather than vcpu centric, and free_xen_event_channel() only follows the vcpu's domain pointer. This change allows mem_event_disable() to avoid arbitrarily referencing d->vcpu[0] just to pass the domain. No functional change. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CC: Keir Fraser <keir@xxxxxxx> CC: Jan Beulich <JBeulich@xxxxxxxx> --- xen/arch/x86/hvm/hvm.c | 12 ++++++------ xen/common/event_channel.c | 4 +--- xen/common/mem_event.c | 2 +- xen/include/xen/event.h | 3 +-- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 8b06bfd..acfc032 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -647,7 +647,7 @@ static int hvm_ioreq_server_add_vcpu(struct hvm_ioreq_server *s, return 0; fail3: - free_xen_event_channel(v, sv->ioreq_evtchn); + free_xen_event_channel(v->domain, sv->ioreq_evtchn); fail2: spin_unlock(&s->lock); @@ -674,9 +674,9 @@ static void hvm_ioreq_server_remove_vcpu(struct hvm_ioreq_server *s, list_del(&sv->list_entry); if ( v->vcpu_id == 0 && s->bufioreq.va != NULL ) - free_xen_event_channel(v, s->bufioreq_evtchn); + free_xen_event_channel(v->domain, s->bufioreq_evtchn); - free_xen_event_channel(v, sv->ioreq_evtchn); + free_xen_event_channel(v->domain, sv->ioreq_evtchn); xfree(sv); break; @@ -701,9 +701,9 @@ static void hvm_ioreq_server_remove_all_vcpus(struct hvm_ioreq_server *s) list_del(&sv->list_entry); if ( v->vcpu_id == 0 && s->bufioreq.va != NULL ) - free_xen_event_channel(v, s->bufioreq_evtchn); + free_xen_event_channel(v->domain, s->bufioreq_evtchn); - free_xen_event_channel(v, sv->ioreq_evtchn); + free_xen_event_channel(v->domain, sv->ioreq_evtchn); xfree(sv); } @@ -1333,7 +1333,7 @@ static int hvm_replace_event_channel(struct vcpu *v, domid_t remote_domid, /* xchg() ensures that only we call free_xen_event_channel(). */ old_port = xchg(p_port, new_port); - free_xen_event_channel(v, old_port); + free_xen_event_channel(v->domain, old_port); return 0; } diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c index 7d6de54..cfe4978 100644 --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -1173,11 +1173,9 @@ int alloc_unbound_xen_event_channel( } -void free_xen_event_channel( - struct vcpu *local_vcpu, int port) +void free_xen_event_channel(struct domain *d, int port) { struct evtchn *chn; - struct domain *d = local_vcpu->domain; spin_lock(&d->event_lock); diff --git a/xen/common/mem_event.c b/xen/common/mem_event.c index 16ebdb5..0cc43d7 100644 --- a/xen/common/mem_event.c +++ b/xen/common/mem_event.c @@ -221,7 +221,7 @@ static int mem_event_disable(struct domain *d, struct mem_event_domain *med) } /* Free domU's event channel and leave the other one unbound */ - free_xen_event_channel(d->vcpu[0], med->xen_port); + free_xen_event_channel(d, med->xen_port); /* Unblock all vCPUs */ for_each_vcpu ( d, v ) diff --git a/xen/include/xen/event.h b/xen/include/xen/event.h index 88526f8..0eb1dd3 100644 --- a/xen/include/xen/event.h +++ b/xen/include/xen/event.h @@ -60,8 +60,7 @@ typedef void (*xen_event_channel_notification_t)( int alloc_unbound_xen_event_channel( struct vcpu *local_vcpu, domid_t remote_domid, xen_event_channel_notification_t notification_fn); -void free_xen_event_channel( - struct vcpu *local_vcpu, int port); +void free_xen_event_channel(struct domain *d, int port); /* Query if event channel is in use by the guest */ int guest_enabled_event(struct vcpu *v, uint32_t virq); -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |