From 7f6157f7fd12608ccb96c8a571b9352bf9968d8f Mon Sep 17 00:00:00 2001 From: Edward Tomasz Napierala Date: Sat, 3 Apr 2021 13:08:45 +0100 Subject: [PATCH] lock_delay(9): improve interaction with restrict_starvation After e7a5b3bd058, the la->delay value was adjusted after being set by the starvation_limit code block, which is wrong. Reported By: avg Reviewed By: avg Fixes: e7a5b3bd058 Sponsored By: NetApp, Inc. Sponsored By: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D29513 --- sys/kern/subr_lock.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sys/kern/subr_lock.c b/sys/kern/subr_lock.c index 8b08c61715b3..1afaa19302ed 100644 --- a/sys/kern/subr_lock.c +++ b/sys/kern/subr_lock.c @@ -130,17 +130,17 @@ lock_delay(struct lock_delay_arg *la) for (i = la->delay; i > 0; i--) cpu_spinwait(); - la->spin_cnt += la->delay; + + la->delay <<= 1; + if (__predict_false(la->delay > lc->max)) + la->delay = lc->max; + if (__predict_false(la->spin_cnt > starvation_limit)) { SDT_PROBE1(lock, , , starvation, la->delay); if (restrict_starvation) la->delay = lc->base; } - - la->delay <<= 1; - if (__predict_false(la->delay > lc->max)) - la->delay = lc->max; } static u_int