Module Name: src
Committed By: thorpej
Date: Sun Dec 3 14:35:54 UTC 2023
Modified Files:
src/sys/kern: subr_vmem.c
Log Message:
bt_freetrim(): Restructure the loop as a LIST_FOREACH_SAFE() rather
than a while(). No real change in behavior now, but makes upcoming
enhancements easier.
To generate a diff of this commit:
cvs rdiff -u -r1.112 -r1.113 src/sys/kern/subr_vmem.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_vmem.c
diff -u src/sys/kern/subr_vmem.c:1.112 src/sys/kern/subr_vmem.c:1.113
--- src/sys/kern/subr_vmem.c:1.112 Sun Dec 3 02:50:09 2023
+++ src/sys/kern/subr_vmem.c Sun Dec 3 14:35:54 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_vmem.c,v 1.112 2023/12/03 02:50:09 thorpej Exp $ */
+/* $NetBSD: subr_vmem.c,v 1.113 2023/12/03 14:35:54 thorpej Exp $ */
/*-
* Copyright (c)2006,2007,2008,2009 YAMAMOTO Takashi,
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,v 1.112 2023/12/03 02:50:09 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,v 1.113 2023/12/03 14:35:54 thorpej Exp $");
#if defined(_KERNEL) && defined(_KERNEL_OPT)
#include "opt_ddb.h"
@@ -347,15 +347,17 @@ bt_free(vmem_t *vm, bt_t *bt)
static void
bt_freetrim(vmem_t *vm, int freelimit)
{
- bt_t *t;
+ bt_t *bt, *next_bt;
LIST_HEAD(, vmem_btag) tofree;
VMEM_ASSERT_LOCKED(vm);
LIST_INIT(&tofree);
- while (vm->vm_nfreetags > freelimit) {
- bt_t *bt = LIST_FIRST(&vm->vm_freetags);
+ LIST_FOREACH_SAFE(bt, &vm->vm_freetags, bt_freelist, next_bt) {
+ if (vm->vm_nfreetags <= freelimit) {
+ break;
+ }
LIST_REMOVE(bt, bt_freelist);
vm->vm_nfreetags--;
if (bt >= static_bts
@@ -372,9 +374,9 @@ bt_freetrim(vmem_t *vm, int freelimit)
VMEM_UNLOCK(vm);
while (!LIST_EMPTY(&tofree)) {
- t = LIST_FIRST(&tofree);
- LIST_REMOVE(t, bt_freelist);
- pool_put(&vmem_btag_pool, t);
+ bt = LIST_FIRST(&tofree);
+ LIST_REMOVE(bt, bt_freelist);
+ pool_put(&vmem_btag_pool, bt);
}
}
#endif /* defined(_KERNEL) */