xref: /freebsd/sys/compat/linuxkpi/common/include/linux/lockdep.h (revision 9b2705121ba230bf71a1509cc928f0481dfbf31c)
18d59ecb2SHans Petter Selasky /*-
28d59ecb2SHans Petter Selasky  * Copyright (c) 2010 Isilon Systems, Inc.
38d59ecb2SHans Petter Selasky  * Copyright (c) 2010 iX Systems, Inc.
48d59ecb2SHans Petter Selasky  * Copyright (c) 2010 Panasas, Inc.
58d59ecb2SHans Petter Selasky  * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
68d59ecb2SHans Petter Selasky  * All rights reserved.
78d59ecb2SHans Petter Selasky  *
88d59ecb2SHans Petter Selasky  * Redistribution and use in source and binary forms, with or without
98d59ecb2SHans Petter Selasky  * modification, are permitted provided that the following conditions
108d59ecb2SHans Petter Selasky  * are met:
118d59ecb2SHans Petter Selasky  * 1. Redistributions of source code must retain the above copyright
128d59ecb2SHans Petter Selasky  *    notice unmodified, this list of conditions, and the following
138d59ecb2SHans Petter Selasky  *    disclaimer.
148d59ecb2SHans Petter Selasky  * 2. Redistributions in binary form must reproduce the above copyright
158d59ecb2SHans Petter Selasky  *    notice, this list of conditions and the following disclaimer in the
168d59ecb2SHans Petter Selasky  *    documentation and/or other materials provided with the distribution.
178d59ecb2SHans Petter Selasky  *
188d59ecb2SHans Petter Selasky  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
198d59ecb2SHans Petter Selasky  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
208d59ecb2SHans Petter Selasky  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
218d59ecb2SHans Petter Selasky  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
228d59ecb2SHans Petter Selasky  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
238d59ecb2SHans Petter Selasky  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
248d59ecb2SHans Petter Selasky  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
258d59ecb2SHans Petter Selasky  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
268d59ecb2SHans Petter Selasky  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
278d59ecb2SHans Petter Selasky  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
288d59ecb2SHans Petter Selasky  */
2933baed94SMark Johnston 
30307f78f3SVladimir Kondratyev #ifndef _LINUXKPI_LINUX_LOCKDEP_H_
31307f78f3SVladimir Kondratyev #define	_LINUXKPI_LINUX_LOCKDEP_H_
328d59ecb2SHans Petter Selasky 
33*9b270512SBjoern A. Zeeb #include <sys/systm.h>
34f1a7639aSVladimir Kondratyev #include <sys/types.h>
3585d787b2SEmmanuel Vadot #include <sys/lock.h>
3685d787b2SEmmanuel Vadot 
378d59ecb2SHans Petter Selasky struct lock_class_key {
388d59ecb2SHans Petter Selasky };
39f1069375SBjoern A. Zeeb struct lockdep_map {
40f1069375SBjoern A. Zeeb };
4168fcdba3SVladimir Kondratyev struct pin_cookie {
4268fcdba3SVladimir Kondratyev };
438d59ecb2SHans Petter Selasky 
448d59ecb2SHans Petter Selasky #define	lockdep_set_class(lock, key)
45922106bfSHans Petter Selasky #define	lockdep_set_subclass(lock, sub)
468d59ecb2SHans Petter Selasky #define	lockdep_set_class_and_name(lock, key, name)
4786ba49a7SHans Petter Selasky #define	lockdep_set_current_reclaim_state(g) do { } while (0)
4886ba49a7SHans Petter Selasky #define	lockdep_clear_current_reclaim_state() do { } while (0)
494abbf816SBjoern A. Zeeb #define	lockdep_init_map(_map, _name, _key, _x) do { } while(0)
50b27c3aa8SBjoern A. Zeeb #define	lockdep_register_key(key) do { } while(0)
51b27c3aa8SBjoern A. Zeeb #define	lockdep_unregister_key(key) do { } while(0)
528d59ecb2SHans Petter Selasky 
53e28024fbSJohn Baldwin #ifdef INVARIANTS
5421f4cf5cSAlvin Chen #define	lockdep_assert(cond) do { WARN_ON(!(cond)); } while (0)
5521f4cf5cSAlvin Chen #define	lockdep_assert_once(cond) do { WARN_ON_ONCE(!(cond)); } while (0)
56b82bcfb6SJean-Sébastien Pédron 
57064c110fSBjoern A. Zeeb #define	lockdep_assert_not_held(m) do {					\
58064c110fSBjoern A. Zeeb 	struct lock_object *__lock = (struct lock_object *)(m);		\
59064c110fSBjoern A. Zeeb 	LOCK_CLASS(__lock)->lc_assert(__lock, LA_UNLOCKED);		\
60064c110fSBjoern A. Zeeb } while (0)
61064c110fSBjoern A. Zeeb 
62e28024fbSJohn Baldwin #define	lockdep_assert_held(m) do {					\
63e28024fbSJohn Baldwin 	struct lock_object *__lock = (struct lock_object *)(m);		\
64e28024fbSJohn Baldwin 	LOCK_CLASS(__lock)->lc_assert(__lock, LA_LOCKED);		\
65e28024fbSJohn Baldwin } while (0)
66934277c5SMark Johnston 
67e28024fbSJohn Baldwin #define	lockdep_assert_held_once(m) do {				\
68e28024fbSJohn Baldwin 	struct lock_object *__lock = (struct lock_object *)(m);		\
69e28024fbSJohn Baldwin 	LOCK_CLASS(__lock)->lc_assert(__lock, LA_LOCKED | LA_NOTRECURSED); \
70e28024fbSJohn Baldwin } while (0)
7133baed94SMark Johnston 
7217f2b12aSJean-Sébastien Pédron #define	lockdep_assert_none_held_once() do { } while (0)
7317f2b12aSJean-Sébastien Pédron 
74e28024fbSJohn Baldwin #else
75b82bcfb6SJean-Sébastien Pédron #define	lockdep_assert(cond) do { } while (0)
76b82bcfb6SJean-Sébastien Pédron #define	lockdep_assert_once(cond) do { } while (0)
77b82bcfb6SJean-Sébastien Pédron 
78064c110fSBjoern A. Zeeb #define	lockdep_assert_not_held(m) do { (void)(m); } while (0)
7968fcdba3SVladimir Kondratyev #define	lockdep_assert_held(m) do { (void)(m); } while (0)
8017f2b12aSJean-Sébastien Pédron #define	lockdep_assert_none_held_once() do { } while (0)
81e28024fbSJohn Baldwin 
8268fcdba3SVladimir Kondratyev #define	lockdep_assert_held_once(m) do { (void)(m); } while (0)
83e28024fbSJohn Baldwin 
84e28024fbSJohn Baldwin #endif
85934277c5SMark Johnston 
865c92f84bSBjoern A. Zeeb static __inline bool
lockdep_is_held(void * __m __diagused)875c92f84bSBjoern A. Zeeb lockdep_is_held(void *__m __diagused)
885c92f84bSBjoern A. Zeeb {
895c92f84bSBjoern A. Zeeb #ifdef INVARIANTS
905c92f84bSBjoern A. Zeeb 	struct lock_object *__lock;
915c92f84bSBjoern A. Zeeb 	struct thread *__td;
925c92f84bSBjoern A. Zeeb 
935c92f84bSBjoern A. Zeeb 	__lock = __m;
945c92f84bSBjoern A. Zeeb 	return (LOCK_CLASS(__lock)->lc_owner(__lock, &__td) != 0);
955c92f84bSBjoern A. Zeeb #else
965c92f84bSBjoern A. Zeeb 	return (true);
975c92f84bSBjoern A. Zeeb #endif
985c92f84bSBjoern A. Zeeb }
995c92f84bSBjoern A. Zeeb #define	lockdep_is_held_type(_m, _t)	lockdep_is_held(_m)
1005c92f84bSBjoern A. Zeeb 
1017e1a02baSMark Johnston #define	might_lock(m)	do { } while (0)
1021169b94cSHans Petter Selasky #define	might_lock_read(m) do { } while (0)
1038a1a42b2SNeel Chauhan #define	might_lock_nested(m, n) do { } while (0)
1041169b94cSHans Petter Selasky 
1051169b94cSHans Petter Selasky #define	lock_acquire(...) do { } while (0)
1061169b94cSHans Petter Selasky #define	lock_release(...) do { } while (0)
1071169b94cSHans Petter Selasky #define	lock_acquire_shared_recursive(...) do { } while (0)
1087e1a02baSMark Johnston 
109922106bfSHans Petter Selasky #define	mutex_acquire(...) do { } while (0)
110922106bfSHans Petter Selasky #define	mutex_release(...) do { } while (0)
111922106bfSHans Petter Selasky 
112f1069375SBjoern A. Zeeb #define	lock_map_acquire(_map) do { } while (0)
113f1069375SBjoern A. Zeeb #define	lock_map_acquire_read(_map) do { } while (0)
114f1069375SBjoern A. Zeeb #define	lock_map_release(_map) do { } while (0)
115f1069375SBjoern A. Zeeb 
11668fcdba3SVladimir Kondratyev #define	lockdep_pin_lock(l) ({ struct pin_cookie __pc = { }; __pc; })
11768fcdba3SVladimir Kondratyev #define	lockdep_repin_lock(l,c) do { (void)(l); (void)(c); } while (0)
11868fcdba3SVladimir Kondratyev #define	lockdep_unpin_lock(l,c) do { (void)(l); (void)(c); } while (0)
1198a1a42b2SNeel Chauhan 
120307f78f3SVladimir Kondratyev #endif /* _LINUXKPI_LINUX_LOCKDEP_H_ */
121