Lines Matching defs:evtchn
2 * evtchn.c
57 #include <xen/evtchn.h>
66 /* Notification ring, accessed via /dev/xen/evtchn. */
108 static int add_evtchn(struct per_user_data *u, struct user_evtchn *evtchn)
120 if (this->port < evtchn->port)
122 else if (this->port > evtchn->port)
129 rb_link_node(&evtchn->node, parent, new);
130 rb_insert_color(&evtchn->node, &u->evtchns);
135 static void del_evtchn(struct per_user_data *u, struct user_evtchn *evtchn)
138 rb_erase(&evtchn->node, &u->evtchns);
139 kfree(evtchn);
148 struct user_evtchn *evtchn;
150 evtchn = rb_entry(node, struct user_evtchn, node);
152 if (evtchn->port < port)
154 else if (evtchn->port > port)
157 return evtchn;
164 struct user_evtchn *evtchn = data;
165 struct per_user_data *u = evtchn->user;
169 if (evtchn->unbinding)
172 WARN(!evtchn->enabled,
174 evtchn->port, u);
176 evtchn->enabled = false;
184 *evtchn_ring_entry(u, prod) = evtchn->port;
300 struct user_evtchn *evtchn;
302 evtchn = find_evtchn(u, port);
303 if (evtchn && !evtchn->enabled) {
304 evtchn->enabled = true;
377 struct user_evtchn *evtchn;
389 evtchn = kzalloc(sizeof(*evtchn), GFP_KERNEL);
390 if (!evtchn)
393 evtchn->user = u;
394 evtchn->port = port;
395 evtchn->enabled = true; /* start enabled */
397 rc = add_evtchn(u, evtchn);
406 u->name, evtchn);
418 del_evtchn(u, evtchn);
423 struct user_evtchn *evtchn)
425 int irq = irq_from_evtchn(evtchn->port);
429 evtchn->unbinding = true;
430 unbind_from_irqhandler(irq, evtchn);
432 del_evtchn(u, evtchn);
524 struct user_evtchn *evtchn;
535 evtchn = find_evtchn(u, unbind.port);
536 if (!evtchn)
540 evtchn_unbind_from_user(u, evtchn);
547 struct user_evtchn *evtchn;
554 evtchn = find_evtchn(u, bind.port);
555 if (evtchn)
564 struct user_evtchn *evtchn;
571 evtchn = find_evtchn(u, notify.port);
572 if (evtchn) {
649 u->name = kasprintf(GFP_KERNEL, "evtchn:%s", current->comm);
674 struct user_evtchn *evtchn;
676 evtchn = rb_entry(node, struct user_evtchn, node);
677 disable_irq(irq_from_evtchn(evtchn->port));
678 evtchn_unbind_from_user(u, evtchn);
702 .name = "xen/evtchn",
712 /* Create '/dev/xen/evtchn'. */
715 pr_err("Could not register /dev/xen/evtchn\n");