git: f902e4bb04ad - main - lockmgr: fix lock profiling of face adaptive spinning

Mitchell Horne mhorne at freebsd.org
Sat Sep 18 20:10:36 UTC 2021


On Sat, Sep 18, 2021 at 7:18 AM Mateusz Guzik <mjg at freebsd.org> wrote:
>
> The branch main has been updated by mjg:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=f902e4bb04ad717935a97ce1ae59e2dd389d940d
>
> commit f902e4bb04ad717935a97ce1ae59e2dd389d940d
> Author:     Mateusz Guzik <mjg at FreeBSD.org>
> AuthorDate: 2021-09-11 18:23:51 +0000
> Commit:     Mateusz Guzik <mjg at FreeBSD.org>
> CommitDate: 2021-09-18 10:16:58 +0000
>
>     lockmgr: fix lock profiling of face adaptive spinning

In what way was it broken?

Mitchell

> ---
>  sys/kern/kern_lock.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c
> index bec49f29d162..2eb4feb7c4b5 100644
> --- a/sys/kern/kern_lock.c
> +++ b/sys/kern/kern_lock.c
> @@ -631,6 +631,9 @@ lockmgr_slock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
>                 if (lockmgr_slock_try(lk, &x, flags, false))
>                         break;
>
> +               lock_profile_obtain_lock_failed(&lk->lock_object, false,
> +                   &contested, &waittime);
> +
>                 if ((flags & (LK_ADAPTIVE | LK_INTERLOCK)) == LK_ADAPTIVE) {
>                         if (lockmgr_slock_adaptive(&lda, lk, &x, flags))
>                                 continue;
> @@ -639,8 +642,6 @@ lockmgr_slock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
>  #ifdef HWPMC_HOOKS
>                 PMC_SOFT_CALL( , , lock, failed);
>  #endif
> -               lock_profile_obtain_lock_failed(&lk->lock_object, false,
> -                   &contested, &waittime);
>
>                 /*
>                  * If the lock is expected to not sleep just give up
> @@ -845,6 +846,10 @@ lockmgr_xlock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
>                                 break;
>                         continue;
>                 }
> +
> +               lock_profile_obtain_lock_failed(&lk->lock_object, false,
> +                   &contested, &waittime);
> +
>                 if ((flags & (LK_ADAPTIVE | LK_INTERLOCK)) == LK_ADAPTIVE) {
>                         if (lockmgr_xlock_adaptive(&lda, lk, &x))
>                                 continue;
> @@ -852,8 +857,6 @@ lockmgr_xlock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
>  #ifdef HWPMC_HOOKS
>                 PMC_SOFT_CALL( , , lock, failed);
>  #endif
> -               lock_profile_obtain_lock_failed(&lk->lock_object, false,
> -                   &contested, &waittime);
>
>                 /*
>                  * If the lock is expected to not sleep just give up


More information about the dev-commits-src-all mailing list