[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu
> -----Original Message----- > From: xen-devel-bounces@xxxxxxxxxxxxx [mailto:xen-devel- > bounces@xxxxxxxxxxxxx] On Behalf Of Andrew Cooper > Sent: 12 January 2015 09:47 > To: Xen-devel > Cc: Andrew Cooper; Keir (Xen.org); Jan Beulich > Subject: [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> Reviewed-by: Paul Durrant <paul.durrant@xxxxxxxxxx> > --- > 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 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |