Multiple virtual mappings considered harmful on ARM
Marcel Moolenaar
xcllnt at mac.com
Fri Dec 19 18:30:40 UTC 2008
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?
--
Marcel Moolenaar
xcllnt at mac.com
More information about the freebsd-arm
mailing list