From edc8872aeb4a6e6a50775d6088aab97324ee3e15 Mon Sep 17 00:00:00 2001 From: David Vrabel Date: Mon, 14 Oct 2013 10:21:06 +0200 Subject: evtchn: implement EVTCHNOP_set_priority and add the set_priority hook Implement EVTCHNOP_set_priority. A new set_priority hook added to struct evtchn_port_ops will do the ABI specific validation and setup. If an ABI does not provide a set_priority hook (as is the case of the 2-level ABI), the sub-op will return -ENOSYS. Signed-off-by: David Vrabel Reviewed-by: Jan Beulich Acked-by: Keir Fraser --- xen/common/event_channel.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'xen/common/event_channel.c') diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c index 87bca94087..340bf32583 100644 --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -955,6 +955,27 @@ out: return rc; } +static long evtchn_set_priority(const struct evtchn_set_priority *set_priority) +{ + struct domain *d = current->domain; + unsigned int port = set_priority->port; + long ret; + + spin_lock(&d->event_lock); + + if ( !port_is_valid(d, port) ) + { + spin_unlock(&d->event_lock); + return -EINVAL; + } + + ret = evtchn_port_set_priority(d, evtchn_from_port(d, port), + set_priority->priority); + + spin_unlock(&d->event_lock); + + return ret; +} long do_event_channel_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) { @@ -1064,6 +1085,14 @@ long do_event_channel_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) break; } + case EVTCHNOP_set_priority: { + struct evtchn_set_priority set_priority; + if ( copy_from_guest(&set_priority, arg, 1) != 0 ) + return -EFAULT; + rc = evtchn_set_priority(&set_priority); + break; + } + default: rc = -ENOSYS; break; -- cgit v1.2.3