summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2012-11-21 01:38:40 +0000
committercognet <cognet@FreeBSD.org>2012-11-21 01:38:40 +0000
commit79f863d433acf2748aa6b0f4c622a26da1deae60 (patch)
tree3d1781a8b7c6533391b049fcb7975dc7e845d319 /sys/arm
parent45112bd543b80a550b611257a95bf2475a120761 (diff)
downloadFreeBSD-src-79f863d433acf2748aa6b0f4c622a26da1deae60.zip
FreeBSD-src-79f863d433acf2748aa6b0f4c622a26da1deae60.tar.gz
Make sure the address starts on a cache line boundary.
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/pl310.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/arm/arm/pl310.c b/sys/arm/arm/pl310.c
index 45ee718..7c43b31 100644
--- a/sys/arm/arm/pl310.c
+++ b/sys/arm/arm/pl310.c
@@ -180,9 +180,13 @@ static void
pl310_wbinv_range(vm_paddr_t start, vm_size_t size)
{
+ if (start & g_l2cache_align_mask) {
+ size += start & g_l2cache_align_mask;
+ start &= ~g_l2cache_align_mask;
+ }
if (size & g_l2cache_align_mask) {
size &= ~g_l2cache_align_mask;
- size += g_l2cache_line_size;
+ size += g_l2cache_line_size;
}
#if 1
@@ -217,6 +221,10 @@ static void
pl310_wb_range(vm_paddr_t start, vm_size_t size)
{
+ if (start & g_l2cache_align_mask) {
+ size += start & g_l2cache_align_mask;
+ start &= ~g_l2cache_align_mask;
+ }
if (size & g_l2cache_align_mask) {
size &= ~g_l2cache_align_mask;
size += g_l2cache_line_size;
@@ -235,6 +243,10 @@ static void
pl310_inv_range(vm_paddr_t start, vm_size_t size)
{
+ if (start & g_l2cache_align_mask) {
+ size += start & g_l2cache_align_mask;
+ start &= ~g_l2cache_align_mask;
+ }
if (size & g_l2cache_align_mask) {
size &= ~g_l2cache_align_mask;
size += g_l2cache_line_size;
OpenPOWER on IntegriCloud