summaryrefslogtreecommitdiffstats
path: root/sys/arm64
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2016-09-16 12:18:22 +0000
committerandrew <andrew@FreeBSD.org>2016-09-16 12:18:22 +0000
commit6988d81f6c24331f68a0a14fc5182f031d62628a (patch)
tree7666dc73d9de603a5b6f6de5ae1560ac12468558 /sys/arm64
parentc27a61a71c09a118a6f37f43d97fe4f084945321 (diff)
downloadFreeBSD-src-6988d81f6c24331f68a0a14fc5182f031d62628a.zip
FreeBSD-src-6988d81f6c24331f68a0a14fc5182f031d62628a.tar.gz
MFC 303903:
Implement pmap_align_superpage on arm64 based on the amd64 implementation. This will be needed when superpage support is added. Obtained from: ABT Systems Ltd Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'sys/arm64')
-rw-r--r--sys/arm64/arm64/pmap.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index a451cb17..aa56e50 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -3490,6 +3490,20 @@ void
pmap_align_superpage(vm_object_t object, vm_ooffset_t offset,
vm_offset_t *addr, vm_size_t size)
{
+ vm_offset_t superpage_offset;
+
+ if (size < L2_SIZE)
+ return;
+ if (object != NULL && (object->flags & OBJ_COLORED) != 0)
+ offset += ptoa(object->pg_color);
+ superpage_offset = offset & L2_OFFSET;
+ if (size - ((L2_SIZE - superpage_offset) & L2_OFFSET) < L2_SIZE ||
+ (*addr & L2_OFFSET) == superpage_offset)
+ return;
+ if ((*addr & L2_OFFSET) < superpage_offset)
+ *addr = (*addr & ~L2_OFFSET) + superpage_offset;
+ else
+ *addr = ((*addr + L2_OFFSET) & ~L2_OFFSET) + superpage_offset;
}
/**
OpenPOWER on IntegriCloud