Re: PCI Express support for 2.4 kernel

Vladimir Kondratiev
2003-12-15T22:50:09Z

Andi,

My fist intention was exactly same as yours, but if all access were done
through pci_dev...
Unfortunately, you can't store ioremap()'ed address for 4k within
pci_dev and then simply use it.
In all places around, config accessed through (bus,dev,fn) indexes.

If you want to keep virt. addr. footprint small, the only alternative to
fixmap is some kind of LRU cache for dozen of devices.
When choosing between fixmap and LRU cache, I would choose fixmaps. It
is very simple and clear, low virt. addr. and comparable overhead.

Vladimir.

Andi Kleen wrote:

>Vladimir Kondratiev <vladimir.kondratiev@intel.com> writes:
>
>
>>As alternative between 1 page and 256M, I see also lazy allocation on
>>per-bus basis: when bus is first accessed, ioremap 1Mb for it. On real
>>system, it is no more then 3-4 buses. This way, we will end with
>>several 1MB mappings. Finer granularity do not looks feasible, since
>>bus scanning procedure tries to access all devices.
>>
>>
>
>For bus scanning fixmaps are fine, but for the normal use of the
>config space in the driver just doing ioremap once (e.g. at
>pci_enable_device time) and caching it is preferable. The number of
>PCI-E devices in a given system should be bounded, so e.g. when you
>have 100 devices you will only lose 400kB of vmalloc space this way
>which is quite reasonable.
>
>I don't think dynamic fixmaps at each access would be a good idea.
>
>-Andi
>
>