diff options
author | wma <wma@FreeBSD.org> | 2016-03-14 07:26:38 +0000 |
---|---|---|
committer | wma <wma@FreeBSD.org> | 2016-03-14 07:26:38 +0000 |
commit | ca92c5bf0943ec24b4a2a0e0b943e40322d9faa4 (patch) | |
tree | 241d6f2c064d91e1b31b50abb808a9082e46e799 /sys/arm64 | |
parent | e71ffe7d77bfef641b6ce0567c4fd76f86687cce (diff) | |
download | FreeBSD-src-ca92c5bf0943ec24b4a2a0e0b943e40322d9faa4.zip FreeBSD-src-ca92c5bf0943ec24b4a2a0e0b943e40322d9faa4.tar.gz |
pmap arm64: fixing pmap_invalidate_range
It seems that if range within one page is given this page will not be
invalidated at all. Clean it up.
Submitted by: Dominik Ermel <der@semihalf.com>
Obtained from: Semihalf
Sponsored by: Cavium
Reviewed by: wma, zbb
Approved by: cognet (mentor)
Differential Revision: https://reviews.freebsd.org/D5569
Diffstat (limited to 'sys/arm64')
-rw-r--r-- | sys/arm64/arm64/pmap.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index abc6581..5db731d 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -772,12 +772,10 @@ pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) vm_offset_t addr; sched_pin(); - sva >>= PAGE_SHIFT; - eva >>= PAGE_SHIFT; __asm __volatile("dsb sy"); - for (addr = sva; addr < eva; addr++) { + for (addr = sva; addr < eva; addr += PAGE_SIZE) { __asm __volatile( - "tlbi vaae1is, %0" : : "r"(addr)); + "tlbi vaae1is, %0" : : "r"(addr >> PAGE_SHIFT)); } __asm __volatile( "dsb sy \n" |