[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.