17c0435b9SKip Macy /*-
2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
3c4e20cadSPedro F. Giffuni *
47c0435b9SKip Macy * Copyright (c) 2006 Kip Macy kmacy@FreeBSD.org
5e8554106SKip Macy * Copyright (c) 2006 Kris Kennaway kris@FreeBSD.org
67c0435b9SKip Macy * Copyright (c) 2006 Dag-Erling Smorgrav des@des.no
77c0435b9SKip Macy *
87c0435b9SKip Macy * Redistribution and use in source and binary forms, with or without
97c0435b9SKip Macy * modification, are permitted provided that the following conditions
107c0435b9SKip Macy * are met:
117c0435b9SKip Macy * 1. Redistributions of source code must retain the above copyright
127c0435b9SKip Macy * notice, this list of conditions and the following disclaimer.
137c0435b9SKip Macy * 2. Redistributions in binary form must reproduce the above copyright
147c0435b9SKip Macy * notice, this list of conditions and the following disclaimer in the
157c0435b9SKip Macy * documentation and/or other materials provided with the distribution.
167c0435b9SKip Macy *
177c0435b9SKip Macy * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
187c0435b9SKip Macy * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
197c0435b9SKip Macy * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
207c0435b9SKip Macy * ARE DISCLAIMED. IN NO EVENT SHAL THE AUTHORS BE LIABLE FOR ANY
217c0435b9SKip Macy * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
227c0435b9SKip Macy * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
237c0435b9SKip Macy * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
247c0435b9SKip Macy * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
257c0435b9SKip Macy * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
267c0435b9SKip Macy * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
277c0435b9SKip Macy * SUCH DAMAGE.
287c0435b9SKip Macy */
297c0435b9SKip Macy
307c0435b9SKip Macy #ifndef _SYS_LOCK_PROFILE_H_
317c0435b9SKip Macy #define _SYS_LOCK_PROFILE_H_
327c0435b9SKip Macy
33eea4f254SJeff Roberson struct lock_profile_object;
34eea4f254SJeff Roberson LIST_HEAD(lpohead, lock_profile_object);
35eea4f254SJeff Roberson
36db08a3eeSJeff Roberson #ifdef _KERNEL
37eea4f254SJeff Roberson #ifdef LOCK_PROFILING
3853f37d19SKip Macy #include <machine/cpufunc.h>
39eea4f254SJeff Roberson #include <sys/lock.h>
40ed002394SKip Macy
41ed002394SKip Macy #ifndef USE_CPU_NANOSECONDS
42ed002394SKip Macy u_int64_t nanoseconds(void);
437c0435b9SKip Macy #endif
44ed002394SKip Macy
452e6b8de4SJeff Roberson extern volatile int lock_prof_enable;
467c0435b9SKip Macy
476a467cc5SMateusz Guzik void lock_profile_obtain_lock_success(struct lock_object *lo, bool spin,
486a467cc5SMateusz Guzik int contested, uint64_t waittime, const char *file, int line);
496a467cc5SMateusz Guzik void lock_profile_release_lock(struct lock_object *lo, bool spin);
502e6b8de4SJeff Roberson void lock_profile_thread_exit(struct thread *td);
512e6b8de4SJeff Roberson
527c0435b9SKip Macy static inline void
lock_profile_obtain_lock_failed(struct lock_object * lo,bool spin,int * contested,uint64_t * waittime)536a467cc5SMateusz Guzik lock_profile_obtain_lock_failed(struct lock_object *lo, bool spin,
546a467cc5SMateusz Guzik int *contested, uint64_t *waittime)
557c0435b9SKip Macy {
56eea4f254SJeff Roberson if (!lock_prof_enable || (lo->lo_flags & LO_NOPROFILE) || *contested)
57eea4f254SJeff Roberson return;
58fe68a916SKip Macy *waittime = nanoseconds();
591364a812SKip Macy *contested = 1;
607c0435b9SKip Macy }
6157899e02SAttilio Rao
627c0435b9SKip Macy #else /* !LOCK_PROFILING */
6357899e02SAttilio Rao
646a467cc5SMateusz Guzik #define lock_profile_release_lock(lo, spin) (void)0
656a467cc5SMateusz Guzik #define lock_profile_obtain_lock_failed(lo, spin, contested, waittime) (void)0
666a467cc5SMateusz Guzik #define lock_profile_obtain_lock_success(lo, spin, contested, waittime, file, line) (void)0
6720a0556cSRoman Divacky #define lock_profile_thread_exit(td) (void)0
6857899e02SAttilio Rao
697c0435b9SKip Macy #endif /* !LOCK_PROFILING */
707c0435b9SKip Macy
71eea4f254SJeff Roberson #endif /* _KERNEL */
72eea4f254SJeff Roberson
737c0435b9SKip Macy #endif /* _SYS_LOCK_PROFILE_H_ */
74