[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 01/25] xen/evtchn: expose evtchn_bind_ipi_vcpu0_domain for use within Xen
Allocates an IPI-bound event channel on vcpu0 for specified domain. Is able to bypass the existence check on vcpu number since vcpu 0 should always exist. Bypass is required at the point of use by Argo. Signed-off-by: Christopher Clark <christopher.clark6@xxxxxxxxxxxxxx> --- xen/common/event_channel.c | 35 +++++++++++++++++++++++++++++------ xen/include/xen/event.h | 3 +++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c index f34d4f0..3dfde83 100644 --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -411,17 +411,12 @@ int evtchn_bind_virq(evtchn_bind_virq_t *bind, evtchn_port_t port) } -static long evtchn_bind_ipi(evtchn_bind_ipi_t *bind) +static long evtchn_bind_ipi_domain(struct domain *d, evtchn_bind_ipi_t *bind) { struct evtchn *chn; - struct domain *d = current->domain; int port, vcpu = bind->vcpu; long rc = 0; - if ( (vcpu < 0) || (vcpu >= d->max_vcpus) || - (d->vcpu[vcpu] == NULL) ) - return -ENOENT; - spin_lock(&d->event_lock); if ( (port = get_free_port(d)) < 0 ) @@ -446,6 +441,34 @@ static long evtchn_bind_ipi(evtchn_bind_ipi_t *bind) } +static long evtchn_bind_ipi(evtchn_bind_ipi_t *bind) +{ + struct domain *d = current->domain; + int vcpu = bind->vcpu; + + if ( (vcpu < 0) || (vcpu >= d->max_vcpus) || + (d->vcpu[vcpu] == NULL) ) + return -ENOENT; + + return evtchn_bind_ipi_domain(d, bind); +} + +long evtchn_bind_ipi_vcpu0_domain(struct domain *d, evtchn_port_t *out_port) +{ + evtchn_bind_ipi_t bind_ipi; + long rc; + + bind_ipi.vcpu = 0; + + rc = evtchn_bind_ipi_domain(d, &bind_ipi); + + if ( !rc ) + *out_port = bind_ipi.port; + + return rc; +} + + static void link_pirq_port(int port, struct evtchn *chn, struct vcpu *v) { chn->u.pirq.prev_port = 0; diff --git a/xen/include/xen/event.h b/xen/include/xen/event.h index ebb879e..18c3738 100644 --- a/xen/include/xen/event.h +++ b/xen/include/xen/event.h @@ -86,6 +86,9 @@ void notify_via_xen_event_channel(struct domain *ld, int lport); /* Inject an event channel notification into the guest */ void arch_evtchn_inject(struct vcpu *v); +/* Allocate an IPI event channel on vcpu0 for the specified domain */ +long evtchn_bind_ipi_vcpu0_domain(struct domain *d, evtchn_port_t *out_port); + /* * Internal event channel object storage. * -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |