PERFORCE change 129378 for review

Oleksandr Tymoshenko gonzo at FreeBSD.org
Thu Nov 22 05:27:18 PST 2007


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

Change 129378 by gonzo at gonzo_jeeves on 2007/11/22 13:26:16

	o Add pv_wired boolean field to pv_entry_t to mark wired entries.
	o Add pmap_page_wired_mappings to pmap module

Affected files ...

.. //depot/projects/mips2/src/sys/mips/include/pmap.h#9 edit
.. //depot/projects/mips2/src/sys/mips/mips/pmap.c#29 edit

Differences ...

==== //depot/projects/mips2/src/sys/mips/include/pmap.h#9 (text+ko) ====

@@ -204,6 +204,7 @@
 	TAILQ_ENTRY(pv_entry)	pv_list;
 	TAILQ_ENTRY(pv_entry)	pv_plist;
 	vm_page_t	pv_ptem;	/* VM page for pte */
+	boolean_t	pv_wired;	/* whether this entry is wired */
 } *pv_entry_t;
 
 #define	pmap_page_is_mapped(m)	(!TAILQ_EMPTY(&(m)->md.pv_list))

==== //depot/projects/mips2/src/sys/mips/mips/pmap.c#29 (text+ko) ====

@@ -197,7 +197,7 @@
 static int pmap_remove_pte(pmap_t pmap, pt_entry_t* ptq, vm_offset_t sva);
 static int pmap_remove_entry(struct pmap *pmap, vm_page_t m, vm_offset_t va);
 static void pmap_insert_entry(pmap_t pmap, vm_offset_t va,
-		vm_page_t mpte, vm_page_t m);
+		vm_page_t mpte, vm_page_t m, boolean_t wired);
 
 /*
  * Given a map and a machine independent protection code,
@@ -964,7 +964,8 @@
  * (pmap, va).
  */
 static void
-pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t mpte, vm_page_t m)
+pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t mpte, vm_page_t m,
+    boolean_t wired)
 {
 
 	pv_entry_t pv;
@@ -975,6 +976,7 @@
 	pv->pv_va = va;
 	pv->pv_pmap = pmap;
 	pv->pv_ptem = mpte;
+	pv->pv_wired = wired;
 
 	TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist);
 	TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
@@ -1303,7 +1305,7 @@
 	if (pmap_initialized && 
 	    ((m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0) && 
 	    (!has_mapping)) {
-		pmap_insert_entry(pmap, va, mpte, m);
+		pmap_insert_entry(pmap, va, mpte, m, wired);
 		vm_page_lock_queues();
 		vm_page_flag_set(m, PG_REFERENCED);
 		vm_page_unlock_queues();
@@ -1915,3 +1917,27 @@
 
 	return addr;
 }
+
+/*
+ *	pmap_page_wired_mappings:
+ *
+ *	Return the number of managed mappings to the given physical page
+ *	that are wired.
+ */
+int
+pmap_page_wired_mappings(vm_page_t m)
+{
+	pv_entry_t pv;
+	int count;
+
+	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_list)
+		if (pv->pv_wired)
+			count++;
+	return (count);
+}
+
+


More information about the p4-projects mailing list