summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortedu <tedu@openbsd.org>2014-12-23 04:47:30 +0000
committertedu <tedu@openbsd.org>2014-12-23 04:47:30 +0000
commit727700ec1fedcdcd0f7fdefe0b4c53f046b5a206 (patch)
treefd33b73a1b87b2ae4acfa7f1bc2271c5cb92cd97
parenton-media chroot went away a while back (diff)
downloadwireguard-openbsd-727700ec1fedcdcd0f7fdefe0b4c53f046b5a206.tar.xz
wireguard-openbsd-727700ec1fedcdcd0f7fdefe0b4c53f046b5a206.zip
I don't like these macros, they obscure the code.
We can use pool_setipl instead of doing the dance ourselves. The bufpool is already setipl, we don't need to dance at all. We should zero the buf. ok deraadt dlg
-rw-r--r--sys/uvm/uvm_swap.c41
1 files changed, 11 insertions, 30 deletions
diff --git a/sys/uvm/uvm_swap.c b/sys/uvm/uvm_swap.c
index 44afd37f053..4418c716280 100644
--- a/sys/uvm/uvm_swap.c
+++ b/sys/uvm/uvm_swap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvm_swap.c,v 1.131 2014/11/18 02:37:31 tedu Exp $ */
+/* $OpenBSD: uvm_swap.c,v 1.132 2014/12/23 04:47:30 tedu Exp $ */
/* $NetBSD: uvm_swap.c,v 1.40 2000/11/17 11:39:39 mrg Exp $ */
/*
@@ -201,25 +201,6 @@ struct vndbuf {
struct pool vndxfer_pool;
struct pool vndbuf_pool;
-#define getvndxfer(vnx) do { \
- int s = splbio(); \
- vnx = pool_get(&vndxfer_pool, PR_WAITOK); \
- splx(s); \
-} while (0)
-
-#define putvndxfer(vnx) { \
- pool_put(&vndxfer_pool, (void *)(vnx)); \
-}
-
-#define getvndbuf(vbp) do { \
- int s = splbio(); \
- vbp = pool_get(&vndbuf_pool, PR_WAITOK); \
- splx(s); \
-} while (0)
-
-#define putvndbuf(vbp) { \
- pool_put(&vndbuf_pool, (void *)(vbp)); \
-}
/*
* local variables
@@ -298,8 +279,10 @@ uvm_swap_init(void)
/* allocate pools for structures used for swapping to files. */
pool_init(&vndxfer_pool, sizeof(struct vndxfer), 0, 0, 0, "swp vnx",
NULL);
+ pool_setipl(&vndxfer_pool, IPL_BIO);
pool_init(&vndbuf_pool, sizeof(struct vndbuf), 0, 0, 0, "swp vnd",
NULL);
+ pool_setipl(&vndbuf_pool, IPL_BIO);
/* Setup the initial swap partition */
swapmount();
@@ -1135,7 +1118,7 @@ sw_reg_strategy(struct swapdev *sdp, struct buf *bp, int bn)
* allocate a vndxfer head for this transfer and point it to
* our buffer.
*/
- getvndxfer(vnx);
+ vnx = pool_get(&vndxfer_pool, PR_WAITOK);
vnx->vx_flags = VX_BUSY;
vnx->vx_error = 0;
vnx->vx_pending = 0;
@@ -1205,7 +1188,7 @@ sw_reg_strategy(struct swapdev *sdp, struct buf *bp, int bn)
* at the front of the nbp structure so that you can
* cast pointers between the two structure easily.
*/
- getvndbuf(nbp);
+ nbp = pool_get(&vndbuf_pool, PR_WAITOK);
nbp->vb_buf.b_flags = bp->b_flags | B_CALL;
nbp->vb_buf.b_bcount = sz;
nbp->vb_buf.b_bufsize = sz;
@@ -1250,7 +1233,7 @@ sw_reg_strategy(struct swapdev *sdp, struct buf *bp, int bn)
s = splbio();
if (vnx->vx_error != 0) {
- putvndbuf(nbp);
+ pool_put(&vndbuf_pool, nbp);
goto out;
}
vnx->vx_pending++;
@@ -1279,7 +1262,7 @@ out: /* Arrive here at splbio */
bp->b_error = vnx->vx_error;
bp->b_flags |= B_ERROR;
}
- putvndxfer(vnx);
+ pool_put(&vndxfer_pool, vnx);
biodone(bp);
}
splx(s);
@@ -1354,7 +1337,7 @@ sw_reg_iodone_internal(void *xvbp, void *xvnx)
}
/* kill vbp structure */
- putvndbuf(vbp);
+ pool_put(&vndbuf_pool, vbp);
/*
* wrap up this transaction if it has run to completion or, in
@@ -1365,13 +1348,13 @@ sw_reg_iodone_internal(void *xvbp, void *xvnx)
pbp->b_flags |= B_ERROR;
pbp->b_error = vnx->vx_error;
if ((vnx->vx_flags & VX_BUSY) == 0 && vnx->vx_pending == 0) {
- putvndxfer(vnx);
+ pool_put(&vndxfer_pool, vnx);
biodone(pbp);
}
} else if (pbp->b_resid == 0) {
KASSERT(vnx->vx_pending == 0);
if ((vnx->vx_flags & VX_BUSY) == 0) {
- putvndxfer(vnx);
+ pool_put(&vndxfer_pool, vnx);
biodone(pbp);
}
}
@@ -1723,11 +1706,9 @@ uvm_swap_io(struct vm_page **pps, int startslot, int npages, int flags)
* now allocate a buf for the i/o.
* [make sure we don't put the pagedaemon to sleep...]
*/
- s = splbio();
pflag = (async || curproc == uvm.pagedaemon_proc) ? PR_NOWAIT :
PR_WAITOK;
- bp = pool_get(&bufpool, pflag);
- splx(s);
+ bp = pool_get(&bufpool, pflag | PR_ZERO);
/*
* if we failed to get a swapbuf, return "try again"