diff options
author | neel <neel@FreeBSD.org> | 2010-09-22 02:26:07 +0000 |
---|---|---|
committer | neel <neel@FreeBSD.org> | 2010-09-22 02:26:07 +0000 |
commit | f11ed3a236abe9ee07151a89324bc2e344d38117 (patch) | |
tree | 2ae24ec35db2c6a9b30da181997cc5b7ed1b0b13 | |
parent | afb46784fa44f4dbe38b39c8dade0a73d9e392fa (diff) | |
download | FreeBSD-src-f11ed3a236abe9ee07151a89324bc2e344d38117.zip FreeBSD-src-f11ed3a236abe9ee07151a89324bc2e344d38117.tar.gz |
Enforce that 'pmap_kenter()' is only used to establish cacheable mappings.
Mappings with other cacheability attributes can be established, if needed,
by using 'pmap_kenter_attr()'.
Suggested by: jchandra, imp
-rw-r--r-- | sys/mips/include/pmap.h | 1 | ||||
-rw-r--r-- | sys/mips/mips/pmap.c | 11 | ||||
-rw-r--r-- | sys/mips/sibyte/sb_zbpci.c | 2 |
3 files changed, 6 insertions, 8 deletions
diff --git a/sys/mips/include/pmap.h b/sys/mips/include/pmap.h index e6aada9..558a018 100644 --- a/sys/mips/include/pmap.h +++ b/sys/mips/include/pmap.h @@ -154,6 +154,7 @@ void pmap_unmapdev(vm_offset_t, vm_size_t); vm_offset_t pmap_steal_memory(vm_size_t size); int page_is_managed(vm_offset_t pa); void pmap_kenter(vm_offset_t va, vm_paddr_t pa); +void pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int attr); void pmap_kremove(vm_offset_t va); void *pmap_kenter_temporary(vm_paddr_t pa, int i); void pmap_kenter_temporary_free(vm_paddr_t pa); diff --git a/sys/mips/mips/pmap.c b/sys/mips/mips/pmap.c index 6d212f7..c39554f 100644 --- a/sys/mips/mips/pmap.c +++ b/sys/mips/mips/pmap.c @@ -828,7 +828,7 @@ retry: /* * add a wired page to the kva */ -static void +void pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int attr) { pt_entry_t *pte; @@ -849,14 +849,11 @@ pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int attr) void pmap_kenter(vm_offset_t va, vm_paddr_t pa) { - int attr; - if (is_cacheable_mem(pa)) - attr = PTE_C_CACHE; - else - attr = PTE_C_UNCACHED; + KASSERT(is_cacheable_mem(pa), + ("pmap_kenter: memory at 0x%lx is not cacheable", (u_long)pa)); - pmap_kenter_attr(va, pa, attr); + pmap_kenter_attr(va, pa, PTE_C_CACHE); } /* diff --git a/sys/mips/sibyte/sb_zbpci.c b/sys/mips/sibyte/sb_zbpci.c index 9a09645..243ed08 100644 --- a/sys/mips/sibyte/sb_zbpci.c +++ b/sys/mips/sibyte/sb_zbpci.c @@ -349,7 +349,7 @@ zbpci_config_space_va(int bus, int slot, int func, int reg, int bytes) pa_page = pa & ~(PAGE_SIZE - 1); if (zbpci_config_space[cpu].paddr != pa_page) { pmap_kremove(va_page); - pmap_kenter(va_page, pa_page); + pmap_kenter_attr(va_page, pa_page, PTE_C_UNCACHED); zbpci_config_space[cpu].paddr = pa_page; } return (va_page + (pa - pa_page)); |