Page MenuHomeFreeBSD

D59320.id186657.diff
No OneTemporary

D59320.id186657.diff

diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c
--- a/sys/powerpc/aim/mmu_radix.c
+++ b/sys/powerpc/aim/mmu_radix.c
@@ -3492,19 +3492,19 @@
PMAP_UNLOCK(pmap);
}
-vm_paddr_t
-mmu_radix_extract(pmap_t pmap, vm_offset_t va)
+static vm_paddr_t
+mmu_radix_extract_locked(pmap_t pmap, vm_offset_t va)
{
pml3_entry_t *l3e;
pt_entry_t *pte;
vm_paddr_t pa;
+ PMAP_LOCK_ASSERT(pmap, MA_OWNED);
l3e = pmap_pml3e(pmap, va);
if (__predict_false(l3e == NULL))
return (0);
if (be64toh(*l3e) & RPTE_LEAF) {
pa = (be64toh(*l3e) & PG_PS_FRAME) | (va & L3_PAGE_MASK);
- pa |= (va & L3_PAGE_MASK);
} else {
/*
* Beware of a concurrent promotion that changes the
@@ -3519,11 +3519,21 @@
return (0);
pa = be64toh(*pte);
pa = (pa & PG_FRAME) | (va & PAGE_MASK);
- pa |= (va & PAGE_MASK);
}
return (pa);
}
+vm_paddr_t
+mmu_radix_extract(pmap_t pmap, vm_offset_t va)
+{
+ vm_paddr_t pa;
+
+ PMAP_LOCK(pmap);
+ pa = mmu_radix_extract_locked(pmap, va);
+ PMAP_UNLOCK(pmap);
+ return (pa);
+}
+
vm_page_t
mmu_radix_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_prot_t prot)
{
@@ -5980,7 +5990,7 @@
PMAP_LOCK(pm);
while (sz > 0) {
- pa = pmap_extract(pm, va);
+ pa = mmu_radix_extract_locked(pm, va);
sync_sz = PAGE_SIZE - (va & PAGE_MASK);
sync_sz = min(sync_sz, sz);
if (pa != 0) {

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 4, 11:54 PM (15 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38965533
Default Alt Text
D59320.id186657.diff (1 KB)

Event Timeline