From: Ian Campbell Date: Fri, 8 Jul 2005 00:58:52 +0000 (-0700) Subject: [PATCH] pcmcia: fix i82365 request_region double usage X-Git-Tag: v2.6.13-rc3~146 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=69a4d56bae492b1a5e74459d9d771d9bc7f9320f;p=linux-2.6-omap-h63xx.git [PATCH] pcmcia: fix i82365 request_region double usage http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f354942cb301fed273f423fb5c4f57bde3efc5b2 converted the check_region() calls in drivers/pcmcia/i82365.c into request_regions. Unfortunately this seems to have broken things. isa_probe() used to call check_region() and then call add_pcic() which would request_region(). Now isa_probe() calls request_region() and then calls add_pcic() which calls request_region() again, this fails and add_pcic() returns immediately without doing all the setup etc. On the face of it the patch below fixes the problem, by not doing the second request region in add_pcic(). I think this is preferable to remove the call in isa_probe() since identify() touches the I/O regions and is called before add_pcic(). However I haven't fully grokked the meaning of the code which follows the request_region() in isa_probe(), so I'm not sure that the handling WRT multiple sockets and multiple bridge chips is correct. In particular I'm not convinced that the regions for subsequent sockets and/or bridges will be requested at all. I suspect a more thorough reworking by someone who understands what is going on there might be in order. I should mention that I'm actually messing about with this on an ARM platform with wacky memory and i/o mapping offsets etc, it doesn't quite work yet for other reasons which preclude full testing etc, but I think the problem above is still present for more normal x86 stuff. Signed-off-by: Ian Campbell Signed-off-by: Dominik Brodowski Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c index d72f9a35c8b..3546158ef77 100644 --- a/drivers/pcmcia/i82365.c +++ b/drivers/pcmcia/i82365.c @@ -698,14 +698,6 @@ static void __init add_pcic(int ns, int type) struct i82365_socket *t = &socket[sockets-ns]; base = sockets-ns; - 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); printk(" ISA-to-PCMCIA at port %#lx ofs 0x%02x",