Lines Matching refs:evtchn

114 static int add_evtchn(struct per_user_data *u, struct user_evtchn *evtchn)  in add_evtchn()  argument
126 if (this->port < evtchn->port) in add_evtchn()
128 else if (this->port > evtchn->port) in add_evtchn()
135 rb_link_node(&evtchn->node, parent, new); in add_evtchn()
136 rb_insert_color(&evtchn->node, &u->evtchns); in add_evtchn()
141 static void del_evtchn(struct per_user_data *u, struct user_evtchn *evtchn) in del_evtchn() argument
144 rb_erase(&evtchn->node, &u->evtchns); in del_evtchn()
145 kfree(evtchn); in del_evtchn()
153 struct user_evtchn *evtchn; in find_evtchn() local
155 evtchn = container_of(node, struct user_evtchn, node); in find_evtchn()
157 if (evtchn->port < port) in find_evtchn()
159 else if (evtchn->port > port) in find_evtchn()
162 return evtchn; in find_evtchn()
169 struct user_evtchn *evtchn = data; in evtchn_interrupt() local
170 struct per_user_data *u = evtchn->user; in evtchn_interrupt()
172 WARN(!evtchn->enabled, in evtchn_interrupt()
174 evtchn->port, u); in evtchn_interrupt()
177 evtchn->enabled = false; in evtchn_interrupt()
182 *evtchn_ring_entry(u, u->ring_prod) = evtchn->port; in evtchn_interrupt()
297 struct user_evtchn *evtchn; in evtchn_write() local
299 evtchn = find_evtchn(u, port); in evtchn_write()
300 if (evtchn && !evtchn->enabled) { in evtchn_write()
301 evtchn->enabled = true; in evtchn_write()
373 struct user_evtchn *evtchn; in evtchn_bind_to_user() local
386 evtchn = kzalloc(sizeof(*evtchn), GFP_KERNEL); in evtchn_bind_to_user()
387 if (!evtchn) in evtchn_bind_to_user()
390 evtchn->user = u; in evtchn_bind_to_user()
391 evtchn->port = port; in evtchn_bind_to_user()
392 evtchn->enabled = true; /* start enabled */ in evtchn_bind_to_user()
394 rc = add_evtchn(u, evtchn); in evtchn_bind_to_user()
403 u->name, evtchn); in evtchn_bind_to_user()
415 del_evtchn(u, evtchn); in evtchn_bind_to_user()
420 struct user_evtchn *evtchn) in evtchn_unbind_from_user() argument
422 int irq = irq_from_evtchn(evtchn->port); in evtchn_unbind_from_user()
426 unbind_from_irqhandler(irq, evtchn); in evtchn_unbind_from_user()
428 del_evtchn(u, evtchn); in evtchn_unbind_from_user()
507 struct user_evtchn *evtchn; in evtchn_ioctl() local
518 evtchn = find_evtchn(u, unbind.port); in evtchn_ioctl()
519 if (!evtchn) in evtchn_ioctl()
523 evtchn_unbind_from_user(u, evtchn); in evtchn_ioctl()
530 struct user_evtchn *evtchn; in evtchn_ioctl() local
537 evtchn = find_evtchn(u, notify.port); in evtchn_ioctl()
538 if (evtchn) { in evtchn_ioctl()
615 struct user_evtchn *evtchn; in evtchn_release() local
617 evtchn = rb_entry(node, struct user_evtchn, node); in evtchn_release()
618 disable_irq(irq_from_evtchn(evtchn->port)); in evtchn_release()
619 evtchn_unbind_from_user(u, evtchn); in evtchn_release()