Module Name: src
Committed By: maxv
Date: Sun Mar 17 06:55:06 UTC 2019
Modified Files:
src/sys/kern: subr_pool.c
Log Message:
Prepare the removal of the 'ioff' argument: add a KASSERT to ensure it is
zero, and remove the internal logic. The pool code is simpler now.
To generate a diff of this commit:
cvs rdiff -u -r1.237 -r1.238 src/sys/kern/subr_pool.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/subr_pool.c
diff -u src/sys/kern/subr_pool.c:1.237 src/sys/kern/subr_pool.c:1.238
--- src/sys/kern/subr_pool.c:1.237 Sat Mar 16 13:33:10 2019
+++ src/sys/kern/subr_pool.c Sun Mar 17 06:55:06 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_pool.c,v 1.237 2019/03/16 13:33:10 maxv Exp $ */
+/* $NetBSD: subr_pool.c,v 1.238 2019/03/17 06:55:06 maxv Exp $ */
/*
* Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010, 2014, 2015, 2018
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.237 2019/03/16 13:33:10 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.238 2019/03/17 06:55:06 maxv Exp $");
#ifdef _KERNEL_OPT
#include "opt_ddb.h"
@@ -580,6 +580,9 @@ pool_init(struct pool *pp, size_t size,
size_t trysize, phsize, prsize;
int itemspace, slack;
+ /* XXX ioff will be removed. */
+ KASSERT(ioff == 0);
+
#ifdef DEBUG
if (__predict_true(!cold))
mutex_enter(&pool_head_lock);
@@ -665,9 +668,6 @@ pool_init(struct pool *pp, size_t size,
pp->pr_freecheck = NULL;
pool_redzone_init(pp, size);
- /* Silently enforce '0 <= ioff < align'. */
- ioff %= align;
-
/*
* Decide whether to put the page header off page to avoid wasting too
* large a part of the page or too big item. Off-page page headers go
@@ -678,8 +678,8 @@ pool_init(struct pool *pp, size_t size,
* However, we'll put the header into the page if we can put it without
* wasting any items.
*/
- pp->pr_itemoffset = ioff;
- trysize = palloc->pa_pagesz - ((align - ioff) % align);
+ pp->pr_itemoffset = 0;
+ trysize = palloc->pa_pagesz;
phsize = ALIGN(sizeof(struct pool_item_header));
if (pp->pr_roflags & PR_PHINPAGE ||
((pp->pr_roflags & (PR_NOTOUCH | PR_NOALIGN)) == 0 &&
@@ -696,13 +696,7 @@ pool_init(struct pool *pp, size_t size,
SPLAY_INIT(&pp->pr_phtree);
}
- /*
- * Alignment is to take place at `ioff' within the item. This means
- * we must reserve up to `align - 1' bytes on the page to allow
- * appropriate positioning of each item.
- */
- pp->pr_itemsperpage =
- (itemspace - ((align - ioff) % align)) / pp->pr_size;
+ pp->pr_itemsperpage = itemspace / pp->pr_size;
KASSERT(pp->pr_itemsperpage != 0);
if ((pp->pr_roflags & PR_NOTOUCH)) {
int idx;
@@ -1012,7 +1006,7 @@ pool_get(struct pool *pp, int flags)
}
mutex_exit(&pp->pr_lock);
- KASSERT((((vaddr_t)v + pp->pr_itemoffset) & (pp->pr_align - 1)) == 0);
+ KASSERT((((vaddr_t)v) & (pp->pr_align - 1)) == 0);
FREECHECK_OUT(&pp->pr_freecheck, v);
pool_redzone_fill(pp, v);
if (flags & PR_ZERO)
@@ -1243,7 +1237,6 @@ static void
pool_prime_page(struct pool *pp, void *storage, struct pool_item_header *ph)
{
const unsigned int align = pp->pr_align;
- const unsigned int ioff = pp->pr_itemoffset;
struct pool_item *pi;
void *cp = storage;
int n;
@@ -1274,13 +1267,7 @@ pool_prime_page(struct pool *pp, void *s
if ((pp->pr_curcolor += align) > pp->pr_maxcolor)
pp->pr_curcolor = 0;
- /*
- * Adjust storage to apply alignment to `pr_itemoffset' in each item.
- */
- if (ioff != 0)
- cp = (char *)cp + align - ioff;
-
- KASSERT((((vaddr_t)cp + ioff) & (align - 1)) == 0);
+ KASSERT((((vaddr_t)cp) & (align - 1)) == 0);
/*
* Insert remaining chunks on the bucket list.
@@ -1294,7 +1281,7 @@ pool_prime_page(struct pool *pp, void *s
while (n--) {
pi = (struct pool_item *)cp;
- KASSERT(((((vaddr_t)pi) + ioff) & (align - 1)) == 0);
+ KASSERT((((vaddr_t)pi) & (align - 1)) == 0);
/* Insert on page list */
LIST_INSERT_HEAD(&ph->ph_itemlist, pi, pi_list);
@@ -1303,7 +1290,7 @@ pool_prime_page(struct pool *pp, void *s
#endif
cp = (char *)cp + pp->pr_size;
- KASSERT((((vaddr_t)cp + ioff) & (align - 1)) == 0);
+ KASSERT((((vaddr_t)cp) & (align - 1)) == 0);
}
}
@@ -2323,8 +2310,7 @@ pool_cache_get_slow(pool_cache_cpu_t *cc
return false;
}
- KASSERT((((vaddr_t)object + pc->pc_pool.pr_itemoffset) &
- (pc->pc_pool.pr_align - 1)) == 0);
+ KASSERT((((vaddr_t)object) & (pc->pc_pool.pr_align - 1)) == 0);
if (pap != NULL) {
#ifdef POOL_VTOPHYS