* [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu
@ 2015-01-12 9:46 Andrew Cooper
2015-01-12 10:06 ` Paul Durrant
2015-01-12 10:07 ` Jan Beulich
0 siblings, 2 replies; 4+ messages in thread
From: Andrew Cooper @ 2015-01-12 9:46 UTC (permalink / raw)
To: Xen-devel; +Cc: Andrew Cooper, Keir Fraser, Jan Beulich
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@citrix.com>
CC: Keir Fraser <keir@xen.org>
CC: Jan Beulich <JBeulich@suse.com>
---
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
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu
2015-01-12 9:46 [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu Andrew Cooper
@ 2015-01-12 10:06 ` Paul Durrant
2015-01-12 10:07 ` Jan Beulich
1 sibling, 0 replies; 4+ messages in thread
From: Paul Durrant @ 2015-01-12 10:06 UTC (permalink / raw)
To: Xen-devel; +Cc: Andrew Cooper, Keir (Xen.org), Jan Beulich
> -----Original Message-----
> From: xen-devel-bounces@lists.xen.org [mailto:xen-devel-
> bounces@lists.xen.org] 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@citrix.com>
> CC: Keir Fraser <keir@xen.org>
> CC: Jan Beulich <JBeulich@suse.com>
Reviewed-by: Paul Durrant <paul.durrant@citrix.com>
> ---
> 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@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu
2015-01-12 9:46 [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu Andrew Cooper
2015-01-12 10:06 ` Paul Durrant
@ 2015-01-12 10:07 ` Jan Beulich
2015-01-12 10:10 ` Andrew Cooper
1 sibling, 1 reply; 4+ messages in thread
From: Jan Beulich @ 2015-01-12 10:07 UTC (permalink / raw)
To: Andrew Cooper; +Cc: Keir Fraser, Xen-devel
>>> On 12.01.15 at 10:46, <andrew.cooper3@citrix.com> wrote:
> 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.
I wonder whether for symmetry alloc_unbound_xen_event_channel()
shouldn't then also take a [struct domain *, unsigned int vcpu_id]
pair instead of a struct vcpu *.
Jan
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu
2015-01-12 10:07 ` Jan Beulich
@ 2015-01-12 10:10 ` Andrew Cooper
0 siblings, 0 replies; 4+ messages in thread
From: Andrew Cooper @ 2015-01-12 10:10 UTC (permalink / raw)
To: Jan Beulich; +Cc: Keir Fraser, Xen-devel
On 12/01/15 10:07, Jan Beulich wrote:
>>>> On 12.01.15 at 10:46, <andrew.cooper3@citrix.com> wrote:
>> 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.
> I wonder whether for symmetry alloc_unbound_xen_event_channel()
> shouldn't then also take a [struct domain *, unsigned int vcpu_id]
> pair instead of a struct vcpu *.
Sounds like a good idea - I will do that for v2.
~Andrew
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-01-12 10:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-12 9:46 [PATCH] xen/evtchn: Alter free_xen_event_channel() to take a domain rather than vcpu Andrew Cooper
2015-01-12 10:06 ` Paul Durrant
2015-01-12 10:07 ` Jan Beulich
2015-01-12 10:10 ` Andrew Cooper
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.