David VomLehn wrote: >> The virtually mapped memmap results in smaller code and is typically more >> effective since the processor caches the TLB entries. > > I'm pretty ignorant on this subject, but I think this is worth > discussing. On a MIPS processor, access to low memory bypasses the TLB > entirely. I think what you are suggesting is to use mapped addresses to > make all of low memory virtually contiguous. On a MIPS processor, we No the virtual area is only used to map the memory map (the array of page structs). That is just a small fraction of memory. > could do this by allocating a "wired" TLB entry for each physically > contiguous block of memory. Wired TLB entries are never replaced, so > they are very efficient for long-lived mappings such as this. Using the > TLB in this way does increase TLB pressure, but most platforms probably > have a very small number of "holes" in their memory. So, this may be a > small overhead. That would consume precious resources. Just place the memmap into the vmalloc area gets you there. TLB entries should be loaded on demand. > If I'm understand what you are suggesting correctly (a big if), the > downside is that we'd pay the cost of a TLB match for each non-cached > low memory data access. It seems to me that would be a higher cost than > having the occasional, more expensive, sparsemem lookup in pfn_to_page. The cost going through a TLB mapping is only incurred for accesses to the memmap array. Not for general memory accesses.