更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_lockdep.h
浏览该文件的文档.
1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 * to endorse or promote products derived from this software without specific prior written
17 * permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef _LOS_LOCKDEP_H
33#define _LOS_LOCKDEP_H
34
35#ifdef __cplusplus
36#if __cplusplus
37extern "C" {
38#endif /* __cplusplus */
39#endif /* __cplusplus */
40
41typedef struct Spinlock SPIN_LOCK_S;
42
43#define MAX_LOCK_DEPTH 16U //最大的锁深度
44
50 /* overflow, needs expand */
52};
53
54typedef struct {
55 VOID *lockPtr;
56 VOID *lockAddr;
59} HeldLocks;
60
61typedef struct {
62 VOID *waitLock;
64 HeldLocks heldLocks[MAX_LOCK_DEPTH];
65} LockDep;
66
67/**
68 * @ingroup los_lockdep
69 *
70 * @par Description:
71 * This API is used to check dead lock in spinlock.
72 * @attention
73 * <ul>
74 * <li>The parameter passed in should be ensured to be a legal pointer.</li>
75 * </ul>
76 *
77 * @param lock [IN] point to a SPIN_LOCK_S.
78 *
79 * @retval None.
80 * @par Dependency:
81 * <ul><li>los_lockdep.h: the header file that contains the API declaration.</li></ul>
82 * @see
83 */
84extern VOID OsLockDepCheckIn(SPIN_LOCK_S *lock);//此API用于检查spinlock中的死锁
85
86/**
87 * @ingroup los_lockdep
88 *
89 * @par Description:
90 * This API is used to trace when a spinlock locked.
91 * @attention
92 * <ul>
93 * <li>The parameter passed in should be ensured to be a legal pointer.</li>
94 * </ul>
95 *
96 * @param lock [IN] point to a SPIN_LOCK_S.
97 *
98 * @retval None.
99 * @par Dependency:
100 * <ul><li>los_lockdep.h: the header file that contains the API declaration.</li></ul>
101 * @see
102 */
103extern VOID OsLockDepRecord(SPIN_LOCK_S *lock);//此API用于跟踪自旋锁锁定的时间
104
105/**
106 * @ingroup los_lockdep
107 *
108 * @par Description:
109 * This API is used to trace when a spinlock unlocked.
110 * @attention
111 * <ul>
112 * <li>The parameter passed in should be ensured to be a legal pointer.</li>
113 * </ul>
114 *
115 * @param lock [IN] point to a SPIN_LOCK_S.
116 *
117 * @retval None.
118 * @par Dependency:
119 * <ul><li>los_lockdep.h: the header file that contains the API declaration.</li></ul>
120 * @see
121 */
122extern VOID OsLockDepCheckOut(SPIN_LOCK_S *lock);//此API用于跟踪自旋锁何时解锁
123
124/**
125 * @ingroup los_lockdep
126 *
127 * @par Description:
128 * This API is used to clear lockdep record of curret task.
129 * @attention
130 * <ul>
131 * <li>None.</li>
132 * </ul>
133 *
134 * @param None
135 * @retval None.
136 * @par Dependency:
137 * <ul><li>los_lockdep.h: the header file that contains the API declaration.</li></ul>
138 * @see
139 */
140extern VOID OsLockdepClearSpinlocks(VOID);//此API用于清除curret task的lockdep记录
141
142#ifdef __cplusplus
143#if __cplusplus
144}
145#endif
146#endif /* __cplusplus */
147#endif /* _LOS_LOCKDEP_H */
VOID OsLockDepCheckIn(SPIN_LOCK_S *lock)
Definition: los_lockdep.c:189
VOID OsLockDepCheckOut(SPIN_LOCK_S *lock)
Definition: los_lockdep.c:274
VOID OsLockDepRecord(SPIN_LOCK_S *lock)
Definition: los_lockdep.c:244
LockDepErrType
Definition: los_lockdep.h:45
@ LOCKDEP_ERR_DEAD_LOCK
Definition: los_lockdep.h:48
@ LOCKDEP_SUCCESS
Definition: los_lockdep.h:46
@ LOCKDEP_ERR_UNLOCK_WITOUT_LOCK
Definition: los_lockdep.h:49
@ LOCKDEP_ERR_DOUBLE_LOCK
Definition: los_lockdep.h:47
@ LOCKDEP_ERR_OVERFLOW
Definition: los_lockdep.h:51
VOID OsLockdepClearSpinlocks(VOID)
Definition: los_lockdep.c:329
signed int INT32
Definition: los_typedef.h:60
long unsigned int UINT64
Definition: los_typedef.h:66
VOID * lockPtr
Definition: los_lockdep.h:55
VOID * lockAddr
Definition: los_lockdep.h:56
UINT64 holdTime
Definition: los_lockdep.h:58
UINT64 waitTime
Definition: los_lockdep.h:57
INT32 lockDepth
Definition: los_lockdep.h:63
VOID * waitLock
Definition: los_lockdep.h:62