diff options
author | dilinger@debian.org <dilinger@debian.org> | 2005-03-18 21:32:44 -0800 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-05-12 10:00:13 -0700 |
commit | 8107bb0f1014a9af87a889feb20644f0845a08bd (patch) | |
tree | 37efa71201ccdb2e1a84c5892ccc2a87b23bc33b | |
parent | 8c7030938ff6a34e1db840383900f8d8c427c644 (diff) | |
download | linux-stable-8107bb0f1014a9af87a889feb20644f0845a08bd.tar.gz linux-stable-8107bb0f1014a9af87a889feb20644f0845a08bd.tar.bz2 linux-stable-8107bb0f1014a9af87a889feb20644f0845a08bd.zip |
[PATCH] Possible AMD8111e free irq issue
It seems to me that if in the amd8111e_open() fuction dev->irq isn't
zero and the irq request succeeds it might not get released anymore.
Specifically, on failure of the amd8111e_restart() call the function
returns -ENOMEM without releasing the irq. The amd8111e_restart()
function can fail because of various pci_alloc_consistent() and
dev_alloc_skb() calls in amd8111e_init_ring() which is being
called by amd8111e_restart.
1374 if(dev->irq ==0 || request_irq(dev->irq, amd8111e_interrupt, SA_SHIRQ,
1375 dev->name, dev))
1376 return -EAGAIN;
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: Chris Wright <chrisw@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rwxr-xr-x | drivers/net/amd8111e.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c index f1d81901ecf1..4e6f7553ffec 100755 --- a/drivers/net/amd8111e.c +++ b/drivers/net/amd8111e.c @@ -1381,6 +1381,8 @@ static int amd8111e_open(struct net_device * dev ) if(amd8111e_restart(dev)){ spin_unlock_irq(&lp->lock); + if (dev->irq) + free_irq(dev->irq, dev); return -ENOMEM; } /* Start ipg timer */ |