Re: Problem with ioremap which returns NULL in 2.6 kernel

From: Davide Rossetti
Date: Tue Jun 01 2004 - 12:11:12 EST


Markus Lidel wrote:

Hello,

Jeff Garzik wrote:

could someone help me with a ioremap problem. If there are two controllers plugged in, the ioremap request for the first controller is successfull, but the second returns NULL. Here is the output of the driver:
i2o: Checking for PCI I2O controllers...
i2o: I2O controller on bus 0 at 72.
i2o: PCI I2O controller at 0xD0000000 size=134217728
I2O: MTRR workaround for Intel i960 processor
i2o/iop0: Installed at IRQ17
i2o: I2O controller on bus 0 at 96.
i2o: PCI I2O controller at 0xD8000000 size=134217728
i2o: Unable to map controller.

If "size=xxxx" indicates the size you are remapping, then that's

I saw the same problem on a PCI card with a 128MB BAR. it is triggered on an Tyan opteron mobo, while on a old Dell P4 mobo it is ok. I followed a bit the source code for ioremap and found two places in which it can fail,

area = get_vm_area(size, VM_IOREMAP);
if (!area)
return NULL;
addr = area->addr;
if (remap_area_pages(VMALLOC_VMADDR(addr), phys_addr, size, flags)) {
vfree(addr);
return NULL;
}

I had not time to add debug printk and recompila the kernel to check which one is faulty...

The strange thing is that the BARs seems to be laid out correctly, so it does not look like a bios bug...


probably too large an area to be remapping. Try remapping only the
memory area needed, and not the entire area.


Is there a way, to increase the size, which could be remapped, or is there a way, to find out what is the maximum size which could be remapped?

we tried with half and it was ok, then we moved up a bit and found the maximum around 80MB I think...


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