diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2005-10-10 09:50:51 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-18 18:03:47 -0400 |
commit | 2891439e7378e35534d7eb32f77671dc4d61db4c (patch) | |
tree | d2cba6b9391f5488f2b6d8d6418b43e9ae3c2969 /drivers/net | |
parent | bc053d45cb0ca5daeaa69ae9ac43cdea42693f60 (diff) |
[PATCH] sgiseeq: Fix resource handling.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
drivers/net/sgiseeq.c | 9 ++++-----
1 files changed, 4 insertions(+), 5 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/sgiseeq.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/net/sgiseeq.c b/drivers/net/sgiseeq.c index 9bc3b1c0dd6a..a9d2e4fd0aec 100644 --- a/drivers/net/sgiseeq.c +++ b/drivers/net/sgiseeq.c | |||
@@ -493,11 +493,13 @@ static int sgiseeq_close(struct net_device *dev) | |||
493 | { | 493 | { |
494 | struct sgiseeq_private *sp = netdev_priv(dev); | 494 | struct sgiseeq_private *sp = netdev_priv(dev); |
495 | struct sgiseeq_regs *sregs = sp->sregs; | 495 | struct sgiseeq_regs *sregs = sp->sregs; |
496 | unsigned int irq = dev->irq; | ||
496 | 497 | ||
497 | netif_stop_queue(dev); | 498 | netif_stop_queue(dev); |
498 | 499 | ||
499 | /* Shutdown the Seeq. */ | 500 | /* Shutdown the Seeq. */ |
500 | reset_hpc3_and_seeq(sp->hregs, sregs); | 501 | reset_hpc3_and_seeq(sp->hregs, sregs); |
502 | free_irq(irq, dev); | ||
501 | 503 | ||
502 | return 0; | 504 | return 0; |
503 | } | 505 | } |
@@ -734,7 +736,7 @@ static int sgiseeq_init(struct hpc3_regs* regs, int irq) | |||
734 | return 0; | 736 | return 0; |
735 | 737 | ||
736 | err_out_free_page: | 738 | err_out_free_page: |
737 | free_page((unsigned long) sp); | 739 | free_page((unsigned long) sp->srings); |
738 | err_out_free_dev: | 740 | err_out_free_dev: |
739 | kfree(dev); | 741 | kfree(dev); |
740 | 742 | ||
@@ -754,15 +756,12 @@ static void __exit sgiseeq_exit(void) | |||
754 | { | 756 | { |
755 | struct net_device *next, *dev; | 757 | struct net_device *next, *dev; |
756 | struct sgiseeq_private *sp; | 758 | struct sgiseeq_private *sp; |
757 | int irq; | ||
758 | 759 | ||
759 | for (dev = root_sgiseeq_dev; dev; dev = next) { | 760 | for (dev = root_sgiseeq_dev; dev; dev = next) { |
760 | sp = (struct sgiseeq_private *) netdev_priv(dev); | 761 | sp = (struct sgiseeq_private *) netdev_priv(dev); |
761 | next = sp->next_module; | 762 | next = sp->next_module; |
762 | irq = dev->irq; | ||
763 | unregister_netdev(dev); | 763 | unregister_netdev(dev); |
764 | free_irq(irq, dev); | 764 | free_page((unsigned long) sp->srings); |
765 | free_page((unsigned long) sp); | ||
766 | free_netdev(dev); | 765 | free_netdev(dev); |
767 | } | 766 | } |
768 | } | 767 | } |