X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=instrumentation%2Fevents%2Flttng-module%2Fworkqueue.h;h=5288ebb10c145eb7767ac31056a21f92926eff7b;hb=b78104db53f97c10add30016e365855a26f6e01e;hp=96aa240e06a59ed05f6c052d32f3825ea0b34dde;hpb=20008d8c6a4cc7434753c5c34b90b4712f1e94af;p=lttng-modules.git diff --git a/instrumentation/events/lttng-module/workqueue.h b/instrumentation/events/lttng-module/workqueue.h index 96aa240e..5288ebb1 100644 --- a/instrumentation/events/lttng-module/workqueue.h +++ b/instrumentation/events/lttng-module/workqueue.h @@ -1,14 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0 */ #undef TRACE_SYSTEM #define TRACE_SYSTEM workqueue -#if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) -#define _TRACE_WORKQUEUE_H +#if !defined(LTTNG_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) +#define LTTNG_TRACE_WORKQUEUE_H -#include +#include #include -#include +#include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(2,6,36)) #ifndef _TRACE_WORKQUEUE_DEF_ #define _TRACE_WORKQUEUE_DEF_ @@ -18,24 +19,18 @@ struct global_cwq; #endif -DECLARE_EVENT_CLASS(workqueue_work, +LTTNG_TRACEPOINT_EVENT_CLASS(workqueue_work, TP_PROTO(struct work_struct *work), TP_ARGS(work), - TP_STRUCT__entry( - __field( void *, work ) - ), - - TP_fast_assign( - tp_assign(work, work) - ), - - TP_printk("work struct %p", __entry->work) + TP_FIELDS( + ctf_integer_hex(void *, work, work) + ) ) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(2,6,37)) /** * workqueue_queue_work - called when a work gets queued * @req_cpu: the requested cpu @@ -46,9 +41,9 @@ DECLARE_EVENT_CLASS(workqueue_work, * delayed work is actually queued on a workqueue (ie: once the delay * has been reached). */ -TRACE_EVENT(workqueue_queue_work, +LTTNG_TRACEPOINT_EVENT(workqueue_queue_work, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,9,0)) TP_PROTO(unsigned int req_cpu, struct pool_workqueue *pwq, struct work_struct *work), @@ -60,21 +55,11 @@ TRACE_EVENT(workqueue_queue_work, TP_ARGS(req_cpu, cwq, work), #endif - TP_STRUCT__entry( - __field( void *, work ) - __field( void *, function) - __field( unsigned int, req_cpu ) - ), - - TP_fast_assign( - tp_assign(work, work) - tp_assign(function, work->func) - tp_assign(req_cpu, req_cpu) - ), - - TP_printk("work struct=%p function=%pf req_cpu=%u", - __entry->work, __entry->function, - __entry->req_cpu) + TP_FIELDS( + ctf_integer_hex(void *, work, work) + ctf_integer_hex(void *, function, work->func) + ctf_integer(unsigned int, req_cpu, req_cpu) + ) ) /** @@ -85,7 +70,7 @@ TRACE_EVENT(workqueue_queue_work, * which happens immediately after queueing unless @max_active limit * is reached. */ -DEFINE_EVENT(workqueue_work, workqueue_activate_work, +LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue_work, workqueue_activate_work, TP_PROTO(struct work_struct *work), @@ -99,70 +84,75 @@ DEFINE_EVENT(workqueue_work, workqueue_activate_work, * * Allows to track workqueue execution. */ -TRACE_EVENT(workqueue_execute_start, +LTTNG_TRACEPOINT_EVENT(workqueue_execute_start, TP_PROTO(struct work_struct *work), TP_ARGS(work), - TP_STRUCT__entry( - __field( void *, work ) - __field( void *, function) - ), + TP_FIELDS( + ctf_integer_hex(void *, work, work) + ctf_integer_hex(void *, function, work->func) + ) +) - TP_fast_assign( - tp_assign(work, work) - tp_assign(function, work->func) - ), +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) +/** + * workqueue_execute_end - called immediately after the workqueue callback + * @work: pointer to struct work_struct + * @function: pointer to worker function + * + * Allows to track workqueue execution. + */ +LTTNG_TRACEPOINT_EVENT(workqueue_execute_end, - TP_printk("work struct %p: function %pf", __entry->work, __entry->function) -) + TP_PROTO(struct work_struct *work, work_func_t function), + TP_ARGS(work, function), + + TP_FIELDS( + ctf_integer_hex(void *, work, work) + ctf_integer_hex(void *, function, function) + ) +) +#else /** * workqueue_execute_end - called immediately after the workqueue callback * @work: pointer to struct work_struct * * Allows to track workqueue execution. */ -DEFINE_EVENT(workqueue_work, workqueue_execute_end, +LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue_work, workqueue_execute_end, TP_PROTO(struct work_struct *work), TP_ARGS(work) ) +#endif #else -DECLARE_EVENT_CLASS(workqueue, +LTTNG_TRACEPOINT_EVENT_CLASS(workqueue, TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), TP_ARGS(wq_thread, work), - TP_STRUCT__entry( - __array(char, thread_comm, TASK_COMM_LEN) - __field(pid_t, thread_pid) - __field(work_func_t, func) - ), - - TP_fast_assign( - tp_memcpy(thread_comm, wq_thread->comm, TASK_COMM_LEN) - tp_assign(thread_pid, wq_thread->pid) - tp_assign(func, work->func) - ), - - TP_printk("thread=%s:%d func=%pf", __entry->thread_comm, - __entry->thread_pid, __entry->func) + TP_FIELDS( + ctf_array(char, thread_comm, wq_thread->comm, TASK_COMM_LEN) + ctf_integer(pid_t, thread_pid, wq_thread->pid) + ctf_integer_hex(work_func_t, func, work->func) + ) ) -DEFINE_EVENT(workqueue, workqueue_insertion, +LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue, workqueue_insertion, TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), TP_ARGS(wq_thread, work) ) -DEFINE_EVENT(workqueue, workqueue_execution, +LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue, workqueue_execution, TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), @@ -170,50 +160,34 @@ DEFINE_EVENT(workqueue, workqueue_execution, ) /* Trace the creation of one workqueue thread on a cpu */ -TRACE_EVENT(workqueue_creation, +LTTNG_TRACEPOINT_EVENT(workqueue_creation, TP_PROTO(struct task_struct *wq_thread, int cpu), TP_ARGS(wq_thread, cpu), - TP_STRUCT__entry( - __array(char, thread_comm, TASK_COMM_LEN) - __field(pid_t, thread_pid) - __field(int, cpu) - ), - - TP_fast_assign( - tp_memcpy(thread_comm, wq_thread->comm, TASK_COMM_LEN) - tp_assign(thread_pid, wq_thread->pid) - tp_assign(cpu, cpu) - ), - - TP_printk("thread=%s:%d cpu=%d", __entry->thread_comm, - __entry->thread_pid, __entry->cpu) + TP_FIELDS( + ctf_array(char, thread_comm, wq_thread->comm, TASK_COMM_LEN) + ctf_integer(pid_t, thread_pid, wq_thread->pid) + ctf_integer(int, cpu, cpu) + ) ) -TRACE_EVENT(workqueue_destruction, +LTTNG_TRACEPOINT_EVENT(workqueue_destruction, TP_PROTO(struct task_struct *wq_thread), TP_ARGS(wq_thread), - TP_STRUCT__entry( - __array(char, thread_comm, TASK_COMM_LEN) - __field(pid_t, thread_pid) - ), - - TP_fast_assign( - tp_memcpy(thread_comm, wq_thread->comm, TASK_COMM_LEN) - tp_assign(thread_pid, wq_thread->pid) - ), - - TP_printk("thread=%s:%d", __entry->thread_comm, __entry->thread_pid) + TP_FIELDS( + ctf_array(char, thread_comm, wq_thread->comm, TASK_COMM_LEN) + ctf_integer(pid_t, thread_pid, wq_thread->pid) + ) ) #endif -#endif /* _TRACE_WORKQUEUE_H */ +#endif /* LTTNG_TRACE_WORKQUEUE_H */ /* This part must be outside protection */ -#include "../../../probes/define_trace.h" +#include