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