Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/arm/arm32 Add pmap_domain and pmap_l1_kva inlines.



details:   https://anonhg.NetBSD.org/src/rev/e845a7789e59
branches:  trunk
changeset: 787776:e845a7789e59
user:      matt <matt%NetBSD.org@localhost>
date:      Wed Jul 03 05:23:04 2013 +0000

description:
Add pmap_domain and pmap_l1_kva inlines.

diffstat:

 sys/arch/arm/arm32/pmap.c |  56 +++++++++++++++++++++++++++-------------------
 1 files changed, 33 insertions(+), 23 deletions(-)

diffs (184 lines):

diff -r beaa2cf33d00 -r e845a7789e59 sys/arch/arm/arm32/pmap.c
--- a/sys/arch/arm/arm32/pmap.c Tue Jul 02 22:39:45 2013 +0000
+++ b/sys/arch/arm/arm32/pmap.c Wed Jul 03 05:23:04 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.c,v 1.257 2013/06/12 21:34:12 matt Exp $  */
+/*     $NetBSD: pmap.c,v 1.258 2013/07/03 05:23:04 matt Exp $  */
 
 /*
  * Copyright 2003 Wasabi Systems, Inc.
@@ -212,7 +212,7 @@
 #include <arm/cpuconf.h>
 #include <arm/arm32/katelib.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.257 2013/06/12 21:34:12 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.258 2013/07/03 05:23:04 matt Exp $");
 
 #ifdef PMAP_DEBUG
 
@@ -821,6 +821,18 @@
 }
 #endif /* PMAP_CACHE_VIVT */
 
+static inline uint8_t
+pmap_domain(pmap_t pm)
+{
+       return pm->pm_domain;
+}
+
+static inline pd_entry_t *
+pmap_l1_kva(pmap_t pm)
+{
+       return pm->pm_l1->l1_kva;
+}
+
 static inline bool
 pmap_is_current(pmap_t pm)
 {
@@ -1227,8 +1239,8 @@
        /*
         * Free up the domain number which was allocated to the pmap
         */
-       l1->l1_domain_free[pm->pm_domain - 1] = l1->l1_domain_first;
-       l1->l1_domain_first = pm->pm_domain - 1;
+       l1->l1_domain_free[pmap_domain(pm) - 1] = l1->l1_domain_first;
+       l1->l1_domain_first = pmap_domain(pm) - 1;
        l1->l1_domain_use_count--;
 
        /*
@@ -1457,14 +1469,14 @@
        ptep = l2b->l2b_kva;
        l2b->l2b_kva = NULL;
 
-       pl1pd = &pm->pm_l1->l1_kva[l1idx];
+       pl1pd = pmap_l1_kva(pm) + l1idx;
 
        /*
         * If the L1 slot matches the pmap's domain
         * number, then invalidate it.
         */
        l1pd = *pl1pd & (L1_TYPE_MASK | L1_C_DOM_MASK);
-       if (l1pd == (L1_C_DOM(pm->pm_domain) | L1_TYPE_C)) {
+       if (l1pd == (L1_C_DOM(pmap_domain(pm)) | L1_TYPE_C)) {
                *pl1pd = 0;
                PTE_SYNC(pl1pd);
        }
@@ -1565,11 +1577,11 @@
                    VM_PROT_READ, VM_PROT_READ | PMAP_WIRED);
                pmap_update(pm);
 
-               pm->pm_pl1vec = &pm->pm_l1->l1_kva[L1_IDX(vector_page)];
+               pm->pm_pl1vec = pmap_l1_kva(pm) + L1_IDX(vector_page);
                l2b = pmap_get_l2_bucket(pm, vector_page);
                KDASSERT(l2b != NULL);
                pm->pm_l1vec = l2b->l2b_phys | L1_C_PROTO |
-                   L1_C_DOM(pm->pm_domain);
+                   L1_C_DOM(pmap_domain(pm));
        } else
                pm->pm_pl1vec = NULL;
 #endif
@@ -3098,8 +3110,8 @@
                                 */
                                pd_entry_t *pl1pd, l1pd;
 
-                               pl1pd = &pm->pm_l1->l1_kva[L1_IDX(va)];
-                               l1pd = l2b->l2b_phys | L1_C_DOM(pm->pm_domain) |
+                               pl1pd = pmap_l1_kva(pm) + L1_IDX(va);
+                               l1pd = l2b->l2b_phys | L1_C_DOM(pmap_domain(pm)) |
                                    L1_C_PROTO;
                                if (*pl1pd != l1pd) {
                                        *pl1pd = l1pd;
@@ -3597,7 +3609,7 @@
        pmap_acquire_pmap_lock(pm);
 
        l1idx = L1_IDX(va);
-       pl1pd = &pm->pm_l1->l1_kva[l1idx];
+       pl1pd = pmap_l1_kva(pm) + l1idx;
        l1pd = *pl1pd;
 
        if (l1pte_section_p(l1pd)) {
@@ -4056,8 +4068,8 @@
         * We know there is a valid mapping here, so simply
         * fix up the L1 if necessary.
         */
-       pl1pd = &pm->pm_l1->l1_kva[l1idx];
-       l1pd = l2b->l2b_phys | L1_C_DOM(pm->pm_domain) | L1_C_PROTO;
+       pl1pd = pmap_l1_kva(pm) + l1idx;
+       l1pd = l2b->l2b_phys | L1_C_DOM(pmap_domain(pm)) | L1_C_PROTO;
        if (*pl1pd != l1pd) {
                *pl1pd = l1pd;
                PTE_SYNC(pl1pd);
@@ -4234,7 +4246,7 @@
 
        npm = l->l_proc->p_vmspace->vm_map.pmap;
        ndacr = (DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL * 2)) |
-           (DOMAIN_CLIENT << (npm->pm_domain * 2));
+           (DOMAIN_CLIENT << (pmap_domain(npm) * 2));
 
        /*
         * If TTB and DACR are unchanged, short-circuit all the
@@ -4243,7 +4255,7 @@
        if (pmap_previous_active_lwp != NULL) {
                opm = pmap_previous_active_lwp->l_proc->p_vmspace->vm_map.pmap;
                odacr = (DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL * 2)) |
-                   (DOMAIN_CLIENT << (opm->pm_domain * 2));
+                   (DOMAIN_CLIENT << (pmap_domain(opm) * 2));
 
                if (opm->pm_l1 == npm->pm_l1 && odacr == ndacr)
                        goto all_done;
@@ -5198,7 +5210,7 @@
                return false;
 
        l1idx = L1_IDX(va);
-       *pdp = pl1pd = &pm->pm_l1->l1_kva[l1idx];
+       *pdp = pl1pd = pmap_l1_kva(pm) + l1idx;
        l1pd = *pl1pd;
 
        if (l1pte_section_p(l1pd)) {
@@ -5223,13 +5235,11 @@
 bool
 pmap_get_pde(pmap_t pm, vaddr_t va, pd_entry_t **pdp)
 {
-       u_short l1idx;
 
        if (pm->pm_l1 == NULL)
                return false;
 
-       l1idx = L1_IDX(va);
-       *pdp = &pm->pm_l1->l1_kva[l1idx];
+       *pdp = pmap_l1_kva(pm) + L1_IDX(va);
 
        return true;
 }
@@ -5252,7 +5262,7 @@
         * Copy the kernel's L1 entries to each new L1.
         */
        if (pmap_initialized)
-               memcpy(l1pt, pmap_kernel()->pm_l1->l1_kva, L1_TABLE_SIZE);
+               memcpy(l1pt, pmap_l1_kva(pmap_kernel()), L1_TABLE_SIZE);
 
        if (pmap_extract(pmap_kernel(), (vaddr_t)l1pt,
            &l1->l1_physaddr) == false)
@@ -5455,11 +5465,11 @@
 #ifndef ARM_HAS_VBAR
        /* Set up vector page L1 details, if necessary */
        if (vector_page < KERNEL_BASE) {
-               pm->pm_pl1vec = &pm->pm_l1->l1_kva[L1_IDX(vector_page)];
+               pm->pm_pl1vec = pmap_l1_kva(pm) + L1_IDX(vector_page);
                l2b = pmap_get_l2_bucket(pm, vector_page);
                KDASSERT(l2b != NULL);
                pm->pm_l1vec = l2b->l2b_phys | L1_C_PROTO |
-                   L1_C_DOM(pm->pm_domain);
+                   L1_C_DOM(pmap_domain(pm));
        } else
                pm->pm_pl1vec = NULL;
 #endif
@@ -6746,7 +6756,7 @@
        else
                printf("user pmap (%p): ", pm);
 
-       printf("domain %d, l1 at %p\n", pm->pm_domain, pm->pm_l1->l1_kva);
+       printf("domain %d, l1 at %p\n", pmap_domain(pm), pmap_l1_kva(pm));
 
        l2_va = 0;
        for (i = 0; i < L2_SIZE; i++, l2_va += 0x01000000) {



Home | Main Index | Thread Index | Old Index