aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/subr_lock.c
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2020-01-05 12:48:19 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2020-01-05 12:48:19 +0000
commit2e77cad11dc5ec9c14c074dfc127f8420075aa7c (patch)
treec160653223c1bbca4cc10daa6ff08b908f8a3f5f /sys/kern/subr_lock.c
parent6b8dd26e7c5f2caf9e5094d6fa15d8edcace65a0 (diff)
locks: add default delay struct
Use it for all primitives. This makes everything fit in 8 bytes.
Notes
Notes: svn path=/head/; revision=356375
Diffstat (limited to 'sys/kern/subr_lock.c')
-rw-r--r--sys/kern/subr_lock.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/sys/kern/subr_lock.c b/sys/kern/subr_lock.c
index 669b89d9c165..3d6e86419867 100644
--- a/sys/kern/subr_lock.c
+++ b/sys/kern/subr_lock.c
@@ -161,6 +161,29 @@ lock_delay_default_init(struct lock_delay_config *lc)
lc->max = 32678;
}
+struct lock_delay_config __read_frequently locks_delay;
+u_short __read_frequently locks_delay_retries;
+u_short __read_frequently locks_delay_loops;
+
+SYSCTL_U16(_debug_lock, OID_AUTO, delay_base, CTLFLAG_RW, &locks_delay.base,
+ 0, "");
+SYSCTL_U16(_debug_lock, OID_AUTO, delay_max, CTLFLAG_RW, &locks_delay.max,
+ 0, "");
+SYSCTL_U16(_debug_lock, OID_AUTO, delay_retries, CTLFLAG_RW, &locks_delay_retries,
+ 0, "");
+SYSCTL_U16(_debug_lock, OID_AUTO, delay_loops, CTLFLAG_RW, &locks_delay_loops,
+ 0, "");
+
+static void
+locks_delay_init(void *arg __unused)
+{
+
+ lock_delay_default_init(&locks_delay);
+ locks_delay_retries = 10;
+ locks_delay_loops = max(10000, locks_delay.max);
+}
+LOCK_DELAY_SYSINIT(locks_delay_init);
+
#ifdef DDB
DB_SHOW_COMMAND(lock, db_show_lock)
{