Multiple virtual mappings considered harmful on ARM

Grzegorz Bernacki gjb at semihalf.com
Wed Dec 31 11:18:48 UTC 2008


Marcel Moolenaar wrote:
> 
> On Dec 19, 2008, at 6:07 AM, Grzegorz Bernacki wrote:
> 
>> 2. Root cause.
>> The root cause of the problem is additional virtual mapping of read/write
>> buffers at cluster read/write (sys/kern/vfs_cluster.c, cluster_rbuild(),
>> cluster_wbuild(). Buffers for sequential read/write operation are
>> concatenated
>> and sent to device as one big buffer. Concatenation of buffers uses
>> pmap_qenter(), which puts *additional* mapping in the KVA for physical
>> area
>> already mapped. For each buffer we extract pages it contains and then
>> all the
>> pages from all the buffers are mapped into new virtual address of new
>> buffer.
>> So we end up with at least two virtual addresses for each page.
> 
> Could this also affect I-cache coherency by virtue of not
> flushing the D-cache properly before synchronizing the
> I-cache, as you mention reading?
> 

I am not sure. I can't think of scenario which might lead to I-cache incoherency.
Have you experienced any issues with I-cache which might be related described problem?

pozdrawiam,
Grzesiek




More information about the freebsd-arm mailing list