summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-05-17 21:23:46 +0000
committerian <ian@FreeBSD.org>2014-05-17 21:23:46 +0000
commitff070b2a91b64abfa14632c45e90bd7664a7dfcc (patch)
tree793742c8941950b42640cc9c79ef5c45d3aa52e1 /sys/arm
parenta1c815496e846d1fda9e6d89af2b95ec1dbecb13 (diff)
downloadFreeBSD-src-ff070b2a91b64abfa14632c45e90bd7664a7dfcc.zip
FreeBSD-src-ff070b2a91b64abfa14632c45e90bd7664a7dfcc.tar.gz
MFC 264183: Add a couple more required TLB flushes.
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/arm/pmap-v6.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c
index 6a90774..3d3c0cf 100644
--- a/sys/arm/arm/pmap-v6.c
+++ b/sys/arm/arm/pmap-v6.c
@@ -853,6 +853,8 @@ pmap_free_l2_bucket(pmap_t pmap, struct l2_bucket *l2b, u_int count)
if (l1pd == (L1_C_DOM(pmap->pm_domain) | L1_TYPE_C)) {
*pl1pd = 0;
PTE_SYNC(pl1pd);
+ cpu_tlb_flushD_SE((vm_offset_t)ptep);
+ cpu_cpwait();
}
/*
@@ -2147,6 +2149,8 @@ pmap_grow_l2_bucket(pmap_t pmap, vm_offset_t va)
L1_C_PROTO;
PTE_SYNC(pl1pd);
}
+ cpu_tlb_flushID_SE(va);
+ cpu_cpwait();
return (l2b);
}
@@ -2427,6 +2431,7 @@ pmap_kenter_internal(vm_offset_t va, vm_offset_t pa, int flags)
if (opte == 0)
l2b->l2b_occupancy++;
}
+ cpu_cpwait();
PDEBUG(1, printf("pmap_kenter: pte = %08x, opte = %08x, npte = %08x\n",
(uint32_t) ptep, opte, *ptep));
@@ -4958,10 +4963,10 @@ pmap_advise(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, int advice)
cpu_tlb_flushID_SE(sva);
else if (PTE_BEEN_REFD(opte))
cpu_tlb_flushD_SE(sva);
- cpu_cpwait();
}
}
}
+ cpu_cpwait();
rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
OpenPOWER on IntegriCloud