linux/include/trace/events/workqueue.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#undef TRACE_SYSTEM
   3#define TRACE_SYSTEM workqueue
   4
   5#if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ)
   6#define _TRACE_WORKQUEUE_H
   7
   8#include <linux/tracepoint.h>
   9#include <linux/workqueue.h>
  10
  11struct pool_workqueue;
  12
  13/**
  14 * workqueue_queue_work - called when a work gets queued
  15 * @req_cpu:    the requested cpu
  16 * @pwq:        pointer to struct pool_workqueue
  17 * @work:       pointer to struct work_struct
  18 *
  19 * This event occurs when a work is queued immediately or once a
  20 * delayed work is actually queued on a workqueue (ie: once the delay
  21 * has been reached).
  22 */
  23TRACE_EVENT(workqueue_queue_work,
  24
  25        TP_PROTO(unsigned int req_cpu, struct pool_workqueue *pwq,
  26                 struct work_struct *work),
  27
  28        TP_ARGS(req_cpu, pwq, work),
  29
  30        TP_STRUCT__entry(
  31                __field( void *,        work    )
  32                __field( void *,        function)
  33                __string( workqueue,    pwq->wq->name)
  34                __field( unsigned int,  req_cpu )
  35                __field( unsigned int,  cpu     )
  36        ),
  37
  38        TP_fast_assign(
  39                __entry->work           = work;
  40                __entry->function       = work->func;
  41                __assign_str(workqueue, pwq->wq->name);
  42                __entry->req_cpu        = req_cpu;
  43                __entry->cpu            = pwq->pool->cpu;
  44        ),
  45
  46        TP_printk("work struct=%p function=%ps workqueue=%s req_cpu=%u cpu=%u",
  47                  __entry->work, __entry->function, __get_str(workqueue),
  48                  __entry->req_cpu, __entry->cpu)
  49);
  50
  51/**
  52 * workqueue_activate_work - called when a work gets activated
  53 * @work:       pointer to struct work_struct
  54 *
  55 * This event occurs when a queued work is put on the active queue,
  56 * which happens immediately after queueing unless @max_active limit
  57 * is reached.
  58 */
  59TRACE_EVENT(workqueue_activate_work,
  60
  61        TP_PROTO(struct work_struct *work),
  62
  63        TP_ARGS(work),
  64
  65        TP_STRUCT__entry(
  66                __field( void *,        work    )
  67        ),
  68
  69        TP_fast_assign(
  70                __entry->work           = work;
  71        ),
  72
  73        TP_printk("work struct %p", __entry->work)
  74);
  75
  76/**
  77 * workqueue_execute_start - called immediately before the workqueue callback
  78 * @work:       pointer to struct work_struct
  79 *
  80 * Allows to track workqueue execution.
  81 */
  82TRACE_EVENT(workqueue_execute_start,
  83
  84        TP_PROTO(struct work_struct *work),
  85
  86        TP_ARGS(work),
  87
  88        TP_STRUCT__entry(
  89                __field( void *,        work    )
  90                __field( void *,        function)
  91        ),
  92
  93        TP_fast_assign(
  94                __entry->work           = work;
  95                __entry->function       = work->func;
  96        ),
  97
  98        TP_printk("work struct %p: function %ps", __entry->work, __entry->function)
  99);
 100
 101/**
 102 * workqueue_execute_end - called immediately after the workqueue callback
 103 * @work:       pointer to struct work_struct
 104 * @function:   pointer to worker function
 105 *
 106 * Allows to track workqueue execution.
 107 */
 108TRACE_EVENT(workqueue_execute_end,
 109
 110        TP_PROTO(struct work_struct *work, work_func_t function),
 111
 112        TP_ARGS(work, function),
 113
 114        TP_STRUCT__entry(
 115                __field( void *,        work    )
 116                __field( void *,        function)
 117        ),
 118
 119        TP_fast_assign(
 120                __entry->work           = work;
 121                __entry->function       = function;
 122        ),
 123
 124        TP_printk("work struct %p: function %ps", __entry->work, __entry->function)
 125);
 126
 127#endif /*  _TRACE_WORKQUEUE_H */
 128
 129/* This part must be outside protection */
 130#include <trace/define_trace.h>
 131