* [PATCH] applicom LEAK #warning
@ 2003-09-17 18:11 Randy.Dunlap
0 siblings, 0 replies; only message in thread
From: Randy.Dunlap @ 2003-09-17 18:11 UTC (permalink / raw)
To: dwmw2; +Cc: lkml
Hi David,
This is an attempt to fix the LEAK #warning in applicom.c.
The patch calls iounmap() for the composite memory area
after all of the individual areas are mapped. Is that OK?
It also adds some unwinding of resources on failed cases
and doesn't save <irq> on request_irq() failure.
Question: why are some error conditions in applicom_init()
handled by "return -EIO" and others handled by "continue"?
Comments?
Thanks,
--
~Randy
patch_name: applicom_leak.patch
patch_version: 2003-09-17.11:06:35
author: Randy.Dunlap <rddunlap@osdl.org>
description: fix ioremap() leak and #warning;
unwind init on errors;
don't save irq on request_irq() failure;
product: Linux
product_versions: 2.6.0-test5
maintainer: David Woodhouse (dwmw2@infradead.org)
diffstat: =
drivers/char/applicom.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff -Naurp ./drivers/char/applicom.c~appleak ./drivers/char/applicom.c
--- ./drivers/char/applicom.c~appleak 2003-09-08 12:50:29.000000000 -0700
+++ ./drivers/char/applicom.c 2003-09-17 11:06:01.000000000 -0700
@@ -192,7 +192,7 @@ int __init applicom_init(void)
{
int i, numisa = 0;
struct pci_dev *dev = NULL;
- void *RamIO;
+ void *RamIO, *maxRamIO;
int boardno;
printk(KERN_INFO "Applicom driver: $Id: ac.c,v 1.30 2000/03/22 16:03:57 dwmw2 Exp $\n");
@@ -214,6 +214,7 @@ int __init applicom_init(void)
if (!RamIO) {
printk(KERN_INFO "ac.o: Failed to ioremap PCI memory space at 0x%lx\n", dev->resource[0].start);
+ pci_disable_device(dev);
return -EIO;
}
@@ -225,12 +226,14 @@ int __init applicom_init(void)
(unsigned long)RamIO,0))) {
printk(KERN_INFO "ac.o: PCI Applicom device doesn't have correct signature.\n");
iounmap(RamIO);
+ pci_disable_device(dev);
continue;
}
if (request_irq(dev->irq, &ac_interrupt, SA_SHIRQ, "Applicom PCI", &dummy)) {
printk(KERN_INFO "Could not allocate IRQ %d for PCI Applicom device.\n", dev->irq);
iounmap(RamIO);
+ pci_disable_device(dev);
apbs[boardno - 1].RamIO = 0;
continue;
}
@@ -257,10 +260,9 @@ int __init applicom_init(void)
/* Now try the specified ISA cards */
-#warning "LEAK"
- RamIO = ioremap(mem, LEN_RAM_IO * MAX_ISA_BOARD);
+ maxRamIO = ioremap(mem, LEN_RAM_IO * MAX_ISA_BOARD);
- if (!RamIO)
+ if (!maxRamIO)
printk(KERN_INFO "ac.o: Failed to ioremap ISA memory space at 0x%lx\n", mem);
for (i = 0; i < MAX_ISA_BOARD; i++) {
@@ -285,7 +287,8 @@ int __init applicom_init(void)
iounmap((void *) RamIO);
apbs[boardno - 1].RamIO = 0;
}
- apbs[boardno - 1].irq = irq;
+ else
+ apbs[boardno - 1].irq = irq;
}
else
apbs[boardno - 1].irq = 0;
@@ -296,6 +299,8 @@ int __init applicom_init(void)
if (!numisa)
printk(KERN_WARNING"ac.o: No valid ISA Applicom boards found at mem 0x%lx\n",mem);
+ iounmap(maxRamIO);
+
fin:
init_waitqueue_head(&FlagSleepRec);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-09-17 18:18 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-17 18:11 [PATCH] applicom LEAK #warning Randy.Dunlap
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®