summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1997-01-11 07:19:02 +0000
committerdyson <dyson@FreeBSD.org>1997-01-11 07:19:02 +0000
commit73dafb0b2c5ef4f0b641cf8ef4b4608fdc20a6fe (patch)
tree2e2800acffe857cbf99f3f0538c4de8366bc9ff0 /sys
parent95ffdc288ece8dd0c544bca931302f826a351bf5 (diff)
downloadFreeBSD-src-73dafb0b2c5ef4f0b641cf8ef4b4608fdc20a6fe.zip
FreeBSD-src-73dafb0b2c5ef4f0b641cf8ef4b4608fdc20a6fe.tar.gz
Prepare better for multi-platform by eliminating another required
pmap routine (pmap_is_referenced.) Upper level recoded to use pmap_ts_referenced.
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/pmap.c51
-rw-r--r--sys/i386/i386/pmap.c51
-rw-r--r--sys/vm/pmap.h3
-rw-r--r--sys/vm/swap_pager.c10
-rw-r--r--sys/vm/vm_mmap.c6
5 files changed, 20 insertions, 101 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 6555810..ea3ea43 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* from: @(#)pmap.c 7.7 (Berkeley) 5/12/91
- * $Id: pmap.c,v 1.131 1996/11/11 04:20:19 dyson Exp $
+ * $Id: pmap.c,v 1.132 1996/12/29 02:27:07 dyson Exp $
*/
/*
@@ -2789,51 +2789,6 @@ pmap_phys_address(ppn)
}
/*
- * pmap_is_referenced:
- *
- * Return whether or not the specified physical page was referenced
- * by any physical maps.
- */
-boolean_t
-pmap_is_referenced(vm_offset_t pa)
-{
- register pv_entry_t pv;
- pv_table_t *ppv;
- unsigned *pte;
- int s;
-
- if (!pmap_is_managed(pa))
- return FALSE;
-
- ppv = pa_to_pvh(pa);
-
- s = splvm();
- /*
- * Not found, check current mappings returning immediately if found.
- */
- for (pv = TAILQ_FIRST(&ppv->pv_list);
- pv;
- pv = TAILQ_NEXT(pv, pv_list)) {
-
- /*
- * if the bit being tested is the modified bit, then
- * mark clean_map and ptes as never
- * modified.
- */
- if (!pmap_track_modified(pv->pv_va))
- continue;
-
- pte = pmap_pte_quick(pv->pv_pmap, pv->pv_va);
- if ((int) *pte & PG_A) {
- splx(s);
- return TRUE;
- }
- }
- splx(s);
- return (FALSE);
-}
-
-/*
* pmap_ts_referenced:
*
* Return the count of reference bits for a page, clearing all of them.
@@ -3031,8 +2986,10 @@ pmap_mincore(pmap, addr)
* Referenced by someone
*/
else if ((PHYS_TO_VM_PAGE(pa)->flags & PG_REFERENCED) ||
- pmap_is_referenced(pa))
+ pmap_ts_referenced(pa)) {
val |= MINCORE_REFERENCED_OTHER;
+ PHYS_TO_VM_PAGE(pa)->flags |= PG_REFERENCED;
+ }
}
return val;
}
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 6555810..ea3ea43 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* from: @(#)pmap.c 7.7 (Berkeley) 5/12/91
- * $Id: pmap.c,v 1.131 1996/11/11 04:20:19 dyson Exp $
+ * $Id: pmap.c,v 1.132 1996/12/29 02:27:07 dyson Exp $
*/
/*
@@ -2789,51 +2789,6 @@ pmap_phys_address(ppn)
}
/*
- * pmap_is_referenced:
- *
- * Return whether or not the specified physical page was referenced
- * by any physical maps.
- */
-boolean_t
-pmap_is_referenced(vm_offset_t pa)
-{
- register pv_entry_t pv;
- pv_table_t *ppv;
- unsigned *pte;
- int s;
-
- if (!pmap_is_managed(pa))
- return FALSE;
-
- ppv = pa_to_pvh(pa);
-
- s = splvm();
- /*
- * Not found, check current mappings returning immediately if found.
- */
- for (pv = TAILQ_FIRST(&ppv->pv_list);
- pv;
- pv = TAILQ_NEXT(pv, pv_list)) {
-
- /*
- * if the bit being tested is the modified bit, then
- * mark clean_map and ptes as never
- * modified.
- */
- if (!pmap_track_modified(pv->pv_va))
- continue;
-
- pte = pmap_pte_quick(pv->pv_pmap, pv->pv_va);
- if ((int) *pte & PG_A) {
- splx(s);
- return TRUE;
- }
- }
- splx(s);
- return (FALSE);
-}
-
-/*
* pmap_ts_referenced:
*
* Return the count of reference bits for a page, clearing all of them.
@@ -3031,8 +2986,10 @@ pmap_mincore(pmap, addr)
* Referenced by someone
*/
else if ((PHYS_TO_VM_PAGE(pa)->flags & PG_REFERENCED) ||
- pmap_is_referenced(pa))
+ pmap_ts_referenced(pa)) {
val |= MINCORE_REFERENCED_OTHER;
+ PHYS_TO_VM_PAGE(pa)->flags |= PG_REFERENCED;
+ }
}
return val;
}
diff --git a/sys/vm/pmap.h b/sys/vm/pmap.h
index 2144280..5daf4c0 100644
--- a/sys/vm/pmap.h
+++ b/sys/vm/pmap.h
@@ -61,7 +61,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: pmap.h,v 1.15 1996/09/08 20:44:31 dyson Exp $
+ * $Id: pmap.h,v 1.16 1996/10/15 03:16:43 dyson Exp $
*/
/*
@@ -100,7 +100,6 @@ vm_offset_t pmap_extract __P((pmap_t, vm_offset_t));
void pmap_growkernel __P((vm_offset_t));
void pmap_init __P((vm_offset_t, vm_offset_t));
boolean_t pmap_is_modified __P((vm_offset_t pa));
-boolean_t pmap_is_referenced __P((vm_offset_t pa));
boolean_t pmap_ts_referenced __P((vm_offset_t pa));
void pmap_kenter __P((vm_offset_t, vm_offset_t));
void pmap_kremove __P((vm_offset_t));
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index c212178..ad29d97 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -39,7 +39,7 @@
* from: Utah $Hdr: swap_pager.c 1.4 91/04/30$
*
* @(#)swap_pager.c 8.9 (Berkeley) 3/21/94
- * $Id: swap_pager.c,v 1.71 1996/09/08 20:44:33 dyson Exp $
+ * $Id: swap_pager.c,v 1.72 1996/10/12 20:09:44 bde Exp $
*/
/*
@@ -1077,7 +1077,9 @@ swap_pager_getpages(object, m, count, reqpage)
pagedaemon_wakeup();
swap_pager_needflags &= ~(SWAP_FREE_NEEDED|SWAP_FREE_NEEDED_BY_PAGEOUT);
if (rv == VM_PAGER_OK) {
+#if notneeded
pmap_clear_modify(VM_PAGE_TO_PHYS(m[reqpage]));
+#endif
m[reqpage]->valid = VM_PAGE_BITS_ALL;
m[reqpage]->dirty = 0;
}
@@ -1091,7 +1093,9 @@ swap_pager_getpages(object, m, count, reqpage)
*/
if (rv == VM_PAGER_OK) {
for (i = 0; i < count; i++) {
+#if notneeded
pmap_clear_modify(VM_PAGE_TO_PHYS(m[i]));
+#endif
m[i]->dirty = 0;
m[i]->flags &= ~PG_ZERO;
if (i != reqpage) {
@@ -1476,7 +1480,7 @@ retryfree:
*/
if ((m[i]->queue != PQ_ACTIVE) &&
((m[i]->flags & (PG_WANTED|PG_REFERENCED)) ||
- pmap_is_referenced(VM_PAGE_TO_PHYS(m[i])))) {
+ pmap_ts_referenced(VM_PAGE_TO_PHYS(m[i])))) {
vm_page_activate(m[i]);
}
}
@@ -1583,7 +1587,7 @@ swap_pager_finish(spc)
pmap_clear_modify(VM_PAGE_TO_PHYS(spc->spc_m[i]));
spc->spc_m[i]->dirty = 0;
if ((spc->spc_m[i]->queue != PQ_ACTIVE) &&
- ((spc->spc_m[i]->flags & PG_WANTED) || pmap_is_referenced(VM_PAGE_TO_PHYS(spc->spc_m[i]))))
+ ((spc->spc_m[i]->flags & PG_WANTED) || pmap_ts_referenced(VM_PAGE_TO_PHYS(spc->spc_m[i]))))
vm_page_activate(spc->spc_m[i]);
}
}
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c
index abd6ff6..8165029 100644
--- a/sys/vm/vm_mmap.c
+++ b/sys/vm/vm_mmap.c
@@ -38,7 +38,7 @@
* from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$
*
* @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94
- * $Id: vm_mmap.c,v 1.56 1996/12/28 22:40:44 dyson Exp $
+ * $Id: vm_mmap.c,v 1.57 1996/12/30 05:31:15 dyson Exp $
*/
/*
@@ -697,8 +697,10 @@ mincore(p, uap, retval)
pmap_is_modified(VM_PAGE_TO_PHYS(m)))
mincoreinfo |= MINCORE_MODIFIED_OTHER;
if ((m->flags & PG_REFERENCED) ||
- pmap_is_referenced(VM_PAGE_TO_PHYS(m)))
+ pmap_ts_referenced(VM_PAGE_TO_PHYS(m))) {
+ m->flags |= PG_REFERENCED;
mincoreinfo |= MINCORE_REFERENCED_OTHER;
+ }
}
}
OpenPOWER on IntegriCloud