Re: 2.6.17-rc[56]-mm*: pcmcia "I/O resource not free"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 20 Jun 2006 15:03:17 -0700 Andrew Morton wrote:

> Andy Isaacson <[email protected]> wrote:
> >
> > On Sat, Jun 17, 2006 at 10:03:27AM -0700, Andrew Morton wrote:
> > > > The PCMCIA slot on my Thinkpad X40 stopped working sometime between
> > > > 2.6.17-rc4-mm3 and 2.6.17-rc5-mm3, and is still not working as of
> > > > 2.6.17-rc6-mm2.
> > [snip]
> > > > -Probing IDE interface ide2...
> > > > -hde: CF Card, CFA DISK drive
> > > > -PM: Adding info for No Bus:ide2
> > > > -hdf: probing with STATUS(0x50) instead of ALTSTATUS(0x0a)
> > > > +ide2: I/O resource 0xF8A8A00E-0xF8A8A00E not free.
> > > > +ide2: ports already in use, skipping probe
> > > > +ide2: I/O resource 0xF8A8A01E-0xF8A8A01E not free.
> > > > +ide2: ports already in use, skipping probe
> > > > +ide2: I/O resource 0xF8A8A00E-0xF8A8A00E not free.
> > > > +ide2: ports already in use, skipping probe
> > > 
> > > hm.   I don't know who to blame for this yet ;)
> > > 
> > > The contents of /proc/ioports on both kernels might be useful.  Let's see
> > > which device+driver is already using those ports, and whether the older
> > > kenrel uses the same addresses.
> > 
> > In further testing, -rc6 is fine while -rc6-mm2 fails.
> 
> OK.
> 
> > Under 2.6.17-rc6 (after having inserted and removed the card, but that
> > doesn't seem to make much difference) I have
> > 
> > 0000-001f : dma1
> > ...
> 
> I should have said iomem, not ioports.  But you have it there on those very
> detailed web pages.  There's nothing at 0xF8A8Axxx in either kernel.
> 
> > The diff between -rc6 and -rc6-mm2 shows that they have the same ioport
> > assignment (there's only a textual diff due to ACPI string changes).
> 
> yep.  The only reelvant diff in the rc6 versus rc6-mm2 /proc/iomem is:
> 
> @@ -29,7 +29,6 @@
>    d0220000-d0220fff : 0000:02:02.0
>      d0220000-d0220fff : ipw2200
>    d0221000-d02210ff : 0000:02:00.1
> -  d1200000-d1200fff : pcmcia_socket0
>    d2000000-d3ffffff : PCI CardBus #03
>  e0000000-e7ffffff : 0000:00:02.0
>  e8000000-efffffff : 0000:00:02.1
> 
> whch is to be expected if you removed the card.
> 
> 
> > I've put just about everything you could want to know about the two
> > kernels at
> > http://web.hexapodia.org/~adi/bobble/bobble_2.6.17-rc6_20060620093733/
> > and
> > http://web.hexapodia.org/~adi/bobble/bobble_2.6.17-rc6-mm2_20060620094254/
> > 
> 
> It's strange (to me) that IDE is requesting a single-byte memory region. 
> Possibly we've broken the resource.c code such that it has some off-by-one
> and is now rejecting single-byte requests.

Looks like ide.c uses single-byte requests just for checking
region availability, but I would think that it should use
full-sized requests for that.


> If you're keen , the place to poke around is in
> kernel/resource.c:__request_region().   Here's a starting patch:
> 
> 
> --- a/kernel/resource.c~a
> +++ a/kernel/resource.c
> @@ -501,6 +501,10 @@ struct resource * __request_region(struc
>  			conflict = __request_resource(parent, res);
>  			if (!conflict)
>  				break;
> +			printk("conflict: %s[%Lx->%Lx]\n",
> +				conflict->name,
> +				(unsigned long long)conflict->start,
> +				(unsigned long long)conflict->end);
>  			if (conflict != parent) {
>  				parent = conflict;
>  				if (!(conflict->flags & IORESOURCE_BUSY))
> _
> 
> Which should tell us what we're allegedly conflicting with.
> 
> 
> 
> 
> Then again, perhaps IDE is broken (as well?), because you don't have any
> single-byte iomem regions in your 2.6.17-rc6 /proc/iomem.  It would be
> interesting to run this patch in both 2.6.17-rc6 and in 2.6.17-rc6-mm2, see
> what it says:
> 
> diff -puN drivers/ide/ide.c~a drivers/ide/ide.c
> --- 25/drivers/ide/ide.c~a	Tue Jun 20 15:01:32 2006
> +++ 25-akpm/drivers/ide/ide.c	Tue Jun 20 15:02:15 2006
> @@ -364,6 +364,10 @@ static struct resource* hwif_request_reg
>  {
>  	struct resource *res = request_region(addr, num, hwif->name);
>  
> +	if (num == 1) {
> +		printk("%s: single-byte request\n", __FUNCTION__);
> +		dump_stack();
> +	}
>  	if (!res)
>  		printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX not free.\n",
>  				hwif->name, addr, addr+num-1);
> _


linux-2617-pv/drivers/ide> grep hwif_request_reg *.c
ide.c:static struct resource* hwif_request_region(ide_hwif_t *hwif,
ide.c: *        ide_hwif_request_regions - request resources for IDE
ide.c:int ide_hwif_request_regions(ide_hwif_t *hwif)
ide.c:  if (addr && !hwif_request_region(hwif, addr, 1))
ide.c:          if (!hwif_request_region(hwif, addr, 8))
ide.c:          if (!hwif_request_region(hwif, addr, 1)) {

---
~Randy
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux