]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/um/drivers/line.c
Merge branch 'master' into tk71
[mv-sheeva.git] / arch / um / drivers / line.c
index 7f7338c90784e01489be21b91e269ce85d757d21..050e4ddbbb6516a20416cad7107695862f93f8cd 100644 (file)
@@ -727,6 +727,9 @@ struct winch {
 
 static void free_winch(struct winch *winch, int free_irq_ok)
 {
+       if (free_irq_ok)
+               free_irq(WINCH_IRQ, winch);
+
        list_del(&winch->list);
 
        if (winch->pid != -1)
@@ -735,8 +738,6 @@ static void free_winch(struct winch *winch, int free_irq_ok)
                os_close_file(winch->fd);
        if (winch->stack != 0)
                free_stack(winch->stack, 0);
-       if (free_irq_ok)
-               free_irq(WINCH_IRQ, winch);
        kfree(winch);
 }
 
@@ -820,12 +821,12 @@ void register_winch_irq(int fd, int tty_fd, int pid, struct tty_struct *tty,
 
 static void unregister_winch(struct tty_struct *tty)
 {
-       struct list_head *ele;
+       struct list_head *ele, *next;
        struct winch *winch;
 
        spin_lock(&winch_handler_lock);
 
-       list_for_each(ele, &winch_handlers) {
+       list_for_each_safe(ele, next, &winch_handlers) {
                winch = list_entry(ele, struct winch, list);
                if (winch->tty == tty) {
                        free_winch(winch, 1);