Lines Matching refs:evtchn
107 static int add_evtchn(struct per_user_data *u, struct user_evtchn *evtchn) in add_evtchn() argument
119 if (this->port < evtchn->port) in add_evtchn()
121 else if (this->port > evtchn->port) in add_evtchn()
128 rb_link_node(&evtchn->node, parent, new); in add_evtchn()
129 rb_insert_color(&evtchn->node, &u->evtchns); in add_evtchn()
134 static void del_evtchn(struct per_user_data *u, struct user_evtchn *evtchn) in del_evtchn() argument
137 rb_erase(&evtchn->node, &u->evtchns); in del_evtchn()
138 kfree(evtchn); in del_evtchn()
147 struct user_evtchn *evtchn; in find_evtchn() local
149 evtchn = rb_entry(node, struct user_evtchn, node); in find_evtchn()
151 if (evtchn->port < port) in find_evtchn()
153 else if (evtchn->port > port) in find_evtchn()
156 return evtchn; in find_evtchn()
163 struct user_evtchn *evtchn = data; in evtchn_interrupt() local
164 struct per_user_data *u = evtchn->user; in evtchn_interrupt()
167 WARN(!evtchn->enabled, in evtchn_interrupt()
169 evtchn->port, u); in evtchn_interrupt()
171 evtchn->enabled = false; in evtchn_interrupt()
179 *evtchn_ring_entry(u, prod) = evtchn->port; in evtchn_interrupt()
295 struct user_evtchn *evtchn; in evtchn_write() local
297 evtchn = find_evtchn(u, port); in evtchn_write()
298 if (evtchn && !evtchn->enabled) { in evtchn_write()
299 evtchn->enabled = true; in evtchn_write()
371 struct user_evtchn *evtchn; in evtchn_bind_to_user() local
384 evtchn = kzalloc(sizeof(*evtchn), GFP_KERNEL); in evtchn_bind_to_user()
385 if (!evtchn) in evtchn_bind_to_user()
388 evtchn->user = u; in evtchn_bind_to_user()
389 evtchn->port = port; in evtchn_bind_to_user()
390 evtchn->enabled = true; /* start enabled */ in evtchn_bind_to_user()
392 rc = add_evtchn(u, evtchn); in evtchn_bind_to_user()
401 u->name, evtchn); in evtchn_bind_to_user()
413 del_evtchn(u, evtchn); in evtchn_bind_to_user()
418 struct user_evtchn *evtchn) in evtchn_unbind_from_user() argument
420 int irq = irq_from_evtchn(evtchn->port); in evtchn_unbind_from_user()
424 unbind_from_irqhandler(irq, evtchn); in evtchn_unbind_from_user()
426 del_evtchn(u, evtchn); in evtchn_unbind_from_user()
518 struct user_evtchn *evtchn; in evtchn_ioctl() local
529 evtchn = find_evtchn(u, unbind.port); in evtchn_ioctl()
530 if (!evtchn) in evtchn_ioctl()
534 evtchn_unbind_from_user(u, evtchn); in evtchn_ioctl()
541 struct user_evtchn *evtchn; in evtchn_ioctl() local
548 evtchn = find_evtchn(u, notify.port); in evtchn_ioctl()
549 if (evtchn) { in evtchn_ioctl()
651 struct user_evtchn *evtchn; in evtchn_release() local
653 evtchn = rb_entry(node, struct user_evtchn, node); in evtchn_release()
654 disable_irq(irq_from_evtchn(evtchn->port)); in evtchn_release()
655 evtchn_unbind_from_user(u, evtchn); in evtchn_release()