projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Converted vm_page bit fields to flags to allow for some optimizations
[unix-history]
/
sys
/
vm
/
swap_pager.c
diff --git
a/sys/vm/swap_pager.c
b/sys/vm/swap_pager.c
index
2fb31df
..
136f5f8
100644
(file)
--- a/
sys/vm/swap_pager.c
+++ b/
sys/vm/swap_pager.c
@@
-37,7
+37,7
@@
*
* from: Utah $Hdr: swap_pager.c 1.4 91/04/30$
* from: @(#)swap_pager.c 7.4 (Berkeley) 5/7/91
*
* from: Utah $Hdr: swap_pager.c 1.4 91/04/30$
* from: @(#)swap_pager.c 7.4 (Berkeley) 5/7/91
- * $Id: swap_pager.c,v 1.
2 1993/10/16 16:20:19 rgrimes
Exp $
+ * $Id: swap_pager.c,v 1.
8 1993/12/19 23:24:15 wollman
Exp $
*/
/*
*/
/*
@@
-47,9
+47,6
@@
* Deal with async writes in a better fashion
*/
* Deal with async writes in a better fashion
*/
-#include "swappager.h"
-#if NSWAPPAGER > 0
-
#include "param.h"
#include "proc.h"
#include "buf.h"
#include "param.h"
#include "proc.h"
#include "buf.h"
@@
-57,14
+54,10
@@
#include "specdev.h"
#include "vnode.h"
#include "malloc.h"
#include "specdev.h"
#include "vnode.h"
#include "malloc.h"
-#include "queue.h"
#include "rlist.h"
#include "rlist.h"
+#include "kernel.h"
-#include "vm_param.h"
-#include "queue.h"
-#include "lock.h"
-#include "vm_prot.h"
-#include "vm_object.h"
+#include "vm.h"
#include "vm_page.h"
#include "vm_pageout.h"
#include "swap_pager.h"
#include "vm_page.h"
#include "vm_pageout.h"
#include "swap_pager.h"
@@
-126,6
+119,8
@@
struct swtab {
#endif
} swtab[NSWSIZES+1];
#endif
} swtab[NSWSIZES+1];
+static int swap_pager_finish(swp_clean_t);
+
#ifdef DEBUG
int swap_pager_pendingio; /* max pending async "clean" ops */
int swap_pager_poip; /* pageouts in progress */
#ifdef DEBUG
int swap_pager_pendingio; /* max pending async "clean" ops */
int swap_pager_poip; /* pageouts in progress */
@@
-348,8
+343,8
@@
swap_pager_dealloc(pager)
s = splbio();
while (swp->sw_poip) {
swp->sw_flags |= SW_WANTED;
s = splbio();
while (swp->sw_poip) {
swp->sw_flags |= SW_WANTED;
- assert_wait((int)swp);
- thread_block();
+ assert_wait((int)swp
, 0
);
+ thread_block(
"swpgde"
);
}
splx(s);
(void) swap_pager_clean(NULL, B_WRITE);
}
splx(s);
(void) swap_pager_clean(NULL, B_WRITE);
@@
-377,6
+372,7
@@
swap_pager_dealloc(pager)
free((caddr_t)pager, M_VMPAGER);
}
free((caddr_t)pager, M_VMPAGER);
}
+int
swap_pager_getpage(pager, m, sync)
vm_pager_t pager;
vm_page_t m;
swap_pager_getpage(pager, m, sync)
vm_pager_t pager;
vm_page_t m;
@@
-389,6
+385,7
@@
swap_pager_getpage(pager, m, sync)
return(swap_pager_io((sw_pager_t)pager->pg_data, m, B_READ));
}
return(swap_pager_io((sw_pager_t)pager->pg_data, m, B_READ));
}
+int
swap_pager_putpage(pager, m, sync)
vm_pager_t pager;
vm_page_t m;
swap_pager_putpage(pager, m, sync)
vm_pager_t pager;
vm_page_t m;
@@
-402,7
+399,7
@@
swap_pager_putpage(pager, m, sync)
#endif
if (pager == NULL) {
(void) swap_pager_clean(NULL, B_WRITE);
#endif
if (pager == NULL) {
(void) swap_pager_clean(NULL, B_WRITE);
- return;
+ return
0
;
}
flags = B_WRITE;
if (!sync)
}
flags = B_WRITE;
if (!sync)
@@
-454,6
+451,7
@@
swap_pager_haspage(pager, offset)
* BOGUS: lower level IO routines expect a KVA so we have to map our
* provided physical page into the KVA to keep them happy.
*/
* BOGUS: lower level IO routines expect a KVA so we have to map our
* provided physical page into the KVA to keep them happy.
*/
+int
swap_pager_io(swp, m, flags)
register sw_pager_t swp;
vm_page_t m;
swap_pager_io(swp, m, flags)
register sw_pager_t swp;
vm_page_t m;
@@
-493,7
+491,7
@@
swap_pager_io(swp, m, flags)
swp->sw_flags |= SW_WANTED;
assert_wait((int)swp);
swp->sw_flags |= SW_WANTED;
assert_wait((int)swp);
- thread_block();
+ thread_block(
"swpgio"
);
}
#else
(void) swap_pager_clean(m, flags&B_READ);
}
#else
(void) swap_pager_clean(m, flags&B_READ);
@@
-589,7
+587,7
@@
swap_pager_io(swp, m, flags)
m, flags);
#endif
bswlist.b_flags |= B_WANTED;
m, flags);
#endif
bswlist.b_flags |= B_WANTED;
-
sleep((caddr_t)&bswlist, PSWP+1
);
+
tsleep((caddr_t)&bswlist, PSWP+1, "pagerio", 0
);
}
bp = bswlist.av_forw;
bswlist.av_forw = bp->av_forw;
}
bp = bswlist.av_forw;
bswlist.av_forw = bp->av_forw;
@@
-666,8
+664,8
@@
swap_pager_io(swp, m, flags)
swap_pager_poip++;
#endif
while ((bp->b_flags & B_DONE) == 0) {
swap_pager_poip++;
#endif
while ((bp->b_flags & B_DONE) == 0) {
- assert_wait((int)bp);
- thread_block();
+ assert_wait((int)bp
, 0
);
+ thread_block(
"swpgio"
);
}
#ifdef DEBUG
if (flags & B_READ)
}
#ifdef DEBUG
if (flags & B_READ)
@@
-686,7
+684,7
@@
swap_pager_io(swp, m, flags)
thread_wakeup((int)&bswlist);
}
if ((flags & B_READ) == 0 && rv == VM_PAGER_OK) {
thread_wakeup((int)&bswlist);
}
if ((flags & B_READ) == 0 && rv == VM_PAGER_OK) {
- m->
clean = TRUE
;
+ m->
flags |= PG_CLEAN
;
pmap_clear_modify(VM_PAGE_TO_PHYS(m));
}
splx(s);
pmap_clear_modify(VM_PAGE_TO_PHYS(m));
}
splx(s);
@@
-793,6
+791,7
@@
swap_pager_clean(m, rw)
return(tspc ? TRUE : FALSE);
}
return(tspc ? TRUE : FALSE);
}
+int
swap_pager_finish(spc)
register swp_clean_t spc;
{
swap_pager_finish(spc)
register swp_clean_t spc;
{
@@
-823,7
+822,7
@@
swap_pager_finish(spc)
if (swpagerdebug & SDB_ANOM)
printf("swap_pager_finish: page %x dirty again\n",
spc->spc_m);
if (swpagerdebug & SDB_ANOM)
printf("swap_pager_finish: page %x dirty again\n",
spc->spc_m);
- spc->spc_m->
busy = FALSE
;
+ spc->spc_m->
flags &= ~PG_BUSY
;
PAGE_WAKEUP(spc->spc_m);
vm_object_unlock(object);
return(1);
PAGE_WAKEUP(spc->spc_m);
vm_object_unlock(object);
return(1);
@@
-837,18
+836,19
@@
swap_pager_finish(spc)
if (spc->spc_flags & SPC_ERROR) {
printf("swap_pager_finish: clean of page %x failed\n",
VM_PAGE_TO_PHYS(spc->spc_m));
if (spc->spc_flags & SPC_ERROR) {
printf("swap_pager_finish: clean of page %x failed\n",
VM_PAGE_TO_PHYS(spc->spc_m));
- spc->spc_m->
laundry = TRUE
;
+ spc->spc_m->
flags |= PG_LAUNDRY
;
} else {
} else {
- spc->spc_m->
clean = TRUE
;
+ spc->spc_m->
flags |= PG_CLEAN
;
pmap_clear_modify(VM_PAGE_TO_PHYS(spc->spc_m));
}
pmap_clear_modify(VM_PAGE_TO_PHYS(spc->spc_m));
}
- spc->spc_m->
busy = FALSE
;
+ spc->spc_m->
flags &= ~PG_BUSY
;
PAGE_WAKEUP(spc->spc_m);
vm_object_unlock(object);
return(1);
}
PAGE_WAKEUP(spc->spc_m);
vm_object_unlock(object);
return(1);
}
+void
swap_pager_iodone(bp)
register struct buf *bp;
{
swap_pager_iodone(bp)
register struct buf *bp;
{
@@
-910,4
+910,3
@@
printf("error %d blkno %d sz %d ", bp->b_error, bp->b_blkno, bp->b_bcount);
thread_wakeup((int) &vm_pages_needed);
splx(s);
}
thread_wakeup((int) &vm_pages_needed);
splx(s);
}
-#endif