This file is indexed.

/usr/share/systemtap/tapset/linux/irq.stp is in systemtap-common 2.9-2ubuntu2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
 *      Copyright (C) 2009 IBM Corp.
 *      This file is part of systemtap, and is free software.  You can
 *      redistribute it and/or modify it under the terms of the GNU General
 *      Public License (GPL); either version 2, or (at your option) any
 *      later version.
 *
 *      Version 1.0     prerna@linux.vnet.ibm.com     2009-10-28
 *
 * Tracepoint based tapset for IRQs, Workqueues, etc
 *
 */
// Probes for workqueues.

/**
 * probe workqueue.create - Creating a new workqueue
 * @wq_thread: task_struct of the workqueue thread
 * @cpu: cpu for which the worker thread is created
 */
probe workqueue.create = kernel.trace("workqueue_creation") ?
{
	wq_thread = $wq_thread
	cpu = $cpu
}

/**
 * probe workqueue.insert - Queuing work on a workqueue
 * @wq_thread: task_struct of the workqueue thread
 * @work: work_struct* being queued
 * @work_func: pointer to handler function
 */
probe workqueue.insert = kernel.trace("workqueue_insertion") ?
{
	wq_thread = $wq_thread
	work = $work
	work_func = $work->func
}

/**
 * probe workqueue.execute - Executing deferred work
 * @wq_thread:	task_struct of the workqueue thread
 * @work: work_struct* being executed
 * @work_func:	pointer to handler function
 */
probe workqueue.execute = kernel.trace("workqueue_execution") ?
{
	wq_thread = $wq_thread
	work = $work
	work_func = $work->func
}

/**
 * probe workqueue.destroy - Destroying workqueue
 * @wq_thread: task_struct of the workqueue thread
 */
probe workqueue.destroy = kernel.trace("workqueue_destruction") ?
{
	wq_thread = $wq_thread
}

// Probes for IRQ handlers.

/**
 * probe irq_handler.entry - Execution of interrupt handler starting
 * @irq: irq number
 * @action: struct irqaction* for this interrupt num
 * @handler: interrupt handler function
 * @flags: Flags for IRQ handler
 * @flags_str: symbolic string representation of IRQ flags
 * @dev_name: name of device
 * @dev_id: Cookie to identify device
 * @next_irqaction: pointer to next irqaction for shared interrupts
 * @dir: pointer to the proc/irq/NN/name entry
 * @thread_fn: interrupt handler function for threaded interrupts
 * @thread: thread pointer for threaded interrupts
 * @thread_flags: Flags related to thread
 */
probe irq_handler.entry = kernel.trace("irq_handler_entry") ?
{
	irq = $irq
	// the tracepoint doesn't have the struct definition, so we must @cast
	action = & @cast($action, "irqaction", "kernel<linux/interrupt.h>")
	handler = action->handler
	flags = action->flags
	flags_str = irqflags_str(flags)
	dev_name = action->name
	dev_id = action->dev_id
	next_irqaction = action->next
	dir = action->dir
	thread_fn = action->thread_fn
	thread = action->thread
	thread_flags = action->thread_flags
}

/**
 * probe irq_handler.exit - Execution of interrupt handler completed
 * @irq: interrupt number
 * @action: struct irqaction*
 * @ret: return value of the handler
 * @handler: interrupt handler function that was executed
 * @flags: flags for IRQ handler
 * @flags_str: symbolic string representation of IRQ flags
 * @dev_name: name of device
 * @dev_id: Cookie to identify device
 * @next_irqaction: pointer to next irqaction for shared interrupts
 * @dir: pointer to the proc/irq/NN/name entry
 * @thread_fn: interrupt handler function for threaded interrupts
 * @thread: thread pointer for threaded interrupts
 * @thread_flags: Flags related to thread
 */
probe irq_handler.exit = kernel.trace("irq_handler_exit") ?
{
	irq = $irq
	// the tracepoint doesn't have the struct definition, so we must @cast
	action = & @cast($action, "irqaction", "kernel<linux/interrupt.h>")
	ret = $ret
	handler = action->handler
	flags = action->flags
	flags_str = irqflags_str(flags)
	dev_name = action->name
	dev_id = action->dev_id
	next_irqaction = action->next
	dir = action->dir
	thread_fn = action->thread_fn
	thread = action->thread
	thread_flags = action->thread_flags
}

// Softirq based probes.
/**
 * probe softirq.entry - Execution of handler for a pending softirq starting
 * @h: struct softirq_action* for current pending softirq
 * @vec: softirq_action vector
 * @action: pointer to softirq handler just about to execute
 * @vec_nr:  softirq vector number
 */
probe softirq.entry = kernel.trace("irq_softirq_entry") !,
     		      kernel.trace("softirq_entry") ?
{
	# kernels < 2.6.37
	h = @choose_defined($h, 0)
	vec = @choose_defined($vec, 0)
	action = (@defined($h) ? @cast($h,"softirq_action","kernel<linux/interrupt.h>")->action : 0)
	# kernels >= 2.6.37
	vec_nr = @choose_defined($vec_nr, 0)
}

/**
 * probe softirq.exit - Execution of handler for a pending softirq completed
 * @h: struct softirq_action* for just executed softirq
 * @vec: softirq_action vector
 * @action: pointer to softirq handler that just finished execution
 * @vec_nr:  softirq vector number
 */
probe softirq.exit = kernel.trace("irq_softirq_exit") !,
		     kernel.trace("softirq_exit") ?
{
	# kernels < 2.6.37
	h = @choose_defined($h, 0)
	vec = @choose_defined($vec, 0)
	action = (@defined($h) ? @cast($h,"softirq_action","kernel<linux/interrupt.h>")->action : 0)
	# kernels >= 2.6.37
	vec_nr = @choose_defined($vec_nr, 0)
}