|
@@ -379,18 +379,12 @@ static long evtchn_ioctl(struct file *file,
|
|
|
if (unbind.port >= NR_EVENT_CHANNELS)
|
|
|
break;
|
|
|
|
|
|
- spin_lock_irq(&port_user_lock);
|
|
|
-
|
|
|
rc = -ENOTCONN;
|
|
|
- if (get_port_user(unbind.port) != u) {
|
|
|
- spin_unlock_irq(&port_user_lock);
|
|
|
+ if (get_port_user(unbind.port) != u)
|
|
|
break;
|
|
|
- }
|
|
|
|
|
|
disable_irq(irq_from_evtchn(unbind.port));
|
|
|
|
|
|
- spin_unlock_irq(&port_user_lock);
|
|
|
-
|
|
|
evtchn_unbind_from_user(u, unbind.port);
|
|
|
|
|
|
rc = 0;
|
|
@@ -490,26 +484,15 @@ static int evtchn_release(struct inode *inode, struct file *filp)
|
|
|
int i;
|
|
|
struct per_user_data *u = filp->private_data;
|
|
|
|
|
|
- spin_lock_irq(&port_user_lock);
|
|
|
-
|
|
|
- free_page((unsigned long)u->ring);
|
|
|
-
|
|
|
for (i = 0; i < NR_EVENT_CHANNELS; i++) {
|
|
|
if (get_port_user(i) != u)
|
|
|
continue;
|
|
|
|
|
|
disable_irq(irq_from_evtchn(i));
|
|
|
- }
|
|
|
-
|
|
|
- spin_unlock_irq(&port_user_lock);
|
|
|
-
|
|
|
- for (i = 0; i < NR_EVENT_CHANNELS; i++) {
|
|
|
- if (get_port_user(i) != u)
|
|
|
- continue;
|
|
|
-
|
|
|
evtchn_unbind_from_user(get_port_user(i), i);
|
|
|
}
|
|
|
|
|
|
+ free_page((unsigned long)u->ring);
|
|
|
kfree(u->name);
|
|
|
kfree(u);
|
|
|
|