diff options
author | Jörg Wagner <jorwag@google.com> | 2023-12-14 09:44:26 +0000 |
---|---|---|
committer | Jörg Wagner <jorwag@google.com> | 2023-12-14 09:44:26 +0000 |
commit | 049a542207ed694271316782397b78b2e202086a (patch) | |
tree | 105e9378d4d5062dc72109fdd4a77c915bd9425d /mali_kbase/debug | |
parent | e61eb93296e9f940b32d4ad4b0c3a5557cbeaf17 (diff) | |
download | gpu-049a542207ed694271316782397b78b2e202086a.tar.gz |
Update KMD to r47p0
Provenance: ipdelivery@ad01e50d640910a99224382bb227e6d4de627657
Change-Id: I19ac9bce34a5c5a319c1b4a388e8b037b3dfe6e7
Diffstat (limited to 'mali_kbase/debug')
17 files changed, 544 insertions, 646 deletions
diff --git a/mali_kbase/debug/backend/mali_kbase_debug_coresight_csf.c b/mali_kbase/debug/backend/mali_kbase_debug_coresight_csf.c index ff5f947..fe8201f 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_coresight_csf.c +++ b/mali_kbase/debug/backend/mali_kbase_debug_coresight_csf.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note /* * - * (C) COPYRIGHT 2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2022-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -219,10 +219,16 @@ static int execute_op(struct kbase_device *kbdev, struct kbase_debug_coresight_c static int coresight_config_enable(struct kbase_device *kbdev, struct kbase_debug_coresight_csf_config *config) { + bool glb_init_request_pending; + unsigned long flags; int ret = 0; int i; - if (!config) + spin_lock_irqsave(&kbdev->hwaccess_lock, flags); + glb_init_request_pending = kbdev->csf.glb_init_request_pending; + spin_unlock_irqrestore(&kbdev->hwaccess_lock, flags); + + if (!config || glb_init_request_pending) return -EINVAL; if (config->state == KBASE_DEBUG_CORESIGHT_CSF_ENABLED) @@ -249,10 +255,16 @@ static int coresight_config_enable(struct kbase_device *kbdev, static int coresight_config_disable(struct kbase_device *kbdev, struct kbase_debug_coresight_csf_config *config) { + bool glb_init_request_pending; + unsigned long flags; int ret = 0; int i; - if (!config) + spin_lock_irqsave(&kbdev->hwaccess_lock, flags); + glb_init_request_pending = kbdev->csf.glb_init_request_pending; + spin_unlock_irqrestore(&kbdev->hwaccess_lock, flags); + + if (!config || glb_init_request_pending) return -EINVAL; if (config->state == KBASE_DEBUG_CORESIGHT_CSF_DISABLED) @@ -766,7 +778,8 @@ KBASE_EXPORT_TEST_API(kbase_debug_coresight_csf_state_check); bool kbase_debug_coresight_csf_state_wait(struct kbase_device *kbdev, enum kbase_debug_coresight_csf_state state) { - const long wait_timeout = kbase_csf_timeout_in_jiffies(kbdev->csf.fw_timeout_ms); + const long wait_timeout = + kbase_csf_timeout_in_jiffies(kbase_get_timeout_ms(kbdev, CSF_FIRMWARE_TIMEOUT)); struct kbase_debug_coresight_csf_config *config_entry, *next_config_entry; unsigned long flags; bool success = true; @@ -776,7 +789,7 @@ bool kbase_debug_coresight_csf_state_wait(struct kbase_device *kbdev, spin_lock_irqsave(&kbdev->csf.coresight.lock, flags); list_for_each_entry_safe(config_entry, next_config_entry, &kbdev->csf.coresight.configs, - link) { + link) { const enum kbase_debug_coresight_csf_state prev_state = config_entry->state; long remaining; @@ -836,13 +849,13 @@ void kbase_debug_coresight_csf_term(struct kbase_device *kbdev) spin_lock_irqsave(&kbdev->csf.coresight.lock, flags); list_for_each_entry_safe(config_entry, next_config_entry, &kbdev->csf.coresight.configs, - link) { + link) { list_del_init(&config_entry->link); kfree(config_entry); } list_for_each_entry_safe(client_entry, next_client_entry, &kbdev->csf.coresight.clients, - link) { + link) { list_del_init(&client_entry->link); kfree(client_entry); } diff --git a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_codes_csf.h b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_codes_csf.h index 41b2b00..18520db 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_codes_csf.h +++ b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_codes_csf.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -39,11 +39,11 @@ #if 0 /* Dummy section to avoid breaking formatting */ int dummy_array[] = { #endif - /* +/* * Generic CSF events */ - /* info_val = 0 */ - KBASE_KTRACE_CODE_MAKE_CODE(SCHEDULER_EVICT_CTX_SLOTS_START), +/* info_val = 0 */ +KBASE_KTRACE_CODE_MAKE_CODE(SCHEDULER_EVICT_CTX_SLOTS_START), /* info_val == number of CSGs supported */ KBASE_KTRACE_CODE_MAKE_CODE(SCHEDULER_EVICT_CTX_SLOTS_END), /* info_val[0:7] == fw version_minor @@ -209,13 +209,11 @@ int dummy_array[] = { KBASE_KTRACE_CODE_MAKE_CODE(PROTM_EVENT_WORKER_END), /* info_val = scheduler state */ - KBASE_KTRACE_CODE_MAKE_CODE(SCHED_BUSY), - KBASE_KTRACE_CODE_MAKE_CODE(SCHED_INACTIVE), - KBASE_KTRACE_CODE_MAKE_CODE(SCHED_SUSPENDED), - KBASE_KTRACE_CODE_MAKE_CODE(SCHED_SLEEPING), + KBASE_KTRACE_CODE_MAKE_CODE(SCHED_BUSY), KBASE_KTRACE_CODE_MAKE_CODE(SCHED_INACTIVE), + KBASE_KTRACE_CODE_MAKE_CODE(SCHED_SUSPENDED), KBASE_KTRACE_CODE_MAKE_CODE(SCHED_SLEEPING), - /* info_val = mcu state */ -#define KBASEP_MCU_STATE(n) KBASE_KTRACE_CODE_MAKE_CODE(PM_MCU_ ## n), +/* info_val = mcu state */ +#define KBASEP_MCU_STATE(n) KBASE_KTRACE_CODE_MAKE_CODE(PM_MCU_##n), #include "backend/gpu/mali_kbase_pm_mcu_states.h" #undef KBASEP_MCU_STATE @@ -237,8 +235,7 @@ int dummy_array[] = { /* info_val == queue->enabled */ KBASE_KTRACE_CODE_MAKE_CODE(CSI_START), /* info_val == queue->enabled before stop */ - KBASE_KTRACE_CODE_MAKE_CODE(CSI_STOP), - KBASE_KTRACE_CODE_MAKE_CODE(CSI_STOP_REQ), + KBASE_KTRACE_CODE_MAKE_CODE(CSI_STOP), KBASE_KTRACE_CODE_MAKE_CODE(CSI_STOP_REQ), /* info_val == CS_REQ ^ CS_ACK that were not processed due to the group * being suspended */ @@ -252,8 +249,7 @@ int dummy_array[] = { /* info_val == CS_ACK_PROTM_PEND ^ CS_REQ_PROTM_PEND */ KBASE_KTRACE_CODE_MAKE_CODE(CSI_PROTM_ACK), /* info_val == group->run_State (for group the queue is bound to) */ - KBASE_KTRACE_CODE_MAKE_CODE(QUEUE_START), - KBASE_KTRACE_CODE_MAKE_CODE(QUEUE_STOP), + KBASE_KTRACE_CODE_MAKE_CODE(QUEUE_START), KBASE_KTRACE_CODE_MAKE_CODE(QUEUE_STOP), /* info_val == contents of CS_STATUS_WAIT_SYNC_POINTER */ KBASE_KTRACE_CODE_MAKE_CODE(QUEUE_SYNC_UPDATE_EVAL_START), /* info_val == bool for result of the evaluation */ diff --git a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_codes_jm.h b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_codes_jm.h index 6ba98b7..14dcc26 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_codes_jm.h +++ b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_codes_jm.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2011-2015, 2018-2021 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2011-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -40,11 +40,11 @@ int dummy_array[] = { #endif - /* +/* * Job Slot management events */ - /* info_val==irq rawstat at start */ - KBASE_KTRACE_CODE_MAKE_CODE(JM_IRQ), +/* info_val==irq rawstat at start */ +KBASE_KTRACE_CODE_MAKE_CODE(JM_IRQ), /* info_val==jobs processed */ KBASE_KTRACE_CODE_MAKE_CODE(JM_IRQ_END), /* In the following: @@ -73,8 +73,7 @@ int dummy_array[] = { * JS_HEAD on submit * - otherwise gpu_addr==0 */ - KBASE_KTRACE_CODE_MAKE_CODE(JM_SOFTSTOP), - KBASE_KTRACE_CODE_MAKE_CODE(JM_SOFTSTOP_0), + KBASE_KTRACE_CODE_MAKE_CODE(JM_SOFTSTOP), KBASE_KTRACE_CODE_MAKE_CODE(JM_SOFTSTOP_0), KBASE_KTRACE_CODE_MAKE_CODE(JM_SOFTSTOP_1), /* gpu_addr==JS_HEAD read */ KBASE_KTRACE_CODE_MAKE_CODE(JM_HARDSTOP), @@ -89,14 +88,12 @@ int dummy_array[] = { * - otherwise gpu_addr==0 */ /* gpu_addr==JS_HEAD read */ - KBASE_KTRACE_CODE_MAKE_CODE(JM_CHECK_HEAD), - KBASE_KTRACE_CODE_MAKE_CODE(JM_FLUSH_WORKQS), + KBASE_KTRACE_CODE_MAKE_CODE(JM_CHECK_HEAD), KBASE_KTRACE_CODE_MAKE_CODE(JM_FLUSH_WORKQS), KBASE_KTRACE_CODE_MAKE_CODE(JM_FLUSH_WORKQS_DONE), /* info_val == is_scheduled */ KBASE_KTRACE_CODE_MAKE_CODE(JM_ZAP_NON_SCHEDULED), /* info_val == is_scheduled */ - KBASE_KTRACE_CODE_MAKE_CODE(JM_ZAP_SCHEDULED), - KBASE_KTRACE_CODE_MAKE_CODE(JM_ZAP_DONE), + KBASE_KTRACE_CODE_MAKE_CODE(JM_ZAP_SCHEDULED), KBASE_KTRACE_CODE_MAKE_CODE(JM_ZAP_DONE), /* info_val == nr jobs submitted */ KBASE_KTRACE_CODE_MAKE_CODE(JM_SLOT_SOFT_OR_HARD_STOP), /* gpu_addr==JS_HEAD_NEXT last written */ @@ -203,4 +200,4 @@ int dummy_array[] = { }; #endif -/* ***** THE LACK OF HEADER GUARDS IS INTENTIONAL ***** */ + /* ***** THE LACK OF HEADER GUARDS IS INTENTIONAL ***** */ diff --git a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_csf.c b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_csf.c index cff6f89..ec5ca10 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_csf.c +++ b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_csf.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note /* * - * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -27,14 +27,15 @@ void kbasep_ktrace_backend_format_header(char *buffer, int sz, s32 *written) { - *written += MAX(snprintf(buffer + *written, MAX(sz - *written, 0), - "group,slot,prio,csi,kcpu"), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), + "group,slot,prio,csi,kcpu"), + 0); } -void kbasep_ktrace_backend_format_msg(struct kbase_ktrace_msg *trace_msg, - char *buffer, int sz, s32 *written) +void kbasep_ktrace_backend_format_msg(struct kbase_ktrace_msg *trace_msg, char *buffer, int sz, + s32 *written) { - const union kbase_ktrace_backend * const be_msg = &trace_msg->backend; + const union kbase_ktrace_backend *const be_msg = &trace_msg->backend; /* At present, no need to check for KBASE_KTRACE_FLAG_BACKEND, as the * other backend-specific flags currently imply this anyway */ @@ -43,45 +44,39 @@ void kbasep_ktrace_backend_format_msg(struct kbase_ktrace_msg *trace_msg, if (be_msg->gpu.flags & KBASE_KTRACE_FLAG_CSF_GROUP) { const s8 slot = be_msg->gpu.csg_nr; /* group,slot, */ - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - "%u,%d,", be_msg->gpu.group_handle, slot), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), "%u,%d,", + be_msg->gpu.group_handle, slot), + 0); /* prio */ if (slot >= 0) - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - "%u", be_msg->gpu.slot_prio), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), + "%u", be_msg->gpu.slot_prio), + 0); /* , */ - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - ","), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), ","), 0); } else { /* No group,slot,prio fields, but ensure ending with "," */ - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - ",,,"), 0); + *written += + MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), ",,,"), 0); } /* queue parts: csi */ if (trace_msg->backend.gpu.flags & KBASE_KTRACE_FLAG_CSF_QUEUE) - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - "%d", be_msg->gpu.csi_index), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), "%d", + be_msg->gpu.csi_index), + 0); /* , */ - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - ","), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), ","), 0); if (be_msg->gpu.flags & KBASE_KTRACE_FLAG_CSF_KCPU) { /* kcpu data */ - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - "kcpu %d (0x%llx)", - be_msg->kcpu.id, - be_msg->kcpu.extra_info_val), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), + "kcpu %d (0x%llx)", be_msg->kcpu.id, + be_msg->kcpu.extra_info_val), + 0); } /* Don't end with a trailing "," - this is a 'standalone' formatted @@ -89,10 +84,9 @@ void kbasep_ktrace_backend_format_msg(struct kbase_ktrace_msg *trace_msg, */ } -void kbasep_ktrace_add_csf(struct kbase_device *kbdev, - enum kbase_ktrace_code code, struct kbase_queue_group *group, - struct kbase_queue *queue, kbase_ktrace_flag_t flags, - u64 info_val) +void kbasep_ktrace_add_csf(struct kbase_device *kbdev, enum kbase_ktrace_code code, + struct kbase_queue_group *group, struct kbase_queue *queue, + kbase_ktrace_flag_t flags, u64 info_val) { unsigned long irqflags; struct kbase_ktrace_msg *trace_msg; @@ -113,8 +107,7 @@ void kbasep_ktrace_add_csf(struct kbase_device *kbdev, kctx = queue->kctx; /* Fill the common part of the message (including backend.gpu.flags) */ - kbasep_ktrace_msg_init(&kbdev->ktrace, trace_msg, code, kctx, flags, - info_val); + kbasep_ktrace_msg_init(&kbdev->ktrace, trace_msg, code, kctx, flags, info_val); /* Indicate to the common code that backend-specific parts will be * valid @@ -140,11 +133,9 @@ void kbasep_ktrace_add_csf(struct kbase_device *kbdev, trace_msg->backend.gpu.csg_nr = slot; if (slot >= 0) { - struct kbase_csf_csg_slot *csg_slot = - &kbdev->csf.scheduler.csg_slots[slot]; + struct kbase_csf_csg_slot *csg_slot = &kbdev->csf.scheduler.csg_slots[slot]; - trace_msg->backend.gpu.slot_prio = - csg_slot->priority; + trace_msg->backend.gpu.slot_prio = csg_slot->priority; } /* slot >=0 indicates whether slot_prio valid, so no need to * initialize in the case where it's invalid @@ -159,10 +150,9 @@ void kbasep_ktrace_add_csf(struct kbase_device *kbdev, spin_unlock_irqrestore(&kbdev->ktrace.lock, irqflags); } -void kbasep_ktrace_add_csf_kcpu(struct kbase_device *kbdev, - enum kbase_ktrace_code code, - struct kbase_kcpu_command_queue *queue, - u64 info_val1, u64 info_val2) +void kbasep_ktrace_add_csf_kcpu(struct kbase_device *kbdev, enum kbase_ktrace_code code, + struct kbase_kcpu_command_queue *queue, u64 info_val1, + u64 info_val2) { unsigned long irqflags; struct kbase_ktrace_msg *trace_msg; @@ -177,8 +167,7 @@ void kbasep_ktrace_add_csf_kcpu(struct kbase_device *kbdev, trace_msg = kbasep_ktrace_reserve(&kbdev->ktrace); /* Fill the common part of the message */ - kbasep_ktrace_msg_init(&kbdev->ktrace, trace_msg, code, kctx, 0, - info_val1); + kbasep_ktrace_msg_init(&kbdev->ktrace, trace_msg, code, kctx, 0, info_val1); /* Indicate to the common code that backend-specific parts will be * valid diff --git a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_csf.h b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_csf.h index 0593c30..e30aedb 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_csf.h +++ b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_csf.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2021 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -38,10 +38,9 @@ * PRIVATE: do not use directly. Use KBASE_KTRACE_ADD_CSF() instead. */ -void kbasep_ktrace_add_csf(struct kbase_device *kbdev, - enum kbase_ktrace_code code, struct kbase_queue_group *group, - struct kbase_queue *queue, kbase_ktrace_flag_t flags, - u64 info_val); +void kbasep_ktrace_add_csf(struct kbase_device *kbdev, enum kbase_ktrace_code code, + struct kbase_queue_group *group, struct kbase_queue *queue, + kbase_ktrace_flag_t flags, u64 info_val); /** * kbasep_ktrace_add_csf_kcpu - internal function to add trace about the CSF @@ -58,39 +57,36 @@ void kbasep_ktrace_add_csf(struct kbase_device *kbdev, * * PRIVATE: do not use directly. Use KBASE_KTRACE_ADD_CSF_KCPU() instead. */ -void kbasep_ktrace_add_csf_kcpu(struct kbase_device *kbdev, - enum kbase_ktrace_code code, - struct kbase_kcpu_command_queue *queue, - u64 info_val1, u64 info_val2); +void kbasep_ktrace_add_csf_kcpu(struct kbase_device *kbdev, enum kbase_ktrace_code code, + struct kbase_kcpu_command_queue *queue, u64 info_val1, + u64 info_val2); #define KBASE_KTRACE_RBUF_ADD_CSF(kbdev, code, group, queue, flags, info_val) \ - kbasep_ktrace_add_csf(kbdev, KBASE_KTRACE_CODE(code), group, queue, \ - flags, info_val) + kbasep_ktrace_add_csf(kbdev, KBASE_KTRACE_CODE(code), group, queue, flags, info_val) -#define KBASE_KTRACE_RBUF_ADD_CSF_KCPU(kbdev, code, queue, info_val1, \ - info_val2) kbasep_ktrace_add_csf_kcpu(kbdev, KBASE_KTRACE_CODE(code), \ - queue, info_val1, info_val2) +#define KBASE_KTRACE_RBUF_ADD_CSF_KCPU(kbdev, code, queue, info_val1, info_val2) \ + kbasep_ktrace_add_csf_kcpu(kbdev, KBASE_KTRACE_CODE(code), queue, info_val1, info_val2) #else /* KBASE_KTRACE_TARGET_RBUF */ #define KBASE_KTRACE_RBUF_ADD_CSF(kbdev, code, group, queue, flags, info_val) \ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(group);\ - CSTD_UNUSED(queue);\ - CSTD_UNUSED(flags);\ - CSTD_UNUSED(info_val);\ - CSTD_NOP(0);\ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(group); \ + CSTD_UNUSED(queue); \ + CSTD_UNUSED(flags); \ + CSTD_UNUSED(info_val); \ + CSTD_NOP(0); \ } while (0) #define KBASE_KTRACE_RBUF_ADD_CSF_KCPU(kbdev, code, queue, info_val1, info_val2) \ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(queue);\ - CSTD_UNUSED(info_val1);\ - CSTD_UNUSED(info_val2);\ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(queue); \ + CSTD_UNUSED(info_val1); \ + CSTD_UNUSED(info_val2); \ } while (0) #endif /* KBASE_KTRACE_TARGET_RBUF */ @@ -112,21 +108,21 @@ void kbasep_ktrace_add_csf_kcpu(struct kbase_device *kbdev, #else /* KBASE_KTRACE_TARGET_FTRACE */ #define KBASE_KTRACE_FTRACE_ADD_CSF(kbdev, code, group, queue, info_val) \ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(group);\ - CSTD_UNUSED(queue);\ - CSTD_UNUSED(info_val);\ - CSTD_NOP(0);\ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(group); \ + CSTD_UNUSED(queue); \ + CSTD_UNUSED(info_val); \ + CSTD_NOP(0); \ } while (0) #define KBASE_KTRACE_FTRACE_ADD_KCPU(code, queue, info_val1, info_val2) \ - do {\ - CSTD_NOP(code);\ - CSTD_UNUSED(queue);\ - CSTD_UNUSED(info_val1);\ - CSTD_UNUSED(info_val2);\ + do { \ + CSTD_NOP(code); \ + CSTD_UNUSED(queue); \ + CSTD_UNUSED(info_val1); \ + CSTD_UNUSED(info_val2); \ } while (0) #endif /* KBASE_KTRACE_TARGET_FTRACE */ @@ -149,15 +145,13 @@ void kbasep_ktrace_add_csf_kcpu(struct kbase_device *kbdev, * a) be static or static inline, and * b) just return 0 and have no other statements present in the body. */ -#define KBASE_KTRACE_ADD_CSF_GRP(kbdev, code, group, info_val) \ - do { \ - /* capture values that could come from non-pure fn calls */ \ - struct kbase_queue_group *__group = group; \ - u64 __info_val = info_val; \ - KBASE_KTRACE_RBUF_ADD_CSF(kbdev, code, __group, NULL, 0u, \ - __info_val); \ - KBASE_KTRACE_FTRACE_ADD_CSF(kbdev, code, __group, NULL, \ - __info_val); \ +#define KBASE_KTRACE_ADD_CSF_GRP(kbdev, code, group, info_val) \ + do { \ + /* capture values that could come from non-pure fn calls */ \ + struct kbase_queue_group *__group = group; \ + u64 __info_val = info_val; \ + KBASE_KTRACE_RBUF_ADD_CSF(kbdev, code, __group, NULL, 0u, __info_val); \ + KBASE_KTRACE_FTRACE_ADD_CSF(kbdev, code, __group, NULL, __info_val); \ } while (0) /** @@ -175,29 +169,24 @@ void kbasep_ktrace_add_csf_kcpu(struct kbase_device *kbdev, * a) be static or static inline, and * b) just return 0 and have no other statements present in the body. */ -#define KBASE_KTRACE_ADD_CSF_GRP_Q(kbdev, code, group, queue, info_val) \ - do { \ - /* capture values that could come from non-pure fn calls */ \ - struct kbase_queue_group *__group = group; \ - struct kbase_queue *__queue = queue; \ - u64 __info_val = info_val; \ - KBASE_KTRACE_RBUF_ADD_CSF(kbdev, code, __group, __queue, 0u, \ - __info_val); \ - KBASE_KTRACE_FTRACE_ADD_CSF(kbdev, code, __group, \ - __queue, __info_val); \ +#define KBASE_KTRACE_ADD_CSF_GRP_Q(kbdev, code, group, queue, info_val) \ + do { \ + /* capture values that could come from non-pure fn calls */ \ + struct kbase_queue_group *__group = group; \ + struct kbase_queue *__queue = queue; \ + u64 __info_val = info_val; \ + KBASE_KTRACE_RBUF_ADD_CSF(kbdev, code, __group, __queue, 0u, __info_val); \ + KBASE_KTRACE_FTRACE_ADD_CSF(kbdev, code, __group, __queue, __info_val); \ } while (0) - -#define KBASE_KTRACE_ADD_CSF_KCPU(kbdev, code, queue, info_val1, info_val2) \ - do { \ - /* capture values that could come from non-pure fn calls */ \ - struct kbase_kcpu_command_queue *__queue = queue; \ - u64 __info_val1 = info_val1; \ - u64 __info_val2 = info_val2; \ - KBASE_KTRACE_RBUF_ADD_CSF_KCPU(kbdev, code, __queue, \ - __info_val1, __info_val2); \ - KBASE_KTRACE_FTRACE_ADD_KCPU(code, __queue, \ - __info_val1, __info_val2); \ +#define KBASE_KTRACE_ADD_CSF_KCPU(kbdev, code, queue, info_val1, info_val2) \ + do { \ + /* capture values that could come from non-pure fn calls */ \ + struct kbase_kcpu_command_queue *__queue = queue; \ + u64 __info_val1 = info_val1; \ + u64 __info_val2 = info_val2; \ + KBASE_KTRACE_RBUF_ADD_CSF_KCPU(kbdev, code, __queue, __info_val1, __info_val2); \ + KBASE_KTRACE_FTRACE_ADD_KCPU(code, __queue, __info_val1, __info_val2); \ } while (0) #endif /* _KBASE_DEBUG_KTRACE_CSF_H_ */ diff --git a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_defs_csf.h b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_defs_csf.h index 1896e10..710f120 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_defs_csf.h +++ b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_defs_csf.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -53,18 +53,17 @@ #define KBASE_KTRACE_VERSION_MINOR 3 /* indicates if the trace message has valid queue-group related info. */ -#define KBASE_KTRACE_FLAG_CSF_GROUP (((kbase_ktrace_flag_t)1) << 0) +#define KBASE_KTRACE_FLAG_CSF_GROUP (((kbase_ktrace_flag_t)1) << 0) /* indicates if the trace message has valid queue related info. */ -#define KBASE_KTRACE_FLAG_CSF_QUEUE (((kbase_ktrace_flag_t)1) << 1) +#define KBASE_KTRACE_FLAG_CSF_QUEUE (((kbase_ktrace_flag_t)1) << 1) /* indicates if the trace message has valid KCPU-queue related info. */ -#define KBASE_KTRACE_FLAG_CSF_KCPU (((kbase_ktrace_flag_t)1) << 2) +#define KBASE_KTRACE_FLAG_CSF_KCPU (((kbase_ktrace_flag_t)1) << 2) /* Collect all the flags together for debug checking */ #define KBASE_KTRACE_FLAG_BACKEND_ALL \ - (KBASE_KTRACE_FLAG_CSF_GROUP | KBASE_KTRACE_FLAG_CSF_QUEUE | \ - KBASE_KTRACE_FLAG_CSF_KCPU) + (KBASE_KTRACE_FLAG_CSF_GROUP | KBASE_KTRACE_FLAG_CSF_QUEUE | KBASE_KTRACE_FLAG_CSF_KCPU) /** * union kbase_ktrace_backend - backend specific part of a trace message diff --git a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_defs_jm.h b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_defs_jm.h index efa8ab0..9978e49 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_defs_jm.h +++ b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_defs_jm.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2021 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -62,15 +62,14 @@ /* indicates if the trace message has a valid refcount member */ #define KBASE_KTRACE_FLAG_JM_REFCOUNT (((kbase_ktrace_flag_t)1) << 0) /* indicates if the trace message has a valid jobslot member */ -#define KBASE_KTRACE_FLAG_JM_JOBSLOT (((kbase_ktrace_flag_t)1) << 1) +#define KBASE_KTRACE_FLAG_JM_JOBSLOT (((kbase_ktrace_flag_t)1) << 1) /* indicates if the trace message has valid atom related info. */ -#define KBASE_KTRACE_FLAG_JM_ATOM (((kbase_ktrace_flag_t)1) << 2) +#define KBASE_KTRACE_FLAG_JM_ATOM (((kbase_ktrace_flag_t)1) << 2) #if KBASE_KTRACE_TARGET_RBUF /* Collect all the flags together for debug checking */ #define KBASE_KTRACE_FLAG_BACKEND_ALL \ - (KBASE_KTRACE_FLAG_JM_REFCOUNT | KBASE_KTRACE_FLAG_JM_JOBSLOT \ - | KBASE_KTRACE_FLAG_JM_ATOM) + (KBASE_KTRACE_FLAG_JM_REFCOUNT | KBASE_KTRACE_FLAG_JM_JOBSLOT | KBASE_KTRACE_FLAG_JM_ATOM) /** * union kbase_ktrace_backend - backend specific part of a trace message @@ -99,7 +98,7 @@ union kbase_ktrace_backend { * KBASE_KTRACE_FLAG_JM_ATOM */ u64 gpu_addr; - int atom_number; /* Only valid for KBASE_KTRACE_FLAG_JM_ATOM */ + unsigned int atom_number; /* Only valid for KBASE_KTRACE_FLAG_JM_ATOM */ /* Pack smaller members together */ kbase_ktrace_code_t code; kbase_ktrace_flag_t flags; diff --git a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_jm.c b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_jm.c index 6597a15..beac074 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_jm.c +++ b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_jm.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note /* * - * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -27,55 +27,51 @@ void kbasep_ktrace_backend_format_header(char *buffer, int sz, s32 *written) { - *written += MAX(snprintf(buffer + *written, MAX(sz - *written, 0), - "katom,gpu_addr,jobslot,refcount"), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), + "katom,gpu_addr,jobslot,refcount"), + 0); } -void kbasep_ktrace_backend_format_msg(struct kbase_ktrace_msg *trace_msg, - char *buffer, int sz, s32 *written) +void kbasep_ktrace_backend_format_msg(struct kbase_ktrace_msg *trace_msg, char *buffer, int sz, + s32 *written) { /* katom */ if (trace_msg->backend.gpu.flags & KBASE_KTRACE_FLAG_JM_ATOM) - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - "atom %d (ud: 0x%llx 0x%llx)", - trace_msg->backend.gpu.atom_number, - trace_msg->backend.gpu.atom_udata[0], - trace_msg->backend.gpu.atom_udata[1]), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), + "atom %u (ud: 0x%llx 0x%llx)", + trace_msg->backend.gpu.atom_number, + trace_msg->backend.gpu.atom_udata[0], + trace_msg->backend.gpu.atom_udata[1]), + 0); /* gpu_addr */ if (trace_msg->backend.gpu.flags & KBASE_KTRACE_FLAG_BACKEND) - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - ",%.8llx,", trace_msg->backend.gpu.gpu_addr), + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), + ",%.8llx,", trace_msg->backend.gpu.gpu_addr), 0); else - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - ",,"), 0); + *written += + MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), ",,"), 0); /* jobslot */ if (trace_msg->backend.gpu.flags & KBASE_KTRACE_FLAG_JM_JOBSLOT) - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - "%d", trace_msg->backend.gpu.jobslot), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), "%d", + trace_msg->backend.gpu.jobslot), + 0); - *written += MAX(snprintf(buffer + *written, MAX(sz - *written, 0), - ","), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), ","), 0); /* refcount */ if (trace_msg->backend.gpu.flags & KBASE_KTRACE_FLAG_JM_REFCOUNT) - *written += MAX(snprintf(buffer + *written, - MAX(sz - *written, 0), - "%d", trace_msg->backend.gpu.refcount), 0); + *written += MAX(snprintf(buffer + *written, (size_t)MAX(sz - *written, 0), "%d", + trace_msg->backend.gpu.refcount), + 0); } -void kbasep_ktrace_add_jm(struct kbase_device *kbdev, - enum kbase_ktrace_code code, - struct kbase_context *kctx, - const struct kbase_jd_atom *katom, u64 gpu_addr, - kbase_ktrace_flag_t flags, int refcount, int jobslot, - u64 info_val) +void kbasep_ktrace_add_jm(struct kbase_device *kbdev, enum kbase_ktrace_code code, + struct kbase_context *kctx, const struct kbase_jd_atom *katom, + u64 gpu_addr, kbase_ktrace_flag_t flags, int refcount, + unsigned int jobslot, u64 info_val) { unsigned long irqflags; struct kbase_ktrace_msg *trace_msg; @@ -89,8 +85,7 @@ void kbasep_ktrace_add_jm(struct kbase_device *kbdev, trace_msg = kbasep_ktrace_reserve(&kbdev->ktrace); /* Fill the common part of the message (including backend.gpu.flags) */ - kbasep_ktrace_msg_init(&kbdev->ktrace, trace_msg, code, kctx, flags, - info_val); + kbasep_ktrace_msg_init(&kbdev->ktrace, trace_msg, code, kctx, flags, info_val); /* Indicate to the common code that backend-specific parts will be * valid @@ -101,8 +96,7 @@ void kbasep_ktrace_add_jm(struct kbase_device *kbdev, if (katom) { trace_msg->backend.gpu.flags |= KBASE_KTRACE_FLAG_JM_ATOM; - trace_msg->backend.gpu.atom_number = - kbase_jd_atom_id(katom->kctx, katom); + trace_msg->backend.gpu.atom_number = kbase_jd_atom_id(katom->kctx, katom); trace_msg->backend.gpu.atom_udata[0] = katom->udata.blob[0]; trace_msg->backend.gpu.atom_udata[1] = katom->udata.blob[1]; } diff --git a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_jm.h b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_jm.h index ffae8d4..71c98b2 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_ktrace_jm.h +++ b/mali_kbase/debug/backend/mali_kbase_debug_ktrace_jm.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2021 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -40,33 +40,31 @@ * * PRIVATE: do not use directly. Use KBASE_KTRACE_ADD_JM() instead. */ -void kbasep_ktrace_add_jm(struct kbase_device *kbdev, - enum kbase_ktrace_code code, - struct kbase_context *kctx, - const struct kbase_jd_atom *katom, u64 gpu_addr, - kbase_ktrace_flag_t flags, int refcount, int jobslot, - u64 info_val); +void kbasep_ktrace_add_jm(struct kbase_device *kbdev, enum kbase_ktrace_code code, + struct kbase_context *kctx, const struct kbase_jd_atom *katom, + u64 gpu_addr, kbase_ktrace_flag_t flags, int refcount, + unsigned int jobslot, u64 info_val); -#define KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, gpu_addr, flags, \ - refcount, jobslot, info_val) \ - kbasep_ktrace_add_jm(kbdev, KBASE_KTRACE_CODE(code), kctx, katom, \ - gpu_addr, flags, refcount, jobslot, info_val) +#define KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, gpu_addr, flags, refcount, jobslot, \ + info_val) \ + kbasep_ktrace_add_jm(kbdev, KBASE_KTRACE_CODE(code), kctx, katom, gpu_addr, flags, \ + refcount, jobslot, info_val) #else /* KBASE_KTRACE_TARGET_RBUF */ -#define KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, gpu_addr, flags, \ - refcount, jobslot, info_val) \ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(kctx);\ - CSTD_UNUSED(katom);\ - CSTD_UNUSED(gpu_addr);\ - CSTD_UNUSED(flags);\ - CSTD_UNUSED(refcount);\ - CSTD_UNUSED(jobslot);\ - CSTD_UNUSED(info_val);\ - CSTD_NOP(0);\ +#define KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, gpu_addr, flags, refcount, jobslot, \ + info_val) \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(kctx); \ + CSTD_UNUSED(katom); \ + CSTD_UNUSED(gpu_addr); \ + CSTD_UNUSED(flags); \ + CSTD_UNUSED(refcount); \ + CSTD_UNUSED(jobslot); \ + CSTD_UNUSED(info_val); \ + CSTD_NOP(0); \ } while (0) #endif /* KBASE_KTRACE_TARGET_RBUF */ @@ -77,85 +75,79 @@ void kbasep_ktrace_add_jm(struct kbase_device *kbdev, * included by the parent header file */ #if KBASE_KTRACE_TARGET_FTRACE -#define KBASE_KTRACE_FTRACE_ADD_JM_SLOT(kbdev, code, kctx, katom, gpu_addr, \ - jobslot) \ +#define KBASE_KTRACE_FTRACE_ADD_JM_SLOT(kbdev, code, kctx, katom, gpu_addr, jobslot) \ trace_mali_##code(kctx, jobslot, 0) -#define KBASE_KTRACE_FTRACE_ADD_JM_SLOT_INFO(kbdev, code, kctx, katom, \ - gpu_addr, jobslot, info_val) \ +#define KBASE_KTRACE_FTRACE_ADD_JM_SLOT_INFO(kbdev, code, kctx, katom, gpu_addr, jobslot, \ + info_val) \ trace_mali_##code(kctx, jobslot, info_val) -#define KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, \ - gpu_addr, refcount) \ +#define KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, gpu_addr, refcount) \ trace_mali_##code(kctx, refcount, 0) -#define KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT_INFO(kbdev, code, kctx, katom, \ - gpu_addr, refcount, info_val) \ +#define KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT_INFO(kbdev, code, kctx, katom, gpu_addr, refcount, \ + info_val) \ trace_mali_##code(kctx, refcount, info_val) -#define KBASE_KTRACE_FTRACE_ADD_JM(kbdev, code, kctx, katom, gpu_addr, \ - info_val) \ +#define KBASE_KTRACE_FTRACE_ADD_JM(kbdev, code, kctx, katom, gpu_addr, info_val) \ trace_mali_##code(kctx, gpu_addr, info_val) #else /* KBASE_KTRACE_TARGET_FTRACE */ -#define KBASE_KTRACE_FTRACE_ADD_JM_SLOT(kbdev, code, kctx, katom, gpu_addr, \ - jobslot) \ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(kctx);\ - CSTD_UNUSED(katom);\ - CSTD_UNUSED(gpu_addr);\ - CSTD_UNUSED(jobslot);\ - CSTD_NOP(0);\ +#define KBASE_KTRACE_FTRACE_ADD_JM_SLOT(kbdev, code, kctx, katom, gpu_addr, jobslot) \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(kctx); \ + CSTD_UNUSED(katom); \ + CSTD_UNUSED(gpu_addr); \ + CSTD_UNUSED(jobslot); \ + CSTD_NOP(0); \ } while (0) -#define KBASE_KTRACE_FTRACE_ADD_JM_SLOT_INFO(kbdev, code, kctx, katom, \ - gpu_addr, jobslot, info_val) \ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(kctx);\ - CSTD_UNUSED(katom);\ - CSTD_UNUSED(gpu_addr);\ - CSTD_UNUSED(jobslot);\ - CSTD_UNUSED(info_val);\ - CSTD_NOP(0);\ +#define KBASE_KTRACE_FTRACE_ADD_JM_SLOT_INFO(kbdev, code, kctx, katom, gpu_addr, jobslot, \ + info_val) \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(kctx); \ + CSTD_UNUSED(katom); \ + CSTD_UNUSED(gpu_addr); \ + CSTD_UNUSED(jobslot); \ + CSTD_UNUSED(info_val); \ + CSTD_NOP(0); \ } while (0) -#define KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, \ - gpu_addr, refcount) \ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(kctx);\ - CSTD_UNUSED(katom);\ - CSTD_UNUSED(gpu_addr);\ - CSTD_UNUSED(refcount);\ - CSTD_NOP(0);\ +#define KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, gpu_addr, refcount) \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(kctx); \ + CSTD_UNUSED(katom); \ + CSTD_UNUSED(gpu_addr); \ + CSTD_UNUSED(refcount); \ + CSTD_NOP(0); \ } while (0) -#define KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT_INFO(kbdev, code, kctx, katom, \ - gpu_addr, refcount, info_val) \ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(kctx);\ - CSTD_UNUSED(katom);\ - CSTD_UNUSED(gpu_addr);\ - CSTD_UNUSED(info_val);\ - CSTD_NOP(0);\ +#define KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT_INFO(kbdev, code, kctx, katom, gpu_addr, refcount, \ + info_val) \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(kctx); \ + CSTD_UNUSED(katom); \ + CSTD_UNUSED(gpu_addr); \ + CSTD_UNUSED(info_val); \ + CSTD_NOP(0); \ } while (0) -#define KBASE_KTRACE_FTRACE_ADD_JM(kbdev, code, kctx, katom, gpu_addr, \ - info_val)\ - do {\ - CSTD_UNUSED(kbdev);\ - CSTD_NOP(code);\ - CSTD_UNUSED(kctx);\ - CSTD_UNUSED(katom);\ - CSTD_UNUSED(gpu_addr);\ - CSTD_UNUSED(info_val);\ - CSTD_NOP(0);\ +#define KBASE_KTRACE_FTRACE_ADD_JM(kbdev, code, kctx, katom, gpu_addr, info_val) \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(kctx); \ + CSTD_UNUSED(katom); \ + CSTD_UNUSED(gpu_addr); \ + CSTD_UNUSED(info_val); \ + CSTD_NOP(0); \ } while (0) #endif /* KBASE_KTRACE_TARGET_FTRACE */ @@ -179,15 +171,13 @@ void kbasep_ktrace_add_jm(struct kbase_device *kbdev, * a) be static or static inline, and * b) just return 0 and have no other statements present in the body. */ -#define KBASE_KTRACE_ADD_JM_SLOT(kbdev, code, kctx, katom, gpu_addr, \ - jobslot) \ - do { \ - /* capture values that could come from non-pure function calls */ \ - u64 __gpu_addr = gpu_addr; \ - int __jobslot = jobslot; \ - KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ - KBASE_KTRACE_FLAG_JM_JOBSLOT, 0, __jobslot, \ - 0); \ +#define KBASE_KTRACE_ADD_JM_SLOT(kbdev, code, kctx, katom, gpu_addr, jobslot) \ + do { \ + /* capture values that could come from non-pure function calls */ \ + u64 __gpu_addr = gpu_addr; \ + unsigned int __jobslot = jobslot; \ + KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ + KBASE_KTRACE_FLAG_JM_JOBSLOT, 0, __jobslot, 0); \ KBASE_KTRACE_FTRACE_ADD_JM_SLOT(kbdev, code, kctx, katom, __gpu_addr, __jobslot); \ } while (0) @@ -208,17 +198,16 @@ void kbasep_ktrace_add_jm(struct kbase_device *kbdev, * a) be static or static inline, and * b) just return 0 and have no other statements present in the body. */ -#define KBASE_KTRACE_ADD_JM_SLOT_INFO(kbdev, code, kctx, katom, gpu_addr, \ - jobslot, info_val) \ - do { \ - /* capture values that could come from non-pure function calls */ \ - u64 __gpu_addr = gpu_addr; \ - int __jobslot = jobslot; \ - u64 __info_val = info_val; \ - KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ - KBASE_KTRACE_FLAG_JM_JOBSLOT, 0, __jobslot, \ - __info_val); \ - KBASE_KTRACE_FTRACE_ADD_JM_SLOT_INFO(kbdev, code, kctx, katom, __gpu_addr, __jobslot, __info_val); \ +#define KBASE_KTRACE_ADD_JM_SLOT_INFO(kbdev, code, kctx, katom, gpu_addr, jobslot, info_val) \ + do { \ + /* capture values that could come from non-pure function calls */ \ + u64 __gpu_addr = gpu_addr; \ + unsigned int __jobslot = jobslot; \ + u64 __info_val = info_val; \ + KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ + KBASE_KTRACE_FLAG_JM_JOBSLOT, 0, __jobslot, __info_val); \ + KBASE_KTRACE_FTRACE_ADD_JM_SLOT_INFO(kbdev, code, kctx, katom, __gpu_addr, \ + __jobslot, __info_val); \ } while (0) /** @@ -237,16 +226,15 @@ void kbasep_ktrace_add_jm(struct kbase_device *kbdev, * a) be static or static inline, and * b) just return 0 and have no other statements present in the body. */ -#define KBASE_KTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, gpu_addr, \ - refcount) \ - do { \ - /* capture values that could come from non-pure function calls */ \ - u64 __gpu_addr = gpu_addr; \ - int __refcount = refcount; \ - KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ - KBASE_KTRACE_FLAG_JM_REFCOUNT, __refcount, 0, \ - 0u); \ - KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, __gpu_addr, __refcount); \ +#define KBASE_KTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, gpu_addr, refcount) \ + do { \ + /* capture values that could come from non-pure function calls */ \ + u64 __gpu_addr = gpu_addr; \ + int __refcount = refcount; \ + KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ + KBASE_KTRACE_FLAG_JM_REFCOUNT, __refcount, 0, 0u); \ + KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, __gpu_addr, \ + (unsigned int)__refcount); \ } while (0) /** @@ -267,17 +255,17 @@ void kbasep_ktrace_add_jm(struct kbase_device *kbdev, * a) be static or static inline, and * b) just return 0 and have no other statements present in the body. */ -#define KBASE_KTRACE_ADD_JM_REFCOUNT_INFO(kbdev, code, kctx, katom, \ - gpu_addr, refcount, info_val) \ - do { \ - /* capture values that could come from non-pure function calls */ \ - u64 __gpu_addr = gpu_addr; \ - int __refcount = refcount; \ - u64 __info_val = info_val; \ - KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ - KBASE_KTRACE_FLAG_JM_REFCOUNT, __refcount, 0, \ - __info_val); \ - KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, __gpu_addr, __refcount, __info_val); \ +#define KBASE_KTRACE_ADD_JM_REFCOUNT_INFO(kbdev, code, kctx, katom, gpu_addr, refcount, info_val) \ + do { \ + /* capture values that could come from non-pure function calls */ \ + u64 __gpu_addr = gpu_addr; \ + int __refcount = refcount; \ + u64 __info_val = info_val; \ + KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ + KBASE_KTRACE_FLAG_JM_REFCOUNT, __refcount, 0, \ + __info_val); \ + KBASE_KTRACE_FTRACE_ADD_JM_REFCOUNT(kbdev, code, kctx, katom, __gpu_addr, \ + (unsigned int)__refcount, __info_val); \ } while (0) /** @@ -296,13 +284,13 @@ void kbasep_ktrace_add_jm(struct kbase_device *kbdev, * a) be static or static inline, and * b) just return 0 and have no other statements present in the body. */ -#define KBASE_KTRACE_ADD_JM(kbdev, code, kctx, katom, gpu_addr, info_val) \ - do { \ - /* capture values that could come from non-pure function calls */ \ - u64 __gpu_addr = gpu_addr; \ - u64 __info_val = info_val; \ - KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, \ - 0u, 0, 0, __info_val); \ +#define KBASE_KTRACE_ADD_JM(kbdev, code, kctx, katom, gpu_addr, info_val) \ + do { \ + /* capture values that could come from non-pure function calls */ \ + u64 __gpu_addr = gpu_addr; \ + u64 __info_val = info_val; \ + KBASE_KTRACE_RBUF_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, 0u, 0, 0, \ + __info_val); \ KBASE_KTRACE_FTRACE_ADD_JM(kbdev, code, kctx, katom, __gpu_addr, __info_val); \ } while (0) diff --git a/mali_kbase/debug/backend/mali_kbase_debug_linux_ktrace_csf.h b/mali_kbase/debug/backend/mali_kbase_debug_linux_ktrace_csf.h index ddcac90..0b0de23 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_linux_ktrace_csf.h +++ b/mali_kbase/debug/backend/mali_kbase_debug_linux_ktrace_csf.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -69,77 +69,69 @@ DEFINE_MALI_ADD_EVENT(SCHED_BUSY); DEFINE_MALI_ADD_EVENT(SCHED_INACTIVE); DEFINE_MALI_ADD_EVENT(SCHED_SUSPENDED); DEFINE_MALI_ADD_EVENT(SCHED_SLEEPING); -#define KBASEP_MCU_STATE(n) DEFINE_MALI_ADD_EVENT(PM_MCU_ ## n); +#define KBASEP_MCU_STATE(n) DEFINE_MALI_ADD_EVENT(PM_MCU_##n); #include "backend/gpu/mali_kbase_pm_mcu_states.h" #undef KBASEP_MCU_STATE -DECLARE_EVENT_CLASS(mali_csf_grp_q_template, +DECLARE_EVENT_CLASS( + mali_csf_grp_q_template, TP_PROTO(struct kbase_device *kbdev, struct kbase_queue_group *group, - struct kbase_queue *queue, u64 info_val), + struct kbase_queue *queue, u64 info_val), TP_ARGS(kbdev, group, queue, info_val), - TP_STRUCT__entry( - __field(u64, info_val) - __field(pid_t, kctx_tgid) - __field(u32, kctx_id) - __field(u8, group_handle) - __field(s8, csg_nr) - __field(u8, slot_prio) - __field(s8, csi_index) - ), - TP_fast_assign( - { - struct kbase_context *kctx = NULL; - - __entry->info_val = info_val; - /* Note: if required in future, we could record some + TP_STRUCT__entry(__field(u64, info_val) __field(pid_t, kctx_tgid) __field(u32, kctx_id) + __field(u8, group_handle) __field(s8, csg_nr) + __field(u8, slot_prio) __field(s8, csi_index)), + TP_fast_assign({ + struct kbase_context *kctx = NULL; + + __entry->info_val = info_val; + /* Note: if required in future, we could record some * flags in __entry about whether the group/queue parts * are valid, and add that to the trace message e.g. * by using __print_flags()/__print_symbolic() */ - if (queue) { - /* Note: kctx overridden by group->kctx later if group is valid */ - kctx = queue->kctx; - __entry->csi_index = queue->csi_index; - } else { - __entry->csi_index = -1; - } + if (queue) { + /* Note: kctx overridden by group->kctx later if group is valid */ + kctx = queue->kctx; + __entry->csi_index = queue->csi_index; + } else { + __entry->csi_index = -1; + } - if (group) { - kctx = group->kctx; - __entry->group_handle = group->handle; - __entry->csg_nr = group->csg_nr; - if (group->csg_nr >= 0) - __entry->slot_prio = kbdev->csf.scheduler.csg_slots[group->csg_nr].priority; - else - __entry->slot_prio = 0u; - } else { - __entry->group_handle = 0u; - __entry->csg_nr = -1; + if (group) { + kctx = group->kctx; + __entry->group_handle = group->handle; + __entry->csg_nr = group->csg_nr; + if (group->csg_nr >= 0) + __entry->slot_prio = + kbdev->csf.scheduler.csg_slots[group->csg_nr].priority; + else __entry->slot_prio = 0u; - } - __entry->kctx_id = (kctx) ? kctx->id : 0u; - __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; + } else { + __entry->group_handle = 0u; + __entry->csg_nr = -1; + __entry->slot_prio = 0u; } + __entry->kctx_id = (kctx) ? kctx->id : 0u; + __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; + } - ), - TP_printk("kctx=%d_%u group=%u slot=%d prio=%u csi=%d info=0x%llx", - __entry->kctx_tgid, __entry->kctx_id, - __entry->group_handle, __entry->csg_nr, - __entry->slot_prio, __entry->csi_index, - __entry->info_val) -); + ), + TP_printk("kctx=%d_%u group=%u slot=%d prio=%u csi=%d info=0x%llx", __entry->kctx_tgid, + __entry->kctx_id, __entry->group_handle, __entry->csg_nr, __entry->slot_prio, + __entry->csi_index, __entry->info_val)); /* * Group events */ -#define DEFINE_MALI_CSF_GRP_EVENT(name) \ - DEFINE_EVENT_PRINT(mali_csf_grp_q_template, mali_##name, \ - TP_PROTO(struct kbase_device *kbdev, struct kbase_queue_group *group, \ - struct kbase_queue *queue, u64 info_val), \ - TP_ARGS(kbdev, group, queue, info_val), \ - TP_printk("kctx=%d_%u group=%u slot=%d prio=%u info=0x%llx", \ - __entry->kctx_tgid, __entry->kctx_id, __entry->group_handle, \ - __entry->csg_nr, __entry->slot_prio, __entry->info_val)) +#define DEFINE_MALI_CSF_GRP_EVENT(name) \ + DEFINE_EVENT_PRINT(mali_csf_grp_q_template, mali_##name, \ + TP_PROTO(struct kbase_device *kbdev, struct kbase_queue_group *group, \ + struct kbase_queue *queue, u64 info_val), \ + TP_ARGS(kbdev, group, queue, info_val), \ + TP_printk("kctx=%d_%u group=%u slot=%d prio=%u info=0x%llx", \ + __entry->kctx_tgid, __entry->kctx_id, __entry->group_handle, \ + __entry->csg_nr, __entry->slot_prio, __entry->info_val)) DEFINE_MALI_CSF_GRP_EVENT(CSG_SLOT_START_REQ); DEFINE_MALI_CSF_GRP_EVENT(CSG_SLOT_STOP_REQ); @@ -191,11 +183,11 @@ DEFINE_MALI_CSF_GRP_EVENT(CSF_GROUP_TERMINATED); /* * Group + Queue events */ -#define DEFINE_MALI_CSF_GRP_Q_EVENT(name) \ - DEFINE_EVENT(mali_csf_grp_q_template, mali_##name, \ - TP_PROTO(struct kbase_device *kbdev, struct kbase_queue_group *group, \ - struct kbase_queue *queue, u64 info_val), \ - TP_ARGS(kbdev, group, queue, info_val)) +#define DEFINE_MALI_CSF_GRP_Q_EVENT(name) \ + DEFINE_EVENT(mali_csf_grp_q_template, mali_##name, \ + TP_PROTO(struct kbase_device *kbdev, struct kbase_queue_group *group, \ + struct kbase_queue *queue, u64 info_val), \ + TP_ARGS(kbdev, group, queue, info_val)) DEFINE_MALI_CSF_GRP_Q_EVENT(CSI_START); DEFINE_MALI_CSF_GRP_Q_EVENT(CSI_STOP); @@ -222,36 +214,29 @@ DEFINE_MALI_CSF_GRP_Q_EVENT(CSI_PROTM_PEND_CLEAR); * KCPU queue events */ DECLARE_EVENT_CLASS(mali_csf_kcpu_queue_template, - TP_PROTO(struct kbase_kcpu_command_queue *queue, - u64 info_val1, u64 info_val2), - TP_ARGS(queue, info_val1, info_val2), - TP_STRUCT__entry( - __field(u64, info_val1) - __field(u64, info_val2) - __field(pid_t, kctx_tgid) - __field(u32, kctx_id) - __field(u8, id) - ), - TP_fast_assign( - { - __entry->info_val1 = info_val1; - __entry->info_val2 = info_val2; - __entry->kctx_id = queue->kctx->id; - __entry->kctx_tgid = queue->kctx->tgid; - __entry->id = queue->id; - } - - ), - TP_printk("kctx=%d_%u id=%u info_val1=0x%llx info_val2=0x%llx", - __entry->kctx_tgid, __entry->kctx_id, __entry->id, - __entry->info_val1, __entry->info_val2) -); - -#define DEFINE_MALI_CSF_KCPU_EVENT(name) \ - DEFINE_EVENT(mali_csf_kcpu_queue_template, mali_##name, \ - TP_PROTO(struct kbase_kcpu_command_queue *queue, \ - u64 info_val1, u64 info_val2), \ - TP_ARGS(queue, info_val1, info_val2)) + TP_PROTO(struct kbase_kcpu_command_queue *queue, u64 info_val1, u64 info_val2), + TP_ARGS(queue, info_val1, info_val2), + TP_STRUCT__entry(__field(u64, info_val1) __field(u64, info_val2) + __field(pid_t, kctx_tgid) __field(u32, kctx_id) + __field(u8, id)), + TP_fast_assign({ + __entry->info_val1 = info_val1; + __entry->info_val2 = info_val2; + __entry->kctx_id = queue->kctx->id; + __entry->kctx_tgid = queue->kctx->tgid; + __entry->id = queue->id; + } + + ), + TP_printk("kctx=%d_%u id=%u info_val1=0x%llx info_val2=0x%llx", + __entry->kctx_tgid, __entry->kctx_id, __entry->id, __entry->info_val1, + __entry->info_val2)); + +#define DEFINE_MALI_CSF_KCPU_EVENT(name) \ + DEFINE_EVENT(mali_csf_kcpu_queue_template, mali_##name, \ + TP_PROTO(struct kbase_kcpu_command_queue *queue, u64 info_val1, \ + u64 info_val2), \ + TP_ARGS(queue, info_val1, info_val2)) DEFINE_MALI_CSF_KCPU_EVENT(KCPU_QUEUE_CREATE); DEFINE_MALI_CSF_KCPU_EVENT(KCPU_QUEUE_DELETE); diff --git a/mali_kbase/debug/backend/mali_kbase_debug_linux_ktrace_jm.h b/mali_kbase/debug/backend/mali_kbase_debug_linux_ktrace_jm.h index 8fa4e2a..3e5b0ec 100644 --- a/mali_kbase/debug/backend/mali_kbase_debug_linux_ktrace_jm.h +++ b/mali_kbase/debug/backend/mali_kbase_debug_linux_ktrace_jm.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2014, 2018, 2020-2021 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2014-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -28,28 +28,20 @@ #define _KBASE_DEBUG_LINUX_KTRACE_JM_H_ DECLARE_EVENT_CLASS(mali_jm_slot_template, - TP_PROTO(struct kbase_context *kctx, int jobslot, u64 info_val), - TP_ARGS(kctx, jobslot, info_val), - TP_STRUCT__entry( - __field(pid_t, kctx_tgid) - __field(u32, kctx_id) - __field(unsigned int, jobslot) - __field(u64, info_val) - ), - TP_fast_assign( - __entry->kctx_id = (kctx) ? kctx->id : 0u; - __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; - __entry->jobslot = jobslot; - __entry->info_val = info_val; - ), - TP_printk("kctx=%d_%u jobslot=%u info=0x%llx", __entry->kctx_tgid, - __entry->kctx_id, __entry->jobslot, __entry->info_val) -); + TP_PROTO(struct kbase_context *kctx, unsigned int jobslot, u64 info_val), + TP_ARGS(kctx, jobslot, info_val), + TP_STRUCT__entry(__field(pid_t, kctx_tgid) __field(u32, kctx_id) + __field(unsigned int, jobslot) __field(u64, info_val)), + TP_fast_assign(__entry->kctx_id = (kctx) ? kctx->id : 0u; + __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; + __entry->jobslot = jobslot; __entry->info_val = info_val;), + TP_printk("kctx=%d_%u jobslot=%u info=0x%llx", __entry->kctx_tgid, + __entry->kctx_id, __entry->jobslot, __entry->info_val)); -#define DEFINE_MALI_JM_SLOT_EVENT(name) \ -DEFINE_EVENT(mali_jm_slot_template, mali_##name, \ - TP_PROTO(struct kbase_context *kctx, int jobslot, u64 info_val), \ - TP_ARGS(kctx, jobslot, info_val)) +#define DEFINE_MALI_JM_SLOT_EVENT(name) \ + DEFINE_EVENT(mali_jm_slot_template, mali_##name, \ + TP_PROTO(struct kbase_context *kctx, unsigned int jobslot, u64 info_val), \ + TP_ARGS(kctx, jobslot, info_val)) DEFINE_MALI_JM_SLOT_EVENT(JM_RETURN_ATOM_TO_JS); DEFINE_MALI_JM_SLOT_EVENT(JM_MARK_FOR_RETURN_TO_JS); DEFINE_MALI_JM_SLOT_EVENT(JM_SUBMIT); @@ -86,28 +78,21 @@ DEFINE_MALI_JM_SLOT_EVENT(JS_SLOT_PRIO_IS_BLOCKED); #undef DEFINE_MALI_JM_SLOT_EVENT DECLARE_EVENT_CLASS(mali_jm_refcount_template, - TP_PROTO(struct kbase_context *kctx, int refcount, u64 info_val), - TP_ARGS(kctx, refcount, info_val), - TP_STRUCT__entry( - __field(pid_t, kctx_tgid) - __field(u32, kctx_id) - __field(unsigned int, refcount) - __field(u64, info_val) - ), - TP_fast_assign( - __entry->kctx_id = (kctx) ? kctx->id : 0u; - __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; - __entry->refcount = refcount; - __entry->info_val = info_val; - ), - TP_printk("kctx=%d_%u refcount=%u info=0x%llx", __entry->kctx_tgid, - __entry->kctx_id, __entry->refcount, __entry->info_val) -); + TP_PROTO(struct kbase_context *kctx, unsigned int refcount, u64 info_val), + TP_ARGS(kctx, refcount, info_val), + TP_STRUCT__entry(__field(pid_t, kctx_tgid) __field(u32, kctx_id) + __field(unsigned int, refcount) + __field(u64, info_val)), + TP_fast_assign(__entry->kctx_id = (kctx) ? kctx->id : 0u; + __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; + __entry->refcount = refcount; __entry->info_val = info_val;), + TP_printk("kctx=%d_%u refcount=%u info=0x%llx", __entry->kctx_tgid, + __entry->kctx_id, __entry->refcount, __entry->info_val)); -#define DEFINE_MALI_JM_REFCOUNT_EVENT(name) \ -DEFINE_EVENT(mali_jm_refcount_template, mali_##name, \ - TP_PROTO(struct kbase_context *kctx, int refcount, u64 info_val), \ - TP_ARGS(kctx, refcount, info_val)) +#define DEFINE_MALI_JM_REFCOUNT_EVENT(name) \ + DEFINE_EVENT(mali_jm_refcount_template, mali_##name, \ + TP_PROTO(struct kbase_context *kctx, unsigned int refcount, u64 info_val), \ + TP_ARGS(kctx, refcount, info_val)) DEFINE_MALI_JM_REFCOUNT_EVENT(JS_ADD_JOB); DEFINE_MALI_JM_REFCOUNT_EVENT(JS_REMOVE_JOB); DEFINE_MALI_JM_REFCOUNT_EVENT(JS_TRY_SCHEDULE_HEAD_CTX); @@ -122,28 +107,20 @@ DEFINE_MALI_JM_REFCOUNT_EVENT(JS_POLICY_FOREACH_CTX_JOBS); #undef DEFINE_MALI_JM_REFCOUNT_EVENT DECLARE_EVENT_CLASS(mali_jm_add_template, - TP_PROTO(struct kbase_context *kctx, u64 gpu_addr, u64 info_val), - TP_ARGS(kctx, gpu_addr, info_val), - TP_STRUCT__entry( - __field(pid_t, kctx_tgid) - __field(u32, kctx_id) - __field(u64, gpu_addr) - __field(u64, info_val) - ), - TP_fast_assign( - __entry->kctx_id = (kctx) ? kctx->id : 0u; - __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; - __entry->gpu_addr = gpu_addr; - __entry->info_val = info_val; - ), - TP_printk("kctx=%d_%u gpu_addr=0x%llx info=0x%llx", __entry->kctx_tgid, - __entry->kctx_id, __entry->gpu_addr, __entry->info_val) -); + TP_PROTO(struct kbase_context *kctx, u64 gpu_addr, u64 info_val), + TP_ARGS(kctx, gpu_addr, info_val), + TP_STRUCT__entry(__field(pid_t, kctx_tgid) __field(u32, kctx_id) + __field(u64, gpu_addr) __field(u64, info_val)), + TP_fast_assign(__entry->kctx_id = (kctx) ? kctx->id : 0u; + __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; + __entry->gpu_addr = gpu_addr; __entry->info_val = info_val;), + TP_printk("kctx=%d_%u gpu_addr=0x%llx info=0x%llx", __entry->kctx_tgid, + __entry->kctx_id, __entry->gpu_addr, __entry->info_val)); -#define DEFINE_MALI_JM_ADD_EVENT(name) \ -DEFINE_EVENT(mali_jm_add_template, mali_##name, \ - TP_PROTO(struct kbase_context *kctx, u64 gpu_addr, u64 info_val), \ - TP_ARGS(kctx, gpu_addr, info_val)) +#define DEFINE_MALI_JM_ADD_EVENT(name) \ + DEFINE_EVENT(mali_jm_add_template, mali_##name, \ + TP_PROTO(struct kbase_context *kctx, u64 gpu_addr, u64 info_val), \ + TP_ARGS(kctx, gpu_addr, info_val)) DEFINE_MALI_JM_ADD_EVENT(JD_DONE_WORKER); DEFINE_MALI_JM_ADD_EVENT(JD_DONE_WORKER_END); DEFINE_MALI_JM_ADD_EVENT(JD_CANCEL_WORKER); diff --git a/mali_kbase/debug/mali_kbase_debug_ktrace.c b/mali_kbase/debug/mali_kbase_debug_ktrace.c index f521b47..0842460 100644 --- a/mali_kbase/debug/mali_kbase_debug_ktrace.c +++ b/mali_kbase/debug/mali_kbase_debug_ktrace.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note /* * - * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -34,6 +34,8 @@ int kbase_ktrace_init(struct kbase_device *kbdev) return -EINVAL; kbdev->ktrace.rbuf = rbuf; +#else + CSTD_UNUSED(kbdev); #endif /* KBASE_KTRACE_TARGET_RBUF */ return 0; } @@ -43,6 +45,8 @@ void kbase_ktrace_term(struct kbase_device *kbdev) #if KBASE_KTRACE_TARGET_RBUF kfree(kbdev->ktrace.rbuf); kbdev->ktrace.rbuf = NULL; +#else + CSTD_UNUSED(kbdev); #endif /* KBASE_KTRACE_TARGET_RBUF */ } @@ -55,33 +59,33 @@ void kbase_ktrace_hook_wrapper(void *param) #if KBASE_KTRACE_TARGET_RBUF -static const char * const kbasep_ktrace_code_string[] = { - /* +static const char *const kbasep_ktrace_code_string[] = { +/* * IMPORTANT: USE OF SPECIAL #INCLUDE OF NON-STANDARD HEADER FILE * THIS MUST BE USED AT THE START OF THE ARRAY */ -#define KBASE_KTRACE_CODE_MAKE_CODE(X) # X +#define KBASE_KTRACE_CODE_MAKE_CODE(X) #X #include "debug/mali_kbase_debug_ktrace_codes.h" -#undef KBASE_KTRACE_CODE_MAKE_CODE +#undef KBASE_KTRACE_CODE_MAKE_CODE }; static void kbasep_ktrace_format_header(char *buffer, int sz, s32 written) { - written += MAX(snprintf(buffer + written, MAX(sz - written, 0), - "secs,thread_id,cpu,code,kctx,"), 0); + written += MAX(snprintf(buffer + written, (size_t)MAX(sz - written, 0), + "secs,thread_id,cpu,code,kctx,"), + 0); kbasep_ktrace_backend_format_header(buffer, sz, &written); - written += MAX(snprintf(buffer + written, MAX(sz - written, 0), - ",info_val,ktrace_version=%u.%u", - KBASE_KTRACE_VERSION_MAJOR, - KBASE_KTRACE_VERSION_MINOR), 0); + written += MAX(snprintf(buffer + written, (size_t)MAX(sz - written, 0), + ",info_val,ktrace_version=%u.%u", KBASE_KTRACE_VERSION_MAJOR, + KBASE_KTRACE_VERSION_MINOR), + 0); buffer[sz - 1] = 0; } -static void kbasep_ktrace_format_msg(struct kbase_ktrace_msg *trace_msg, - char *buffer, int sz) +static void kbasep_ktrace_format_msg(struct kbase_ktrace_msg *trace_msg, char *buffer, int sz) { s32 written = 0; @@ -89,27 +93,24 @@ static void kbasep_ktrace_format_msg(struct kbase_ktrace_msg *trace_msg, * * secs,thread_id,cpu,code, */ - written += MAX(snprintf(buffer + written, MAX(sz - written, 0), - "%d.%.6d,%d,%d,%s,", - (int)trace_msg->timestamp.tv_sec, - (int)(trace_msg->timestamp.tv_nsec / 1000), - trace_msg->thread_id, trace_msg->cpu, - kbasep_ktrace_code_string[trace_msg->backend.gpu.code]), - 0); + written += MAX(snprintf(buffer + written, (size_t)MAX(sz - written, 0), "%d.%.6d,%d,%d,%s,", + (int)trace_msg->timestamp.tv_sec, + (int)(trace_msg->timestamp.tv_nsec / 1000), trace_msg->thread_id, + trace_msg->cpu, + kbasep_ktrace_code_string[trace_msg->backend.gpu.code]), + 0); /* kctx part: */ if (trace_msg->kctx_tgid) { - written += MAX(snprintf(buffer + written, MAX(sz - written, 0), - "%d_%u", - trace_msg->kctx_tgid, trace_msg->kctx_id), 0); + written += MAX(snprintf(buffer + written, (size_t)MAX(sz - written, 0), "%d_%u", + trace_msg->kctx_tgid, trace_msg->kctx_id), + 0); } /* Trailing comma */ - written += MAX(snprintf(buffer + written, MAX(sz - written, 0), - ","), 0); + written += MAX(snprintf(buffer + written, (size_t)MAX(sz - written, 0), ","), 0); /* Backend parts */ - kbasep_ktrace_backend_format_msg(trace_msg, buffer, sz, - &written); + kbasep_ktrace_backend_format_msg(trace_msg, buffer, sz, &written); /* Rest of message: * @@ -118,14 +119,13 @@ static void kbasep_ktrace_format_msg(struct kbase_ktrace_msg *trace_msg, * Note that the last column is empty, it's simply to hold the ktrace * version in the header */ - written += MAX(snprintf(buffer + written, MAX(sz - written, 0), - ",0x%.16llx", - (unsigned long long)trace_msg->info_val), 0); + written += MAX(snprintf(buffer + written, (size_t)MAX(sz - written, 0), ",0x%.16llx", + (unsigned long long)trace_msg->info_val), + 0); buffer[sz - 1] = 0; } -static void kbasep_ktrace_dump_msg(struct kbase_device *kbdev, - struct kbase_ktrace_msg *trace_msg) +static void kbasep_ktrace_dump_msg(struct kbase_device *kbdev, struct kbase_ktrace_msg *trace_msg) { char buffer[KTRACE_DUMP_MESSAGE_SIZE]; @@ -150,14 +150,13 @@ struct kbase_ktrace_msg *kbasep_ktrace_reserve(struct kbase_ktrace *ktrace) return trace_msg; } -void kbasep_ktrace_msg_init(struct kbase_ktrace *ktrace, - struct kbase_ktrace_msg *trace_msg, enum kbase_ktrace_code code, - struct kbase_context *kctx, kbase_ktrace_flag_t flags, - u64 info_val) +void kbasep_ktrace_msg_init(struct kbase_ktrace *ktrace, struct kbase_ktrace_msg *trace_msg, + enum kbase_ktrace_code code, struct kbase_context *kctx, + kbase_ktrace_flag_t flags, u64 info_val) { lockdep_assert_held(&ktrace->lock); - trace_msg->thread_id = task_pid_nr(current); + trace_msg->thread_id = (u32)task_pid_nr(current); trace_msg->cpu = task_cpu(current); ktime_get_real_ts64(&trace_msg->timestamp); @@ -178,8 +177,7 @@ void kbasep_ktrace_msg_init(struct kbase_ktrace *ktrace, } void kbasep_ktrace_add(struct kbase_device *kbdev, enum kbase_ktrace_code code, - struct kbase_context *kctx, kbase_ktrace_flag_t flags, - u64 info_val) + struct kbase_context *kctx, kbase_ktrace_flag_t flags, u64 info_val) { unsigned long irqflags; struct kbase_ktrace_msg *trace_msg; @@ -195,8 +193,7 @@ void kbasep_ktrace_add(struct kbase_device *kbdev, enum kbase_ktrace_code code, trace_msg = kbasep_ktrace_reserve(&kbdev->ktrace); /* Fill the common part of the message (including backend.gpu.flags) */ - kbasep_ktrace_msg_init(&kbdev->ktrace, trace_msg, code, kctx, flags, - info_val); + kbasep_ktrace_msg_init(&kbdev->ktrace, trace_msg, code, kctx, flags, info_val); /* Done */ spin_unlock_irqrestore(&kbdev->ktrace.lock, irqflags); @@ -254,7 +251,7 @@ struct trace_seq_state { static void *kbasep_ktrace_seq_start(struct seq_file *s, loff_t *pos) { struct trace_seq_state *state = s->private; - int i; + unsigned int i; if (*pos == 0) /* See Documentation/filesystems/seq_file.txt */ @@ -263,8 +260,7 @@ static void *kbasep_ktrace_seq_start(struct seq_file *s, loff_t *pos) if (*pos > KBASE_KTRACE_SIZE) return NULL; i = state->start + *pos; - if ((state->end >= state->start && i >= state->end) || - i >= state->end + KBASE_KTRACE_SIZE) + if ((state->end >= state->start && i >= state->end) || i >= state->end + KBASE_KTRACE_SIZE) return NULL; i &= KBASE_KTRACE_MASK; @@ -274,12 +270,14 @@ static void *kbasep_ktrace_seq_start(struct seq_file *s, loff_t *pos) static void kbasep_ktrace_seq_stop(struct seq_file *s, void *data) { + CSTD_UNUSED(s); + CSTD_UNUSED(data); } static void *kbasep_ktrace_seq_next(struct seq_file *s, void *data, loff_t *pos) { struct trace_seq_state *state = s->private; - int i; + unsigned int i; if (data != SEQ_START_TOKEN) (*pos)++; @@ -320,8 +318,7 @@ static int kbasep_ktrace_debugfs_open(struct inode *inode, struct file *file) struct trace_seq_state *state; - state = __seq_open_private(file, &kbasep_ktrace_seq_ops, - sizeof(*state)); + state = __seq_open_private(file, &kbasep_ktrace_seq_ops, sizeof(*state)); if (!state) return -ENOMEM; @@ -344,9 +341,8 @@ static const struct file_operations kbasep_ktrace_debugfs_fops = { void kbase_ktrace_debugfs_init(struct kbase_device *kbdev) { - debugfs_create_file("mali_trace", 0444, - kbdev->mali_debugfs_directory, kbdev, - &kbasep_ktrace_debugfs_fops); + debugfs_create_file("mali_trace", 0444, kbdev->mali_debugfs_directory, kbdev, + &kbasep_ktrace_debugfs_fops); } #endif /* CONFIG_DEBUG_FS */ diff --git a/mali_kbase/debug/mali_kbase_debug_ktrace.h b/mali_kbase/debug/mali_kbase_debug_ktrace.h index 31a15a0..38eb4be 100644 --- a/mali_kbase/debug/mali_kbase_debug_ktrace.h +++ b/mali_kbase/debug/mali_kbase_debug_ktrace.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -104,8 +104,7 @@ static inline bool kbasep_ktrace_initialized(struct kbase_ktrace *ktrace) * PRIVATE: do not use directly. Use KBASE_KTRACE_ADD() instead. */ void kbasep_ktrace_add(struct kbase_device *kbdev, enum kbase_ktrace_code code, - struct kbase_context *kctx, kbase_ktrace_flag_t flags, - u64 info_val); + struct kbase_context *kctx, kbase_ktrace_flag_t flags, u64 info_val); /** * kbasep_ktrace_clear - clear the trace ringbuffer @@ -123,36 +122,33 @@ void kbasep_ktrace_clear(struct kbase_device *kbdev); */ void kbasep_ktrace_dump(struct kbase_device *kbdev); -#define KBASE_KTRACE_RBUF_ADD(kbdev, code, kctx, info_val) \ - kbasep_ktrace_add(kbdev, KBASE_KTRACE_CODE(code), kctx, 0, \ - info_val) \ +#define KBASE_KTRACE_RBUF_ADD(kbdev, code, kctx, info_val) \ + kbasep_ktrace_add(kbdev, KBASE_KTRACE_CODE(code), kctx, 0, info_val) -#define KBASE_KTRACE_RBUF_CLEAR(kbdev) \ - kbasep_ktrace_clear(kbdev) +#define KBASE_KTRACE_RBUF_CLEAR(kbdev) kbasep_ktrace_clear(kbdev) -#define KBASE_KTRACE_RBUF_DUMP(kbdev) \ - kbasep_ktrace_dump(kbdev) +#define KBASE_KTRACE_RBUF_DUMP(kbdev) kbasep_ktrace_dump(kbdev) #else /* KBASE_KTRACE_TARGET_RBUF */ #define KBASE_KTRACE_RBUF_ADD(kbdev, code, kctx, info_val) \ - do { \ - CSTD_UNUSED(kbdev); \ - CSTD_NOP(code); \ - CSTD_UNUSED(kctx); \ - CSTD_UNUSED(info_val); \ - CSTD_NOP(0); \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(kctx); \ + CSTD_UNUSED(info_val); \ + CSTD_NOP(0); \ } while (0) #define KBASE_KTRACE_RBUF_CLEAR(kbdev) \ - do { \ - CSTD_UNUSED(kbdev); \ - CSTD_NOP(0); \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(0); \ } while (0) #define KBASE_KTRACE_RBUF_DUMP(kbdev) \ - do { \ - CSTD_UNUSED(kbdev); \ - CSTD_NOP(0); \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(0); \ } while (0) #endif /* KBASE_KTRACE_TARGET_RBUF */ @@ -161,32 +157,31 @@ void kbasep_ktrace_dump(struct kbase_device *kbdev); */ #if KBASE_KTRACE_TARGET_FTRACE -#define KBASE_KTRACE_FTRACE_ADD(kbdev, code, kctx, info_val) \ - trace_mali_##code(kctx, info_val) +#define KBASE_KTRACE_FTRACE_ADD(kbdev, code, kctx, info_val) trace_mali_##code(kctx, info_val) #else /* KBASE_KTRACE_TARGET_FTRACE */ #define KBASE_KTRACE_FTRACE_ADD(kbdev, code, kctx, info_val) \ - do { \ - CSTD_UNUSED(kbdev); \ - CSTD_NOP(code); \ - CSTD_UNUSED(kctx); \ - CSTD_UNUSED(info_val); \ - CSTD_NOP(0); \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(code); \ + CSTD_UNUSED(kctx); \ + CSTD_UNUSED(info_val); \ + CSTD_NOP(0); \ } while (0) #endif /* KBASE_KTRACE_TARGET_FTRACE */ /* No 'clear' implementation for ftrace yet */ #define KBASE_KTRACE_FTRACE_CLEAR(kbdev) \ - do { \ - CSTD_UNUSED(kbdev); \ - CSTD_NOP(0); \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(0); \ } while (0) /* No 'dump' implementation for ftrace yet */ #define KBASE_KTRACE_FTRACE_DUMP(kbdev) \ - do { \ - CSTD_UNUSED(kbdev); \ - CSTD_NOP(0); \ + do { \ + CSTD_UNUSED(kbdev); \ + CSTD_NOP(0); \ } while (0) /* @@ -207,21 +202,21 @@ void kbasep_ktrace_dump(struct kbase_device *kbdev); * a) be static or static inline, and * b) just return 0 and have no other statements present in the body. */ -#define KBASE_KTRACE_ADD(kbdev, code, kctx, info_val) \ - do { \ +#define KBASE_KTRACE_ADD(kbdev, code, kctx, info_val) \ + do { \ /* capture values that could come from non-pure function calls */ \ - u64 __info_val = info_val; \ - KBASE_KTRACE_RBUF_ADD(kbdev, code, kctx, __info_val); \ - KBASE_KTRACE_FTRACE_ADD(kbdev, code, kctx, __info_val); \ + u64 __info_val = info_val; \ + KBASE_KTRACE_RBUF_ADD(kbdev, code, kctx, __info_val); \ + KBASE_KTRACE_FTRACE_ADD(kbdev, code, kctx, __info_val); \ } while (0) /** * KBASE_KTRACE_CLEAR - Clear the trace, if applicable to the target(s) * @kbdev: kbase device */ -#define KBASE_KTRACE_CLEAR(kbdev) \ - do { \ - KBASE_KTRACE_RBUF_CLEAR(kbdev); \ +#define KBASE_KTRACE_CLEAR(kbdev) \ + do { \ + KBASE_KTRACE_RBUF_CLEAR(kbdev); \ KBASE_KTRACE_FTRACE_CLEAR(kbdev); \ } while (0) @@ -229,9 +224,9 @@ void kbasep_ktrace_dump(struct kbase_device *kbdev); * KBASE_KTRACE_DUMP - Dump the trace, if applicable to the target(s) * @kbdev: kbase device */ -#define KBASE_KTRACE_DUMP(kbdev) \ - do { \ - KBASE_KTRACE_RBUF_DUMP(kbdev); \ +#define KBASE_KTRACE_DUMP(kbdev) \ + do { \ + KBASE_KTRACE_RBUF_DUMP(kbdev); \ KBASE_KTRACE_FTRACE_DUMP(kbdev); \ } while (0) diff --git a/mali_kbase/debug/mali_kbase_debug_ktrace_codes.h b/mali_kbase/debug/mali_kbase_debug_ktrace_codes.h index 6103c3e..991f70f 100644 --- a/mali_kbase/debug/mali_kbase_debug_ktrace_codes.h +++ b/mali_kbase/debug/mali_kbase_debug_ktrace_codes.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2011-2015, 2018-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2011-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -42,7 +42,7 @@ * strings * * Before #including, the includer MUST #define KBASE_KTRACE_CODE_MAKE_CODE. - * After #including, the includer MUST #under KBASE_KTRACE_CODE_MAKE_CODE. + * After #including, the includer MUST #undef KBASE_KTRACE_CODE_MAKE_CODE. * * e.g.: * #define KBASE_KTRACE_CODE( X ) KBASE_KTRACE_CODE_ ## X @@ -76,11 +76,11 @@ int dummy_array[] = { #endif - /* +/* * Core events */ - /* no info_val */ - KBASE_KTRACE_CODE_MAKE_CODE(CORE_CTX_DESTROY), +/* no info_val */ +KBASE_KTRACE_CODE_MAKE_CODE(CORE_CTX_DESTROY), /* no info_val */ KBASE_KTRACE_CODE_MAKE_CODE(CORE_CTX_HWINSTR_TERM), /* info_val == GPU_IRQ_STATUS register */ @@ -101,12 +101,9 @@ int dummy_array[] = { */ KBASE_KTRACE_CODE_MAKE_CODE(PM_JOB_SUBMIT_AFTER_POWERING_UP), KBASE_KTRACE_CODE_MAKE_CODE(PM_JOB_SUBMIT_AFTER_POWERED_UP), - KBASE_KTRACE_CODE_MAKE_CODE(PM_PWRON), - KBASE_KTRACE_CODE_MAKE_CODE(PM_PWRON_TILER), - KBASE_KTRACE_CODE_MAKE_CODE(PM_PWRON_L2), - KBASE_KTRACE_CODE_MAKE_CODE(PM_PWROFF), - KBASE_KTRACE_CODE_MAKE_CODE(PM_PWROFF_TILER), - KBASE_KTRACE_CODE_MAKE_CODE(PM_PWROFF_L2), + KBASE_KTRACE_CODE_MAKE_CODE(PM_PWRON), KBASE_KTRACE_CODE_MAKE_CODE(PM_PWRON_TILER), + KBASE_KTRACE_CODE_MAKE_CODE(PM_PWRON_L2), KBASE_KTRACE_CODE_MAKE_CODE(PM_PWROFF), + KBASE_KTRACE_CODE_MAKE_CODE(PM_PWROFF_TILER), KBASE_KTRACE_CODE_MAKE_CODE(PM_PWROFF_L2), KBASE_KTRACE_CODE_MAKE_CODE(PM_CORES_POWERED), KBASE_KTRACE_CODE_MAKE_CODE(PM_CORES_POWERED_TILER), KBASE_KTRACE_CODE_MAKE_CODE(PM_CORES_POWERED_L2), @@ -127,12 +124,10 @@ int dummy_array[] = { /* info_val == kbdev->pm.active_count*/ KBASE_KTRACE_CODE_MAKE_CODE(PM_CONTEXT_ACTIVE), /* info_val == kbdev->pm.active_count*/ - KBASE_KTRACE_CODE_MAKE_CODE(PM_CONTEXT_IDLE), - KBASE_KTRACE_CODE_MAKE_CODE(PM_GPU_ON), + KBASE_KTRACE_CODE_MAKE_CODE(PM_CONTEXT_IDLE), KBASE_KTRACE_CODE_MAKE_CODE(PM_GPU_ON), KBASE_KTRACE_CODE_MAKE_CODE(PM_GPU_OFF), /* info_val == policy number, or -1 for "Already changing" */ - KBASE_KTRACE_CODE_MAKE_CODE(PM_SET_POLICY), - KBASE_KTRACE_CODE_MAKE_CODE(PM_CA_SET_POLICY), + KBASE_KTRACE_CODE_MAKE_CODE(PM_SET_POLICY), KBASE_KTRACE_CODE_MAKE_CODE(PM_CA_SET_POLICY), /* info_val == policy number */ KBASE_KTRACE_CODE_MAKE_CODE(PM_CURRENT_POLICY_INIT), /* info_val == policy number */ @@ -142,8 +137,8 @@ int dummy_array[] = { KBASE_KTRACE_CODE_MAKE_CODE(PM_RUNTIME_SUSPEND_CALLBACK), KBASE_KTRACE_CODE_MAKE_CODE(PM_RUNTIME_RESUME_CALLBACK), - /* info_val = l2 state */ -#define KBASEP_L2_STATE(n) KBASE_KTRACE_CODE_MAKE_CODE(PM_L2_ ## n), +/* info_val = l2 state */ +#define KBASEP_L2_STATE(n) KBASE_KTRACE_CODE_MAKE_CODE(PM_L2_##n), #include "backend/gpu/mali_kbase_pm_l2_states.h" #undef KBASEP_L2_STATE @@ -158,8 +153,7 @@ int dummy_array[] = { /* * Arbitration events */ - KBASE_KTRACE_CODE_MAKE_CODE(ARB_GPU_LOST), - KBASE_KTRACE_CODE_MAKE_CODE(ARB_VM_STATE), + KBASE_KTRACE_CODE_MAKE_CODE(ARB_GPU_LOST), KBASE_KTRACE_CODE_MAKE_CODE(ARB_VM_STATE), KBASE_KTRACE_CODE_MAKE_CODE(ARB_VM_EVT), #endif @@ -178,4 +172,4 @@ int dummy_array[] = { }; #endif -/* ***** THE LACK OF HEADER GUARDS IS INTENTIONAL ***** */ + /* ***** THE LACK OF HEADER GUARDS IS INTENTIONAL ***** */ diff --git a/mali_kbase/debug/mali_kbase_debug_ktrace_defs.h b/mali_kbase/debug/mali_kbase_debug_ktrace_defs.h index 8d9e11e..e776e31 100644 --- a/mali_kbase/debug/mali_kbase_debug_ktrace_defs.h +++ b/mali_kbase/debug/mali_kbase_debug_ktrace_defs.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -105,32 +105,30 @@ union kbase_ktrace_backend; * - code * - flags */ -#define KBASE_KTRACE_FLAG_BACKEND (((kbase_ktrace_flag_t)1) << 7) +#define KBASE_KTRACE_FLAG_BACKEND (((kbase_ktrace_flag_t)1) << 7) /* Collect all the common flags together for debug checking */ -#define KBASE_KTRACE_FLAG_COMMON_ALL \ - (KBASE_KTRACE_FLAG_BACKEND) +#define KBASE_KTRACE_FLAG_COMMON_ALL (KBASE_KTRACE_FLAG_BACKEND) -#define KBASE_KTRACE_FLAG_ALL \ - (KBASE_KTRACE_FLAG_COMMON_ALL | KBASE_KTRACE_FLAG_BACKEND_ALL) +#define KBASE_KTRACE_FLAG_ALL (KBASE_KTRACE_FLAG_COMMON_ALL | KBASE_KTRACE_FLAG_BACKEND_ALL) #define KBASE_KTRACE_SHIFT (9) /* 512 entries */ #define KBASE_KTRACE_SIZE (1 << KBASE_KTRACE_SHIFT) -#define KBASE_KTRACE_MASK ((1 << KBASE_KTRACE_SHIFT)-1) +#define KBASE_KTRACE_MASK ((1 << KBASE_KTRACE_SHIFT) - 1) -#define KBASE_KTRACE_CODE(X) KBASE_KTRACE_CODE_ ## X +#define KBASE_KTRACE_CODE(X) KBASE_KTRACE_CODE_##X /* Note: compiletime_assert() about this against kbase_ktrace_code_t is in * kbase_ktrace_init() */ enum kbase_ktrace_code { - /* +/* * IMPORTANT: USE OF SPECIAL #INCLUDE OF NON-STANDARD HEADER FILE * THIS MUST BE USED AT THE START OF THE ENUM */ #define KBASE_KTRACE_CODE_MAKE_CODE(X) KBASE_KTRACE_CODE(X) #include <debug/mali_kbase_debug_ktrace_codes.h> -#undef KBASE_KTRACE_CODE_MAKE_CODE +#undef KBASE_KTRACE_CODE_MAKE_CODE /* Comma on its own, to extend the list */ , /* Must be the last in the enum */ @@ -165,22 +163,21 @@ struct kbase_ktrace_msg { }; struct kbase_ktrace { - spinlock_t lock; - u16 first_out; - u16 next_in; + spinlock_t lock; + u16 first_out; + u16 next_in; struct kbase_ktrace_msg *rbuf; }; - static inline void kbase_ktrace_compiletime_asserts(void) { /* See also documentation of enum kbase_ktrace_code */ compiletime_assert(sizeof(kbase_ktrace_code_t) == sizeof(unsigned long long) || - KBASE_KTRACE_CODE_COUNT <= (1ull << (sizeof(kbase_ktrace_code_t) * BITS_PER_BYTE)), - "kbase_ktrace_code_t not wide enough for KBASE_KTRACE_CODE_COUNT"); + KBASE_KTRACE_CODE_COUNT <= + (1ull << (sizeof(kbase_ktrace_code_t) * BITS_PER_BYTE)), + "kbase_ktrace_code_t not wide enough for KBASE_KTRACE_CODE_COUNT"); compiletime_assert((KBASE_KTRACE_FLAG_BACKEND_ALL & KBASE_KTRACE_FLAG_COMMON_ALL) == 0, - "KTrace backend flags intersect with KTrace common flags"); - + "KTrace backend flags intersect with KTrace common flags"); } #endif /* KBASE_KTRACE_TARGET_RBUF */ diff --git a/mali_kbase/debug/mali_kbase_debug_ktrace_internal.h b/mali_kbase/debug/mali_kbase_debug_ktrace_internal.h index ba93f29..6c8e0ab 100644 --- a/mali_kbase/debug/mali_kbase_debug_ktrace_internal.h +++ b/mali_kbase/debug/mali_kbase_debug_ktrace_internal.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2020-2021 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -53,9 +53,8 @@ void kbasep_ktrace_backend_format_header(char *buffer, int sz, s32 *written); * %KBASE_KTRACE_FLAG_BACKEND clear. The backend must handle that setting * appropriately. */ -void kbasep_ktrace_backend_format_msg(struct kbase_ktrace_msg *trace_msg, - char *buffer, int sz, s32 *written); - +void kbasep_ktrace_backend_format_msg(struct kbase_ktrace_msg *trace_msg, char *buffer, int sz, + s32 *written); /** * kbasep_ktrace_reserve - internal function to reserve space for a ktrace @@ -80,10 +79,9 @@ struct kbase_ktrace_msg *kbasep_ktrace_reserve(struct kbase_ktrace *ktrace); * * The common part includes the mandatory parts of the backend part */ -void kbasep_ktrace_msg_init(struct kbase_ktrace *ktrace, - struct kbase_ktrace_msg *trace_msg, enum kbase_ktrace_code code, - struct kbase_context *kctx, kbase_ktrace_flag_t flags, - u64 info_val); +void kbasep_ktrace_msg_init(struct kbase_ktrace *ktrace, struct kbase_ktrace_msg *trace_msg, + enum kbase_ktrace_code code, struct kbase_context *kctx, + kbase_ktrace_flag_t flags, u64 info_val); #endif /* KBASE_KTRACE_TARGET_RBUF */ diff --git a/mali_kbase/debug/mali_kbase_debug_linux_ktrace.h b/mali_kbase/debug/mali_kbase_debug_linux_ktrace.h index 6d96647..1ebddfa 100644 --- a/mali_kbase/debug/mali_kbase_debug_linux_ktrace.h +++ b/mali_kbase/debug/mali_kbase_debug_linux_ktrace.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * - * (C) COPYRIGHT 2014, 2018, 2020-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2014-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -29,30 +29,22 @@ #if KBASE_KTRACE_TARGET_FTRACE -DECLARE_EVENT_CLASS(mali_add_template, - TP_PROTO(struct kbase_context *kctx, u64 info_val), - TP_ARGS(kctx, info_val), - TP_STRUCT__entry( - __field(pid_t, kctx_tgid) - __field(u32, kctx_id) - __field(u64, info_val) - ), - TP_fast_assign( - __entry->kctx_id = (kctx) ? kctx->id : 0u; - __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; - __entry->info_val = info_val; - ), - TP_printk("kctx=%d_%u info=0x%llx", __entry->kctx_tgid, - __entry->kctx_id, __entry->info_val) -); +DECLARE_EVENT_CLASS(mali_add_template, TP_PROTO(struct kbase_context *kctx, u64 info_val), + TP_ARGS(kctx, info_val), + TP_STRUCT__entry(__field(pid_t, kctx_tgid) __field(u32, kctx_id) + __field(u64, info_val)), + TP_fast_assign(__entry->kctx_id = (kctx) ? kctx->id : 0u; + __entry->kctx_tgid = (kctx) ? kctx->tgid : 0; + __entry->info_val = info_val;), + TP_printk("kctx=%d_%u info=0x%llx", __entry->kctx_tgid, __entry->kctx_id, + __entry->info_val)); /* DEFINE_MALI_ADD_EVENT is available also to backends for backend-specific * simple trace codes */ -#define DEFINE_MALI_ADD_EVENT(name) \ -DEFINE_EVENT(mali_add_template, mali_##name, \ - TP_PROTO(struct kbase_context *kctx, u64 info_val), \ - TP_ARGS(kctx, info_val)) +#define DEFINE_MALI_ADD_EVENT(name) \ + DEFINE_EVENT(mali_add_template, mali_##name, \ + TP_PROTO(struct kbase_context *kctx, u64 info_val), TP_ARGS(kctx, info_val)) DEFINE_MALI_ADD_EVENT(CORE_CTX_DESTROY); DEFINE_MALI_ADD_EVENT(CORE_CTX_HWINSTR_TERM); DEFINE_MALI_ADD_EVENT(CORE_GPU_IRQ); @@ -98,7 +90,7 @@ DEFINE_MALI_ADD_EVENT(PM_WAKE_WAITERS); DEFINE_MALI_ADD_EVENT(PM_POWEROFF_WAIT_WQ); DEFINE_MALI_ADD_EVENT(PM_RUNTIME_SUSPEND_CALLBACK); DEFINE_MALI_ADD_EVENT(PM_RUNTIME_RESUME_CALLBACK); -#define KBASEP_L2_STATE(n) DEFINE_MALI_ADD_EVENT(PM_L2_ ## n); +#define KBASEP_L2_STATE(n) DEFINE_MALI_ADD_EVENT(PM_L2_##n); #include "backend/gpu/mali_kbase_pm_l2_states.h" #undef KBASEP_L2_STATE DEFINE_MALI_ADD_EVENT(SCHED_RETAIN_CTX_NOLOCK); |