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)
{
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;
void (*unmask)(struct domain *d, struct evtchn *evtchn);
bool_t (*is_pending)(struct domain *d, const struct evtchn *evtchn);
bool_t (*is_masked)(struct domain *d, const struct evtchn *evtchn);
+ int (*set_priority)(struct domain *d, struct evtchn *evtchn,
+ unsigned int priority);
void (*print_state)(struct domain *d, const struct evtchn *evtchn);
};
return d->evtchn_port_ops->is_masked(d, evtchn);
}
+static inline int evtchn_port_set_priority(struct domain *d,
+ struct evtchn *evtchn,
+ unsigned int priority)
+{
+ if ( !d->evtchn_port_ops->set_priority )
+ return -ENOSYS;
+ return d->evtchn_port_ops->set_priority(d, evtchn, priority);
+}
+
static inline void evtchn_port_print_state(struct domain *d,
const struct evtchn *evtchn)
{