Simple cleanups for amd64 pmap

- use __func__ in panics/printfs (fixes some out of sync function names)

- tell the compiler that code paths where we print diagnostics are 
unlikely

- use pmap_valid_entry() in some places

- KERNSPACE is not used anywhere


diff --git a/sys/arch/amd64/amd64/pmap.c b/sys/arch/amd64/amd64/pmap.c
index cd395e1..05cbd3e 100644
--- a/sys/arch/amd64/amd64/pmap.c
+++ b/sys/arch/amd64/amd64/pmap.c
@@ -436,7 +436,7 @@ pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot)
 #ifdef LARGEPAGES
        /* XXX For now... */
        if (opte & PG_PS)
-               panic("pmap_kenter_pa: PG_PS");
+               panic("%s: PG_PS", __func__);
 #endif
        if (pmap_valid_entry(opte)) {
                if (pa & PMAP_NOCACHE && (opte & PG_N) == 0)
@@ -899,7 +899,7 @@ pmap_get_ptp(struct pmap *pmap, vaddr_t va, pd_entry_t 
**pdes)
                                pptp = pmap_find_ptp(pmap, va, ppa, i);
 #ifdef DIAGNOSTIC
                        if (pptp == NULL)
-                               panic("pde page disappeared");
+                               panic("%s: pde page disappeared", __func__);
 #endif
                        pptp->wire_count++;
                }
@@ -915,7 +915,7 @@ pmap_get_ptp(struct pmap *pmap, vaddr_t va, pd_entry_t 
**pdes)
                if (ptp == NULL) {
                        printf("va %lx ppa %lx\n", (unsigned long)va,
                            (unsigned long)ppa);
-                       panic("pmap_get_ptp: unmanaged user PTP");
+                       panic("%s: unmanaged user PTP", __func__);
                }
 #endif
        }
@@ -1031,8 +1031,8 @@ pmap_destroy(struct pmap *pmap)
         */
 
 #ifdef DIAGNOSTIC
-       if (pmap->pm_cpus != 0)
-               printf("pmap_destroy: pmap %p cpus=0x%llx\n",
+       if (__predict_false(pmap->pm_cpus != 0))
+               printf("%s: pmap %p cpus=0x%llx\n", __func__,
                    (void *)pmap, pmap->pm_cpus);
 #endif
 
@@ -1132,7 +1132,7 @@ pmap_pdes_valid(vaddr_t va, pd_entry_t **pdes, pd_entry_t 
*lastpde)
        for (i = PTP_LEVELS; i > 1; i--) {
                index = pl_i(va, i);
                pde = pdes[i - 2][index];
-               if ((pde & PG_V) == 0)
+               if (!pmap_valid_entry(pde))
                        return FALSE;
        }
        if (lastpde != NULL)
@@ -1171,7 +1171,7 @@ pmap_extract(struct pmap *pmap, vaddr_t va, paddr_t *pap)
        pte = ptes[pl1_i(va)];
        pmap_unmap_ptes(pmap);
 
-       if (__predict_true((pte & PG_V) != 0)) {
+       if (__predict_true(pmap_valid_entry(pte))) {
                if (pap != NULL)
                        *pap = (pte & PG_FRAME) | (va & 0xfff);
                return (TRUE);
@@ -1321,16 +1321,16 @@ pmap_remove_ptes(struct pmap *pmap, struct vm_page 
*ptp, vaddr_t ptpva,
                if ((opte & PG_PVLIST) == 0) {
 #ifdef DIAGNOSTIC
                        if (pg != NULL)
-                               panic("pmap_remove_ptes: managed page without "
-                                     "PG_PVLIST for 0x%lx", startva);
+                               panic("%s: managed page without PG_PVLIST "
+                                     "for 0x%lx", __func__, startva);
 #endif
                        continue;
                }
 
 #ifdef DIAGNOSTIC
                if (pg == NULL)
-                       panic("pmap_remove_ptes: unmanaged page marked "
-                             "PG_PVLIST, va = 0x%lx, pa = 0x%lx",
+                       panic("%s: unmanaged page marked PG_PVLIST, "
+                             "va = 0x%lx, pa = 0x%lx", __func__,
                              startva, (u_long)(opte & PG_FRAME));
 #endif
 
@@ -1388,17 +1388,16 @@ pmap_remove_pte(struct pmap *pmap, struct vm_page *ptp, 
pt_entry_t *pte,
        if ((opte & PG_PVLIST) == 0) {
 #ifdef DIAGNOSTIC
                if (pg != NULL)
-                       panic("pmap_remove_pte: managed page without "
-                             "PG_PVLIST for 0x%lx", va);
+                       panic("%s: managed page without PG_PVLIST for 0x%lx",
+                             __func__, va);
 #endif
                return(TRUE);
        }
 
 #ifdef DIAGNOSTIC
        if (pg == NULL)
-               panic("pmap_remove_pte: unmanaged page marked "
-                   "PG_PVLIST, va = 0x%lx, pa = 0x%lx", va,
-                   (u_long)(opte & PG_FRAME));
+               panic("%s: unmanaged page marked PG_PVLIST, va = 0x%lx, "
+                     "pa = 0x%lx", __func__, va, (u_long)(opte & PG_FRAME));
 #endif
 
        /* sync R/M bits */
@@ -1464,8 +1463,8 @@ pmap_do_remove(struct pmap *pmap, vaddr_t sva, vaddr_t 
eva, int flags)
                                ptp = pmap_find_ptp(pmap, sva, ptppa, 1);
 #ifdef DIAGNOSTIC
                                if (ptp == NULL)
-                                       panic("pmap_remove: unmanaged "
-                                             "PTP detected");
+                                       panic("%s: unmanaged PTP detected",
+                                             __func__);
 #endif
                        }
 
@@ -1537,8 +1536,7 @@ pmap_do_remove(struct pmap *pmap, vaddr_t sva, vaddr_t 
eva, int flags)
                        ptp = pmap_find_ptp(pmap, va, ptppa, 1);
 #ifdef DIAGNOSTIC
                        if (ptp == NULL)
-                               panic("pmap_remove: unmanaged PTP "
-                                     "detected");
+                               panic("%s: unmanaged PTP detected", __func__);
 #endif
                }
                pmap_remove_ptes(pmap, ptp,
@@ -1596,14 +1594,14 @@ pmap_page_remove(struct vm_page *pg)
 #ifdef DIAGNOSTIC
                if (pve->pv_ptp && pmap_pdes_valid(pve->pv_va, pdes, &pde) &&
                   (pde & PG_FRAME) != VM_PAGE_TO_PHYS(pve->pv_ptp)) {
-                       printf("pmap_page_remove: pg=%p: va=%lx, pv_ptp=%p\n",
+                       printf("%s: pg=%p: va=%lx, pv_ptp=%p\n", __func__,
                               pg, pve->pv_va, pve->pv_ptp);
-                       printf("pmap_page_remove: PTP's phys addr: "
-                              "actual=%lx, recorded=%lx\n",
+                       printf("%s: PTP's phys addr: "
+                              "actual=%lx, recorded=%lx\n", __func__,
                               (unsigned long)(pde & PG_FRAME),
                                VM_PAGE_TO_PHYS(pve->pv_ptp));
-                       panic("pmap_page_remove: mapped managed page has "
-                             "invalid pv_ptp field");
+                       panic("%s: mapped managed page has "
+                             "invalid pv_ptp field", __func__);
                }
 #endif
 
@@ -1709,8 +1707,7 @@ pmap_clear_attrs(struct vm_page *pg, unsigned long 
clearbits)
                pmap_map_ptes(pve->pv_pmap, &ptes, &pdes);
 #ifdef DIAGNOSTIC
                if (!pmap_pdes_valid(pve->pv_va, pdes, NULL))
-                       panic("pmap_change_attrs: mapping without PTP "
-                             "detected");
+                       panic("%s: mapping without PTP detected", __func__);
 #endif
 
                opte = ptes[pl1_i(pve->pv_va)];
@@ -1801,14 +1798,14 @@ pmap_write_protect(struct pmap *pmap, vaddr_t sva, 
vaddr_t eva, vm_prot_t prot)
 
 #ifdef DIAGNOSTIC
                if (va >= VM_MAXUSER_ADDRESS && va < VM_MAX_ADDRESS)
-                       panic("pmap_write_protect: PTE space");
+                       panic("%s: PTE space", __func__);
 #endif
 
                spte = &ptes[pl1_i(va)];
                epte = &ptes[pl1_i(blockend)];
 
                for (/*null */; spte < epte ; spte++) {
-                       if (!(*spte & PG_V))
+                       if (!pmap_valid_entry(*spte))
                                continue;
                        pmap_pte_clearbits(spte, PG_RW);
                        pmap_pte_setbits(spte, nx);
@@ -1847,23 +1844,23 @@ pmap_unwire(struct pmap *pmap, vaddr_t va)
 
 #ifdef DIAGNOSTIC
                if (!pmap_valid_entry(ptes[pl1_i(va)]))
-                       panic("pmap_unwire: invalid (unmapped) va 0x%lx", va);
+                       panic("%s: invalid (unmapped) va 0x%lx", __func__, va);
 #endif
-               if ((ptes[pl1_i(va)] & PG_W) != 0) {
+               if (__predict_true((ptes[pl1_i(va)] & PG_W) != 0)) {
                        pmap_pte_clearbits(&ptes[pl1_i(va)], PG_W);
                        pmap->pm_stats.wired_count--;
                }
 #ifdef DIAGNOSTIC
                else {
-                       printf("pmap_unwire: wiring for pmap %p va 0x%lx "
-                              "didn't change!\n", pmap, va);
+                       printf("%s: wiring for pmap %p va 0x%lx "
+                              "didn't change!\n", __func__, pmap, va);
                }
 #endif
                pmap_unmap_ptes(pmap);
        }
 #ifdef DIAGNOSTIC
        else {
-               panic("pmap_unwire: invalid PDE");
+               panic("%s: invalid PDE", __func__);
        }
 #endif
 }
@@ -1923,12 +1920,12 @@ pmap_enter(struct pmap *pmap, vaddr_t va, paddr_t pa, 
vm_prot_t prot, int flags)
 
 #ifdef DIAGNOSTIC
        if (va == (vaddr_t) PDP_BASE || va == (vaddr_t) APDP_BASE)
-               panic("pmap_enter: trying to map over PDP/APDP!");
+               panic("%s: trying to map over PDP/APDP!", __func__);
 
        /* sanity check: kernel PTPs should already have been pre-allocated */
        if (va >= VM_MIN_KERNEL_ADDRESS &&
            !pmap_valid_entry(pmap->pm_pdir[pl_i(va, PTP_LEVELS)]))
-               panic("pmap_enter: missing kernel PTP for va %lx!", va);
+               panic("%s: missing kernel PTP for va %lx!", __func__, va);
 
 #endif
 
@@ -1949,7 +1946,7 @@ pmap_enter(struct pmap *pmap, vaddr_t va, paddr_t pa, 
vm_prot_t prot, int flags)
                                error = ENOMEM;
                                goto out;
                        }
-                       panic("pmap_enter: get ptp failed");
+                       panic("%s: get ptp failed", __func__);
                }
        }
        opte = ptes[pl1_i(va)];         /* old PTE */
@@ -1986,18 +1983,18 @@ pmap_enter(struct pmap *pmap, vaddr_t va, paddr_t pa, 
vm_prot_t prot, int flags)
                                pg = PHYS_TO_VM_PAGE(pa);
 #ifdef DIAGNOSTIC
                                if (pg == NULL)
-                                       panic("pmap_enter: same pa PG_PVLIST "
+                                       panic("%s: same pa PG_PVLIST "
                                              "mapping with unmanaged page "
-                                             "pa = 0x%lx (0x%lx)", pa,
-                                             atop(pa));
+                                             "pa = 0x%lx (0x%lx)", __func__,
+                                             pa, atop(pa));
 #endif
                                pmap_sync_flags_pte(pg, opte);
                        } else {
 #ifdef DIAGNOSTIC
                                if (PHYS_TO_VM_PAGE(pa) != NULL)
-                                       panic("pmap_enter: same pa, managed "
+                                       panic("%s: same pa, managed "
                                            "page, no PG_VLIST pa: 0x%lx\n",
-                                           pa);
+                                           __func__, pa);
 #endif
                        }
                        goto enter_now;
@@ -2016,9 +2013,9 @@ pmap_enter(struct pmap *pmap, vaddr_t va, paddr_t pa, 
vm_prot_t prot, int flags)
                        pg = PHYS_TO_VM_PAGE(opte & PG_FRAME);
 #ifdef DIAGNOSTIC
                        if (pg == NULL)
-                               panic("pmap_enter: PG_PVLIST mapping with "
-                                     "unmanaged page "
-                                     "pa = 0x%lx (0x%lx)", pa, atop(pa));
+                               panic("%s: PG_PVLIST mapping with unmanaged "
+                                     "page pa = 0x%lx (0x%lx)",
+                                     __func__, pa, atop(pa));
 #endif
                        pmap_sync_flags_pte(pg, opte);
                        pve = pmap_remove_pv(pg, pmap, va);
@@ -2055,7 +2052,7 @@ pmap_enter(struct pmap *pmap, vaddr_t va, paddr_t pa, 
vm_prot_t prot, int flags)
                                        error = ENOMEM;
                                        goto out;
                                }
-                               panic("pmap_enter: no pv entries available");
+                               panic("%s: no pv entries available", __func__);
                        }
                }
                pmap_enter_pv(pg, pve, pmap, va, ptp);
@@ -2076,7 +2073,7 @@ enter_now:
                ptp->wire_count += ptpdelta;
 
        if (pg != PHYS_TO_VM_PAGE(pa))
-               panic("wtf?");
+               panic("%s: wtf?", __func__);
 
        npte = pa | protection_codes[prot] | PG_V;
        if (pg != NULL) {
@@ -2109,7 +2106,7 @@ enter_now:
         * If we changed anything other than modified/used bits,
         * flush the TLB.  (is this overkill?)
         */
-       if (opte & PG_V) {
+       if (pmap_valid_entry(opte)) {
                if (nocache && (opte & PG_N) == 0)
                        wbinvd();
                pmap_tlb_shootpage(pmap, va);
@@ -2147,7 +2144,7 @@ pmap_get_physpage(vaddr_t va, int level, paddr_t *paddrp)
                                    ptp_va2o(va, level), NULL,
                                    UVM_PGA_USERESERVE|UVM_PGA_ZERO);
                if (ptp == NULL)
-                       panic("pmap_get_physpage: out of memory");
+                       panic("%s: out of memory", __func__);
                atomic_clearbits_int(&ptp->pg_flags, PG_BUSY);
                ptp->wire_count = 1;
                *paddrp = VM_PAGE_TO_PHYS(ptp);
@@ -2231,7 +2228,7 @@ pmap_growkernel(vaddr_t maxkvaddr)
                 * XXX only need to check toplevel.
                 */
                if (target_nptp > nkptpmax[i])
-                       panic("out of KVA space");
+                       panic("%s: out of KVA space", __func__);
                needed_kptp[i] = target_nptp - nkptp[i] + 1;
        }
 
@@ -2287,7 +2284,7 @@ pmap_steal_memory(vsize_t size, vaddr_t *start, vaddr_t 
*end)
                        break;
        }
        if (segno == vm_nphysseg) {
-               panic("pmap_steal_memory: out of memory");
+               panic("%s: out of memory", __func__);
        } else {
                if (seg->avail_start == seg->start) {
                        pa = ptoa(seg->avail_start);
@@ -2305,7 +2302,7 @@ pmap_steal_memory(vsize_t size, vaddr_t *start, vaddr_t 
*end)
                 */
                if (seg->start == seg->end) {
                        if (vm_nphysseg-- == 1)
-                               panic("pmap_steal_memory: out of memory");
+                               panic("%s: out of memory", __func__);
                        while (segno < vm_nphysseg) {
                                seg[0] = seg[1]; /* struct copy */
                                seg++;
@@ -2444,7 +2441,7 @@ pmap_tlb_shootpage(struct pmap *pm, vaddr_t va)
                        if ((mask & (1ULL << ci->ci_cpuid)) == 0)
                                continue;
                        if (x86_fast_ipi(ci, LAPIC_IPI_INVLPG) != 0)
-                               panic("pmap_tlb_shootpage: ipi failed");
+                               panic("%s: ipi failed", __func__);
                }
                splx(s);
        }
@@ -2483,7 +2480,7 @@ pmap_tlb_shootrange(struct pmap *pm, vaddr_t sva, vaddr_t 
eva)
                        if ((mask & (1ULL << ci->ci_cpuid)) == 0)
                                continue;
                        if (x86_fast_ipi(ci, LAPIC_IPI_INVLRANGE) != 0)
-                               panic("pmap_tlb_shootrange: ipi failed");
+                               panic("%s: ipi failed", __func__);
                }
                splx(s);
        }
@@ -2520,7 +2517,7 @@ pmap_tlb_shoottlb(void)
                        if ((mask & (1ULL << ci->ci_cpuid)) == 0)
                                continue;
                        if (x86_fast_ipi(ci, LAPIC_IPI_INVLTLB) != 0)
-                               panic("pmap_tlb_shoottlb: ipi failed");
+                               panic("%s: ipi failed", __func__);
                }
                splx(s);
        }
diff --git a/sys/arch/amd64/include/pmap.h b/sys/arch/amd64/include/pmap.h
index b3ba005..3796fd3 100644
--- a/sys/arch/amd64/include/pmap.h
+++ b/sys/arch/amd64/include/pmap.h
@@ -218,8 +218,6 @@
 
 #define NTOPLEVEL_PDES         (PAGE_SIZE / (sizeof (pd_entry_t)))
 
-#define KERNSPACE              (NKL4_ENTRIES * NBPD_L4)
-
 #define NPDPG                  (PAGE_SIZE / sizeof (pd_entry_t))
 
 /*

Reply via email to