diff options
Diffstat (limited to 'drivers/gpu/arm/midgard/mali_kbase_tlstream.c')
-rw-r--r-- | drivers/gpu/arm/midgard/mali_kbase_tlstream.c | 330 |
1 files changed, 67 insertions, 263 deletions
diff --git a/drivers/gpu/arm/midgard/mali_kbase_tlstream.c b/drivers/gpu/arm/midgard/mali_kbase_tlstream.c index ad88b7b69018..0994ddd7c95f 100644 --- a/drivers/gpu/arm/midgard/mali_kbase_tlstream.c +++ b/drivers/gpu/arm/midgard/mali_kbase_tlstream.c @@ -1,6 +1,6 @@ /* * - * (C) COPYRIGHT 2015-2016 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2015 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 @@ -41,6 +41,9 @@ /* The number of nanoseconds in a second. */ #define NSECS_IN_SEC 1000000000ull /* ns */ +/* The number of nanoseconds to wait before autoflushing the stream. */ +#define AUTOFLUSH_TIMEOUT (2ull * NSECS_IN_SEC) /* ns */ + /* The period of autoflush checker execution in milliseconds. */ #define AUTOFLUSH_INTERVAL 1000 /* ms */ @@ -139,8 +142,6 @@ enum tl_msg_id_obj { KBASE_TL_RET_ATOM_AS, KBASE_TL_NRET_ATOM_AS, KBASE_TL_DEP_ATOM_ATOM, - KBASE_TL_NDEP_ATOM_ATOM, - KBASE_TL_RDEP_ATOM_ATOM, KBASE_TL_ATTRIB_ATOM_CONFIG, KBASE_TL_ATTRIB_AS_CONFIG, @@ -151,9 +152,7 @@ enum tl_msg_id_obj { /* Message ids of trace events that are recorded in the auxiliary stream. */ enum tl_msg_id_aux { KBASE_AUX_PM_STATE, - KBASE_AUX_ISSUE_JOB_SOFTSTOP, KBASE_AUX_JOB_SOFTSTOP, - KBASE_AUX_JOB_SOFTSTOP_EX, KBASE_AUX_PAGEFAULT, KBASE_AUX_PAGESALLOC }; @@ -167,7 +166,7 @@ enum tl_msg_id_aux { * @wbi: write buffer index * @rbi: read buffer index * @numbered: if non-zero stream's packets are sequentially numbered - * @autoflush_counter: counter tracking stream's autoflush state + * @last_write_time: timestamp indicating last write * * This structure holds information needed to construct proper packets in the * timeline stream. Each message in sequence must bear timestamp that is greater @@ -178,11 +177,6 @@ enum tl_msg_id_aux { * Each packet in timeline body stream has sequence number embedded (this value * must increment monotonically and is used by packets receiver to discover * buffer overflows. - * Autoflush counter is set to negative number when there is no data pending - * for flush and it is set to zero on every update of the buffer. Autoflush - * timer will increment the counter by one on every expiry. In case there will - * be no activity on the buffer during two consecutive timer expiries, stream - * buffer will be flushed. */ struct tl_stream { spinlock_t lock; @@ -196,7 +190,7 @@ struct tl_stream { atomic_t rbi; int numbered; - atomic_t autoflush_counter; + u64 last_write_time; }; /** @@ -247,6 +241,9 @@ static atomic_t autoflush_timer_active; * streams at any given time. */ static DEFINE_MUTEX(tl_reader_lock); +/* Indicator of whether the timeline stream file descriptor is already used. */ +static atomic_t tlstream_busy = {0}; + /* Timeline stream event queue. */ static DECLARE_WAIT_QUEUE_HEAD(tl_event_queue); @@ -272,8 +269,8 @@ static const struct tp_desc tp_desc_obj[] = { KBASE_TL_NEW_CTX, __stringify(KBASE_TL_NEW_CTX), "object ctx is created", - "@pII", - "ctx,ctx_nr,tgid" + "@pI", + "ctx,ctx_nr" }, { KBASE_TL_NEW_GPU, @@ -409,20 +406,6 @@ static const struct tp_desc tp_desc_obj[] = { "atom1,atom2" }, { - KBASE_TL_NDEP_ATOM_ATOM, - __stringify(KBASE_TL_NDEP_ATOM_ATOM), - "atom2 no longer depends on atom1", - "@pp", - "atom1,atom2" - }, - { - KBASE_TL_RDEP_ATOM_ATOM, - __stringify(KBASE_TL_RDEP_ATOM_ATOM), - "resolved dependecy of atom2 depending on atom1", - "@pp", - "atom1,atom2" - }, - { KBASE_TL_ATTRIB_ATOM_CONFIG, __stringify(KBASE_TL_ATTRIB_ATOM_CONFIG), "atom job slot attributes", @@ -455,13 +438,6 @@ static const struct tp_desc tp_desc_aux[] = { "core_type,core_state_bitset" }, { - KBASE_AUX_ISSUE_JOB_SOFTSTOP, - __stringify(KBASE_AUX_ISSUE_JOB_SOFTSTOP), - "Issuing job soft stop", - "@p", - "atom" - }, - { KBASE_AUX_JOB_SOFTSTOP, __stringify(KBASE_AUX_JOB_SOFTSTOP), "Job soft stop", @@ -469,13 +445,6 @@ static const struct tp_desc tp_desc_aux[] = { "tag_id" }, { - KBASE_AUX_JOB_SOFTSTOP_EX, - __stringify(KBASE_AUX_JOB_SOFTSTOP_EX), - "Job soft stop, more details", - "@pI", - "atom,job_type" - }, - { KBASE_AUX_PAGEFAULT, __stringify(KBASE_AUX_PAGEFAULT), "Page fault", @@ -501,11 +470,6 @@ static atomic_t tlstream_bytes_generated = {0}; /*****************************************************************************/ -/* Indicator of whether the timeline stream file descriptor is used. */ -atomic_t kbase_tlstream_enabled = {0}; - -/*****************************************************************************/ - /** * kbasep_tlstream_get_timestamp - return timestamp * @@ -809,9 +773,6 @@ static size_t kbasep_tlstream_msgbuf_submit( unsigned int rb_idx_raw = atomic_read(&stream->rbi); unsigned int wb_idx = wb_idx_raw % PACKET_COUNT; - /* Set stream as flushed. */ - atomic_set(&stream->autoflush_counter, -1); - kbasep_tlstream_packet_header_update( stream->buffer[wb_idx].data, wb_size - PACKET_HEADER_SIZE); @@ -867,7 +828,7 @@ static size_t kbasep_tlstream_msgbuf_submit( static char *kbasep_tlstream_msgbuf_acquire( enum tl_stream_type stream_type, size_t msg_size, - unsigned long *flags) __acquires(&stream->lock) + unsigned long *flags) { struct tl_stream *stream; unsigned int wb_idx_raw; @@ -914,16 +875,14 @@ static char *kbasep_tlstream_msgbuf_acquire( */ static void kbasep_tlstream_msgbuf_release( enum tl_stream_type stream_type, - unsigned long flags) __releases(&stream->lock) + unsigned long flags) { struct tl_stream *stream; KBASE_DEBUG_ASSERT(TL_STREAM_TYPE_COUNT > stream_type); stream = tl_stream[stream_type]; - - /* Mark stream as containing unflushed data. */ - atomic_set(&stream->autoflush_counter, 0); + stream->last_write_time = kbasep_tlstream_get_timestamp(); spin_unlock_irqrestore(&stream->lock, flags); } @@ -985,22 +944,6 @@ static void kbasep_tlstream_autoflush_timer_callback(unsigned long data) size_t wb_size; size_t min_size = PACKET_HEADER_SIZE; - int af_cnt = atomic_read(&stream->autoflush_counter); - - /* Check if stream contain unflushed data. */ - if (0 > af_cnt) - continue; - - /* Check if stream should be flushed now. */ - if (af_cnt != atomic_cmpxchg( - &stream->autoflush_counter, - af_cnt, - af_cnt + 1)) - continue; - if (!af_cnt) - continue; - - /* Autoflush this stream. */ if (stream->numbered) min_size += PACKET_NUMBER_SIZE; @@ -1011,11 +954,16 @@ static void kbasep_tlstream_autoflush_timer_callback(unsigned long data) wb_size = atomic_read(&stream->buffer[wb_idx].size); if (wb_size > min_size) { - wb_size = kbasep_tlstream_msgbuf_submit( - stream, wb_idx_raw, wb_size); - wb_idx = (wb_idx_raw + 1) % PACKET_COUNT; - atomic_set(&stream->buffer[wb_idx].size, - wb_size); + u64 timestamp = kbasep_tlstream_get_timestamp(); + + if (timestamp - stream->last_write_time + > AUTOFLUSH_TIMEOUT) { + wb_size = kbasep_tlstream_msgbuf_submit( + stream, wb_idx_raw, wb_size); + wb_idx = (wb_idx_raw + 1) % PACKET_COUNT; + atomic_set(&stream->buffer[wb_idx].size, + wb_size); + } } spin_unlock_irqrestore(&stream->lock, flags); } @@ -1096,7 +1044,7 @@ static ssize_t kbasep_tlstream_read( while (copy_len < size) { enum tl_stream_type stype; - unsigned int rb_idx_raw = 0; + unsigned int rb_idx_raw; unsigned int rb_idx; size_t rb_size; @@ -1186,12 +1134,7 @@ static int kbasep_tlstream_release(struct inode *inode, struct file *filp) KBASE_DEBUG_ASSERT(filp); CSTD_UNUSED(inode); CSTD_UNUSED(filp); - - /* Stop autoflush timer before releasing access to streams. */ - atomic_set(&autoflush_timer_active, 0); - del_timer_sync(&autoflush_timer); - - atomic_set(&kbase_tlstream_enabled, 0); + atomic_set(&tlstream_busy, 0); return 0; } @@ -1280,6 +1223,7 @@ static void kbasep_tlstream_timeline_header( int kbase_tlstream_init(void) { enum tl_stream_type i; + int rcode; /* Prepare stream structures. */ for (i = 0; i < TL_STREAM_TYPE_COUNT; i++) { @@ -1297,10 +1241,14 @@ int kbase_tlstream_init(void) } /* Initialize autoflush timer. */ - atomic_set(&autoflush_timer_active, 0); + atomic_set(&autoflush_timer_active, 1); setup_timer(&autoflush_timer, kbasep_tlstream_autoflush_timer_callback, 0); + rcode = mod_timer( + &autoflush_timer, + jiffies + msecs_to_jiffies(AUTOFLUSH_INTERVAL)); + CSTD_UNUSED(rcode); return 0; } @@ -1309,6 +1257,9 @@ void kbase_tlstream_term(void) { enum tl_stream_type i; + atomic_set(&autoflush_timer_active, 0); + del_timer_sync(&autoflush_timer); + for (i = 0; i < TL_STREAM_TYPE_COUNT; i++) { kbasep_timeline_stream_term(tl_stream[i]); kfree(tl_stream[i]); @@ -1317,16 +1268,14 @@ void kbase_tlstream_term(void) int kbase_tlstream_acquire(struct kbase_context *kctx, int *fd) { - if (0 == atomic_cmpxchg(&kbase_tlstream_enabled, 0, 1)) { - int rcode; - + if (0 == atomic_cmpxchg(&tlstream_busy, 0, 1)) { *fd = anon_inode_getfd( "[mali_tlstream]", &kbasep_tlstream_fops, kctx, O_RDONLY | O_CLOEXEC); if (0 > *fd) { - atomic_set(&kbase_tlstream_enabled, 0); + atomic_set(&tlstream_busy, 0); return *fd; } @@ -1345,14 +1294,6 @@ int kbase_tlstream_acquire(struct kbase_context *kctx, int *fd) TL_STREAM_TYPE_AUX_HEADER, tp_desc_aux, ARRAY_SIZE(tp_desc_aux)); - - /* Start autoflush timer. */ - atomic_set(&autoflush_timer_active, 1); - rcode = mod_timer( - &autoflush_timer, - jiffies + msecs_to_jiffies(AUTOFLUSH_INTERVAL)); - CSTD_UNUSED(rcode); - } else { *fd = -EBUSY; } @@ -1388,12 +1329,11 @@ void kbase_tlstream_stats(u32 *bytes_collected, u32 *bytes_generated) /*****************************************************************************/ -void __kbase_tlstream_tl_summary_new_ctx(void *context, u32 nr, u32 tgid) +void kbase_tlstream_tl_summary_new_ctx(void *context, u32 nr) { const u32 msg_id = KBASE_TL_NEW_CTX; const size_t msg_size = - sizeof(msg_id) + sizeof(u64) + sizeof(context) + sizeof(nr) + - sizeof(tgid); + sizeof(msg_id) + sizeof(u64) + sizeof(context) + sizeof(nr); unsigned long flags; char *buffer; size_t pos = 0; @@ -1409,15 +1349,12 @@ void __kbase_tlstream_tl_summary_new_ctx(void *context, u32 nr, u32 tgid) buffer, pos, &context, sizeof(context)); pos = kbasep_tlstream_write_bytes( buffer, pos, &nr, sizeof(nr)); - pos = kbasep_tlstream_write_bytes( - buffer, pos, &tgid, sizeof(tgid)); - KBASE_DEBUG_ASSERT(msg_size == pos); kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ_SUMMARY, flags); } -void __kbase_tlstream_tl_summary_new_gpu(void *gpu, u32 id, u32 core_count) +void kbase_tlstream_tl_summary_new_gpu(void *gpu, u32 id, u32 core_count) { const u32 msg_id = KBASE_TL_NEW_GPU; const size_t msg_size = @@ -1445,7 +1382,7 @@ void __kbase_tlstream_tl_summary_new_gpu(void *gpu, u32 id, u32 core_count) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ_SUMMARY, flags); } -void __kbase_tlstream_tl_summary_new_lpu(void *lpu, u32 nr, u32 fn) +void kbase_tlstream_tl_summary_new_lpu(void *lpu, u32 nr, u32 fn) { const u32 msg_id = KBASE_TL_NEW_LPU; const size_t msg_size = @@ -1473,7 +1410,7 @@ void __kbase_tlstream_tl_summary_new_lpu(void *lpu, u32 nr, u32 fn) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ_SUMMARY, flags); } -void __kbase_tlstream_tl_summary_lifelink_lpu_gpu(void *lpu, void *gpu) +void kbase_tlstream_tl_summary_lifelink_lpu_gpu(void *lpu, void *gpu) { const u32 msg_id = KBASE_TL_LIFELINK_LPU_GPU; const size_t msg_size = @@ -1498,7 +1435,7 @@ void __kbase_tlstream_tl_summary_lifelink_lpu_gpu(void *lpu, void *gpu) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ_SUMMARY, flags); } -void __kbase_tlstream_tl_summary_new_as(void *as, u32 nr) +void kbase_tlstream_tl_summary_new_as(void *as, u32 nr) { const u32 msg_id = KBASE_TL_NEW_AS; const size_t msg_size = @@ -1523,7 +1460,7 @@ void __kbase_tlstream_tl_summary_new_as(void *as, u32 nr) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ_SUMMARY, flags); } -void __kbase_tlstream_tl_summary_lifelink_as_gpu(void *as, void *gpu) +void kbase_tlstream_tl_summary_lifelink_as_gpu(void *as, void *gpu) { const u32 msg_id = KBASE_TL_LIFELINK_AS_GPU; const size_t msg_size = @@ -1550,12 +1487,11 @@ void __kbase_tlstream_tl_summary_lifelink_as_gpu(void *as, void *gpu) /*****************************************************************************/ -void __kbase_tlstream_tl_new_ctx(void *context, u32 nr, u32 tgid) +void kbase_tlstream_tl_new_ctx(void *context, u32 nr) { const u32 msg_id = KBASE_TL_NEW_CTX; const size_t msg_size = - sizeof(msg_id) + sizeof(u64) + sizeof(context) + sizeof(nr) + - sizeof(tgid); + sizeof(msg_id) + sizeof(u64) + sizeof(context) + sizeof(nr); unsigned long flags; char *buffer; size_t pos = 0; @@ -1571,14 +1507,12 @@ void __kbase_tlstream_tl_new_ctx(void *context, u32 nr, u32 tgid) buffer, pos, &context, sizeof(context)); pos = kbasep_tlstream_write_bytes( buffer, pos, &nr, sizeof(nr)); - pos = kbasep_tlstream_write_bytes( - buffer, pos, &tgid, sizeof(tgid)); KBASE_DEBUG_ASSERT(msg_size == pos); kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_new_atom(void *atom, u32 nr) +void kbase_tlstream_tl_new_atom(void *atom, u32 nr) { const u32 msg_id = KBASE_TL_NEW_ATOM; const size_t msg_size = @@ -1603,7 +1537,7 @@ void __kbase_tlstream_tl_new_atom(void *atom, u32 nr) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_del_ctx(void *context) +void kbase_tlstream_tl_del_ctx(void *context) { const u32 msg_id = KBASE_TL_DEL_CTX; const size_t msg_size = @@ -1626,7 +1560,7 @@ void __kbase_tlstream_tl_del_ctx(void *context) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_del_atom(void *atom) +void kbase_tlstream_tl_del_atom(void *atom) { const u32 msg_id = KBASE_TL_DEL_ATOM; const size_t msg_size = @@ -1649,7 +1583,7 @@ void __kbase_tlstream_tl_del_atom(void *atom) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_ret_ctx_lpu(void *context, void *lpu) +void kbase_tlstream_tl_ret_ctx_lpu(void *context, void *lpu) { const u32 msg_id = KBASE_TL_RET_CTX_LPU; const size_t msg_size = @@ -1674,7 +1608,7 @@ void __kbase_tlstream_tl_ret_ctx_lpu(void *context, void *lpu) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_ret_atom_ctx(void *atom, void *context) +void kbase_tlstream_tl_ret_atom_ctx(void *atom, void *context) { const u32 msg_id = KBASE_TL_RET_ATOM_CTX; const size_t msg_size = @@ -1699,7 +1633,7 @@ void __kbase_tlstream_tl_ret_atom_ctx(void *atom, void *context) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_ret_atom_lpu( +void kbase_tlstream_tl_ret_atom_lpu( void *atom, void *lpu, const char *attrib_match_list) { const u32 msg_id = KBASE_TL_RET_ATOM_LPU; @@ -1730,7 +1664,7 @@ void __kbase_tlstream_tl_ret_atom_lpu( kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_nret_ctx_lpu(void *context, void *lpu) +void kbase_tlstream_tl_nret_ctx_lpu(void *context, void *lpu) { const u32 msg_id = KBASE_TL_NRET_CTX_LPU; const size_t msg_size = @@ -1755,7 +1689,7 @@ void __kbase_tlstream_tl_nret_ctx_lpu(void *context, void *lpu) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_nret_atom_ctx(void *atom, void *context) +void kbase_tlstream_tl_nret_atom_ctx(void *atom, void *context) { const u32 msg_id = KBASE_TL_NRET_ATOM_CTX; const size_t msg_size = @@ -1780,7 +1714,7 @@ void __kbase_tlstream_tl_nret_atom_ctx(void *atom, void *context) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_dep_atom_atom(void *atom1, void *atom2) +void kbase_tlstream_tl_dep_atom_atom(void *atom1, void *atom2) { const u32 msg_id = KBASE_TL_DEP_ATOM_ATOM; const size_t msg_size = @@ -1805,57 +1739,7 @@ void __kbase_tlstream_tl_dep_atom_atom(void *atom1, void *atom2) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_ndep_atom_atom(void *atom1, void *atom2) -{ - const u32 msg_id = KBASE_TL_NDEP_ATOM_ATOM; - const size_t msg_size = - sizeof(msg_id) + sizeof(u64) + sizeof(atom1) + sizeof(atom2); - unsigned long flags; - char *buffer; - size_t pos = 0; - - buffer = kbasep_tlstream_msgbuf_acquire( - TL_STREAM_TYPE_OBJ, - msg_size, &flags); - KBASE_DEBUG_ASSERT(buffer); - - pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id)); - pos = kbasep_tlstream_write_timestamp(buffer, pos); - pos = kbasep_tlstream_write_bytes( - buffer, pos, &atom1, sizeof(atom1)); - pos = kbasep_tlstream_write_bytes( - buffer, pos, &atom2, sizeof(atom2)); - KBASE_DEBUG_ASSERT(msg_size == pos); - - kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); -} - -void __kbase_tlstream_tl_rdep_atom_atom(void *atom1, void *atom2) -{ - const u32 msg_id = KBASE_TL_RDEP_ATOM_ATOM; - const size_t msg_size = - sizeof(msg_id) + sizeof(u64) + sizeof(atom1) + sizeof(atom2); - unsigned long flags; - char *buffer; - size_t pos = 0; - - buffer = kbasep_tlstream_msgbuf_acquire( - TL_STREAM_TYPE_OBJ, - msg_size, &flags); - KBASE_DEBUG_ASSERT(buffer); - - pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id)); - pos = kbasep_tlstream_write_timestamp(buffer, pos); - pos = kbasep_tlstream_write_bytes( - buffer, pos, &atom1, sizeof(atom1)); - pos = kbasep_tlstream_write_bytes( - buffer, pos, &atom2, sizeof(atom2)); - KBASE_DEBUG_ASSERT(msg_size == pos); - - kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); -} - -void __kbase_tlstream_tl_nret_atom_lpu(void *atom, void *lpu) +void kbase_tlstream_tl_nret_atom_lpu(void *atom, void *lpu) { const u32 msg_id = KBASE_TL_NRET_ATOM_LPU; const size_t msg_size = @@ -1880,7 +1764,7 @@ void __kbase_tlstream_tl_nret_atom_lpu(void *atom, void *lpu) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_ret_as_ctx(void *as, void *ctx) +void kbase_tlstream_tl_ret_as_ctx(void *as, void *ctx) { const u32 msg_id = KBASE_TL_RET_AS_CTX; const size_t msg_size = @@ -1905,7 +1789,7 @@ void __kbase_tlstream_tl_ret_as_ctx(void *as, void *ctx) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_nret_as_ctx(void *as, void *ctx) +void kbase_tlstream_tl_nret_as_ctx(void *as, void *ctx) { const u32 msg_id = KBASE_TL_NRET_AS_CTX; const size_t msg_size = @@ -1930,7 +1814,7 @@ void __kbase_tlstream_tl_nret_as_ctx(void *as, void *ctx) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_ret_atom_as(void *atom, void *as) +void kbase_tlstream_tl_ret_atom_as(void *atom, void *as) { const u32 msg_id = KBASE_TL_RET_ATOM_AS; const size_t msg_size = @@ -1955,7 +1839,7 @@ void __kbase_tlstream_tl_ret_atom_as(void *atom, void *as) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_nret_atom_as(void *atom, void *as) +void kbase_tlstream_tl_nret_atom_as(void *atom, void *as) { const u32 msg_id = KBASE_TL_NRET_ATOM_AS; const size_t msg_size = @@ -1980,7 +1864,7 @@ void __kbase_tlstream_tl_nret_atom_as(void *atom, void *as) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_attrib_atom_config( +void kbase_tlstream_tl_attrib_atom_config( void *atom, u64 jd, u64 affinity, u32 config) { const u32 msg_id = KBASE_TL_ATTRIB_ATOM_CONFIG; @@ -2011,7 +1895,7 @@ void __kbase_tlstream_tl_attrib_atom_config( kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_tl_attrib_as_config( +void kbase_tlstream_tl_attrib_as_config( void *as, u64 transtab, u64 memattr, u64 transcfg) { const u32 msg_id = KBASE_TL_ATTRIB_AS_CONFIG; @@ -2042,7 +1926,7 @@ void __kbase_tlstream_tl_attrib_as_config( kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_OBJ, flags); } -void __kbase_tlstream_jd_gpu_soft_reset(void *gpu) +void kbase_tlstream_jd_gpu_soft_reset(void *gpu) { const u32 msg_id = KBASE_JD_GPU_SOFT_RESET; const size_t msg_size = @@ -2067,7 +1951,7 @@ void __kbase_tlstream_jd_gpu_soft_reset(void *gpu) /*****************************************************************************/ -void __kbase_tlstream_aux_pm_state(u32 core_type, u64 state) +void kbase_tlstream_aux_pm_state(u32 core_type, u64 state) { const u32 msg_id = KBASE_AUX_PM_STATE; const size_t msg_size = @@ -2092,28 +1976,7 @@ void __kbase_tlstream_aux_pm_state(u32 core_type, u64 state) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags); } -void __kbase_tlstream_aux_issue_job_softstop(void *katom) -{ - const u32 msg_id = KBASE_AUX_ISSUE_JOB_SOFTSTOP; - const size_t msg_size = - sizeof(msg_id) + sizeof(u64) + sizeof(katom); - unsigned long flags; - char *buffer; - size_t pos = 0; - - buffer = kbasep_tlstream_msgbuf_acquire( - TL_STREAM_TYPE_AUX, msg_size, &flags); - KBASE_DEBUG_ASSERT(buffer); - - pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id)); - pos = kbasep_tlstream_write_timestamp(buffer, pos); - pos = kbasep_tlstream_write_bytes(buffer, pos, &katom, sizeof(katom)); - KBASE_DEBUG_ASSERT(msg_size == pos); - - kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags); -} - -void __kbase_tlstream_aux_job_softstop(u32 js_id) +void kbase_tlstream_aux_job_softstop(u32 js_id) { const u32 msg_id = KBASE_AUX_JOB_SOFTSTOP; const size_t msg_size = @@ -2135,66 +1998,7 @@ void __kbase_tlstream_aux_job_softstop(u32 js_id) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags); } -/** - * __kbase_tlstream_aux_job_softstop_ex_record - record the trace point - * @katom: the atom that has been soft-stopped - * @job_type: the job type - */ -static void __kbase_tlstream_aux_job_softstop_ex_record( - void *katom, u32 job_type) -{ - const u32 msg_id = KBASE_AUX_JOB_SOFTSTOP_EX; - const size_t msg_size = - sizeof(msg_id) + sizeof(u64) + sizeof(katom) + sizeof(job_type); - unsigned long flags; - char *buffer; - size_t pos = 0; - - buffer = kbasep_tlstream_msgbuf_acquire( - TL_STREAM_TYPE_AUX, msg_size, &flags); - KBASE_DEBUG_ASSERT(buffer); - - pos = kbasep_tlstream_write_bytes(buffer, pos, &msg_id, sizeof(msg_id)); - pos = kbasep_tlstream_write_timestamp(buffer, pos); - pos = kbasep_tlstream_write_bytes(buffer, pos, &katom, sizeof(katom)); - pos = kbasep_tlstream_write_bytes( - buffer, pos, &job_type, sizeof(job_type)); - KBASE_DEBUG_ASSERT(msg_size == pos); - - kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags); -} - -void __kbase_tlstream_aux_job_softstop_ex(struct kbase_jd_atom *katom) -{ - struct kbase_context *kctx = katom->kctx; - u64 jd = katom->jc; - - while (jd != 0) { - struct job_descriptor_header *job; - struct kbase_vmap_struct map; - - job = kbase_vmap(kctx, jd, sizeof(*job), &map); - if (!job) { - dev_err(kctx->kbdev->dev, - "__kbase_tlstream_aux_job_softstop_ex: failed to map job descriptor 0x%llx for atom 0x%p\n", - jd, (void *)katom); - break; - } - if (job->exception_status != BASE_JD_EVENT_STOPPED) { - kbase_vunmap(kctx, &map); - break; - } - - __kbase_tlstream_aux_job_softstop_ex_record( - katom, job->job_type); - - jd = job->job_descriptor_size ? - job->next_job._64 : job->next_job._32; - kbase_vunmap(kctx, &map); - } -} - -void __kbase_tlstream_aux_pagefault(u32 ctx_nr, u64 page_count_change) +void kbase_tlstream_aux_pagefault(u32 ctx_nr, u64 page_count_change) { const u32 msg_id = KBASE_AUX_PAGEFAULT; const size_t msg_size = @@ -2219,7 +2023,7 @@ void __kbase_tlstream_aux_pagefault(u32 ctx_nr, u64 page_count_change) kbasep_tlstream_msgbuf_release(TL_STREAM_TYPE_AUX, flags); } -void __kbase_tlstream_aux_pagesalloc(u32 ctx_nr, u64 page_count) +void kbase_tlstream_aux_pagesalloc(u32 ctx_nr, u64 page_count) { const u32 msg_id = KBASE_AUX_PAGESALLOC; const size_t msg_size = |