Lines Matching refs:evtchn

83 static int add_evtchn(struct per_user_data *u, struct user_evtchn *evtchn)  in add_evtchn()  argument
93 if (this->port < evtchn->port) in add_evtchn()
95 else if (this->port > evtchn->port) in add_evtchn()
102 rb_link_node(&evtchn->node, parent, new); in add_evtchn()
103 rb_insert_color(&evtchn->node, &u->evtchns); in add_evtchn()
108 static void del_evtchn(struct per_user_data *u, struct user_evtchn *evtchn) in del_evtchn() argument
110 rb_erase(&evtchn->node, &u->evtchns); in del_evtchn()
111 kfree(evtchn); in del_evtchn()
119 struct user_evtchn *evtchn; in find_evtchn() local
121 evtchn = container_of(node, struct user_evtchn, node); in find_evtchn()
123 if (evtchn->port < port) in find_evtchn()
125 else if (evtchn->port > port) in find_evtchn()
128 return evtchn; in find_evtchn()
135 struct user_evtchn *evtchn = data; in evtchn_interrupt() local
136 struct per_user_data *u = evtchn->user; in evtchn_interrupt()
138 WARN(!evtchn->enabled, in evtchn_interrupt()
140 evtchn->port, u); in evtchn_interrupt()
143 evtchn->enabled = false; in evtchn_interrupt()
148 u->ring[EVTCHN_RING_MASK(u->ring_prod)] = evtchn->port; in evtchn_interrupt()
263 struct user_evtchn *evtchn; in evtchn_write() local
265 evtchn = find_evtchn(u, port); in evtchn_write()
266 if (evtchn && !evtchn->enabled) { in evtchn_write()
267 evtchn->enabled = true; in evtchn_write()
283 struct user_evtchn *evtchn; in evtchn_bind_to_user() local
296 evtchn = kzalloc(sizeof(*evtchn), GFP_KERNEL); in evtchn_bind_to_user()
297 if (!evtchn) in evtchn_bind_to_user()
300 evtchn->user = u; in evtchn_bind_to_user()
301 evtchn->port = port; in evtchn_bind_to_user()
302 evtchn->enabled = true; /* start enabled */ in evtchn_bind_to_user()
304 rc = add_evtchn(u, evtchn); in evtchn_bind_to_user()
309 u->name, evtchn); in evtchn_bind_to_user()
321 del_evtchn(u, evtchn); in evtchn_bind_to_user()
326 struct user_evtchn *evtchn) in evtchn_unbind_from_user() argument
328 int irq = irq_from_evtchn(evtchn->port); in evtchn_unbind_from_user()
332 unbind_from_irqhandler(irq, evtchn); in evtchn_unbind_from_user()
334 del_evtchn(u, evtchn); in evtchn_unbind_from_user()
413 struct user_evtchn *evtchn; in evtchn_ioctl() local
424 evtchn = find_evtchn(u, unbind.port); in evtchn_ioctl()
425 if (!evtchn) in evtchn_ioctl()
429 evtchn_unbind_from_user(u, evtchn); in evtchn_ioctl()
436 struct user_evtchn *evtchn; in evtchn_ioctl() local
443 evtchn = find_evtchn(u, notify.port); in evtchn_ioctl()
444 if (evtchn) { in evtchn_ioctl()
528 struct user_evtchn *evtchn; in evtchn_release() local
530 evtchn = rb_entry(node, struct user_evtchn, node); in evtchn_release()
531 disable_irq(irq_from_evtchn(evtchn->port)); in evtchn_release()
532 evtchn_unbind_from_user(u, evtchn); in evtchn_release()