[PATCH] uml: free network IRQ correctly
authorJeff Dike <jdike@addtoit.com>
Fri, 6 Jan 2006 08:19:06 +0000 (00:19 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 6 Jan 2006 16:33:48 +0000 (08:33 -0800)
Free the network IRQ when closing down the network devices at shutdown.
Delete the device from the opened devices list on close.

These prevent an -EBADF when later disabling SIGIO on all extant descriptors
and a complaint from free_irq about freeing the IRQ twice.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/um/drivers/net_kern.c

index deb24828e6a58ced766e4d1bb289110dfa8b3da3..fb1f9fb9b8717ce74fe95104d711642e4c152a02 100644 (file)
@@ -150,6 +150,7 @@ static int uml_net_close(struct net_device *dev)
        if(lp->close != NULL)
                (*lp->close)(lp->fd, &lp->user);
        lp->fd = -1;
+       list_del(&lp->list);
 
        spin_unlock(&lp->lock);
        return 0;
@@ -715,6 +716,7 @@ static void close_devices(void)
 
        list_for_each(ele, &opened){
                lp = list_entry(ele, struct uml_net_private, list);
+               free_irq(lp->dev->irq, lp->dev);
                if((lp->close != NULL) && (lp->fd >= 0))
                        (*lp->close)(lp->fd, &lp->user);
                if(lp->remove != NULL) (*lp->remove)(&lp->user);