Page MenuHomeFreeBSD

D50307.id.diff
No OneTemporary

D50307.id.diff

diff --git a/sys/arm/arm/mem.c b/sys/arm/arm/mem.c
--- a/sys/arm/arm/mem.c
+++ b/sys/arm/arm/mem.c
@@ -114,8 +114,8 @@
if (!address_valid)
return (EINVAL);
sx_xlock(&tmppt_lock);
- pmap_kenter((vm_offset_t)_tmppt, v);
- pmap_tlb_flush(kernel_pmap, (vm_offset_t)_tmppt);
+ pmap_kenter((vm_offset_t)_tmppt, PAGE_SIZE, v,
+ VM_MEMATTR_DEFAULT);
o = (int)uio->uio_offset & PAGE_MASK;
c = (u_int)(PAGE_SIZE - ((int)iov->iov_base & PAGE_MASK));
c = min(c, (u_int)(PAGE_SIZE - o));
diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c
--- a/sys/arm/arm/pmap-v6.c
+++ b/sys/arm/arm/pmap-v6.c
@@ -1150,7 +1150,7 @@
* After pmap_bootstrap() is called, the following functions for
* mappings can be used:
*
- * void pmap_kenter(vm_offset_t va, vm_paddr_t pa);
+ * void pmap_kenter(vm_offset_t va, vm_size_t size, vm_paddr_t pa, int mode);
* void pmap_kremove(vm_offset_t va);
* vm_offset_t pmap_map(vm_offset_t *virt, vm_paddr_t start, vm_paddr_t end,
* int prot);
@@ -1308,11 +1308,28 @@
pte2_store(pte2p, PTE2_KERN(pa, prot, attr));
}
-PMAP_INLINE void
-pmap_kenter(vm_offset_t va, vm_paddr_t pa)
+static __inline void
+pmap_kenter_noflush(vm_offset_t va, vm_size_t size, vm_paddr_t pa, int mode)
{
+ uint32_t l2attr;
+
+ KASSERT((size & PAGE_MASK) == 0,
+ ("%s: device mapping not page-sized", __func__));
- pmap_kenter_prot_attr(va, pa, PTE2_AP_KRW, PTE2_ATTR_DEFAULT);
+ l2attr = vm_memattr_to_pte2(mode);
+ while (size != 0) {
+ pmap_kenter_prot_attr(va, pa, PTE2_AP_KRW, l2attr);
+ va += PAGE_SIZE;
+ pa += PAGE_SIZE;
+ size -= PAGE_SIZE;
+ }
+}
+
+PMAP_INLINE void
+pmap_kenter(vm_offset_t va, vm_size_t size, vm_paddr_t pa, int mode)
+{
+ pmap_kenter_noflush(va, size, pa, mode);
+ tlb_flush_range(va, size);
}
/*
@@ -1453,7 +1470,7 @@
/* QQQ: 'i' should be less or equal to MAXDUMPPGS. */
va = (vm_offset_t)crashdumpmap + (i * PAGE_SIZE);
- pmap_kenter(va, pa);
+ pmap_kenter_noflush(va, PAGE_SIZE, pa, VM_MEMATTR_DEFAULT);
tlb_flush_local(va);
return ((void *)crashdumpmap);
}
@@ -6253,21 +6270,7 @@
void
pmap_kenter_device(vm_offset_t va, vm_size_t size, vm_paddr_t pa)
{
- vm_offset_t sva;
- uint32_t l2attr;
-
- KASSERT((size & PAGE_MASK) == 0,
- ("%s: device mapping not page-sized", __func__));
-
- sva = va;
- l2attr = vm_memattr_to_pte2(VM_MEMATTR_DEVICE);
- while (size != 0) {
- pmap_kenter_prot_attr(va, pa, PTE2_AP_KRW, l2attr);
- va += PAGE_SIZE;
- pa += PAGE_SIZE;
- size -= PAGE_SIZE;
- }
- tlb_flush_range(sva, va - sva);
+ pmap_kenter(va, size, pa, VM_MEMATTR_DEVICE);
}
void
diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h
--- a/sys/arm/include/pmap.h
+++ b/sys/arm/include/pmap.h
@@ -135,7 +135,7 @@
* vtopte2().
*/
void pmap_bootstrap(vm_offset_t);
-void pmap_kenter(vm_offset_t, vm_paddr_t);
+void pmap_kenter(vm_offset_t, vm_size_t, vm_paddr_t, int);
void pmap_kremove(vm_offset_t);
bool pmap_page_is_mapped(vm_page_t);
bool pmap_ps_enabled(pmap_t pmap);

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 4, 10:40 PM (9 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29258976
Default Alt Text
D50307.id.diff (2 KB)

Event Timeline