2002-11-29 14:00:20

by Bernd Harries

[permalink] [raw]
Subject: ioremap returns NULL

Hi all,

my normally (on 256 MB, dual Xeon, ASUS board, .....) working driver
module fails on a new box with 1 MB RAM, 2 PIII, ASUS board

For each card I ioremap() 2 * 16 MB of PCI memory space.
It succeeds for the 1st card but for the 2nd card I get NULL
as result. This means I cannot use the 2nd card...

Is the reason for this that the RAM is bigger?
What could I do about it?
- Build a 64 GB kernel?
- Use an other function?
- pull out sone DIMM?
- nothing?

Thanks, Bernd

--
Bernd Harries

[email protected]
[email protected] Tel. +49 421 809 7343 priv. | MSB First!
[email protected] +49 421 457 3966 offi. | Linux-m68k
[email protected] +49 172 139 6054 handy | Medusa T40


2002-11-29 14:16:52

by Bernd Harries

[permalink] [raw]
Subject: Re: ioremap returns NULL

> What could I do about it?
> - Build a 64 GB kernel?

> build kernel with Himem (4Gb)

Oh, I forgot to write that the Kernel (Red Hat 7.3 with
2.14.18-3smp_custom has the 4G flag enabled..

What seems to happen is that the vitual kernel address space gets too
small.(?)

Thanks, Bernd

--
Bernd Harries

[email protected]
[email protected] Tel. +49 421 809 7343 priv. | MSB First!
[email protected] +49 421 457 3966 offi. | Linux-m68k
[email protected] +49 172 139 6054 handy | Medusa T40

2002-11-29 23:21:33

by Pete Zaitcev

[permalink] [raw]
Subject: Re: ioremap returns NULL

>[...]
> For each card I ioremap() 2 * 16 MB of PCI memory space.
> It succeeds for the 1st card but for the 2nd card I get NULL
> as result. This means I cannot use the 2nd card...

I think you are screwed. The ioremap grabs from vmalloc area,
which is something like 64MB on i386. The best option is
to rewrite the driver to allocate less, and perhaps use
fewer modules.

Running a 2G/2G split might help, I'm not sure. But that
route has userland implications anyway, so don't.

-- Pete

2002-11-30 10:08:37

by Manfred Spraul

[permalink] [raw]
Subject: Re: ioremap returns NULL

>>[...]
>> For each card I ioremap() 2 * 16 MB of PCI memory space.
>> It succeeds for the 1st card but for the 2nd card I get NULL
>> as result. This means I cannot use the 2nd card...
>
>I think you are screwed. The ioremap grabs from vmalloc area,
>which is something like 64MB on i386. The best option is
>to rewrite the driver to allocate less, and perhaps use
>fewer modules.


The size of the vmalloc area is 128 MB, 96 for highmem kernels.
Either:
- compile a kernel without 4G support, then you have 128 MB
- increase PKMAP_BASE (include/asm-i386/highmem.h) to
0xff800000 (it's 0xfe000000 in 2.5.50)
Right now 32 MB virtual memory are reserved for kmap, but only 4 MB are
used. Changing PKMAP_BASE gives you 24 MB additional vmalloc space for free.
- increase __VMALLOC_RESERVE.

--
Manfred