From: Rusty Russell <rusty@rustcorp.com.au>
To: linux-kernel@vger.kernel.org
Cc: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Subject: [PATCH] Trivial request_region check patchset.
Date: Fri, 22 Mar 2002 17:13:45 +1100 [thread overview]
Message-ID: <E16oIJ7-0000uW-00@wagner.rustcorp.com.au> (raw)
Hi all,
Evgeniy Polyakov <johnpol@2ka.mipt.ru> has been working his
way through the kernel, auditing request_region calls (which as of 2.4
return an int). Please peruse for your drivers before I send them all
to Linus, and watch out for more mails from Evgeniy!
arch/arm:
kernel/via82c505.c mach-footbridge/netwinder-hw.c mach-shark/leds.c
arch/i386:
kernel/pci-pc.c
arch/mips:
jazz/setup.c
arch/ppc64:
kernel/chrp_setup.c
arch/sh:
kernel/hd64465_gpio.c
kernel/pci-sh7751.c
arch/x86_64:
kernel/pci-pc.c
drivers/acorn:
block/mfmhd.c scsi/acornscsi.c scsi/arxescsi.c scsi/cumana_2.c
scsi/oak.c
drivers/atm:
horizon.c
drivers/block:
DAC960.c paride/paride.c ps2esdi.c xd.c
drivers/cdrom:
cdu31a.c optcd.c sbpcd.c sonycd535.c
drivers/char:
acquirewdt.c advantechwdt.c cyclades.c dtlk.c epca.c esp.c
ftape/lowlevel/fdc-io.c h8.c ib700wdt.c ip2main.c isicom.c
istallion.c ite_gpio.c logibusmouse.c mixcomwd.c msbusmouse.c
pcwd.c rocket.c rtc.c serial.c
Thanks!
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/arm/kernel/via82c505.c trivial-2.5.7/arch/arm/kernel/via82c505.c
--- linux-2.5.7/arch/arm/kernel/via82c505.c Fri Mar 8 14:49:10 2002
+++ trivial-2.5.7/arch/arm/kernel/via82c505.c Fri Mar 22 17:05:55 2002
@@ -79,8 +79,17 @@
struct pci_bus *bus;
printk(KERN_DEBUG "PCI: VIA 82c505\n");
- request_region(0xA8,2,"via config");
- request_region(0xCF8,8,"pci config");
+ if (!request_region(0xA8,2,"via config"))
+ {
+ printk(KERN_WARNING"VIA 82c505: Unable to request region 0xA8\n");
+ return;
+ }
+ if (!request_region(0xCF8,8,"pci config"))
+ {
+ printk(KERN_WARNING"VIA 82c505: Unable to request region 0xCF8\n");
+ release_region(0xA8, 2);
+ return;
+ }
/* Enable compatible Mode */
outb(0x96,0xA8);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/arm/mach-footbridge/netwinder-hw.c trivial-2.5.7/arch/arm/mach-footbridge/netwinder-hw.c
--- linux-2.5.7/arch/arm/mach-footbridge/netwinder-hw.c Fri Mar 8 14:49:10 2002
+++ trivial-2.5.7/arch/arm/mach-footbridge/netwinder-hw.c Fri Mar 22 17:05:56 2002
@@ -328,7 +328,11 @@
*/
static void __init wb977_init(void)
{
- request_region(0x370, 2, "W83977AF configuration");
+ if (!request_region(0x370, 2, "W83977AF configuration"))
+ {
+ printk(KERN_WARNING"Unable to request region 0x370\n");
+ return;
+ }
/*
* Open up the SuperIO chip
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/arm/mach-shark/leds.c trivial-2.5.7/arch/arm/mach-shark/leds.c
--- linux-2.5.7/arch/arm/mach-shark/leds.c Fri Oct 26 06:53:46 2001
+++ trivial-2.5.7/arch/arm/mach-shark/leds.c Fri Mar 22 17:05:57 2002
@@ -152,7 +152,11 @@
leds_event = sequoia_leds_event;
/* Make LEDs independent of power-state */
- request_region(0x24,4,"sequoia");
+ if (!request_region(0x24,4,"sequoia"))
+ {
+ printk(KERN_WARNING"arm: Unable to request region 0x24\n");
+ return -EIO;
+ }
temp = sequoia_read(0x09);
temp |= 1<<10;
sequoia_write(temp,0x09);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/i386/kernel/pci-pc.c trivial-2.5.7/arch/i386/kernel/pci-pc.c
--- linux-2.5.7/arch/i386/kernel/pci-pc.c Thu Mar 21 14:14:38 2002
+++ trivial-2.5.7/arch/i386/kernel/pci-pc.c Fri Mar 22 17:05:57 2002
@@ -422,7 +422,8 @@
outl (tmp, 0xCF8);
__restore_flags(flags);
printk("PCI: Using configuration type 1\n");
- request_region(0xCF8, 8, "PCI conf1");
+ if (!request_region(0xCF8, 8, "PCI conf1"))
+ return NULL;
return &pci_direct_conf1;
}
outl (tmp, 0xCF8);
@@ -439,7 +440,8 @@
pci_sanity_check(&pci_direct_conf2)) {
__restore_flags(flags);
printk("PCI: Using configuration type 2\n");
- request_region(0xCF8, 4, "PCI conf2");
+ if (!request_region(0xCF8, 4, "PCI conf2"))
+ return NULL;
return &pci_direct_conf2;
}
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/mips/jazz/setup.c trivial-2.5.7/arch/mips/jazz/setup.c
--- linux-2.5.7/arch/mips/jazz/setup.c Mon Sep 10 03:43:01 2001
+++ trivial-2.5.7/arch/mips/jazz/setup.c Fri Mar 22 17:05:58 2002
@@ -62,6 +62,13 @@
static void __init jazz_irq_setup(void)
{
+ if (!request_region(0x20, 0x20, "pic1"))
+ return;
+ if (!request_region(0xa0, 0x20, "pic2"))
+ {
+ release_region(0x20, 0x20);
+ return;
+ }
set_except_vector(0, jazz_handle_int);
r4030_write_reg16(JAZZ_IO_IRQ_ENABLE,
JAZZ_IE_ETHERNET |
@@ -75,13 +82,33 @@
change_cp0_status(ST0_IM, IE_IRQ4 | IE_IRQ3 | IE_IRQ2 | IE_IRQ1);
/* set the clock to 100 Hz */
r4030_write_reg32(JAZZ_TIMER_INTERVAL, 9);
- request_region(0x20, 0x20, "pic1");
- request_region(0xa0, 0x20, "pic2");
+
i8259_setup_irq(2, &irq2);
}
void __init jazz_setup(void)
{
+ if (!request_region(0x00,0x20,"dma1"))
+ return;
+ if (!request_region(0x40,0x20,"timer"))
+ {
+ release_region(0x00, 0x20);
+ return;
+ }
+ if (!request_region(0x80,0x10,"dma page reg"))
+ {
+ release_region(0x00, 0x20);
+ release_region(0x40, 0x20);
+ return;
+ }
+ if (!request_region(0xc0,0x20,"dma2"))
+ {
+ release_region(0x00, 0x20);
+ release_region(0x40, 0x20);
+ release_region(0x80, 0x10);
+ return;
+ }
+
add_wired_entry (0x02000017, 0x03c00017, 0xe0000000, PM_64K);
add_wired_entry (0x02400017, 0x02440017, 0xe2000000, PM_16M);
add_wired_entry (0x01800017, 0x01000017, 0xe4000000, PM_4M);
@@ -91,10 +118,7 @@
if (mips_machtype == MACH_MIPS_MAGNUM_4000)
EISA_bus = 1;
isa_slot_offset = 0xe3000000;
- request_region(0x00,0x20,"dma1");
- request_region(0x40,0x20,"timer");
- request_region(0x80,0x10,"dma page reg");
- request_region(0xc0,0x20,"dma2");
+
board_time_init = jazz_time_init;
/* The RTC is outside the port address space */
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/ppc64/kernel/chrp_setup.c trivial-2.5.7/arch/ppc64/kernel/chrp_setup.c
--- linux-2.5.7/arch/ppc64/kernel/chrp_setup.c Wed Feb 20 17:57:06 2002
+++ trivial-2.5.7/arch/ppc64/kernel/chrp_setup.c Fri Mar 22 17:05:58 2002
@@ -119,12 +119,19 @@
}
void __init chrp_request_regions(void) {
- request_region(0x20,0x20,"pic1");
- request_region(0xa0,0x20,"pic2");
- request_region(0x00,0x20,"dma1");
- request_region(0x40,0x20,"timer");
- request_region(0x80,0x10,"dma page reg");
- request_region(0xc0,0x20,"dma2");
+ if (!request_region(0x20,0x20,"pic1"))
+ panic("chrp: Unable to request region 0x20\n");
+ if (!request_region(0xa0,0x20,"pic2"))
+ panic("chrp: Unable to request region 0xa0\n");
+ if (!request_region(0x00,0x20,"dma1"))
+ panic("chrp: Unable to request region 0x00\n");
+ if (!request_region(0x40,0x20,"timer"))
+ panic("chrp: Unable to request region 0x40\n");
+ if (!request_region(0x80,0x10,"dma page reg"))
+ panic("chrp: Unable to request region 0x80\n");
+ if (!request_region(0xc0,0x20,"dma2"))
+ panic("chrp: Unable to request region 0xc0\n");
+ return;
}
void __init
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/sh/kernel/hd64465_gpio.c trivial-2.5.7/arch/sh/kernel/hd64465_gpio.c
--- linux-2.5.7/arch/sh/kernel/hd64465_gpio.c Thu Jun 28 06:55:29 2001
+++ trivial-2.5.7/arch/sh/kernel/hd64465_gpio.c Fri Mar 22 17:05:58 2002
@@ -165,10 +165,18 @@
static int __init hd64465_gpio_init(void)
{
- /* TODO: check return values */
- request_region(HD64465_REG_GPACR, 0x1000, MODNAME);
- request_irq(HD64465_IRQ_GPIO, hd64465_gpio_interrupt,
+ int err;
+
+ if (!request_region(HD64465_REG_GPACR, 0x1000, MODNAME))
+ return -EIO;
+ err=request_irq(HD64465_IRQ_GPIO, hd64465_gpio_interrupt,
SA_INTERRUPT, MODNAME, 0);
+ if (err)
+ {
+ printk(KERN_ERR"HD64465: Unable to get irq %d.\n", HD64465_IRQ_GPIO);
+ release_region(HD64465_REG_GPACR, 0x1000);
+ return err;
+ }
printk("HD64465 GPIO layer on irq %d\n", HD64465_IRQ_GPIO);
return 0;
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/sh/kernel/pci-sh7751.c trivial-2.5.7/arch/sh/kernel/pci-sh7751.c
--- linux-2.5.7/arch/sh/kernel/pci-sh7751.c Mon Nov 5 04:31:58 2001
+++ trivial-2.5.7/arch/sh/kernel/pci-sh7751.c Fri Mar 22 17:05:58 2002
@@ -216,7 +216,8 @@
if (inl (PCI_REG(SH7751_PCIPAR)) == 0x80000000) {
outl (tmp, PCI_REG(SH7751_PCIPAR));
printk(KERN_INFO "PCI: Using configuration type 1\n");
- request_region(PCI_REG(SH7751_PCIPAR), 8, "PCI conf1");
+ if (!request_region(PCI_REG(SH7751_PCIPAR), 8, "PCI conf1"))
+ return NULL;
return &pci_direct_conf1;
}
outl (tmp, PCI_REG(SH7751_PCIPAR));
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/arch/x86_64/kernel/pci-pc.c trivial-2.5.7/arch/x86_64/kernel/pci-pc.c
--- linux-2.5.7/arch/x86_64/kernel/pci-pc.c Wed Feb 20 17:57:07 2002
+++ trivial-2.5.7/arch/x86_64/kernel/pci-pc.c Fri Mar 22 17:05:55 2002
@@ -215,7 +215,8 @@
outl (tmp, 0xCF8);
__restore_flags(flags);
printk("PCI: Using configuration type 1\n");
- request_region(0xCF8, 8, "PCI conf1");
+ if (!request_region(0xCF8, 8, "PCI conf1"))
+ return NULL;
return &pci_direct_conf1;
}
outl (tmp, 0xCF8);
@@ -232,7 +233,8 @@
pci_sanity_check(&pci_direct_conf2)) {
__restore_flags(flags);
printk("PCI: Using configuration type 2\n");
- request_region(0xCF8, 4, "PCI conf2");
+ if (!request_region(0xCF8, 4, "PCI conf2"))
+ return NULL;
return &pci_direct_conf2;
}
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/acorn/block/mfmhd.c trivial-2.5.7/drivers/acorn/block/mfmhd.c
--- linux-2.5.7/drivers/acorn/block/mfmhd.c Fri Mar 8 14:49:12 2002
+++ trivial-2.5.7/drivers/acorn/block/mfmhd.c Fri Mar 22 17:05:55 2002
@@ -1356,9 +1356,6 @@
*/
static int mfm_probecontroller (unsigned int mfm_addr)
{
- if (check_region (mfm_addr, 10))
- return 0;
-
if (inw (MFM_STATUS) & STAT_BSY) {
outw (CMD_ABT, MFM_COMMAND);
udelay (50);
@@ -1416,14 +1413,18 @@
ecard_claim(ecs);
}
+ printk("mfm: found at address %08X, interrupt %d\n", mfm_addr, mfm_irq);
+ if (!request_region (mfm_addr, 10, "mfm")) {
+ ecard_release(ecs);
+ return -1;
+ }
+
if (register_blkdev(MAJOR_NR, "mfm", &mfm_fops)) {
printk("mfm_init: unable to get major number %d\n", MAJOR_NR);
ecard_release(ecs);
+ release_region(mfm_addr, 10);
return -1;
}
-
- printk("mfm: found at address %08X, interrupt %d\n", mfm_addr, mfm_irq);
- request_region (mfm_addr, 10, "mfm");
/* Stuff for the assembler routines to get to */
hdc63463_baseaddress = ioaddr(mfm_addr);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/acorn/scsi/acornscsi.c trivial-2.5.7/drivers/acorn/scsi/acornscsi.c
--- linux-2.5.7/drivers/acorn/scsi/acornscsi.c Thu Mar 21 14:14:43 2002
+++ trivial-2.5.7/drivers/acorn/scsi/acornscsi.c Fri Mar 22 17:05:55 2002
@@ -2915,13 +2915,18 @@
ecs[count]->irqaddr = (char *)ioaddr(host->card.io_intr);
ecs[count]->irqmask = 0x0a;
- request_region(instance->io_port + 0x800, 2, "acornscsi(sbic)");
- request_region(host->card.io_intr, 1, "acornscsi(intr)");
+ if (!request_region(instance->io_port + 0x800, 2, "acornscsi(sbic)"))
+ goto err_1;
+ if (!request_region(host->card.io_intr, 1, "acornscsi(intr)"))
+ goto err_2;
request_region(host->card.io_page, 1, "acornscsi(page)");
+ goto err_3;
#ifdef USE_DMAC
request_region(host->dma.io_port, 256, "acornscsi(dmac)");
+ goto err_4;
#endif
request_region(instance->io_port, 2048, "acornscsi(ram)");
+ goto err_5;
if (request_irq(host->scsi.irq, acornscsi_intr, SA_INTERRUPT, "acornscsi", host)) {
printk(KERN_CRIT "scsi%d: IRQ%d not free, interrupts disabled\n",
@@ -2934,6 +2939,21 @@
++count;
}
return count;
+
+err_5:
+ release_region(instance->io_port, 2048);
+#ifdef USE_DMAC
+err_4:
+ release_region(host->dma.io_port, 256);
+#endif
+err_3:
+ release_region(host->card.io_page, 1);
+err_2:
+ release_region(host->card.io_intr, 1);
+err_1:
+ release_region(instance->io_port + 0x800, 2);
+ scsi_unregister(instance);
+ return 0;
}
/*
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/acorn/scsi/arxescsi.c trivial-2.5.7/drivers/acorn/scsi/arxescsi.c
--- linux-2.5.7/drivers/acorn/scsi/arxescsi.c Wed Feb 20 17:55:23 2002
+++ trivial-2.5.7/drivers/acorn/scsi/arxescsi.c Fri Mar 22 17:05:55 2002
@@ -304,8 +304,18 @@
ecs[count]->irqaddr = (unsigned char *)BUS_ADDR(host->io_port);
ecs[count]->irqmask = CSTATUS_IRQ;
- request_region(host->io_port , 120, "arxescsi-fas");
- request_region(host->io_port + 128, 384, "arxescsi-dma");
+ if (!request_region(host->io_port , 120, "arxescsi-fas")) {
+ ecard_release(ecs[count]);
+ scsi_unregister(host);
+ break;
+ }
+
+ if (!request_region(host->io_port + 128, 384, "arxescsi-dma")) {
+ ecard_release(ecs[count]);
+ release_region(host->io_port, 120);
+ scsi_unregister(host);
+ break;
+ }
printk("scsi%d: Has no interrupts - using polling mode\n",
host->host_no);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/acorn/scsi/cumana_2.c trivial-2.5.7/drivers/acorn/scsi/cumana_2.c
--- linux-2.5.7/drivers/acorn/scsi/cumana_2.c Wed Feb 20 17:55:23 2002
+++ trivial-2.5.7/drivers/acorn/scsi/cumana_2.c Fri Mar 22 17:05:55 2002
@@ -382,8 +382,13 @@
ecs[count]->irq_data = (void *)info->alatch;
ecs[count]->ops = (expansioncard_ops_t *)&cumanascsi_2_ops;
- request_region(host->io_port + CUMANASCSI2_FAS216_OFFSET,
- 16 << CUMANASCSI2_FAS216_SHIFT, "cumanascsi2-fas");
+ if (!request_region(host->io_port + CUMANASCSI2_FAS216_OFFSET,
+ 16 << CUMANASCSI2_FAS216_SHIFT, "cumanascsi2-fas")) {
+ scsi_unregister(host);
+ ecard_release(ecs[count]);
+ break;
+ }
+
if (host->irq != NO_IRQ &&
request_irq(host->irq, cumanascsi_2_intr,
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/acorn/scsi/oak.c trivial-2.5.7/drivers/acorn/scsi/oak.c
--- linux-2.5.7/drivers/acorn/scsi/oak.c Wed Feb 20 17:55:23 2002
+++ trivial-2.5.7/drivers/acorn/scsi/oak.c Fri Mar 22 17:05:56 2002
@@ -134,7 +134,8 @@
ecard_claim(ecs[count]);
instance->n_io_port = 255;
- request_region (instance->io_port, instance->n_io_port, "Oak SCSI");
+ if (!request_region (instance->io_port, instance->n_io_port, "Oak SCSI"))
+ break;
if (instance->irq != IRQ_NONE)
if (request_irq(instance->irq, do_oakscsi_intr, SA_INTERRUPT, "Oak SCSI", NULL)) {
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/atm/horizon.c trivial-2.5.7/drivers/atm/horizon.c
--- linux-2.5.7/drivers/atm/horizon.c Fri Sep 14 08:21:32 2001
+++ trivial-2.5.7/drivers/atm/horizon.c Fri Mar 22 17:05:56 2002
@@ -2765,15 +2765,13 @@
u32 * membase = bus_to_virt (pci_resource_start (pci_dev, 1));
u8 irq = pci_dev->irq;
- // check IO region
- if (check_region (iobase, HRZ_IO_EXTENT)) {
- PRINTD (DBG_WARN, "IO range already in use");
- continue;
- }
+ /* XXX DEV_LABEL is a guess */
+ if (!request_region (iobase, HRZ_IO_EXTENT, DEV_LABEL))
+ continue;
if (pci_enable_device (pci_dev))
continue;
-
+
dev = kmalloc (sizeof(hrz_dev), GFP_KERNEL);
if (!dev) {
// perhaps we should be nice: deregister all adapters and abort?
@@ -2807,9 +2805,6 @@
dev->atm_dev->dev_data = (void *) dev;
dev->pci_dev = pci_dev;
- /* XXX DEV_LABEL is a guess */
- request_region (iobase, HRZ_IO_EXTENT, DEV_LABEL);
-
// enable bus master accesses
pci_set_master (pci_dev);
@@ -2901,8 +2896,10 @@
atm_dev_deregister (dev->atm_dev);
} /* atm_dev_register */
free_irq (irq, dev);
+
} /* request_irq */
kfree (dev);
+ release_region(iobase, HRZ_IO_EXTENT);
} /* kmalloc and while */
return devs;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/block/DAC960.c trivial-2.5.7/drivers/block/DAC960.c
--- linux-2.5.7/drivers/block/DAC960.c Fri Mar 8 14:49:12 2002
+++ trivial-2.5.7/drivers/block/DAC960.c Fri Mar 22 17:05:58 2002
@@ -2410,8 +2410,12 @@
DAC960_V1_QueueReadWriteCommand;
break;
case DAC960_PD_Controller:
- request_region(Controller->IO_Address, 0x80,
- Controller->FullModelName);
+ if (!request_region(Controller->IO_Address, 0x80,
+ Controller->FullModelName))
+ {
+ DAC960_Error("Unable request region at 0x%x\n", Controller->IO_Address);
+ goto Failure;
+ }
DAC960_PD_DisableInterrupts(BaseAddress);
DAC960_PD_AcknowledgeStatus(BaseAddress);
udelay(1000);
@@ -2436,8 +2440,12 @@
DAC960_V1_QueueReadWriteCommand;
break;
case DAC960_P_Controller:
- request_region(Controller->IO_Address, 0x80,
- Controller->FullModelName);
+ if (!request_region(Controller->IO_Address, 0x80,
+ Controller->FullModelName))
+ {
+ DAC960_Error("Unable request region at 0x%x\n", Controller->IO_Address);
+ goto Failure;
+ }
DAC960_PD_DisableInterrupts(BaseAddress);
DAC960_PD_AcknowledgeStatus(BaseAddress);
udelay(1000);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/block/paride/paride.c trivial-2.5.7/drivers/block/paride/paride.c
--- linux-2.5.7/drivers/block/paride/paride.c Fri Oct 12 02:04:57 2001
+++ trivial-2.5.7/drivers/block/paride/paride.c Fri Mar 22 17:05:56 2002
@@ -276,9 +276,6 @@
range = 3;
if (pi->mode >= pi->proto->epp_first) range = 8;
if ((range == 8) && (pi->port % 8)) return 0;
-#ifndef CONFIG_PARPORT
- if (check_region(pi->port,range)) return 0;
-#endif /* !CONFIG_PARPORT */
pi->reserved = range;
return (!pi_test_proto(pi,scratch,verbose));
}
@@ -287,9 +284,6 @@
range = 3;
if (pi->mode >= pi->proto->epp_first) range = 8;
if ((range == 8) && (pi->port % 8)) break;
-#ifndef CONFIG_PARPORT
- if (check_region(pi->port,range)) break;
-#endif /* !CONFIG_PARPORT */
pi->reserved = range;
if (!pi_test_proto(pi,scratch,verbose)) best = pi->mode;
}
@@ -311,10 +305,6 @@
if (!pi_register_parport(pi,verbose))
return 0;
-#ifndef CONFIG_PARPORT
- if (check_region(pi->port,3)) return 0;
-#endif /* !CONFIG_PARPORT */
-
if (pi->proto->test_port) {
pi_claim(pi);
max = pi->proto->test_port(pi);
@@ -404,7 +394,11 @@
}
#ifndef CONFIG_PARPORT
- request_region(pi->port,pi->reserved,pi->device);
+ if (!request_region(pi->port,pi->reserved,pi->device))
+ {
+ printk(KERN_WARNING"paride: Unable to request region 0x%x\n", pi->port);
+ return 0;
+ }
#endif /* !CONFIG_PARPORT */
if (pi->parname)
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/block/ps2esdi.c trivial-2.5.7/drivers/block/ps2esdi.c
--- linux-2.5.7/drivers/block/ps2esdi.c Fri Mar 8 14:49:15 2002
+++ trivial-2.5.7/drivers/block/ps2esdi.c Fri Mar 22 17:05:56 2002
@@ -364,6 +364,12 @@
else
io_base = PRIMARY_IO_BASE;
+ if (!request_region(io_base, 4, "ed"))
+ {
+ printk(KERN_WARNING"Unable to request region 0x%x\n", io_base);
+ free_irq(PS2ESDI_IRQ, &ps2esdi_gendisk);
+ return;
+ }
/* get the dma arbitration level */
dma_arb_level = (status >> 2) & 0xf;
@@ -416,7 +422,7 @@
ps2esdi_blocksizes[i] = 1024;
request_dma(dma_arb_level, "ed");
- request_region(io_base, 4, "ed");
+
blksize_size[MAJOR_NR] = ps2esdi_blocksizes;
blk_queue_max_sectors(BLK_DEFAULT_QUEUE(MAJOR_NR), 128);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/block/xd.c trivial-2.5.7/drivers/block/xd.c
--- linux-2.5.7/drivers/block/xd.c Fri Mar 8 14:49:15 2002
+++ trivial-2.5.7/drivers/block/xd.c Fri Mar 22 17:05:56 2002
@@ -214,12 +214,12 @@
printk("Detected a%s controller (type %d) at address %06x\n",
xd_sigs[controller].name,controller,address);
- if (check_region(xd_iobase,4)) {
+ if (!request_region(xd_iobase,4,"xd"))
+ {
printk("xd: Ports at 0x%x are not available\n",
xd_iobase);
return;
- }
- request_region(xd_iobase,4,"xd");
+ }
if (controller)
xd_sigs[controller].init_controller(address);
xd_drives = xd_initdrives(xd_sigs[controller].init_drive);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/cdrom/cdu31a.c trivial-2.5.7/drivers/cdrom/cdu31a.c
--- linux-2.5.7/drivers/cdrom/cdu31a.c Wed Feb 20 17:57:07 2002
+++ trivial-2.5.7/drivers/cdrom/cdu31a.c Fri Mar 22 17:05:56 2002
@@ -3372,7 +3372,8 @@
if (drive_found) {
int deficiency = 0;
- request_region(cdu31a_port, 4, "cdu31a");
+ if (!request_region(cdu31a_port, 4, "cdu31a"))
+ goto errout3;
if (devfs_register_blkdev(MAJOR_NR, "cdu31a", &scd_bdops)) {
printk("Unable to get major %d for CDU-31a\n",
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/cdrom/optcd.c trivial-2.5.7/drivers/cdrom/optcd.c
--- linux-2.5.7/drivers/cdrom/optcd.c Wed Feb 20 17:57:07 2002
+++ trivial-2.5.7/drivers/cdrom/optcd.c Fri Mar 22 17:05:57 2002
@@ -2032,29 +2032,33 @@
"optcd: no Optics Storage CDROM Initialization\n");
return -EIO;
}
- if (check_region(optcd_port, 4)) {
- printk(KERN_ERR "optcd: conflict, I/O port 0x%x already used\n",
- optcd_port);
+ if (!request_region(optcd_port, 4, "optcd"))
+ {
+ printk(KERN_WARNING"optcd: Unable to request region 0x%x\n", optcd_port);
return -EIO;
- }
+ }
if (!reset_drive()) {
printk(KERN_ERR "optcd: drive at 0x%x not ready\n", optcd_port);
+ release_region(optcd_port, 4);
return -EIO;
}
if (!version_ok()) {
printk(KERN_ERR "optcd: unknown drive detected; aborting\n");
+ release_region(optcd_port, 4);
return -EIO;
}
status = exec_cmd(COMINITDOUBLE);
if (status < 0) {
printk(KERN_ERR "optcd: cannot init double speed mode\n");
DEBUG((DEBUG_VFS, "exec_cmd COMINITDOUBLE: %02x", -status));
+ release_region(optcd_port, 4);
return -EIO;
}
if (devfs_register_blkdev(MAJOR_NR, "optcd", &opt_fops) != 0)
{
printk(KERN_ERR "optcd: unable to get major %d\n", MAJOR_NR);
+ release_region(optcd_port, 4);
return -EIO;
}
devfs_register (NULL, "optcd", DEVFS_FL_DEFAULT, MAJOR_NR, 0,
@@ -2062,7 +2066,7 @@
blksize_size[MAJOR_NR] = &blksize;
blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST,
&optcd_lock);
- request_region(optcd_port, 4, "optcd");
+
register_disk(NULL, mk_kdev(MAJOR_NR,0), 1, &opt_fops, 0);
printk(KERN_INFO "optcd: DOLPHIN 8000 AT CDROM at 0x%x\n", optcd_port);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/cdrom/sbpcd.c trivial-2.5.7/drivers/cdrom/sbpcd.c
--- linux-2.5.7/drivers/cdrom/sbpcd.c Wed Feb 20 17:57:07 2002
+++ trivial-2.5.7/drivers/cdrom/sbpcd.c Fri Mar 22 17:05:58 2002
@@ -5840,6 +5840,12 @@
if (i>=0) D_S[j].CD_changed=1;
}
+ if (!request_region(CDo_command,4,major_name))
+ {
+ printk(KERN_WARNING "sbpcd: Unable to request region 0x%x\n", CDo_command);
+ return -EIO;
+ }
+
/*
* Turn on the CD audio channels.
* The addresses are obtained from SOUND_BASE (see sbpcd.h).
@@ -5866,8 +5872,7 @@
#endif
read_ahead[MAJOR_NR] = buffers * (CD_FRAMESIZE / 512);
- request_region(CDo_command,4,major_name);
-
+
devfs_handle = devfs_mk_dir (NULL, "sbp", NULL);
for (j=0;j<NR_SBPCD;j++)
{
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/cdrom/sonycd535.c trivial-2.5.7/drivers/cdrom/sonycd535.c
--- linux-2.5.7/drivers/cdrom/sonycd535.c Wed Feb 20 17:57:07 2002
+++ trivial-2.5.7/drivers/cdrom/sonycd535.c Fri Mar 22 17:05:57 2002
@@ -1487,6 +1487,7 @@
int got_result = 0;
int tmp_irq;
int i;
+ devfs_handle_t sony_devfs_handle;
/* Setting the base I/O address to 0 will disable it. */
if ((sony535_cd_base_io == 0xffff)||(sony535_cd_base_io == 0))
@@ -1510,11 +1511,6 @@
printk(KERN_INFO CDU535_MESSAGE_NAME ": probing base address %03X\n",
sony535_cd_base_io);
#endif
- if (check_region(sony535_cd_base_io,4)) {
- printk(CDU535_MESSAGE_NAME ": my base address is not free!\n");
- return -EIO;
- }
-
/* look for the CD-ROM, follows the procedure in the DOS driver */
inb(select_unit_reg);
/* wait for 40 18 Hz ticks (reverse-engineered from DOS driver) */
@@ -1586,13 +1582,14 @@
printk("IRQ%d, ", tmp_irq);
printk("using %d byte buffer\n", sony_buffer_size);
- devfs_register (NULL, CDU535_HANDLE,
- DEVFS_FL_DEFAULT,
- MAJOR_NR, 0,
- S_IFBLK | S_IRUGO | S_IWUGO,
- &cdu_fops, NULL);
+ sony_devfs_handle = devfs_register (NULL, CDU535_HANDLE,
+ DEVFS_FL_DEFAULT,
+ MAJOR_NR, 0,
+ S_IFBLK | S_IRUGO | S_IWUGO,
+ &cdu_fops, NULL);
if (devfs_register_blkdev(MAJOR_NR, CDU535_HANDLE, &cdu_fops)) {
printk("Unable to get major %d for %s\n",
+ devfs_unregister(sony_devfs_handle);
MAJOR_NR, CDU535_MESSAGE_NAME);
return -EIO;
}
@@ -1603,6 +1600,8 @@
kmalloc(sizeof *sony_toc, GFP_KERNEL);
if (sony_toc == NULL) {
blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
+ devfs_unregister_blkdev(MAJOR_NR, CDU535_HANDLE);
+ devfs_unregister(sony_devfs_handle);
return -ENOMEM;
}
last_sony_subcode = (struct s535_sony_subcode *)
@@ -1610,6 +1609,8 @@
if (last_sony_subcode == NULL) {
blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
kfree(sony_toc);
+ devfs_unregister_blkdev(MAJOR_NR, CDU535_HANDLE);
+ devfs_unregister(sony_devfs_handle);
return -ENOMEM;
}
sony_buffer = (Byte **)
@@ -1618,6 +1619,8 @@
blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
kfree(sony_toc);
kfree(last_sony_subcode);
+ devfs_unregister_blkdev(MAJOR_NR, CDU535_HANDLE);
+ devfs_unregister(sony_devfs_handle);
return -ENOMEM;
}
for (i = 0; i < sony_buffer_sectors; i++) {
@@ -1630,6 +1633,8 @@
kfree(sony_buffer);
kfree(sony_toc);
kfree(last_sony_subcode);
+ devfs_unregister_blkdev(MAJOR_NR, CDU535_HANDLE);
+ devfs_unregister(sony_devfs_handle);
return -ENOMEM;
}
}
@@ -1642,7 +1647,25 @@
printk("Did not find a " CDU535_MESSAGE_NAME " drive\n");
return -EIO;
}
- request_region(sony535_cd_base_io, 4, CDU535_HANDLE);
+ if (request_region(sony535_cd_base_io, 4, CDU535_HANDLE))
+ {
+ printk(KERN_WARNING"sonycd535: Unable to request region 0x%x\n",
+ sony535_cd_base_io);
+ for (i = 0; i < sony_buffer_sectors; i++)
+ if (sony_buffer[i])
+ kfree(sony_buffer[i]);
+ blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
+ kfree(sony_buffer);
+ kfree(sony_toc);
+ kfree(last_sony_subcode);
+ devfs_unregister_blkdev(MAJOR_NR, CDU535_HANDLE);
+ devfs_unregister(sony_devfs_handle);
+ if (sony535_irq_used)
+ free_irq(sony535_irq_used, NULL);
+ }
+
+ return -EIO;
+ }
register_disk(NULL, mk_kdev(MAJOR_NR,0), 1, &cdu_fops, 0);
return 0;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/acquirewdt.c trivial-2.5.7/drivers/char/acquirewdt.c
--- linux-2.5.7/drivers/char/acquirewdt.c Fri Mar 8 14:49:15 2002
+++ trivial-2.5.7/drivers/char/acquirewdt.c Fri Mar 22 17:05:57 2002
@@ -209,8 +209,18 @@
spin_lock_init(&acq_lock);
if (misc_register(&acq_miscdev))
return -ENODEV;
- request_region(WDT_STOP, 1, "Acquire WDT");
- request_region(WDT_START, 1, "Acquire WDT");
+ if (!request_region(WDT_STOP, 1, "Acquire WDT"))
+ {
+ misc_deregister(&acq_miscdev);
+ return -EIO;
+ }
+ if (!request_region(WDT_START, 1, "Acquire WDT"))
+ {
+ release_region(WDT_STOP, 1);
+ misc_deregister(&acq_miscdev);
+ return -EIO;
+ }
+
register_reboot_notifier(&acq_notifier);
return 0;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/advantechwdt.c trivial-2.5.7/drivers/char/advantechwdt.c
--- linux-2.5.7/drivers/char/advantechwdt.c Wed Feb 20 17:55:23 2002
+++ trivial-2.5.7/drivers/char/advantechwdt.c Fri Mar 22 17:05:57 2002
@@ -213,11 +213,22 @@
printk("WDT driver for Advantech single board computer initialising.\n");
spin_lock_init(&advwdt_lock);
- misc_register(&advwdt_miscdev);
+ if (misc_register(&advwdt_miscdev))
+ return -ENODEV;
#if WDT_START != WDT_STOP
- request_region(WDT_STOP, 1, "Advantech WDT");
+ if (!request_region(WDT_STOP, 1, "Advantech WDT"))
+ {
+ misc_deregister(&advwdt_miscdev);
+ return -EIO;
+ }
#endif
- request_region(WDT_START, 1, "Advantech WDT");
+ if (!request_region(WDT_START, 1, "Advantech WDT")) {
+ misc_deregister(&advwdt_miscdev);
+#if WDT_START != WDT_STOP
+ release_region(WDT_STOP, 1);
+#endif
+ return -EIO;
+ }
register_reboot_notifier(&advwdt_notifier);
return 0;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/cyclades.c trivial-2.5.7/drivers/char/cyclades.c
--- linux-2.5.7/drivers/char/cyclades.c Wed Feb 20 17:55:23 2002
+++ trivial-2.5.7/drivers/char/cyclades.c Fri Mar 22 17:05:57 2002
@@ -5012,7 +5012,8 @@
/* Although we don't use this I/O region, we should
request it from the kernel anyway, to avoid problems
with other drivers accessing it. */
- request_region(cy_pci_phys1, CyPCI_Yctl, "Cyclom-Y");
+ if (!request_region(cy_pci_phys1, CyPCI_Yctl, "Cyclom-Y"))
+ continue;
#if defined(__alpha__)
if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo) { /* below 1M? */
@@ -5162,7 +5163,8 @@
/* Although we don't use this I/O region, we should
request it from the kernel anyway, to avoid problems
with other drivers accessing it. */
- request_region(cy_pci_phys1, CyPCI_Zctl, "Cyclades-Z");
+ if (!request_region(cy_pci_phys1, CyPCI_Zctl, "Cyclades-Z"))
+ continue;
if (mailbox == ZE_V1) {
cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Ze_win);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/dtlk.c trivial-2.5.7/drivers/char/dtlk.c
--- linux-2.5.7/drivers/char/dtlk.c Wed Feb 20 17:55:23 2002
+++ trivial-2.5.7/drivers/char/dtlk.c Fri Mar 22 17:05:58 2002
@@ -418,12 +418,11 @@
dtlk_portlist[i], (testval = inw_p(dtlk_portlist[i])));
#endif
- if (check_region(dtlk_portlist[i], DTLK_IO_EXTENT))
+ if (!request_region(dtlk_portlist[i], DTLK_IO_EXTENT,
+ "dtlk"))
continue;
testval = inw_p(dtlk_portlist[i]);
if ((testval &= 0xfbff) == 0x107f) {
- request_region(dtlk_portlist[i], DTLK_IO_EXTENT,
- "dtlk");
dtlk_port_lpc = dtlk_portlist[i];
dtlk_port_tts = dtlk_port_lpc + 1;
@@ -508,6 +507,7 @@
return 0;
}
+ release_region(dtlk_portlist[i], DTLK_IO_EXTENT);
}
printk(KERN_INFO "\nDoubleTalk PC - not found\n");
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/epca.c trivial-2.5.7/drivers/char/epca.c
--- linux-2.5.7/drivers/char/epca.c Wed Feb 20 17:55:23 2002
+++ trivial-2.5.7/drivers/char/epca.c Fri Mar 22 17:05:58 2002
@@ -2020,7 +2020,8 @@
(*(ushort *)((ulong)memaddr + XEPORTS) < 3))
shrinkmem = 1;
if (bd->type < PCIXEM)
- request_region((int)bd->port, 4, board_desc[bd->type]);
+ if (!request_region((int)bd->port, 4, board_desc[bd->type]))
+ return;
memwinon(bd, 0);
@@ -2184,9 +2185,13 @@
if (!(ch->tmp_buf))
{
printk(KERN_ERR "POST FEP INIT : kmalloc failed for port 0x%x\n",i);
-
+ release_region((int)bd->port, 4);
+ while(i-- > 0)
+ kfree((ch--)->tmp_buf);
+ return;
}
- memset((void *)ch->tmp_buf,0,ch->txbufsize);
+ else
+ memset((void *)ch->tmp_buf,0,ch->txbufsize);
} /* End for each port */
printk(KERN_INFO
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/esp.c trivial-2.5.7/drivers/char/esp.c
--- linux-2.5.7/drivers/char/esp.c Wed Feb 20 17:56:33 2002
+++ trivial-2.5.7/drivers/char/esp.c Fri Mar 22 17:05:57 2002
@@ -2476,9 +2476,13 @@
} else
*region_start = info->port;
- request_region(*region_start,
+ if (!request_region(*region_start,
info->port - *region_start + 8,
- "esp serial");
+ "esp serial"))
+ {
+ restore_flags(flags);
+ return -EIO;
+ }
/* put card in enhanced mode */
/* this prevents access through */
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/ftape/lowlevel/fdc-io.c trivial-2.5.7/drivers/char/ftape/lowlevel/fdc-io.c
--- linux-2.5.7/drivers/char/ftape/lowlevel/fdc-io.c Wed Feb 20 17:57:07 2002
+++ trivial-2.5.7/drivers/char/ftape/lowlevel/fdc-io.c Fri Mar 22 17:05:58 2002
@@ -1209,27 +1209,35 @@
TRACE_FUN(ft_t_flow);
if (ft_mach2 || ft_probe_fc10) {
- if (check_region(fdc.sra, 8) < 0) {
+ if (!request_region(fdc.sra, 8, "fdc (ft)"))
+ {
#ifndef BROKEN_FLOPPY_DRIVER
TRACE_EXIT -EBUSY;
#else
- TRACE(ft_t_warn,
-"address 0x%03x occupied (by floppy driver?), using it anyway", fdc.sra);
+ TRACE(ft_t_warn, "address 0x%03x occupied (by floppy driver?), using it anyway", fdc.sra);
#endif
- }
- request_region(fdc.sra, 8, "fdc (ft)");
- } else {
- if (check_region(fdc.sra, 6) < 0 ||
- check_region(fdc.dir, 1) < 0) {
+ }
+
+ if (!request_region(fdc.sra, 6, "fdc (ft)"))
+ {
+ release_region(fdc.sra, 8);
#ifndef BROKEN_FLOPPY_DRIVER
TRACE_EXIT -EBUSY;
#else
- TRACE(ft_t_warn,
-"address 0x%03x occupied (by floppy driver?), using it anyway", fdc.sra);
+ TRACE(ft_t_warn, "address 0x%03x occupied (by floppy driver?), using it anyway", fdc.sra);
#endif
- }
- request_region(fdc.sra, 6, "fdc (ft)");
- request_region(fdc.sra + 7, 1, "fdc (ft)");
+ }
+
+ if (!request_region(fdc.sra+7, 1, "fdc (ft)"))
+ {
+ release_region(fdc.sra, 8);
+ release_region(fdc.sra, 6);
+#ifndef BROKEN_FLOPPY_DRIVER
+ TRACE_EXIT -EBUSY;
+#else
+ TRACE(ft_t_warn, "address 0x%03x occupied (by floppy driver?), using it anyway", fdc.sra);
+#endif
+ }
}
TRACE_EXIT 0;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/h8.c trivial-2.5.7/drivers/char/h8.c
--- linux-2.5.7/drivers/char/h8.c Wed Feb 20 17:55:24 2002
+++ trivial-2.5.7/drivers/char/h8.c Fri Mar 22 17:05:57 2002
@@ -299,9 +299,13 @@
}
printk(KERN_INFO "H8 at 0x%x IRQ %d\n", h8_base, h8_irq);
- create_proc_info_entry("driver/h8", 0, NULL, h8_get_info);
+ if (!request_region(h8_base, 8, "h8"))
+ {
+ free_irq(h8_irq, NULL);
+ return -EIO;
+ }
- request_region(h8_base, 8, "h8");
+ create_proc_info_entry("driver/h8", 0, NULL, h8_get_info);
h8_alloc_queues();
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/ib700wdt.c trivial-2.5.7/drivers/char/ib700wdt.c
--- linux-2.5.7/drivers/char/ib700wdt.c Wed Feb 20 17:55:24 2002
+++ trivial-2.5.7/drivers/char/ib700wdt.c Fri Mar 22 17:05:57 2002
@@ -242,11 +242,23 @@
printk("WDT driver for IB700 single board computer initialising.\n");
spin_lock_init(&ibwdt_lock);
- misc_register(&ibwdt_miscdev);
+ if (misc_register(&ibwdt_miscdev))
+ return -ENODEV;
#if WDT_START != WDT_STOP
- request_region(WDT_STOP, 1, "IB700 WDT");
+ if (!request_region(WDT_STOP, 1, "IB700 WDT"))
+ {
+ misc_deregister(&ibwdt_miscdev);
+ return -EIO;
+ }
#endif
- request_region(WDT_START, 1, "IB700 WDT");
+ if (!request_region(WDT_START, 1, "IB700 WDT"))
+ {
+#if WDT_START != WDT_STOP
+ release_region(WDT_STOP, 1);
+#endif
+ misc_deregister(&ibwdt_miscdev);
+ return -EIO;
+ }
register_reboot_notifier(&ibwdt_notifier);
return 0;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/ip2main.c trivial-2.5.7/drivers/char/ip2main.c
--- linux-2.5.7/drivers/char/ip2main.c Wed Feb 20 17:55:24 2002
+++ trivial-2.5.7/drivers/char/ip2main.c Fri Mar 22 17:05:57 2002
@@ -1000,12 +1000,10 @@
printk(KERN_INFO "IP2: Board %d: addr=0x%x irq=%d\n", boardnum + 1,
ip2config.addr[boardnum], ip2config.irq[boardnum] );
- if (0 != ( rc = check_region( ip2config.addr[boardnum], 8))) {
- printk(KERN_ERR "IP2: bad addr=0x%x rc = %d\n",
- ip2config.addr[boardnum], rc );
+ if (!request_region( ip2config.addr[boardnum], 8, pcName )) {
+ printk(KERN_ERR "IP2: bad addr=0x%x\n", ip2config.addr[boardnum]);
goto err_initialize;
}
- request_region( ip2config.addr[boardnum], 8, pcName );
if ( iiDownloadAll ( pB, (loadHdrStrPtr)Fip_firmware, 1, Fip_firmware_size )
!= II_DOWN_GOOD ) {
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/isicom.c trivial-2.5.7/drivers/char/isicom.c
--- linux-2.5.7/drivers/char/isicom.c Wed Feb 20 17:55:24 2002
+++ trivial-2.5.7/drivers/char/isicom.c Fri Mar 22 17:05:58 2002
@@ -1680,20 +1680,13 @@
{
int count, done=0;
for (count=0; count < BOARD_COUNT; count++ ) {
- if (isi_card[count].base) {
- if (check_region(isi_card[count].base,16)) {
+ if (isi_card[count].base)
+ if (!request_region(isi_card[count].base,16,ISICOM_NAME)) {
printk(KERN_DEBUG "ISICOM: I/O Region 0x%x-0x%x is busy. Card%d will be disabled.\n",
isi_card[count].base,isi_card[count].base+15,count+1);
isi_card[count].base=0;
- }
- else {
- request_region(isi_card[count].base,16,ISICOM_NAME);
-#ifdef ISICOM_DEBUG
- printk(KERN_DEBUG "ISICOM: I/O Region 0x%x-0x%x requested for Card%d.\n",isi_card[count].base,isi_card[count].base+15,count+1);
-#endif
done++;
}
- }
}
return done;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/istallion.c trivial-2.5.7/drivers/char/istallion.c
--- linux-2.5.7/drivers/char/istallion.c Wed Feb 20 17:55:24 2002
+++ trivial-2.5.7/drivers/char/istallion.c Fri Mar 22 17:05:57 2002
@@ -3971,17 +3971,16 @@
printk(KERN_DEBUG "stli_initecp(brdp=%x)\n", (int) brdp);
#endif
-/*
- * Do a basic sanity check on the IO and memory addresses.
- */
+ if (!request_region(brdp->iobase, brdp->iosize, name))
+ return -EIO;
+
if ((brdp->iobase == 0) || (brdp->memaddr == 0))
+ {
+ release_region(brdp->iobase, brdp->iosize);
return(-ENODEV);
+ }
brdp->iosize = ECP_IOSIZE;
- if (check_region(brdp->iobase, brdp->iosize))
- printk(KERN_ERR "STALLION: Warning, board %d I/O address %x "
- "conflicts with another device\n",
- brdp->brdnr, brdp->iobase);
/*
* Based on the specific board type setup the common vars to access
@@ -4046,6 +4045,7 @@
break;
default:
+ release_region(brdp->iobase, brdp->iosize);
return(-EINVAL);
}
@@ -4059,7 +4059,10 @@
brdp->membase = ioremap(brdp->memaddr, brdp->memsize);
if (brdp->membase == (void *) NULL)
+ {
+ release_region(brdp->iobase, brdp->iosize);
return(-ENOMEM);
+ }
/*
* Now that all specific code is set up, enable the shared memory and
@@ -4081,7 +4084,10 @@
#endif
if (sig.magic != ECP_MAGIC)
+ {
+ release_region(brdp->iobase, brdp->iosize);
return(-ENODEV);
+ }
/*
* Scan through the signature looking at the panels connected to the
@@ -4102,7 +4108,7 @@
brdp->nrpanels++;
}
- request_region(brdp->iobase, brdp->iosize, name);
+
brdp->state |= BST_FOUND;
return(0);
}
@@ -4132,10 +4138,9 @@
return(-ENODEV);
brdp->iosize = ONB_IOSIZE;
- if (check_region(brdp->iobase, brdp->iosize))
- printk(KERN_ERR "STALLION: Warning, board %d I/O address %x "
- "conflicts with another device\n",
- brdp->brdnr, brdp->iobase);
+
+ if (!request_region(brdp->iobase, brdp->iosize, name))
+ return -EIO;
/*
* Based on the specific board type setup the common vars to access
@@ -4210,6 +4215,7 @@
break;
default:
+ release_region(brdp->iobase, brdp->iosize);
return(-EINVAL);
}
@@ -4223,7 +4229,10 @@
brdp->membase = ioremap(brdp->memaddr, brdp->memsize);
if (brdp->membase == (void *) NULL)
+ {
+ release_region(brdp->iobase, brdp->iosize);
return(-ENOMEM);
+ }
/*
* Now that all specific code is set up, enable the shared memory and
@@ -4243,7 +4252,10 @@
if ((sig.magic0 != ONB_MAGIC0) || (sig.magic1 != ONB_MAGIC1) ||
(sig.magic2 != ONB_MAGIC2) || (sig.magic3 != ONB_MAGIC3))
+ {
+ release_region(brdp->iobase, brdp->iosize);
return(-ENODEV);
+ }
/*
* Scan through the signature alive mask and calculate how many ports
@@ -4261,7 +4273,7 @@
}
brdp->panels[0] = brdp->nrports;
- request_region(brdp->iobase, brdp->iosize, name);
+
brdp->state |= BST_FOUND;
return(0);
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/ite_gpio.c trivial-2.5.7/drivers/char/ite_gpio.c
--- linux-2.5.7/drivers/char/ite_gpio.c Wed Feb 20 17:55:24 2002
+++ trivial-2.5.7/drivers/char/ite_gpio.c Fri Mar 22 17:05:58 2002
@@ -391,13 +391,14 @@
{
int i;
- misc_register(&ite_gpio_miscdev);
+ if (misc_register(&ite_gpio_miscdev))
+ return -ENODEV;
- if (check_region(ite_gpio_base, 0x1c) < 0 ) {
- return -ENODEV;
- } else {
- request_region(ite_gpio_base, 0x1c, "ITE GPIO");
- }
+ if (!request_region(ite_gpio_base, 0x1c, "ITE GPIO"))
+ {
+ misc_deregister(&ite_gpio_miscdev);
+ return -EIO;
+ }
/* initialize registers */
ITE_GPACR = 0xffff;
@@ -407,13 +408,18 @@
ITE_GPBICR = 0x00ff;
ITE_GPCICR = 0x00ff;
ITE_GCR = 0;
-
+
for (i = 0; i < MAX_GPIO_LINE; i++) {
ite_gpio_irq_pending[i]=0;
init_waitqueue_head(&ite_gpio_wait[i]);
}
- if (request_irq(ite_gpio_irq, ite_gpio_irq_handler, SA_SHIRQ, "gpio", 0) < 0)
+
+ if (request_irq(ite_gpio_irq, ite_gpio_irq_handler, SA_SHIRQ, "gpio", 0) < 0) {
+ misc_deregister(&ite_gpio_miscdev);
+ release_region(ite_gpio_base, 0x1c);
return 0;
+ }
+
printk("GPIO at 0x%x (irq = %d)\n", ite_gpio_base, ite_gpio_irq);
return 0;
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/logibusmouse.c trivial-2.5.7/drivers/char/logibusmouse.c
--- linux-2.5.7/drivers/char/logibusmouse.c Fri Sep 14 08:21:32 2001
+++ trivial-2.5.7/drivers/char/logibusmouse.c Fri Mar 22 17:05:58 2002
@@ -128,25 +128,28 @@
static int __init logi_busmouse_init(void)
{
- if (check_region(LOGIBM_BASE, LOGIBM_EXTENT))
+ if (!request_region(LOGIBM_BASE, LOGIBM_EXTENT, "busmouse"))
return -EIO;
outb(MSE_CONFIG_BYTE, MSE_CONFIG_PORT);
outb(MSE_SIGNATURE_BYTE, MSE_SIGNATURE_PORT);
udelay(100L); /* wait for reply from mouse */
- if (inb(MSE_SIGNATURE_PORT) != MSE_SIGNATURE_BYTE)
+ if (inb(MSE_SIGNATURE_PORT) != MSE_SIGNATURE_BYTE) {
+ release_region(LOGIBM_BASE, LOGIBM_EXTENT);
return -EIO;
+ }
outb(MSE_DEFAULT_MODE, MSE_CONFIG_PORT);
MSE_INT_OFF();
- request_region(LOGIBM_BASE, LOGIBM_EXTENT, "busmouse");
-
msedev = register_busmouse(&busmouse);
- if (msedev < 0)
+ if (msedev < 0) {
+ release_region(LOGIBM_BASE, LOGIBM_EXTENT);
printk(KERN_WARNING "Unable to register busmouse driver.\n");
+ }
else
printk(KERN_INFO "Logitech busmouse installed.\n");
+
return msedev < 0 ? msedev : 0;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/mixcomwd.c trivial-2.5.7/drivers/char/mixcomwd.c
--- linux-2.5.7/drivers/char/mixcomwd.c Wed Feb 20 17:55:08 2002
+++ trivial-2.5.7/drivers/char/mixcomwd.c Fri Mar 22 17:05:58 2002
@@ -239,11 +239,15 @@
return -ENODEV;
}
- request_region(watchdog_port,1,"MixCOM watchdog");
+ if (!request_region(watchdog_port,1,"MixCOM watchdog"))
+ return -EIO;
ret = misc_register(&mixcomwd_miscdev);
if (ret)
+ {
+ release_region(watchdog_port, 1);
return ret;
+ }
printk(KERN_INFO "MixCOM watchdog driver v%s, watchdog port at 0x%3x\n",VERSION,watchdog_port);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/msbusmouse.c trivial-2.5.7/drivers/char/msbusmouse.c
--- linux-2.5.7/drivers/char/msbusmouse.c Fri Sep 14 08:21:32 2001
+++ trivial-2.5.7/drivers/char/msbusmouse.c Fri Mar 22 17:05:58 2002
@@ -149,11 +149,15 @@
}
if (present == 0)
return -EIO;
+ if (!request_region(MS_MSE_CONTROL_PORT, 0x04, "MS Busmouse"))
+ return -EIO;
+
MS_MSE_INT_OFF();
- request_region(MS_MSE_CONTROL_PORT, 0x04, "MS Busmouse");
msedev = register_busmouse(&msbusmouse);
- if (msedev < 0)
+ if (msedev < 0) {
printk(KERN_WARNING "Unable to register msbusmouse driver.\n");
+ release_region(MS_MSE_CONTROL_PORT, 0x04);
+ }
else
printk(KERN_INFO "Microsoft BusMouse detected and installed.\n");
return msedev < 0 ? msedev : 0;
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/pcwd.c trivial-2.5.7/drivers/char/pcwd.c
--- linux-2.5.7/drivers/char/pcwd.c Wed Feb 20 17:57:07 2002
+++ trivial-2.5.7/drivers/char/pcwd.c Fri Mar 22 17:05:58 2002
@@ -114,12 +114,6 @@
{
int card_dat, prev_card_dat, found = 0, count = 0, done = 0;
- /* As suggested by Alan Cox - this is a safety measure. */
- if (check_region(current_readport, 4)) {
- printk("pcwd: Port 0x%x unavailable.\n", current_readport);
- return 0;
- }
-
card_dat = 0x00;
prev_card_dat = 0x00;
@@ -628,15 +622,31 @@
outb_p(0xA5, current_readport + 3);
}
- if (revision == PCWD_REVISION_A)
- request_region(current_readport, 2, "PCWD Rev.A (Berkshire)");
- else
- request_region(current_readport, 4, "PCWD Rev.C (Berkshire)");
+ if (misc_register(&pcwd_miscdev))
+ return -ENODEV;
+
+ if (supports_temp)
+ if (misc_register(&temp_miscdev)) {
+ misc_deregister(&pcwd_miscdev);
+ return -ENODEV;
+ }
- misc_register(&pcwd_miscdev);
- if (supports_temp)
- misc_register(&temp_miscdev);
+ if (revision == PCWD_REVISION_A) {
+ if (!request_region(current_readport, 2, "PCWD Rev.A (Berkshire)")) {
+ misc_deregister(&pcwd_miscdev);
+ if (supports_temp)
+ misc_deregister(&pcwd_miscdev);
+ return -EIO;
+ }
+ }
+ else
+ if (!request_region(current_readport, 4, "PCWD Rev.C (Berkshire)")) {
+ misc_deregister(&pcwd_miscdev);
+ if (supports_temp)
+ misc_deregister(&pcwd_miscdev);
+ return -EIO;
+ }
return 0;
}
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/rocket.c trivial-2.5.7/drivers/char/rocket.c
--- linux-2.5.7/drivers/char/rocket.c Thu Mar 21 14:14:44 2002
+++ trivial-2.5.7/drivers/char/rocket.c Fri Mar 22 17:05:58 2002
@@ -2086,11 +2086,13 @@
num_aiops);
if (rcktpt_io_addr[i] + 0x40 == controller) {
*reserved_controller = 1;
- request_region(rcktpt_io_addr[i], 68,
- "Comtrol Rocketport");
+ if (!request_region(rcktpt_io_addr[i], 68,
+ "Comtrol Rocketport"))
+ return 0;
} else {
- request_region(rcktpt_io_addr[i], 64,
- "Comtrol Rocketport");
+ if (!request_region(rcktpt_io_addr[i], 64,
+ "Comtrol Rocketport"))
+ return 0;
}
return(1);
}
@@ -2178,7 +2180,11 @@
}
if (reserved_controller == 0)
- request_region(controller, 4, "Comtrol Rocketport");
+ if (!request_region(controller, 4, "Comtrol Rocketport"))
+ {
+ rocket_timer.function = 0;
+ return -EIO;
+ }
/*
* Set up the tty driver structure and then register this
@@ -2245,6 +2251,7 @@
if (retval < 0) {
printk("Couldn't install Rocketport callout driver "
"(error %d)\n", -retval);
+ release_region(controller, 4);
return -1;
}
@@ -2252,6 +2259,7 @@
if (retval < 0) {
printk("Couldn't install tty Rocketport driver "
"(error %d)\n", -retval);
+ release_region(controller, 4);
return -1;
}
#ifdef ROCKET_DEBUG_OPEN
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/rtc.c trivial-2.5.7/drivers/char/rtc.c
--- linux-2.5.7/drivers/char/rtc.c Fri Mar 8 14:49:15 2002
+++ trivial-2.5.7/drivers/char/rtc.c Fri Mar 22 17:05:58 2002
@@ -830,10 +830,19 @@
}
#endif
- request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
+ if (!request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc"))
+ {
+ free_irq(RTC_IRQ, NULL);
+ return -EIO;
+ }
#endif /* __sparc__ vs. others */
- misc_register(&rtc_dev);
+ if (misc_register(&rtc_dev))
+ {
+ free_irq(RTC_IRQ, NULL);
+ release_region(RTC_PORT(0), RTC_IO_EXTENT);
+ return -ENODEV;
+ }
create_proc_read_entry ("driver/rtc", 0, 0, rtc_read_proc, NULL);
#if defined(__alpha__) || defined(__mips__)
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.7/drivers/char/serial.c trivial-2.5.7/drivers/char/serial.c
--- linux-2.5.7/drivers/char/serial.c Wed Feb 20 17:57:07 2002
+++ trivial-2.5.7/drivers/char/serial.c Fri Mar 22 17:05:58 2002
@@ -2186,11 +2186,15 @@
if ((state->type != PORT_UNKNOWN) && state->port) {
#ifdef CONFIG_SERIAL_RSA
if (state->type == PORT_RSA)
- request_region(state->port + UART_RSA_BASE,
- 16, "serial_rsa(set)");
+ {
+ if (!request_region(state->port + UART_RSA_BASE,
+ 16, "serial_rsa(set)"))
+ return -EIO;
+ }
else
#endif
- request_region(state->port,8,"serial(set)");
+ if (!request_region(state->port,8,"serial(set)"))
+ return -EIO;
}
next reply other threads:[~2002-03-22 6:10 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-03-22 6:13 Rusty Russell [this message]
2002-03-22 7:48 ` [PATCH] Trivial request_region check patchset Andreas Dilger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E16oIJ7-0000uW-00@wagner.rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=johnpol@2ka.mipt.ru \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).