xref: /xnu-11215/bsd/pthread/workqueue_trace.h (revision e6231be0)
1 /*
2  * Copyright (c) 2017 Apple, Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 
29 #ifndef _WORKQUEUE_TRACE_H_
30 #define _WORKQUEUE_TRACE_H_
31 
32 // General workqueue tracepoints, mostly for debugging
33 #define WQ_TRACE_WORKQUEUE_SUBCLASS 1
34 // Workqueue request scheduling tracepoints
35 #define WQ_TRACE_REQUESTS_SUBCLASS 2
36 // Subclasses 3 - 6 in DBG_PTHREAD are used by libpthread
37 
38 // Workqueue quantum tracepoints
39 #define WQ_TRACE_QUANTUM_SUBCLASS 7
40 // Generic pthread tracepoints
41 #define WQ_TRACE_BSDTHREAD_SUBCLASS 16
42 
43 #define TRACE_wq_pthread_exit \
44 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x01)
45 #define TRACE_wq_workqueue_exit \
46 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x02)
47 #define TRACE_wq_runthread \
48 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x03)
49 #define TRACE_wq_death_call \
50 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x05)
51 #define TRACE_wq_thread_block \
52 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x09)
53 #define TRACE_wq_thactive_update \
54 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x0a)
55 #define TRACE_wq_add_timer \
56 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x0b)
57 #define TRACE_wq_start_add_timer \
58 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x0c)
59 #define TRACE_wq_override_dispatch \
60 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x14)
61 #define TRACE_wq_override_reset \
62 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x15)
63 #define TRACE_wq_thread_create_failed \
64 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x1d)
65 #define TRACE_wq_thread_terminate \
66 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x1e)
67 #define TRACE_wq_thread_create \
68 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x1f)
69 #define TRACE_wq_select_threadreq \
70 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x20)
71 #define TRACE_wq_creator_select \
72 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x23)
73 #define TRACE_wq_creator_yield \
74 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x24)
75 #define TRACE_wq_constrained_admission \
76 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x25)
77 #define TRACE_wq_wqops_reqthreads \
78 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x26)
79 #define TRACE_wq_cooperative_admission \
80 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_WORKQUEUE_SUBCLASS, 0x27)
81 
82 #define TRACE_wq_create \
83 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_REQUESTS_SUBCLASS, 0x01)
84 #define TRACE_wq_destroy \
85 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_REQUESTS_SUBCLASS, 0x02)
86 #define TRACE_wq_thread_logical_run \
87 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_REQUESTS_SUBCLASS, 0x03)
88 #define TRACE_wq_thread_request_initiate \
89 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_REQUESTS_SUBCLASS, 0x05)
90 #define TRACE_wq_thread_request_modify \
91 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_REQUESTS_SUBCLASS, 0x06)
92 #define TRACE_wq_thread_request_fulfill \
93 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_REQUESTS_SUBCLASS, 0x08)
94 
95 #define TRACE_bsdthread_set_qos_self \
96 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_BSDTHREAD_SUBCLASS, 0x1)
97 
98 #define TRACE_wq_quantum_arm \
99 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_QUANTUM_SUBCLASS, 0x01)
100 #define TRACE_wq_quantum_expired \
101 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_QUANTUM_SUBCLASS, 0x02)
102 #define TRACE_wq_quantum_disarm \
103 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_QUANTUM_SUBCLASS, 0x03)
104 #define TRACE_wq_quantum_expiry_reevaluate \
105 	        KDBG_CODE(DBG_PTHREAD, WQ_TRACE_QUANTUM_SUBCLASS, 0x04)
106 
107 #define WQ_TRACE(x, a, b, c, d) \
108 	        ({ KERNEL_DEBUG_CONSTANT(x, a, b, c, d, 0); })
109 #define WQ_TRACE_WQ(x, wq, b, c, d) \
110 	        ({ KERNEL_DEBUG_CONSTANT(x, proc_getpid((wq)->wq_proc), b, c, d, 0); })
111 
112 #if (KDEBUG_LEVEL >= KDEBUG_LEVEL_STANDARD)
113 #define __wq_trace_only
114 #else // (KDEBUG_LEVEL >= KDEBUG_LEVEL_STANDARD)
115 #define __wq_trace_only __unused
116 #endif // (KDEBUG_LEVEL >= KDEBUG_LEVEL_STANDARD)
117 
118 #endif // _WORKQUEUE_TRACE_H_
119