1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 /* 3 * 4 * (C) COPYRIGHT 2014, 2018, 2020-2021 ARM Limited. All rights reserved. 5 * 6 * This program is free software and is provided to you under the terms of the 7 * GNU General Public License version 2 as published by the Free Software 8 * Foundation, and any use by you of this program is subject to the terms 9 * of such GNU license. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, you can access it online at 18 * http://www.gnu.org/licenses/gpl-2.0.html. 19 * 20 */ 21 22 /* 23 * NOTE: This must **only** be included through mali_linux_trace.h, 24 * otherwise it will fail to setup tracepoints correctly 25 */ 26 27 #if !defined(_KBASE_DEBUG_LINUX_KTRACE_JM_H_) || defined(TRACE_HEADER_MULTI_READ) 28 #define _KBASE_DEBUG_LINUX_KTRACE_JM_H_ 29 30 DECLARE_EVENT_CLASS(mali_jm_slot_template, 31 TP_PROTO(struct kbase_context *kctx, int jobslot, u64 info_val), 32 TP_ARGS(kctx, jobslot, info_val), 33 TP_STRUCT__entry( 34 __field(pid_t, kctx_tgid) 35 __field(u32, kctx_id) 36 __field(unsigned int, jobslot) 37 __field(u64, info_val) 38 ), 39 TP_fast_assign( 40 __entry->kctx_id = (kctx) ? kctx->id : 0u; 41 __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; 42 __entry->jobslot = jobslot; 43 __entry->info_val = info_val; 44 ), 45 TP_printk("kctx=%d_%u jobslot=%u info=0x%llx", __entry->kctx_tgid, 46 __entry->kctx_id, __entry->jobslot, __entry->info_val) 47 ); 48 49 #define DEFINE_MALI_JM_SLOT_EVENT(name) \ 50 DEFINE_EVENT(mali_jm_slot_template, mali_##name, \ 51 TP_PROTO(struct kbase_context *kctx, int jobslot, u64 info_val), \ 52 TP_ARGS(kctx, jobslot, info_val)) 53 DEFINE_MALI_JM_SLOT_EVENT(JM_RETURN_ATOM_TO_JS); 54 DEFINE_MALI_JM_SLOT_EVENT(JM_MARK_FOR_RETURN_TO_JS); 55 DEFINE_MALI_JM_SLOT_EVENT(JM_SUBMIT); 56 DEFINE_MALI_JM_SLOT_EVENT(JM_JOB_DONE); 57 DEFINE_MALI_JM_SLOT_EVENT(JM_UPDATE_HEAD); 58 DEFINE_MALI_JM_SLOT_EVENT(JM_CHECK_HEAD); 59 DEFINE_MALI_JM_SLOT_EVENT(JM_SOFTSTOP); 60 DEFINE_MALI_JM_SLOT_EVENT(JM_SOFTSTOP_0); 61 DEFINE_MALI_JM_SLOT_EVENT(JM_SOFTSTOP_1); 62 DEFINE_MALI_JM_SLOT_EVENT(JM_HARDSTOP); 63 DEFINE_MALI_JM_SLOT_EVENT(JM_HARDSTOP_0); 64 DEFINE_MALI_JM_SLOT_EVENT(JM_HARDSTOP_1); 65 DEFINE_MALI_JM_SLOT_EVENT(JM_SLOT_SOFT_OR_HARD_STOP); 66 DEFINE_MALI_JM_SLOT_EVENT(JM_SLOT_EVICT); 67 DEFINE_MALI_JM_SLOT_EVENT(JM_BEGIN_RESET_WORKER); 68 DEFINE_MALI_JM_SLOT_EVENT(JM_END_RESET_WORKER); 69 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_REGISTER_ON_RECHECK_FAILED); 70 DEFINE_MALI_JM_SLOT_EVENT(JS_AFFINITY_SUBMIT_TO_BLOCKED); 71 DEFINE_MALI_JM_SLOT_EVENT(JS_AFFINITY_CURRENT); 72 DEFINE_MALI_JM_SLOT_EVENT(JD_DONE_TRY_RUN_NEXT_JOB); 73 DEFINE_MALI_JM_SLOT_EVENT(JS_PULL_JOB); 74 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_REQUEST_CORES_FAILED); 75 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_REGISTER_INUSE_FAILED); 76 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_REQUEST_ON_RECHECK_FAILED); 77 DEFINE_MALI_JM_SLOT_EVENT(JS_CORE_REF_AFFINITY_WOULD_VIOLATE); 78 DEFINE_MALI_JM_SLOT_EVENT(JS_JOB_DONE_TRY_RUN_NEXT_JOB); 79 DEFINE_MALI_JM_SLOT_EVENT(JS_JOB_DONE_RETRY_NEEDED); 80 DEFINE_MALI_JM_SLOT_EVENT(JS_POLICY_DEQUEUE_JOB); 81 DEFINE_MALI_JM_SLOT_EVENT(JS_POLICY_DEQUEUE_JOB_IRQ); 82 DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_BLOCKED); 83 DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_UNBLOCKED); 84 DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_AND_HIGHER_UNBLOCKED); 85 DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_IS_BLOCKED); 86 #undef DEFINE_MALI_JM_SLOT_EVENT 87 88 DECLARE_EVENT_CLASS(mali_jm_refcount_template, 89 TP_PROTO(struct kbase_context *kctx, int refcount, u64 info_val), 90 TP_ARGS(kctx, refcount, info_val), 91 TP_STRUCT__entry( 92 __field(pid_t, kctx_tgid) 93 __field(u32, kctx_id) 94 __field(unsigned int, refcount) 95 __field(u64, info_val) 96 ), 97 TP_fast_assign( 98 __entry->kctx_id = (kctx) ? kctx->id : 0u; 99 __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; 100 __entry->refcount = refcount; 101 __entry->info_val = info_val; 102 ), 103 TP_printk("kctx=%d_%u refcount=%u info=0x%llx", __entry->kctx_tgid, 104 __entry->kctx_id, __entry->refcount, __entry->info_val) 105 ); 106 107 #define DEFINE_MALI_JM_REFCOUNT_EVENT(name) \ 108 DEFINE_EVENT(mali_jm_refcount_template, mali_##name, \ 109 TP_PROTO(struct kbase_context *kctx, int refcount, u64 info_val), \ 110 TP_ARGS(kctx, refcount, info_val)) 111 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_ADD_JOB); 112 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_REMOVE_JOB); 113 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_TRY_SCHEDULE_HEAD_CTX); 114 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_INIT_CTX); 115 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_TERM_CTX); 116 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_ENQUEUE_CTX); 117 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_DEQUEUE_HEAD_CTX); 118 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_TRY_EVICT_CTX); 119 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_RUNPOOL_ADD_CTX); 120 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_RUNPOOL_REMOVE_CTX); 121 DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_FOREACH_CTX_JOBS); 122 #undef DEFINE_MALI_JM_REFCOUNT_EVENT 123 124 DECLARE_EVENT_CLASS(mali_jm_add_template, 125 TP_PROTO(struct kbase_context *kctx, u64 gpu_addr, u64 info_val), 126 TP_ARGS(kctx, gpu_addr, info_val), 127 TP_STRUCT__entry( 128 __field(pid_t, kctx_tgid) 129 __field(u32, kctx_id) 130 __field(u64, gpu_addr) 131 __field(u64, info_val) 132 ), 133 TP_fast_assign( 134 __entry->kctx_id = (kctx) ? kctx->id : 0u; 135 __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; 136 __entry->gpu_addr = gpu_addr; 137 __entry->info_val = info_val; 138 ), 139 TP_printk("kctx=%d_%u gpu_addr=0x%llx info=0x%llx", __entry->kctx_tgid, 140 __entry->kctx_id, __entry->gpu_addr, __entry->info_val) 141 ); 142 143 #define DEFINE_MALI_JM_ADD_EVENT(name) \ 144 DEFINE_EVENT(mali_jm_add_template, mali_##name, \ 145 TP_PROTO(struct kbase_context *kctx, u64 gpu_addr, u64 info_val), \ 146 TP_ARGS(kctx, gpu_addr, info_val)) 147 DEFINE_MALI_JM_ADD_EVENT(JD_DONE_WORKER); 148 DEFINE_MALI_JM_ADD_EVENT(JD_DONE_WORKER_END); 149 DEFINE_MALI_JM_ADD_EVENT(JD_CANCEL_WORKER); 150 DEFINE_MALI_JM_ADD_EVENT(JD_DONE); 151 DEFINE_MALI_JM_ADD_EVENT(JD_CANCEL); 152 DEFINE_MALI_JM_ADD_EVENT(JD_ZAP_CONTEXT); 153 DEFINE_MALI_JM_ADD_EVENT(JM_IRQ); 154 DEFINE_MALI_JM_ADD_EVENT(JM_IRQ_END); 155 DEFINE_MALI_JM_ADD_EVENT(JM_FLUSH_WORKQS); 156 DEFINE_MALI_JM_ADD_EVENT(JM_FLUSH_WORKQS_DONE); 157 DEFINE_MALI_JM_ADD_EVENT(JM_ZAP_NON_SCHEDULED); 158 DEFINE_MALI_JM_ADD_EVENT(JM_ZAP_SCHEDULED); 159 DEFINE_MALI_JM_ADD_EVENT(JM_ZAP_DONE); 160 DEFINE_MALI_JM_ADD_EVENT(JM_SUBMIT_AFTER_RESET); 161 DEFINE_MALI_JM_ADD_EVENT(JM_JOB_COMPLETE); 162 DEFINE_MALI_JM_ADD_EVENT(JS_UNPULL_JOB); 163 DEFINE_MALI_JM_ADD_EVENT(JS_CTX_ATTR_NOW_ON_RUNPOOL); 164 DEFINE_MALI_JM_ADD_EVENT(JS_CTX_ATTR_NOW_OFF_RUNPOOL); 165 DEFINE_MALI_JM_ADD_EVENT(JS_CTX_ATTR_NOW_ON_CTX); 166 DEFINE_MALI_JM_ADD_EVENT(JS_CTX_ATTR_NOW_OFF_CTX); 167 DEFINE_MALI_JM_ADD_EVENT(JS_RETURN_WORKER); 168 DEFINE_MALI_JM_ADD_EVENT(JS_RETURN_WORKER_END); 169 DEFINE_MALI_JM_ADD_EVENT(JS_POLICY_TIMER_END); 170 DEFINE_MALI_JM_ADD_EVENT(JS_POLICY_TIMER_START); 171 DEFINE_MALI_JM_ADD_EVENT(JS_POLICY_ENQUEUE_JOB); 172 #undef DEFINE_MALI_JM_ADD_EVENT 173 174 #endif /* !defined(_KBASE_DEBUG_LINUX_KTRACE_JM_H_) || defined(TRACE_HEADER_MULTI_READ)*/ 175