PERFORCE change 133991 for review

Rafal Jaworowski raj at FreeBSD.org
Thu Jan 24 01:28:09 PST 2008


http://perforce.freebsd.org/chv.cgi?CH=133991

Change 133991 by raj at raj_mimi on 2008/01/24 09:27:50

	Provide pmap_page_wired_mappings() for the E500 pmap module.

Affected files ...

.. //depot/projects/e500/sys/powerpc/booke/pmap.c#8 edit

Differences ...

==== //depot/projects/e500/sys/powerpc/booke/pmap.c#8 (text+ko) ====

@@ -289,6 +289,7 @@
 		vm_pindex_t, vm_size_t);
 boolean_t	mmu_booke_page_exists_quick(mmu_t, pmap_t, vm_page_t);
 void	mmu_booke_page_init(mmu_t, vm_page_t);
+int	mmu_booke_page_wired_mappings(mmu_t, vm_page_t);
 void	mmu_booke_pinit(mmu_t, pmap_t);
 void	mmu_booke_pinit0(mmu_t, pmap_t);
 void	mmu_booke_protect(mmu_t, pmap_t, vm_offset_t, vm_offset_t, vm_prot_t);
@@ -334,6 +335,7 @@
 	MMUMETHOD(mmu_object_init_pt,	mmu_booke_object_init_pt),
 	MMUMETHOD(mmu_page_exists_quick,mmu_booke_page_exists_quick),
 	MMUMETHOD(mmu_page_init,	mmu_booke_page_init),
+	MMUMETHOD(mmu_page_wired_mappings, mmu_booke_page_wired_mappings),
 	MMUMETHOD(mmu_pinit,		mmu_booke_pinit),
 	MMUMETHOD(mmu_pinit0,		mmu_booke_pinit0),
 	MMUMETHOD(mmu_protect,		mmu_booke_protect),
@@ -2274,6 +2276,33 @@
 	return (FALSE);
 }
 
+/*
+ * Return the number of managed mappings to the given physical page that are
+ * wired.
+ */
+int
+mmu_booke_page_wired_mappings(mmu_t mmu, vm_page_t m)
+{
+	pv_entry_t pv;
+	pte_t *pte;
+	int count = 0;
+
+	if ((m->flags & PG_FICTITIOUS) != 0)
+		return (count);
+	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+
+	TAILQ_FOREACH(pv, &m->md.pv_list, pv_link) {
+		PMAP_LOCK(pv->pv_pmap);
+		if ((pte = pte_find(mmu, pv->pv_pmap, pv->pv_va)) != NULL)
+			if (PTE_ISVALID(pte))
+				if (PTE_ISWIRED(pte))
+					count++;
+		PMAP_UNLOCK(pv->pv_pmap);
+	}
+
+	return (count);
+}
+
 int
 mmu_booke_dev_direct_mapped(mmu_t mmu, vm_offset_t pa, vm_size_t size)
 {


More information about the p4-projects mailing list