svn commit: r287105 - head/sys/arm64/arm64
Andrew Turner
andrew at FreeBSD.org
Mon Aug 24 12:01:40 UTC 2015
Author: andrew
Date: Mon Aug 24 12:01:39 2015
New Revision: 287105
URL: https://svnweb.freebsd.org/changeset/base/287105
Log:
Add support for pmap_sync_icache on arm64.
Reviewed by: emaste, imp (both earlier version)
Obtained from: ABT Systems Ltd
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D3438
Modified:
head/sys/arm64/arm64/pmap.c
Modified: head/sys/arm64/arm64/pmap.c
==============================================================================
--- head/sys/arm64/arm64/pmap.c Mon Aug 24 10:55:54 2015 (r287104)
+++ head/sys/arm64/arm64/pmap.c Mon Aug 24 12:01:39 2015 (r287105)
@@ -3050,10 +3050,32 @@ pmap_activate(struct thread *td)
}
void
-pmap_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz)
+pmap_sync_icache(pmap_t pmap, vm_offset_t va, vm_size_t sz)
{
- panic("ARM64TODO: pmap_sync_icache");
+ if (va >= VM_MIN_KERNEL_ADDRESS) {
+ cpu_icache_sync_range(va, sz);
+ } else {
+ u_int len, offset;
+ vm_paddr_t pa;
+
+ /* Find the length of data in this page to flush */
+ offset = va & PAGE_MASK;
+ len = imin(PAGE_SIZE - offset, sz);
+
+ while (sz != 0) {
+ /* Extract the physical address & find it in the DMAP */
+ pa = pmap_extract(pmap, va);
+ if (pa != 0)
+ cpu_icache_sync_range(PHYS_TO_DMAP(pa), len);
+
+ /* Move to the next page */
+ sz -= len;
+ va += len;
+ /* Set the length for the next iteration */
+ len = imin(PAGE_SIZE, sz);
+ }
+ }
}
/*
More information about the svn-src-head
mailing list