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()
146 struct user_evtchn *evtchn; in find_evtchn() local
148 evtchn = rb_entry(node, struct user_evtchn, node); in find_evtchn()
150 if (evtchn->port < port) in find_evtchn()
152 else if (evtchn->port > port) in find_evtchn()
155 return evtchn; in find_evtchn()
162 struct user_evtchn *evtchn = data; in evtchn_interrupt() local
163 struct per_user_data *u = evtchn->user; in evtchn_interrupt()
165 WARN(!evtchn->enabled, in evtchn_interrupt()
167 evtchn->port, u); in evtchn_interrupt()
170 evtchn->enabled = false; in evtchn_interrupt()
175 *evtchn_ring_entry(u, u->ring_prod) = evtchn->port; in evtchn_interrupt()
290 struct user_evtchn *evtchn; in evtchn_write() local
292 evtchn = find_evtchn(u, port); in evtchn_write()
293 if (evtchn && !evtchn->enabled) { in evtchn_write()
294 evtchn->enabled = true; in evtchn_write()
366 struct user_evtchn *evtchn; in evtchn_bind_to_user() local
379 evtchn = kzalloc(sizeof(*evtchn), GFP_KERNEL); in evtchn_bind_to_user()
380 if (!evtchn) in evtchn_bind_to_user()
383 evtchn->user = u; in evtchn_bind_to_user()
384 evtchn->port = port; in evtchn_bind_to_user()
385 evtchn->enabled = true; /* start enabled */ in evtchn_bind_to_user()
387 rc = add_evtchn(u, evtchn); in evtchn_bind_to_user()
396 u->name, evtchn); in evtchn_bind_to_user()
408 del_evtchn(u, evtchn); in evtchn_bind_to_user()
413 struct user_evtchn *evtchn) in evtchn_unbind_from_user() argument
415 int irq = irq_from_evtchn(evtchn->port); in evtchn_unbind_from_user()
419 unbind_from_irqhandler(irq, evtchn); in evtchn_unbind_from_user()
421 del_evtchn(u, evtchn); in evtchn_unbind_from_user()
426 static void evtchn_bind_interdom_next_vcpu(int evtchn) in evtchn_bind_interdom_next_vcpu() argument
432 irq = irq_from_evtchn(evtchn); in evtchn_bind_interdom_next_vcpu()
450 xen_rebind_evtchn_to_cpu(evtchn, selected_cpu); in evtchn_bind_interdom_next_vcpu()
545 struct user_evtchn *evtchn; in evtchn_ioctl() local
556 evtchn = find_evtchn(u, unbind.port); in evtchn_ioctl()
557 if (!evtchn) in evtchn_ioctl()
561 evtchn_unbind_from_user(u, evtchn); in evtchn_ioctl()
568 struct user_evtchn *evtchn; in evtchn_ioctl() local
575 evtchn = find_evtchn(u, notify.port); in evtchn_ioctl()
576 if (evtchn) { in evtchn_ioctl()
676 struct user_evtchn *evtchn; in evtchn_release() local
678 evtchn = rb_entry(node, struct user_evtchn, node); in evtchn_release()
679 disable_irq(irq_from_evtchn(evtchn->port)); in evtchn_release()
680 evtchn_unbind_from_user(u, evtchn); in evtchn_release()