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