Index: sys/pool.h =================================================================== RCS file: /cvs/src/sys/sys/pool.h,v retrieving revision 1.74 diff -u -p -r1.74 pool.h --- sys/pool.h 13 Aug 2017 20:26:33 -0000 1.74 +++ sys/pool.h 19 Jan 2018 01:35:30 -0000 @@ -103,7 +103,7 @@ struct kinfo_pool_cache_cpu { struct pool; struct pool_request; struct pool_lock_ops; -TAILQ_HEAD(pool_requests, pool_request); +SIMPLEQ_HEAD(pool_requests, pool_request); struct pool_allocator { void *(*pa_alloc)(struct pool *, int, int *); @@ -249,7 +249,7 @@ extern struct pool_allocator pool_alloca extern struct pool_allocator pool_allocator_multi; struct pool_request { - TAILQ_ENTRY(pool_request) pr_entry; + SIMPLEQ_ENTRY(pool_request) pr_entry; void (*pr_handler)(struct pool *, void *, void *); void *pr_cookie; void *pr_item; Index: kern/subr_pool.c =================================================================== RCS file: /cvs/src/sys/kern/subr_pool.c,v retrieving revision 1.221 diff -u -p -r1.221 subr_pool.c --- kern/subr_pool.c 18 Jan 2018 18:08:51 -0000 1.221 +++ kern/subr_pool.c 19 Jan 2018 01:35:30 -0000 @@ -457,7 +457,7 @@ pool_init(struct pool *pp, size_t size, pl_init(pp, &pp->pr_lock); pl_init(pp, &pp->pr_requests_lock); - TAILQ_INIT(&pp->pr_requests); + SIMPLEQ_INIT(&pp->pr_requests); if (phpool.pr_size == 0) { pool_init(&phpool, sizeof(struct pool_page_header), 0, @@ -549,7 +549,7 @@ void pool_request(struct pool *pp, struct pool_request *pr) { pl_enter(pp, &pp->pr_requests_lock); - TAILQ_INSERT_TAIL(&pp->pr_requests, pr, pr_entry); + SIMPLEQ_INSERT_TAIL(&pp->pr_requests, pr, pr_entry); pool_runqueue(pp, PR_NOWAIT); pl_leave(pp, &pp->pr_requests_lock); } @@ -643,7 +643,7 @@ pool_get_done(struct pool *pp, void *xme void pool_runqueue(struct pool *pp, int flags) { - struct pool_requests prl = TAILQ_HEAD_INITIALIZER(prl); + struct pool_requests prl = SIMPLEQ_HEAD_INITIALIZER(prl); struct pool_request *pr; pl_assert_unlocked(pp, &pp->pr_lock); @@ -655,18 +655,14 @@ pool_runqueue(struct pool *pp, int flags do { pp->pr_requesting = 1; - /* no TAILQ_JOIN? :( */ - while ((pr = TAILQ_FIRST(&pp->pr_requests)) != NULL) { - TAILQ_REMOVE(&pp->pr_requests, pr, pr_entry); - TAILQ_INSERT_TAIL(&prl, pr, pr_entry); - } - if (TAILQ_EMPTY(&prl)) + SIMPLEQ_CONCAT(&prl, &pp->pr_requests); + if (SIMPLEQ_EMPTY(&prl)) continue; pl_leave(pp, &pp->pr_requests_lock); pl_enter(pp, &pp->pr_lock); - pr = TAILQ_FIRST(&prl); + pr = SIMPLEQ_FIRST(&prl); while (pr != NULL) { int slowdown = 0; @@ -677,24 +673,21 @@ pool_runqueue(struct pool *pp, int flags if (pr->pr_item == NULL) /* || slowdown ? */ break; - pr = TAILQ_NEXT(pr, pr_entry); + pr = SIMPLEQ_NEXT(pr, pr_entry); } pl_leave(pp, &pp->pr_lock); - while ((pr = TAILQ_FIRST(&prl)) != NULL && + while ((pr = SIMPLEQ_FIRST(&prl)) != NULL && pr->pr_item != NULL) { - TAILQ_REMOVE(&prl, pr, pr_entry); + SIMPLEQ_REMOVE_HEAD(&prl, pr_entry); (*pr->pr_handler)(pp, pr->pr_cookie, pr->pr_item); } pl_enter(pp, &pp->pr_requests_lock); } while (--pp->pr_requesting); - /* no TAILQ_JOIN :( */ - while ((pr = TAILQ_FIRST(&prl)) != NULL) { - TAILQ_REMOVE(&prl, pr, pr_entry); - TAILQ_INSERT_TAIL(&pp->pr_requests, pr, pr_entry); - } + SIMPLEQ_CONCAT(&prl, &pp->pr_requests); + SIMPLEQ_CONCAT(&pp->pr_requests, &prl); } void * @@ -795,7 +788,7 @@ pool_put(struct pool *pp, void *v) #endif #ifdef MULTIPROCESSOR - if (pp->pr_cache != NULL && TAILQ_EMPTY(&pp->pr_requests)) { + if (pp->pr_cache != NULL && SIMPLEQ_EMPTY(&pp->pr_requests)) { pool_cache_put(pp, v); return; } @@ -821,7 +814,7 @@ pool_put(struct pool *pp, void *v) if (freeph != NULL) pool_p_free(pp, freeph); - if (!TAILQ_EMPTY(&pp->pr_requests)) { + if (!SIMPLEQ_EMPTY(&pp->pr_requests)) { pl_enter(pp, &pp->pr_requests_lock); pool_runqueue(pp, PR_NOWAIT); pl_leave(pp, &pp->pr_requests_lock);