Hi,
inline pmap_get_l2_bucket dedup.
-Artturi
diff --git a/sys/arch/arm/arm/pmap7.c b/sys/arch/arm/arm/pmap7.c
index eea49fe..513ff09 100644
--- a/sys/arch/arm/arm/pmap7.c
+++ b/sys/arch/arm/arm/pmap7.c
@@ -398,7 +398,6 @@ u_int pmap_modify_pv(struct vm_page *,
pmap_t, vaddr_t,
void pmap_alloc_l1(pmap_t, int);
void pmap_free_l1(pmap_t);
-struct l2_bucket *pmap_get_l2_bucket(pmap_t, vaddr_t);
struct l2_bucket *pmap_alloc_l2_bucket(pmap_t, vaddr_t);
void pmap_free_l2_bucket(pmap_t, struct l2_bucket *, u_int);
void pmap_l2ptp_ctor(void *);
@@ -473,7 +472,7 @@ pmap_tlb_flushD(pmap_t pm)
* Returns a pointer to the L2 bucket associated with the specified pmap
* and VA, or NULL if no L2 bucket exists for the address.
*/
-struct l2_bucket *
+static __inline struct l2_bucket *
pmap_get_l2_bucket(pmap_t pm, vaddr_t va)
{
struct l2_dtable *l2;
@@ -1687,7 +1686,7 @@ pmap_kremove(vaddr_t va, vsize_t len)
boolean_t
pmap_extract(pmap_t pm, vaddr_t va, paddr_t *pap)
{
- struct l2_dtable *l2;
+ struct l2_bucket *l2b;
pd_entry_t *pl1pd, l1pd;
pt_entry_t *ptep, pte;
paddr_t pa;
@@ -1710,12 +1709,9 @@ pmap_extract(pmap_t pm, vaddr_t va, paddr_t *pap)
* descriptor as an indication that a mapping exists.
* We have to look it up in the L2 dtable.
*/
- l2 = pm->pm_l2[L2_IDX(l1idx)];
-
- if (l2 == NULL ||
- (ptep = l2->l2_bucket[L2_BUCKET(l1idx)].l2b_kva) == NULL) {
+ l2b = pmap_get_l2_bucket(pm, va);
+ if (l2b == NULL || (ptep = l2b->l2b_kva) == NULL)
return (FALSE);
- }
ptep = &ptep[l2pte_index(va)];
pte = *ptep;
@@ -1924,7 +1920,6 @@ pmap_clear_reference(struct vm_page *pg)
int
pmap_fault_fixup(pmap_t pm, vaddr_t va, vm_prot_t ftype, int user)
{
- struct l2_dtable *l2;
struct l2_bucket *l2b;
pd_entry_t *pl1pd, l1pd;
pt_entry_t *ptep, pte;
@@ -1939,17 +1934,9 @@ pmap_fault_fixup(pmap_t pm, vaddr_t va, vm_prot_t ftype,
int user)
* has no business accessing it.
*
* Note: This will catch userland processes trying to access
- * kernel addresses.
- */
- l2 = pm->pm_l2[L2_IDX(l1idx)];
- if (l2 == NULL)
- goto out;
-
- /*
- * Likewise if there is no L2 descriptor table
+ * kernel addresses. Likewise if there is no L2 descriptor table.
*/
- l2b = &l2->l2_bucket[L2_BUCKET(l1idx)];
- if (l2b->l2b_kva == NULL)
+ if ((l2b = pmap_get_l2_bucket(pm, va)) == NULL)
goto out;
/*
@@ -2559,7 +2546,7 @@ pmap_set_pcb_pagedir(pmap_t pm, struct pcb *pcb)
boolean_t
pmap_get_pde_pte(pmap_t pm, vaddr_t va, pd_entry_t **pdp, pt_entry_t **ptp)
{
- struct l2_dtable *l2;
+ struct l2_bucket *l2b;
pd_entry_t *pl1pd, l1pd;
pt_entry_t *ptep;
u_short l1idx;
@@ -2579,12 +2566,9 @@ pmap_get_pde_pte(pmap_t pm, vaddr_t va, pd_entry_t
**pdp, pt_entry_t **ptp)
if (pm->pm_l2 == NULL)
return (FALSE);
- l2 = pm->pm_l2[L2_IDX(l1idx)];
-
- if (l2 == NULL ||
- (ptep = l2->l2_bucket[L2_BUCKET(l1idx)].l2b_kva) == NULL) {
+ l2b = pmap_get_l2_bucket(pm, va);
+ if (l2b == NULL || (ptep = l2b->l2b_kva) == NULL)
return (FALSE);
- }
*ptp = &ptep[l2pte_index(va)];
return (TRUE);