[PATCH] i82365: fix regions usage (v2)
Randy.Dunlap
rddunlap at osdl.org
Thu Mar 17 13:30:16 EST 2005
Dominik Brodowski wrote:
>
> Indeed this region is requested later. However, in the meantime identify()
> happily reads from this region (which wouldn't be too bad), but also writes
> to these region. So the region should be requested earlier, IMHO.
Convert deprecated check_region() calls to request/release region.
Add return value check on one request_region().
Build-tested only. I don't have a way to runtime-test this.
Can someone on the mailing list test it?
I suspect that it may do an extra release_region(), which should
generate a warning message from the kernel.
Signed-off-by: Randy Dunlap <rddunlap at osdl.org>
diffstat:=
drivers/pcmcia/i82365.c | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
diff -Naurp ./drivers/pcmcia/i82365.c~i82365_regions ./drivers/pcmcia/i82365.c
--- ./drivers/pcmcia/i82365.c~i82365_regions 2005-03-01 23:38:25.000000000 -0800
+++ ./drivers/pcmcia/i82365.c 2005-03-17 10:04:26.000000000 -0800
@@ -669,11 +669,13 @@ static int __init is_alive(u_short sock)
if ((stat & I365_CS_DETECT) && (stat & I365_CS_POWERON) &&
(i365_get(sock, I365_INTCTL) & I365_PC_IOCARD) &&
(i365_get(sock, I365_ADDRWIN) & I365_ENA_IO(0)) &&
- (check_region(start, stop-start+1) != 0) &&
- ((start & 0xfeef) != 0x02e8))
- return 1;
- else
- return 0;
+ ((start & 0xfeef) != 0x02e8)) {
+ if (!request_region(start, stop-start+1, "i82365"))
+ return 1;
+ release_region(start, stop-start+1);
+ }
+
+ return 0;
}
/*====================================================================*/
@@ -696,7 +698,13 @@ static void __init add_pcic(int ns, int
struct i82365_socket *t = &socket[sockets-ns];
base = sockets-ns;
- if (t->ioaddr > 0) request_region(t->ioaddr, 2, "i82365");
+ if (t->ioaddr > 0) {
+ if (!request_region(t->ioaddr, 2, "i82365")) {
+ printk(KERN_ERR "i82365: IO region conflict at %#lx, not available\n",
+ t->ioaddr);
+ return;
+ }
+ }
if (base == 0) printk("\n");
printk(KERN_INFO " %s", pcic[type].name);
@@ -803,7 +811,7 @@ static void __init isa_probe(void)
}
#endif
- if (check_region(i365_base, 2) != 0) {
+ if (!request_region(i365_base, 2, "i82365")) {
if (sockets == 0)
printk("port conflict at %#lx\n", i365_base);
return;
@@ -1447,6 +1455,7 @@ static void __exit exit_i82365(void)
i365_set(i, I365_CSCINT, 0);
release_region(socket[i].ioaddr, 2);
}
+ release_region(i365_base, 2);
#ifdef CONFIG_PNP
if (i82365_pnpdev)
pnp_disable_dev(i82365_pnpdev);
---
More information about the linux-pcmcia
mailing list