static int xencomm_privcmd_event_channel_op(privcmd_hypercall_t *hypercall) { int cmd = hypercall->arg[0]; struct xencomm_handle *desc; unsigned int argsize; int ret; switch (cmd) { case EVTCHNOP_alloc_unbound: argsize = sizeof(evtchn_alloc_unbound_t); break; case EVTCHNOP_status: argsize = sizeof(evtchn_status_t); break; default: printk("%s: unknown EVTCHNOP %d\n", __func__, cmd); return -EINVAL; } ret = xencomm_create((void *)hypercall->arg[1], argsize, &desc, GFP_KERNEL); if (ret) return ret; ret = xencomm_arch_hypercall_event_channel_op(cmd, desc); xencomm_free(desc); return ret; }
int xencomm_hypercall_event_channel_op(int cmd, void *op) { struct xencomm_handle *desc; desc = xencomm_map_no_alloc(op, sizeof(struct evtchn_op)); if (desc == NULL) return -EINVAL; return xencomm_arch_hypercall_event_channel_op(cmd, desc); }