Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (470 commits) x86: Fix comments of register/stack access functions perf tools: Replace %m with %a in sscanf hw-breakpoints: Keep track of user disabled breakpoints tracing/syscalls: Make syscall events print callbacks static tracing: Add DEFINE_EVENT(), DEFINE_SINGLE_EVENT() support to docbook perf: Don't free perf_mmap_data until work has been done perf_event: Fix compile error perf tools: Fix _GNU_SOURCE macro related strndup() build error trace_syscalls: Remove unused syscall_name_to_nr() trace_syscalls: Simplify syscall profile trace_syscalls: Remove duplicate init_enter_##sname() trace_syscalls: Add syscall_nr field to struct syscall_metadata trace_syscalls: Remove enter_id exit_id trace_syscalls: Set event_enter_##sname->data to its metadata trace_syscalls: Remove unused event_syscall_enter and event_syscall_exit perf_event: Initialize data.period in perf_swevent_hrtimer() perf probe: Simplify event naming perf probe: Add --list option for listing current probe events perf probe: Add argv_split() from lib/argv_split.c perf probe: Move probe event utility functions to probe-event.c ...
This commit is contained in:
@@ -13,7 +13,7 @@ TRACE_EVENT(lock_kernel,
|
||||
TP_ARGS(func, file, line),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, lock_depth )
|
||||
__field( int, depth )
|
||||
__field_ext( const char *, func, FILTER_PTR_STRING )
|
||||
__field_ext( const char *, file, FILTER_PTR_STRING )
|
||||
__field( int, line )
|
||||
@@ -21,13 +21,13 @@ TRACE_EVENT(lock_kernel,
|
||||
|
||||
TP_fast_assign(
|
||||
/* We want to record the lock_depth after lock is acquired */
|
||||
__entry->lock_depth = current->lock_depth + 1;
|
||||
__entry->depth = current->lock_depth + 1;
|
||||
__entry->func = func;
|
||||
__entry->file = file;
|
||||
__entry->line = line;
|
||||
),
|
||||
|
||||
TP_printk("depth: %d, %s:%d %s()", __entry->lock_depth,
|
||||
TP_printk("depth=%d file:line=%s:%d func=%s()", __entry->depth,
|
||||
__entry->file, __entry->line, __entry->func)
|
||||
);
|
||||
|
||||
@@ -38,20 +38,20 @@ TRACE_EVENT(unlock_kernel,
|
||||
TP_ARGS(func, file, line),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(int, lock_depth)
|
||||
__field(const char *, func)
|
||||
__field(const char *, file)
|
||||
__field(int, line)
|
||||
__field(int, depth )
|
||||
__field(const char *, func )
|
||||
__field(const char *, file )
|
||||
__field(int, line )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->lock_depth = current->lock_depth;
|
||||
__entry->depth = current->lock_depth;
|
||||
__entry->func = func;
|
||||
__entry->file = file;
|
||||
__entry->line = line;
|
||||
),
|
||||
|
||||
TP_printk("depth: %d, %s:%d %s()", __entry->lock_depth,
|
||||
TP_printk("depth=%d file:line=%s:%d func=%s()", __entry->depth,
|
||||
__entry->file, __entry->line, __entry->func)
|
||||
);
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
TRACE_EVENT(block_rq_abort,
|
||||
DECLARE_EVENT_CLASS(block_rq_with_error,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct request *rq),
|
||||
|
||||
@@ -40,7 +40,28 @@ TRACE_EVENT(block_rq_abort,
|
||||
__entry->nr_sector, __entry->errors)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_rq_insert,
|
||||
DEFINE_EVENT(block_rq_with_error, block_rq_abort,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct request *rq),
|
||||
|
||||
TP_ARGS(q, rq)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(block_rq_with_error, block_rq_requeue,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct request *rq),
|
||||
|
||||
TP_ARGS(q, rq)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(block_rq_with_error, block_rq_complete,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct request *rq),
|
||||
|
||||
TP_ARGS(q, rq)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(block_rq,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct request *rq),
|
||||
|
||||
@@ -74,102 +95,18 @@ TRACE_EVENT(block_rq_insert,
|
||||
__entry->nr_sector, __entry->comm)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_rq_issue,
|
||||
DEFINE_EVENT(block_rq, block_rq_insert,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct request *rq),
|
||||
|
||||
TP_ARGS(q, rq),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( sector_t, sector )
|
||||
__field( unsigned int, nr_sector )
|
||||
__field( unsigned int, bytes )
|
||||
__array( char, rwbs, 6 )
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__dynamic_array( char, cmd, blk_cmd_buf_len(rq) )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
|
||||
__entry->sector = blk_pc_request(rq) ? 0 : blk_rq_pos(rq);
|
||||
__entry->nr_sector = blk_pc_request(rq) ? 0 : blk_rq_sectors(rq);
|
||||
__entry->bytes = blk_pc_request(rq) ? blk_rq_bytes(rq) : 0;
|
||||
|
||||
blk_fill_rwbs_rq(__entry->rwbs, rq);
|
||||
blk_dump_cmd(__get_str(cmd), rq);
|
||||
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
|
||||
),
|
||||
|
||||
TP_printk("%d,%d %s %u (%s) %llu + %u [%s]",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->rwbs, __entry->bytes, __get_str(cmd),
|
||||
(unsigned long long)__entry->sector,
|
||||
__entry->nr_sector, __entry->comm)
|
||||
TP_ARGS(q, rq)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_rq_requeue,
|
||||
DEFINE_EVENT(block_rq, block_rq_issue,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct request *rq),
|
||||
|
||||
TP_ARGS(q, rq),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( sector_t, sector )
|
||||
__field( unsigned int, nr_sector )
|
||||
__field( int, errors )
|
||||
__array( char, rwbs, 6 )
|
||||
__dynamic_array( char, cmd, blk_cmd_buf_len(rq) )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
|
||||
__entry->sector = blk_pc_request(rq) ? 0 : blk_rq_pos(rq);
|
||||
__entry->nr_sector = blk_pc_request(rq) ? 0 : blk_rq_sectors(rq);
|
||||
__entry->errors = rq->errors;
|
||||
|
||||
blk_fill_rwbs_rq(__entry->rwbs, rq);
|
||||
blk_dump_cmd(__get_str(cmd), rq);
|
||||
),
|
||||
|
||||
TP_printk("%d,%d %s (%s) %llu + %u [%d]",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->rwbs, __get_str(cmd),
|
||||
(unsigned long long)__entry->sector,
|
||||
__entry->nr_sector, __entry->errors)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_rq_complete,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct request *rq),
|
||||
|
||||
TP_ARGS(q, rq),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( sector_t, sector )
|
||||
__field( unsigned int, nr_sector )
|
||||
__field( int, errors )
|
||||
__array( char, rwbs, 6 )
|
||||
__dynamic_array( char, cmd, blk_cmd_buf_len(rq) )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
|
||||
__entry->sector = blk_pc_request(rq) ? 0 : blk_rq_pos(rq);
|
||||
__entry->nr_sector = blk_pc_request(rq) ? 0 : blk_rq_sectors(rq);
|
||||
__entry->errors = rq->errors;
|
||||
|
||||
blk_fill_rwbs_rq(__entry->rwbs, rq);
|
||||
blk_dump_cmd(__get_str(cmd), rq);
|
||||
),
|
||||
|
||||
TP_printk("%d,%d %s (%s) %llu + %u [%d]",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->rwbs, __get_str(cmd),
|
||||
(unsigned long long)__entry->sector,
|
||||
__entry->nr_sector, __entry->errors)
|
||||
TP_ARGS(q, rq)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_bio_bounce,
|
||||
@@ -228,7 +165,7 @@ TRACE_EVENT(block_bio_complete,
|
||||
__entry->nr_sector, __entry->error)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_bio_backmerge,
|
||||
DECLARE_EVENT_CLASS(block_bio,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct bio *bio),
|
||||
|
||||
@@ -256,63 +193,28 @@ TRACE_EVENT(block_bio_backmerge,
|
||||
__entry->nr_sector, __entry->comm)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_bio_frontmerge,
|
||||
DEFINE_EVENT(block_bio, block_bio_backmerge,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct bio *bio),
|
||||
|
||||
TP_ARGS(q, bio),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( sector_t, sector )
|
||||
__field( unsigned, nr_sector )
|
||||
__array( char, rwbs, 6 )
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = bio->bi_bdev->bd_dev;
|
||||
__entry->sector = bio->bi_sector;
|
||||
__entry->nr_sector = bio->bi_size >> 9;
|
||||
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
|
||||
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
|
||||
),
|
||||
|
||||
TP_printk("%d,%d %s %llu + %u [%s]",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
|
||||
(unsigned long long)__entry->sector,
|
||||
__entry->nr_sector, __entry->comm)
|
||||
TP_ARGS(q, bio)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_bio_queue,
|
||||
DEFINE_EVENT(block_bio, block_bio_frontmerge,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct bio *bio),
|
||||
|
||||
TP_ARGS(q, bio),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( sector_t, sector )
|
||||
__field( unsigned int, nr_sector )
|
||||
__array( char, rwbs, 6 )
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = bio->bi_bdev->bd_dev;
|
||||
__entry->sector = bio->bi_sector;
|
||||
__entry->nr_sector = bio->bi_size >> 9;
|
||||
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
|
||||
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
|
||||
),
|
||||
|
||||
TP_printk("%d,%d %s %llu + %u [%s]",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
|
||||
(unsigned long long)__entry->sector,
|
||||
__entry->nr_sector, __entry->comm)
|
||||
TP_ARGS(q, bio)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_getrq,
|
||||
DEFINE_EVENT(block_bio, block_bio_queue,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct bio *bio),
|
||||
|
||||
TP_ARGS(q, bio)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(block_get_rq,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
|
||||
|
||||
@@ -341,33 +243,18 @@ TRACE_EVENT(block_getrq,
|
||||
__entry->nr_sector, __entry->comm)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_sleeprq,
|
||||
DEFINE_EVENT(block_get_rq, block_getrq,
|
||||
|
||||
TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
|
||||
|
||||
TP_ARGS(q, bio, rw),
|
||||
TP_ARGS(q, bio, rw)
|
||||
);
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( sector_t, sector )
|
||||
__field( unsigned int, nr_sector )
|
||||
__array( char, rwbs, 6 )
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
),
|
||||
DEFINE_EVENT(block_get_rq, block_sleeprq,
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = bio ? bio->bi_bdev->bd_dev : 0;
|
||||
__entry->sector = bio ? bio->bi_sector : 0;
|
||||
__entry->nr_sector = bio ? bio->bi_size >> 9 : 0;
|
||||
blk_fill_rwbs(__entry->rwbs,
|
||||
bio ? bio->bi_rw : 0, __entry->nr_sector);
|
||||
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
|
||||
),
|
||||
TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
|
||||
|
||||
TP_printk("%d,%d %s %llu + %u [%s]",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
|
||||
(unsigned long long)__entry->sector,
|
||||
__entry->nr_sector, __entry->comm)
|
||||
TP_ARGS(q, bio, rw)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_plug,
|
||||
@@ -387,7 +274,7 @@ TRACE_EVENT(block_plug,
|
||||
TP_printk("[%s]", __entry->comm)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_unplug_timer,
|
||||
DECLARE_EVENT_CLASS(block_unplug,
|
||||
|
||||
TP_PROTO(struct request_queue *q),
|
||||
|
||||
@@ -406,23 +293,18 @@ TRACE_EVENT(block_unplug_timer,
|
||||
TP_printk("[%s] %d", __entry->comm, __entry->nr_rq)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_unplug_io,
|
||||
DEFINE_EVENT(block_unplug, block_unplug_timer,
|
||||
|
||||
TP_PROTO(struct request_queue *q),
|
||||
|
||||
TP_ARGS(q),
|
||||
TP_ARGS(q)
|
||||
);
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, nr_rq )
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
),
|
||||
DEFINE_EVENT(block_unplug, block_unplug_io,
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->nr_rq = q->rq.count[READ] + q->rq.count[WRITE];
|
||||
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
|
||||
),
|
||||
TP_PROTO(struct request_queue *q),
|
||||
|
||||
TP_printk("[%s] %d", __entry->comm, __entry->nr_rq)
|
||||
TP_ARGS(q)
|
||||
);
|
||||
|
||||
TRACE_EVENT(block_split,
|
||||
|
@@ -90,7 +90,7 @@ TRACE_EVENT(ext4_allocate_inode,
|
||||
(unsigned long) __entry->dir, __entry->mode)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_write_begin,
|
||||
DECLARE_EVENT_CLASS(ext4__write_begin,
|
||||
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int flags),
|
||||
@@ -118,7 +118,23 @@ TRACE_EVENT(ext4_write_begin,
|
||||
__entry->pos, __entry->len, __entry->flags)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_ordered_write_end,
|
||||
DEFINE_EVENT(ext4__write_begin, ext4_write_begin,
|
||||
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int flags),
|
||||
|
||||
TP_ARGS(inode, pos, len, flags)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(ext4__write_begin, ext4_da_write_begin,
|
||||
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int flags),
|
||||
|
||||
TP_ARGS(inode, pos, len, flags)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(ext4__write_end,
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int copied),
|
||||
|
||||
@@ -145,57 +161,36 @@ TRACE_EVENT(ext4_ordered_write_end,
|
||||
__entry->pos, __entry->len, __entry->copied)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_writeback_write_end,
|
||||
DEFINE_EVENT(ext4__write_end, ext4_ordered_write_end,
|
||||
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int copied),
|
||||
|
||||
TP_ARGS(inode, pos, len, copied),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( loff_t, pos )
|
||||
__field( unsigned int, len )
|
||||
__field( unsigned int, copied )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->pos = pos;
|
||||
__entry->len = len;
|
||||
__entry->copied = copied;
|
||||
),
|
||||
|
||||
TP_printk("dev %s ino %lu pos %llu len %u copied %u",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->pos, __entry->len, __entry->copied)
|
||||
TP_ARGS(inode, pos, len, copied)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_journalled_write_end,
|
||||
DEFINE_EVENT(ext4__write_end, ext4_writeback_write_end,
|
||||
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int copied),
|
||||
TP_ARGS(inode, pos, len, copied),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( loff_t, pos )
|
||||
__field( unsigned int, len )
|
||||
__field( unsigned int, copied )
|
||||
),
|
||||
TP_ARGS(inode, pos, len, copied)
|
||||
);
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->pos = pos;
|
||||
__entry->len = len;
|
||||
__entry->copied = copied;
|
||||
),
|
||||
DEFINE_EVENT(ext4__write_end, ext4_journalled_write_end,
|
||||
|
||||
TP_printk("dev %s ino %lu pos %llu len %u copied %u",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->pos, __entry->len, __entry->copied)
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int copied),
|
||||
|
||||
TP_ARGS(inode, pos, len, copied)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(ext4__write_end, ext4_da_write_end,
|
||||
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int copied),
|
||||
|
||||
TP_ARGS(inode, pos, len, copied)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_writepage,
|
||||
@@ -337,60 +332,6 @@ TRACE_EVENT(ext4_da_writepages_result,
|
||||
(unsigned long) __entry->writeback_index)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_da_write_begin,
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int flags),
|
||||
|
||||
TP_ARGS(inode, pos, len, flags),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( loff_t, pos )
|
||||
__field( unsigned int, len )
|
||||
__field( unsigned int, flags )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->pos = pos;
|
||||
__entry->len = len;
|
||||
__entry->flags = flags;
|
||||
),
|
||||
|
||||
TP_printk("dev %s ino %lu pos %llu len %u flags %u",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->pos, __entry->len, __entry->flags)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_da_write_end,
|
||||
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
||||
unsigned int copied),
|
||||
|
||||
TP_ARGS(inode, pos, len, copied),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( loff_t, pos )
|
||||
__field( unsigned int, len )
|
||||
__field( unsigned int, copied )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->pos = pos;
|
||||
__entry->len = len;
|
||||
__entry->copied = copied;
|
||||
),
|
||||
|
||||
TP_printk("dev %s ino %lu pos %llu len %u copied %u",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->pos, __entry->len, __entry->copied)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_discard_blocks,
|
||||
TP_PROTO(struct super_block *sb, unsigned long long blk,
|
||||
unsigned long long count),
|
||||
|
@@ -48,7 +48,7 @@ TRACE_EVENT(irq_handler_entry,
|
||||
__assign_str(name, action->name);
|
||||
),
|
||||
|
||||
TP_printk("irq=%d handler=%s", __entry->irq, __get_str(name))
|
||||
TP_printk("irq=%d name=%s", __entry->irq, __get_str(name))
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -78,10 +78,28 @@ TRACE_EVENT(irq_handler_exit,
|
||||
__entry->ret = ret;
|
||||
),
|
||||
|
||||
TP_printk("irq=%d return=%s",
|
||||
TP_printk("irq=%d ret=%s",
|
||||
__entry->irq, __entry->ret ? "handled" : "unhandled")
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(softirq,
|
||||
|
||||
TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
|
||||
|
||||
TP_ARGS(h, vec),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, vec )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->vec = (int)(h - vec);
|
||||
),
|
||||
|
||||
TP_printk("vec=%d [action=%s]", __entry->vec,
|
||||
show_softirq_name(__entry->vec))
|
||||
);
|
||||
|
||||
/**
|
||||
* softirq_entry - called immediately before the softirq handler
|
||||
* @h: pointer to struct softirq_action
|
||||
@@ -93,22 +111,11 @@ TRACE_EVENT(irq_handler_exit,
|
||||
* number. Also, when used in combination with the softirq_exit tracepoint
|
||||
* we can determine the softirq latency.
|
||||
*/
|
||||
TRACE_EVENT(softirq_entry,
|
||||
DEFINE_EVENT(softirq, softirq_entry,
|
||||
|
||||
TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
|
||||
|
||||
TP_ARGS(h, vec),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, vec )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->vec = (int)(h - vec);
|
||||
),
|
||||
|
||||
TP_printk("softirq=%d action=%s", __entry->vec,
|
||||
show_softirq_name(__entry->vec))
|
||||
TP_ARGS(h, vec)
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -122,22 +129,11 @@ TRACE_EVENT(softirq_entry,
|
||||
* combination with the softirq_entry tracepoint we can determine the softirq
|
||||
* latency.
|
||||
*/
|
||||
TRACE_EVENT(softirq_exit,
|
||||
DEFINE_EVENT(softirq, softirq_exit,
|
||||
|
||||
TP_PROTO(struct softirq_action *h, struct softirq_action *vec),
|
||||
|
||||
TP_ARGS(h, vec),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, vec )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->vec = (int)(h - vec);
|
||||
),
|
||||
|
||||
TP_printk("softirq=%d action=%s", __entry->vec,
|
||||
show_softirq_name(__entry->vec))
|
||||
TP_ARGS(h, vec)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_IRQ_H */
|
||||
|
@@ -30,7 +30,7 @@ TRACE_EVENT(jbd2_checkpoint,
|
||||
jbd2_dev_to_name(__entry->dev), __entry->result)
|
||||
);
|
||||
|
||||
TRACE_EVENT(jbd2_start_commit,
|
||||
DECLARE_EVENT_CLASS(jbd2_commit,
|
||||
|
||||
TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
|
||||
|
||||
@@ -53,73 +53,32 @@ TRACE_EVENT(jbd2_start_commit,
|
||||
__entry->sync_commit)
|
||||
);
|
||||
|
||||
TRACE_EVENT(jbd2_commit_locking,
|
||||
DEFINE_EVENT(jbd2_commit, jbd2_start_commit,
|
||||
|
||||
TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
|
||||
|
||||
TP_ARGS(journal, commit_transaction),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( char, sync_commit )
|
||||
__field( int, transaction )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = journal->j_fs_dev->bd_dev;
|
||||
__entry->sync_commit = commit_transaction->t_synchronous_commit;
|
||||
__entry->transaction = commit_transaction->t_tid;
|
||||
),
|
||||
|
||||
TP_printk("dev %s transaction %d sync %d",
|
||||
jbd2_dev_to_name(__entry->dev), __entry->transaction,
|
||||
__entry->sync_commit)
|
||||
TP_ARGS(journal, commit_transaction)
|
||||
);
|
||||
|
||||
TRACE_EVENT(jbd2_commit_flushing,
|
||||
DEFINE_EVENT(jbd2_commit, jbd2_commit_locking,
|
||||
|
||||
TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
|
||||
|
||||
TP_ARGS(journal, commit_transaction),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( char, sync_commit )
|
||||
__field( int, transaction )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = journal->j_fs_dev->bd_dev;
|
||||
__entry->sync_commit = commit_transaction->t_synchronous_commit;
|
||||
__entry->transaction = commit_transaction->t_tid;
|
||||
),
|
||||
|
||||
TP_printk("dev %s transaction %d sync %d",
|
||||
jbd2_dev_to_name(__entry->dev), __entry->transaction,
|
||||
__entry->sync_commit)
|
||||
TP_ARGS(journal, commit_transaction)
|
||||
);
|
||||
|
||||
TRACE_EVENT(jbd2_commit_logging,
|
||||
DEFINE_EVENT(jbd2_commit, jbd2_commit_flushing,
|
||||
|
||||
TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
|
||||
|
||||
TP_ARGS(journal, commit_transaction),
|
||||
TP_ARGS(journal, commit_transaction)
|
||||
);
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( char, sync_commit )
|
||||
__field( int, transaction )
|
||||
),
|
||||
DEFINE_EVENT(jbd2_commit, jbd2_commit_logging,
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = journal->j_fs_dev->bd_dev;
|
||||
__entry->sync_commit = commit_transaction->t_synchronous_commit;
|
||||
__entry->transaction = commit_transaction->t_tid;
|
||||
),
|
||||
TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
|
||||
|
||||
TP_printk("dev %s transaction %d sync %d",
|
||||
jbd2_dev_to_name(__entry->dev), __entry->transaction,
|
||||
__entry->sync_commit)
|
||||
TP_ARGS(journal, commit_transaction)
|
||||
);
|
||||
|
||||
TRACE_EVENT(jbd2_end_commit,
|
||||
|
@@ -44,7 +44,7 @@
|
||||
{(unsigned long)__GFP_MOVABLE, "GFP_MOVABLE"} \
|
||||
) : "GFP_NOWAIT"
|
||||
|
||||
TRACE_EVENT(kmalloc,
|
||||
DECLARE_EVENT_CLASS(kmem_alloc,
|
||||
|
||||
TP_PROTO(unsigned long call_site,
|
||||
const void *ptr,
|
||||
@@ -78,41 +78,23 @@ TRACE_EVENT(kmalloc,
|
||||
show_gfp_flags(__entry->gfp_flags))
|
||||
);
|
||||
|
||||
TRACE_EVENT(kmem_cache_alloc,
|
||||
DEFINE_EVENT(kmem_alloc, kmalloc,
|
||||
|
||||
TP_PROTO(unsigned long call_site,
|
||||
const void *ptr,
|
||||
size_t bytes_req,
|
||||
size_t bytes_alloc,
|
||||
gfp_t gfp_flags),
|
||||
TP_PROTO(unsigned long call_site, const void *ptr,
|
||||
size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
|
||||
|
||||
TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( unsigned long, call_site )
|
||||
__field( const void *, ptr )
|
||||
__field( size_t, bytes_req )
|
||||
__field( size_t, bytes_alloc )
|
||||
__field( gfp_t, gfp_flags )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->call_site = call_site;
|
||||
__entry->ptr = ptr;
|
||||
__entry->bytes_req = bytes_req;
|
||||
__entry->bytes_alloc = bytes_alloc;
|
||||
__entry->gfp_flags = gfp_flags;
|
||||
),
|
||||
|
||||
TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s",
|
||||
__entry->call_site,
|
||||
__entry->ptr,
|
||||
__entry->bytes_req,
|
||||
__entry->bytes_alloc,
|
||||
show_gfp_flags(__entry->gfp_flags))
|
||||
TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
|
||||
);
|
||||
|
||||
TRACE_EVENT(kmalloc_node,
|
||||
DEFINE_EVENT(kmem_alloc, kmem_cache_alloc,
|
||||
|
||||
TP_PROTO(unsigned long call_site, const void *ptr,
|
||||
size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
|
||||
|
||||
TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(kmem_alloc_node,
|
||||
|
||||
TP_PROTO(unsigned long call_site,
|
||||
const void *ptr,
|
||||
@@ -150,45 +132,25 @@ TRACE_EVENT(kmalloc_node,
|
||||
__entry->node)
|
||||
);
|
||||
|
||||
TRACE_EVENT(kmem_cache_alloc_node,
|
||||
DEFINE_EVENT(kmem_alloc_node, kmalloc_node,
|
||||
|
||||
TP_PROTO(unsigned long call_site,
|
||||
const void *ptr,
|
||||
size_t bytes_req,
|
||||
size_t bytes_alloc,
|
||||
gfp_t gfp_flags,
|
||||
int node),
|
||||
TP_PROTO(unsigned long call_site, const void *ptr,
|
||||
size_t bytes_req, size_t bytes_alloc,
|
||||
gfp_t gfp_flags, int node),
|
||||
|
||||
TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( unsigned long, call_site )
|
||||
__field( const void *, ptr )
|
||||
__field( size_t, bytes_req )
|
||||
__field( size_t, bytes_alloc )
|
||||
__field( gfp_t, gfp_flags )
|
||||
__field( int, node )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->call_site = call_site;
|
||||
__entry->ptr = ptr;
|
||||
__entry->bytes_req = bytes_req;
|
||||
__entry->bytes_alloc = bytes_alloc;
|
||||
__entry->gfp_flags = gfp_flags;
|
||||
__entry->node = node;
|
||||
),
|
||||
|
||||
TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s node=%d",
|
||||
__entry->call_site,
|
||||
__entry->ptr,
|
||||
__entry->bytes_req,
|
||||
__entry->bytes_alloc,
|
||||
show_gfp_flags(__entry->gfp_flags),
|
||||
__entry->node)
|
||||
TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)
|
||||
);
|
||||
|
||||
TRACE_EVENT(kfree,
|
||||
DEFINE_EVENT(kmem_alloc_node, kmem_cache_alloc_node,
|
||||
|
||||
TP_PROTO(unsigned long call_site, const void *ptr,
|
||||
size_t bytes_req, size_t bytes_alloc,
|
||||
gfp_t gfp_flags, int node),
|
||||
|
||||
TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(kmem_free,
|
||||
|
||||
TP_PROTO(unsigned long call_site, const void *ptr),
|
||||
|
||||
@@ -207,23 +169,18 @@ TRACE_EVENT(kfree,
|
||||
TP_printk("call_site=%lx ptr=%p", __entry->call_site, __entry->ptr)
|
||||
);
|
||||
|
||||
TRACE_EVENT(kmem_cache_free,
|
||||
DEFINE_EVENT(kmem_free, kfree,
|
||||
|
||||
TP_PROTO(unsigned long call_site, const void *ptr),
|
||||
|
||||
TP_ARGS(call_site, ptr),
|
||||
TP_ARGS(call_site, ptr)
|
||||
);
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( unsigned long, call_site )
|
||||
__field( const void *, ptr )
|
||||
),
|
||||
DEFINE_EVENT(kmem_free, kmem_cache_free,
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->call_site = call_site;
|
||||
__entry->ptr = ptr;
|
||||
),
|
||||
TP_PROTO(unsigned long call_site, const void *ptr),
|
||||
|
||||
TP_printk("call_site=%lx ptr=%p", __entry->call_site, __entry->ptr)
|
||||
TP_ARGS(call_site, ptr)
|
||||
);
|
||||
|
||||
TRACE_EVENT(mm_page_free_direct,
|
||||
@@ -299,7 +256,7 @@ TRACE_EVENT(mm_page_alloc,
|
||||
show_gfp_flags(__entry->gfp_flags))
|
||||
);
|
||||
|
||||
TRACE_EVENT(mm_page_alloc_zone_locked,
|
||||
DECLARE_EVENT_CLASS(mm_page,
|
||||
|
||||
TP_PROTO(struct page *page, unsigned int order, int migratetype),
|
||||
|
||||
@@ -325,29 +282,22 @@ TRACE_EVENT(mm_page_alloc_zone_locked,
|
||||
__entry->order == 0)
|
||||
);
|
||||
|
||||
TRACE_EVENT(mm_page_pcpu_drain,
|
||||
DEFINE_EVENT(mm_page, mm_page_alloc_zone_locked,
|
||||
|
||||
TP_PROTO(struct page *page, int order, int migratetype),
|
||||
TP_PROTO(struct page *page, unsigned int order, int migratetype),
|
||||
|
||||
TP_ARGS(page, order, migratetype)
|
||||
);
|
||||
|
||||
DEFINE_EVENT_PRINT(mm_page, mm_page_pcpu_drain,
|
||||
|
||||
TP_PROTO(struct page *page, unsigned int order, int migratetype),
|
||||
|
||||
TP_ARGS(page, order, migratetype),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( struct page *, page )
|
||||
__field( int, order )
|
||||
__field( int, migratetype )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->page = page;
|
||||
__entry->order = order;
|
||||
__entry->migratetype = migratetype;
|
||||
),
|
||||
|
||||
TP_printk("page=%p pfn=%lu order=%d migratetype=%d",
|
||||
__entry->page,
|
||||
page_to_pfn(__entry->page),
|
||||
__entry->order,
|
||||
__entry->migratetype)
|
||||
__entry->page, page_to_pfn(__entry->page),
|
||||
__entry->order, __entry->migratetype)
|
||||
);
|
||||
|
||||
TRACE_EVENT(mm_page_alloc_extfrag,
|
||||
|
@@ -1,8 +1,8 @@
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM lockdep
|
||||
#define TRACE_SYSTEM lock
|
||||
|
||||
#if !defined(_TRACE_LOCKDEP_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_LOCKDEP_H
|
||||
#if !defined(_TRACE_LOCK_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_LOCK_H
|
||||
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/tracepoint.h>
|
||||
@@ -90,7 +90,7 @@ TRACE_EVENT(lock_acquired,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* _TRACE_LOCKDEP_H */
|
||||
#endif /* _TRACE_LOCK_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
69
include/trace/events/mce.h
Normal file
69
include/trace/events/mce.h
Normal file
@@ -0,0 +1,69 @@
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM mce
|
||||
|
||||
#if !defined(_TRACE_MCE_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_MCE_H
|
||||
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/tracepoint.h>
|
||||
#include <asm/mce.h>
|
||||
|
||||
TRACE_EVENT(mce_record,
|
||||
|
||||
TP_PROTO(struct mce *m),
|
||||
|
||||
TP_ARGS(m),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( u64, mcgcap )
|
||||
__field( u64, mcgstatus )
|
||||
__field( u8, bank )
|
||||
__field( u64, status )
|
||||
__field( u64, addr )
|
||||
__field( u64, misc )
|
||||
__field( u64, ip )
|
||||
__field( u8, cs )
|
||||
__field( u64, tsc )
|
||||
__field( u64, walltime )
|
||||
__field( u32, cpu )
|
||||
__field( u32, cpuid )
|
||||
__field( u32, apicid )
|
||||
__field( u32, socketid )
|
||||
__field( u8, cpuvendor )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mcgcap = m->mcgcap;
|
||||
__entry->mcgstatus = m->mcgstatus;
|
||||
__entry->bank = m->bank;
|
||||
__entry->status = m->status;
|
||||
__entry->addr = m->addr;
|
||||
__entry->misc = m->misc;
|
||||
__entry->ip = m->ip;
|
||||
__entry->cs = m->cs;
|
||||
__entry->tsc = m->tsc;
|
||||
__entry->walltime = m->time;
|
||||
__entry->cpu = m->extcpu;
|
||||
__entry->cpuid = m->cpuid;
|
||||
__entry->apicid = m->apicid;
|
||||
__entry->socketid = m->socketid;
|
||||
__entry->cpuvendor = m->cpuvendor;
|
||||
),
|
||||
|
||||
TP_printk("CPU: %d, MCGc/s: %llx/%llx, MC%d: %016Lx, ADDR/MISC: %016Lx/%016Lx, RIP: %02x:<%016Lx>, TSC: %llx, PROCESSOR: %u:%x, TIME: %llu, SOCKET: %u, APIC: %x",
|
||||
__entry->cpu,
|
||||
__entry->mcgcap, __entry->mcgstatus,
|
||||
__entry->bank, __entry->status,
|
||||
__entry->addr, __entry->misc,
|
||||
__entry->cs, __entry->ip,
|
||||
__entry->tsc,
|
||||
__entry->cpuvendor, __entry->cpuid,
|
||||
__entry->walltime,
|
||||
__entry->socketid,
|
||||
__entry->apicid)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_MCE_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
@@ -51,7 +51,7 @@ TRACE_EVENT(module_free,
|
||||
TP_printk("%s", __get_str(name))
|
||||
);
|
||||
|
||||
TRACE_EVENT(module_get,
|
||||
DECLARE_EVENT_CLASS(module_refcnt,
|
||||
|
||||
TP_PROTO(struct module *mod, unsigned long ip, int refcnt),
|
||||
|
||||
@@ -73,26 +73,18 @@ TRACE_EVENT(module_get,
|
||||
__get_str(name), (void *)__entry->ip, __entry->refcnt)
|
||||
);
|
||||
|
||||
TRACE_EVENT(module_put,
|
||||
DEFINE_EVENT(module_refcnt, module_get,
|
||||
|
||||
TP_PROTO(struct module *mod, unsigned long ip, int refcnt),
|
||||
|
||||
TP_ARGS(mod, ip, refcnt),
|
||||
TP_ARGS(mod, ip, refcnt)
|
||||
);
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( unsigned long, ip )
|
||||
__field( int, refcnt )
|
||||
__string( name, mod->name )
|
||||
),
|
||||
DEFINE_EVENT(module_refcnt, module_put,
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->ip = ip;
|
||||
__entry->refcnt = refcnt;
|
||||
__assign_str(name, mod->name);
|
||||
),
|
||||
TP_PROTO(struct module *mod, unsigned long ip, int refcnt),
|
||||
|
||||
TP_printk("%s call_site=%pf refcnt=%d",
|
||||
__get_str(name), (void *)__entry->ip, __entry->refcnt)
|
||||
TP_ARGS(mod, ip, refcnt)
|
||||
);
|
||||
|
||||
TRACE_EVENT(module_request,
|
||||
|
@@ -16,9 +16,7 @@ enum {
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
TRACE_EVENT(power_start,
|
||||
DECLARE_EVENT_CLASS(power,
|
||||
|
||||
TP_PROTO(unsigned int type, unsigned int state),
|
||||
|
||||
@@ -37,6 +35,20 @@ TRACE_EVENT(power_start,
|
||||
TP_printk("type=%lu state=%lu", (unsigned long)__entry->type, (unsigned long)__entry->state)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(power, power_start,
|
||||
|
||||
TP_PROTO(unsigned int type, unsigned int state),
|
||||
|
||||
TP_ARGS(type, state)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(power, power_frequency,
|
||||
|
||||
TP_PROTO(unsigned int type, unsigned int state),
|
||||
|
||||
TP_ARGS(type, state)
|
||||
);
|
||||
|
||||
TRACE_EVENT(power_end,
|
||||
|
||||
TP_PROTO(int dummy),
|
||||
@@ -55,26 +67,6 @@ TRACE_EVENT(power_end,
|
||||
|
||||
);
|
||||
|
||||
|
||||
TRACE_EVENT(power_frequency,
|
||||
|
||||
TP_PROTO(unsigned int type, unsigned int state),
|
||||
|
||||
TP_ARGS(type, state),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( u64, type )
|
||||
__field( u64, state )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->type = type;
|
||||
__entry->state = state;
|
||||
),
|
||||
|
||||
TP_printk("type=%lu state=%lu", (unsigned long)__entry->type, (unsigned long) __entry->state)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_POWER_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
@@ -26,7 +26,7 @@ TRACE_EVENT(sched_kthread_stop,
|
||||
__entry->pid = t->pid;
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d", __entry->comm, __entry->pid)
|
||||
TP_printk("comm=%s pid=%d", __entry->comm, __entry->pid)
|
||||
);
|
||||
|
||||
/*
|
||||
@@ -46,7 +46,7 @@ TRACE_EVENT(sched_kthread_stop_ret,
|
||||
__entry->ret = ret;
|
||||
),
|
||||
|
||||
TP_printk("ret %d", __entry->ret)
|
||||
TP_printk("ret=%d", __entry->ret)
|
||||
);
|
||||
|
||||
/*
|
||||
@@ -73,7 +73,7 @@ TRACE_EVENT(sched_wait_task,
|
||||
__entry->prio = p->prio;
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d [%d]",
|
||||
TP_printk("comm=%s pid=%d prio=%d",
|
||||
__entry->comm, __entry->pid, __entry->prio)
|
||||
);
|
||||
|
||||
@@ -83,7 +83,7 @@ TRACE_EVENT(sched_wait_task,
|
||||
* (NOTE: the 'rq' argument is not used by generic trace events,
|
||||
* but used by the latency tracer plugin. )
|
||||
*/
|
||||
TRACE_EVENT(sched_wakeup,
|
||||
DECLARE_EVENT_CLASS(sched_wakeup_template,
|
||||
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p, int success),
|
||||
|
||||
@@ -94,7 +94,7 @@ TRACE_EVENT(sched_wakeup,
|
||||
__field( pid_t, pid )
|
||||
__field( int, prio )
|
||||
__field( int, success )
|
||||
__field( int, cpu )
|
||||
__field( int, target_cpu )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -102,46 +102,27 @@ TRACE_EVENT(sched_wakeup,
|
||||
__entry->pid = p->pid;
|
||||
__entry->prio = p->prio;
|
||||
__entry->success = success;
|
||||
__entry->cpu = task_cpu(p);
|
||||
__entry->target_cpu = task_cpu(p);
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d [%d] success=%d [%03d]",
|
||||
TP_printk("comm=%s pid=%d prio=%d success=%d target_cpu=%03d",
|
||||
__entry->comm, __entry->pid, __entry->prio,
|
||||
__entry->success, __entry->cpu)
|
||||
__entry->success, __entry->target_cpu)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(sched_wakeup_template, sched_wakeup,
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p, int success),
|
||||
TP_ARGS(rq, p, success));
|
||||
|
||||
/*
|
||||
* Tracepoint for waking up a new task:
|
||||
*
|
||||
* (NOTE: the 'rq' argument is not used by generic trace events,
|
||||
* but used by the latency tracer plugin. )
|
||||
*/
|
||||
TRACE_EVENT(sched_wakeup_new,
|
||||
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p, int success),
|
||||
|
||||
TP_ARGS(rq, p, success),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
__field( int, prio )
|
||||
__field( int, success )
|
||||
__field( int, cpu )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
|
||||
__entry->pid = p->pid;
|
||||
__entry->prio = p->prio;
|
||||
__entry->success = success;
|
||||
__entry->cpu = task_cpu(p);
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d [%d] success=%d [%03d]",
|
||||
__entry->comm, __entry->pid, __entry->prio,
|
||||
__entry->success, __entry->cpu)
|
||||
);
|
||||
DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p, int success),
|
||||
TP_ARGS(rq, p, success));
|
||||
|
||||
/*
|
||||
* Tracepoint for task switches, performed by the scheduler:
|
||||
@@ -176,7 +157,7 @@ TRACE_EVENT(sched_switch,
|
||||
__entry->next_prio = next->prio;
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d [%d] (%s) ==> %s:%d [%d]",
|
||||
TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s ==> next_comm=%s next_pid=%d next_prio=%d",
|
||||
__entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
|
||||
__entry->prev_state ?
|
||||
__print_flags(__entry->prev_state, "|",
|
||||
@@ -211,60 +192,47 @@ TRACE_EVENT(sched_migrate_task,
|
||||
__entry->dest_cpu = dest_cpu;
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d [%d] from: %d to: %d",
|
||||
TP_printk("comm=%s pid=%d prio=%d orig_cpu=%d dest_cpu=%d",
|
||||
__entry->comm, __entry->pid, __entry->prio,
|
||||
__entry->orig_cpu, __entry->dest_cpu)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(sched_process_template,
|
||||
|
||||
TP_PROTO(struct task_struct *p),
|
||||
|
||||
TP_ARGS(p),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
__field( int, prio )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
|
||||
__entry->pid = p->pid;
|
||||
__entry->prio = p->prio;
|
||||
),
|
||||
|
||||
TP_printk("comm=%s pid=%d prio=%d",
|
||||
__entry->comm, __entry->pid, __entry->prio)
|
||||
);
|
||||
|
||||
/*
|
||||
* Tracepoint for freeing a task:
|
||||
*/
|
||||
TRACE_EVENT(sched_process_free,
|
||||
|
||||
TP_PROTO(struct task_struct *p),
|
||||
|
||||
TP_ARGS(p),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
__field( int, prio )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
|
||||
__entry->pid = p->pid;
|
||||
__entry->prio = p->prio;
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d [%d]",
|
||||
__entry->comm, __entry->pid, __entry->prio)
|
||||
);
|
||||
DEFINE_EVENT(sched_process_template, sched_process_free,
|
||||
TP_PROTO(struct task_struct *p),
|
||||
TP_ARGS(p));
|
||||
|
||||
|
||||
/*
|
||||
* Tracepoint for a task exiting:
|
||||
*/
|
||||
TRACE_EVENT(sched_process_exit,
|
||||
|
||||
TP_PROTO(struct task_struct *p),
|
||||
|
||||
TP_ARGS(p),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
__field( int, prio )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
|
||||
__entry->pid = p->pid;
|
||||
__entry->prio = p->prio;
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d [%d]",
|
||||
__entry->comm, __entry->pid, __entry->prio)
|
||||
);
|
||||
DEFINE_EVENT(sched_process_template, sched_process_exit,
|
||||
TP_PROTO(struct task_struct *p),
|
||||
TP_ARGS(p));
|
||||
|
||||
/*
|
||||
* Tracepoint for a waiting task:
|
||||
@@ -287,7 +255,7 @@ TRACE_EVENT(sched_process_wait,
|
||||
__entry->prio = current->prio;
|
||||
),
|
||||
|
||||
TP_printk("task %s:%d [%d]",
|
||||
TP_printk("comm=%s pid=%d prio=%d",
|
||||
__entry->comm, __entry->pid, __entry->prio)
|
||||
);
|
||||
|
||||
@@ -314,46 +282,16 @@ TRACE_EVENT(sched_process_fork,
|
||||
__entry->child_pid = child->pid;
|
||||
),
|
||||
|
||||
TP_printk("parent %s:%d child %s:%d",
|
||||
TP_printk("comm=%s pid=%d child_comm=%s child_pid=%d",
|
||||
__entry->parent_comm, __entry->parent_pid,
|
||||
__entry->child_comm, __entry->child_pid)
|
||||
);
|
||||
|
||||
/*
|
||||
* Tracepoint for sending a signal:
|
||||
*/
|
||||
TRACE_EVENT(sched_signal_send,
|
||||
|
||||
TP_PROTO(int sig, struct task_struct *p),
|
||||
|
||||
TP_ARGS(sig, p),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, sig )
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
|
||||
__entry->pid = p->pid;
|
||||
__entry->sig = sig;
|
||||
),
|
||||
|
||||
TP_printk("sig: %d task %s:%d",
|
||||
__entry->sig, __entry->comm, __entry->pid)
|
||||
);
|
||||
|
||||
/*
|
||||
* XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
|
||||
* adding sched_stat support to SCHED_FIFO/RR would be welcome.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Tracepoint for accounting wait time (time the task is runnable
|
||||
* but not actually running due to scheduler contention).
|
||||
*/
|
||||
TRACE_EVENT(sched_stat_wait,
|
||||
DECLARE_EVENT_CLASS(sched_stat_template,
|
||||
|
||||
TP_PROTO(struct task_struct *tsk, u64 delay),
|
||||
|
||||
@@ -374,11 +312,36 @@ TRACE_EVENT(sched_stat_wait,
|
||||
__perf_count(delay);
|
||||
),
|
||||
|
||||
TP_printk("task: %s:%d wait: %Lu [ns]",
|
||||
TP_printk("comm=%s pid=%d delay=%Lu [ns]",
|
||||
__entry->comm, __entry->pid,
|
||||
(unsigned long long)__entry->delay)
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* Tracepoint for accounting wait time (time the task is runnable
|
||||
* but not actually running due to scheduler contention).
|
||||
*/
|
||||
DEFINE_EVENT(sched_stat_template, sched_stat_wait,
|
||||
TP_PROTO(struct task_struct *tsk, u64 delay),
|
||||
TP_ARGS(tsk, delay));
|
||||
|
||||
/*
|
||||
* Tracepoint for accounting sleep time (time the task is not runnable,
|
||||
* including iowait, see below).
|
||||
*/
|
||||
DEFINE_EVENT(sched_stat_template, sched_stat_sleep,
|
||||
TP_PROTO(struct task_struct *tsk, u64 delay),
|
||||
TP_ARGS(tsk, delay));
|
||||
|
||||
/*
|
||||
* Tracepoint for accounting iowait time (time the task is not runnable
|
||||
* due to waiting on IO to complete).
|
||||
*/
|
||||
DEFINE_EVENT(sched_stat_template, sched_stat_iowait,
|
||||
TP_PROTO(struct task_struct *tsk, u64 delay),
|
||||
TP_ARGS(tsk, delay));
|
||||
|
||||
/*
|
||||
* Tracepoint for accounting runtime (time the task is executing
|
||||
* on a CPU).
|
||||
@@ -406,72 +369,12 @@ TRACE_EVENT(sched_stat_runtime,
|
||||
__perf_count(runtime);
|
||||
),
|
||||
|
||||
TP_printk("task: %s:%d runtime: %Lu [ns], vruntime: %Lu [ns]",
|
||||
TP_printk("comm=%s pid=%d runtime=%Lu [ns] vruntime=%Lu [ns]",
|
||||
__entry->comm, __entry->pid,
|
||||
(unsigned long long)__entry->runtime,
|
||||
(unsigned long long)__entry->vruntime)
|
||||
);
|
||||
|
||||
/*
|
||||
* Tracepoint for accounting sleep time (time the task is not runnable,
|
||||
* including iowait, see below).
|
||||
*/
|
||||
TRACE_EVENT(sched_stat_sleep,
|
||||
|
||||
TP_PROTO(struct task_struct *tsk, u64 delay),
|
||||
|
||||
TP_ARGS(tsk, delay),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
__field( u64, delay )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
|
||||
__entry->pid = tsk->pid;
|
||||
__entry->delay = delay;
|
||||
)
|
||||
TP_perf_assign(
|
||||
__perf_count(delay);
|
||||
),
|
||||
|
||||
TP_printk("task: %s:%d sleep: %Lu [ns]",
|
||||
__entry->comm, __entry->pid,
|
||||
(unsigned long long)__entry->delay)
|
||||
);
|
||||
|
||||
/*
|
||||
* Tracepoint for accounting iowait time (time the task is not runnable
|
||||
* due to waiting on IO to complete).
|
||||
*/
|
||||
TRACE_EVENT(sched_stat_iowait,
|
||||
|
||||
TP_PROTO(struct task_struct *tsk, u64 delay),
|
||||
|
||||
TP_ARGS(tsk, delay),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
__field( u64, delay )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
|
||||
__entry->pid = tsk->pid;
|
||||
__entry->delay = delay;
|
||||
)
|
||||
TP_perf_assign(
|
||||
__perf_count(delay);
|
||||
),
|
||||
|
||||
TP_printk("task: %s:%d iowait: %Lu [ns]",
|
||||
__entry->comm, __entry->pid,
|
||||
(unsigned long long)__entry->delay)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_SCHED_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
173
include/trace/events/signal.h
Normal file
173
include/trace/events/signal.h
Normal file
@@ -0,0 +1,173 @@
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM signal
|
||||
|
||||
#if !defined(_TRACE_SIGNAL_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_SIGNAL_H
|
||||
|
||||
#include <linux/signal.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
#define TP_STORE_SIGINFO(__entry, info) \
|
||||
do { \
|
||||
if (info == SEND_SIG_NOINFO) { \
|
||||
__entry->errno = 0; \
|
||||
__entry->code = SI_USER; \
|
||||
} else if (info == SEND_SIG_PRIV) { \
|
||||
__entry->errno = 0; \
|
||||
__entry->code = SI_KERNEL; \
|
||||
} else { \
|
||||
__entry->errno = info->si_errno; \
|
||||
__entry->code = info->si_code; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
* signal_generate - called when a signal is generated
|
||||
* @sig: signal number
|
||||
* @info: pointer to struct siginfo
|
||||
* @task: pointer to struct task_struct
|
||||
*
|
||||
* Current process sends a 'sig' signal to 'task' process with
|
||||
* 'info' siginfo. If 'info' is SEND_SIG_NOINFO or SEND_SIG_PRIV,
|
||||
* 'info' is not a pointer and you can't access its field. Instead,
|
||||
* SEND_SIG_NOINFO means that si_code is SI_USER, and SEND_SIG_PRIV
|
||||
* means that si_code is SI_KERNEL.
|
||||
*/
|
||||
TRACE_EVENT(signal_generate,
|
||||
|
||||
TP_PROTO(int sig, struct siginfo *info, struct task_struct *task),
|
||||
|
||||
TP_ARGS(sig, info, task),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, sig )
|
||||
__field( int, errno )
|
||||
__field( int, code )
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->sig = sig;
|
||||
TP_STORE_SIGINFO(__entry, info);
|
||||
memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
|
||||
__entry->pid = task->pid;
|
||||
),
|
||||
|
||||
TP_printk("sig=%d errno=%d code=%d comm=%s pid=%d",
|
||||
__entry->sig, __entry->errno, __entry->code,
|
||||
__entry->comm, __entry->pid)
|
||||
);
|
||||
|
||||
/**
|
||||
* signal_deliver - called when a signal is delivered
|
||||
* @sig: signal number
|
||||
* @info: pointer to struct siginfo
|
||||
* @ka: pointer to struct k_sigaction
|
||||
*
|
||||
* A 'sig' signal is delivered to current process with 'info' siginfo,
|
||||
* and it will be handled by 'ka'. ka->sa.sa_handler can be SIG_IGN or
|
||||
* SIG_DFL.
|
||||
* Note that some signals reported by signal_generate tracepoint can be
|
||||
* lost, ignored or modified (by debugger) before hitting this tracepoint.
|
||||
* This means, this can show which signals are actually delivered, but
|
||||
* matching generated signals and delivered signals may not be correct.
|
||||
*/
|
||||
TRACE_EVENT(signal_deliver,
|
||||
|
||||
TP_PROTO(int sig, struct siginfo *info, struct k_sigaction *ka),
|
||||
|
||||
TP_ARGS(sig, info, ka),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, sig )
|
||||
__field( int, errno )
|
||||
__field( int, code )
|
||||
__field( unsigned long, sa_handler )
|
||||
__field( unsigned long, sa_flags )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->sig = sig;
|
||||
TP_STORE_SIGINFO(__entry, info);
|
||||
__entry->sa_handler = (unsigned long)ka->sa.sa_handler;
|
||||
__entry->sa_flags = ka->sa.sa_flags;
|
||||
),
|
||||
|
||||
TP_printk("sig=%d errno=%d code=%d sa_handler=%lx sa_flags=%lx",
|
||||
__entry->sig, __entry->errno, __entry->code,
|
||||
__entry->sa_handler, __entry->sa_flags)
|
||||
);
|
||||
|
||||
/**
|
||||
* signal_overflow_fail - called when signal queue is overflow
|
||||
* @sig: signal number
|
||||
* @group: signal to process group or not (bool)
|
||||
* @info: pointer to struct siginfo
|
||||
*
|
||||
* Kernel fails to generate 'sig' signal with 'info' siginfo, because
|
||||
* siginfo queue is overflow, and the signal is dropped.
|
||||
* 'group' is not 0 if the signal will be sent to a process group.
|
||||
* 'sig' is always one of RT signals.
|
||||
*/
|
||||
TRACE_EVENT(signal_overflow_fail,
|
||||
|
||||
TP_PROTO(int sig, int group, struct siginfo *info),
|
||||
|
||||
TP_ARGS(sig, group, info),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, sig )
|
||||
__field( int, group )
|
||||
__field( int, errno )
|
||||
__field( int, code )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->sig = sig;
|
||||
__entry->group = group;
|
||||
TP_STORE_SIGINFO(__entry, info);
|
||||
),
|
||||
|
||||
TP_printk("sig=%d group=%d errno=%d code=%d",
|
||||
__entry->sig, __entry->group, __entry->errno, __entry->code)
|
||||
);
|
||||
|
||||
/**
|
||||
* signal_lose_info - called when siginfo is lost
|
||||
* @sig: signal number
|
||||
* @group: signal to process group or not (bool)
|
||||
* @info: pointer to struct siginfo
|
||||
*
|
||||
* Kernel generates 'sig' signal but loses 'info' siginfo, because siginfo
|
||||
* queue is overflow.
|
||||
* 'group' is not 0 if the signal will be sent to a process group.
|
||||
* 'sig' is always one of non-RT signals.
|
||||
*/
|
||||
TRACE_EVENT(signal_lose_info,
|
||||
|
||||
TP_PROTO(int sig, int group, struct siginfo *info),
|
||||
|
||||
TP_ARGS(sig, group, info),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, sig )
|
||||
__field( int, group )
|
||||
__field( int, errno )
|
||||
__field( int, code )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->sig = sig;
|
||||
__entry->group = group;
|
||||
TP_STORE_SIGINFO(__entry, info);
|
||||
),
|
||||
|
||||
TP_printk("sig=%d group=%d errno=%d code=%d",
|
||||
__entry->sig, __entry->group, __entry->errno, __entry->code)
|
||||
);
|
||||
#endif /* _TRACE_SIGNAL_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
@@ -26,7 +26,7 @@ TRACE_EVENT(timer_init,
|
||||
__entry->timer = timer;
|
||||
),
|
||||
|
||||
TP_printk("timer %p", __entry->timer)
|
||||
TP_printk("timer=%p", __entry->timer)
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -54,7 +54,7 @@ TRACE_EVENT(timer_start,
|
||||
__entry->now = jiffies;
|
||||
),
|
||||
|
||||
TP_printk("timer %p: func %pf, expires %lu, timeout %ld",
|
||||
TP_printk("timer=%p function=%pf expires=%lu [timeout=%ld]",
|
||||
__entry->timer, __entry->function, __entry->expires,
|
||||
(long)__entry->expires - __entry->now)
|
||||
);
|
||||
@@ -81,7 +81,7 @@ TRACE_EVENT(timer_expire_entry,
|
||||
__entry->now = jiffies;
|
||||
),
|
||||
|
||||
TP_printk("timer %p: now %lu", __entry->timer, __entry->now)
|
||||
TP_printk("timer=%p now=%lu", __entry->timer, __entry->now)
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -108,7 +108,7 @@ TRACE_EVENT(timer_expire_exit,
|
||||
__entry->timer = timer;
|
||||
),
|
||||
|
||||
TP_printk("timer %p", __entry->timer)
|
||||
TP_printk("timer=%p", __entry->timer)
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -129,7 +129,7 @@ TRACE_EVENT(timer_cancel,
|
||||
__entry->timer = timer;
|
||||
),
|
||||
|
||||
TP_printk("timer %p", __entry->timer)
|
||||
TP_printk("timer=%p", __entry->timer)
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -140,24 +140,24 @@ TRACE_EVENT(timer_cancel,
|
||||
*/
|
||||
TRACE_EVENT(hrtimer_init,
|
||||
|
||||
TP_PROTO(struct hrtimer *timer, clockid_t clockid,
|
||||
TP_PROTO(struct hrtimer *hrtimer, clockid_t clockid,
|
||||
enum hrtimer_mode mode),
|
||||
|
||||
TP_ARGS(timer, clockid, mode),
|
||||
TP_ARGS(hrtimer, clockid, mode),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( void *, timer )
|
||||
__field( void *, hrtimer )
|
||||
__field( clockid_t, clockid )
|
||||
__field( enum hrtimer_mode, mode )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->timer = timer;
|
||||
__entry->hrtimer = hrtimer;
|
||||
__entry->clockid = clockid;
|
||||
__entry->mode = mode;
|
||||
),
|
||||
|
||||
TP_printk("hrtimer %p, clockid %s, mode %s", __entry->timer,
|
||||
TP_printk("hrtimer=%p clockid=%s mode=%s", __entry->hrtimer,
|
||||
__entry->clockid == CLOCK_REALTIME ?
|
||||
"CLOCK_REALTIME" : "CLOCK_MONOTONIC",
|
||||
__entry->mode == HRTIMER_MODE_ABS ?
|
||||
@@ -170,26 +170,26 @@ TRACE_EVENT(hrtimer_init,
|
||||
*/
|
||||
TRACE_EVENT(hrtimer_start,
|
||||
|
||||
TP_PROTO(struct hrtimer *timer),
|
||||
TP_PROTO(struct hrtimer *hrtimer),
|
||||
|
||||
TP_ARGS(timer),
|
||||
TP_ARGS(hrtimer),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( void *, timer )
|
||||
__field( void *, hrtimer )
|
||||
__field( void *, function )
|
||||
__field( s64, expires )
|
||||
__field( s64, softexpires )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->timer = timer;
|
||||
__entry->function = timer->function;
|
||||
__entry->expires = hrtimer_get_expires(timer).tv64;
|
||||
__entry->softexpires = hrtimer_get_softexpires(timer).tv64;
|
||||
__entry->hrtimer = hrtimer;
|
||||
__entry->function = hrtimer->function;
|
||||
__entry->expires = hrtimer_get_expires(hrtimer).tv64;
|
||||
__entry->softexpires = hrtimer_get_softexpires(hrtimer).tv64;
|
||||
),
|
||||
|
||||
TP_printk("hrtimer %p, func %pf, expires %llu, softexpires %llu",
|
||||
__entry->timer, __entry->function,
|
||||
TP_printk("hrtimer=%p function=%pf expires=%llu softexpires=%llu",
|
||||
__entry->hrtimer, __entry->function,
|
||||
(unsigned long long)ktime_to_ns((ktime_t) {
|
||||
.tv64 = __entry->expires }),
|
||||
(unsigned long long)ktime_to_ns((ktime_t) {
|
||||
@@ -206,23 +206,22 @@ TRACE_EVENT(hrtimer_start,
|
||||
*/
|
||||
TRACE_EVENT(hrtimer_expire_entry,
|
||||
|
||||
TP_PROTO(struct hrtimer *timer, ktime_t *now),
|
||||
TP_PROTO(struct hrtimer *hrtimer, ktime_t *now),
|
||||
|
||||
TP_ARGS(timer, now),
|
||||
TP_ARGS(hrtimer, now),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( void *, timer )
|
||||
__field( void *, hrtimer )
|
||||
__field( s64, now )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->timer = timer;
|
||||
__entry->now = now->tv64;
|
||||
__entry->hrtimer = hrtimer;
|
||||
__entry->now = now->tv64;
|
||||
),
|
||||
|
||||
TP_printk("hrtimer %p, now %llu", __entry->timer,
|
||||
(unsigned long long)ktime_to_ns((ktime_t) {
|
||||
.tv64 = __entry->now }))
|
||||
TP_printk("hrtimer=%p now=%llu", __entry->hrtimer,
|
||||
(unsigned long long)ktime_to_ns((ktime_t) { .tv64 = __entry->now }))
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -234,40 +233,40 @@ TRACE_EVENT(hrtimer_expire_entry,
|
||||
*/
|
||||
TRACE_EVENT(hrtimer_expire_exit,
|
||||
|
||||
TP_PROTO(struct hrtimer *timer),
|
||||
TP_PROTO(struct hrtimer *hrtimer),
|
||||
|
||||
TP_ARGS(timer),
|
||||
TP_ARGS(hrtimer),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( void *, timer )
|
||||
__field( void *, hrtimer )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->timer = timer;
|
||||
__entry->hrtimer = hrtimer;
|
||||
),
|
||||
|
||||
TP_printk("hrtimer %p", __entry->timer)
|
||||
TP_printk("hrtimer=%p", __entry->hrtimer)
|
||||
);
|
||||
|
||||
/**
|
||||
* hrtimer_cancel - called when the hrtimer is canceled
|
||||
* @timer: pointer to struct hrtimer
|
||||
* @hrtimer: pointer to struct hrtimer
|
||||
*/
|
||||
TRACE_EVENT(hrtimer_cancel,
|
||||
|
||||
TP_PROTO(struct hrtimer *timer),
|
||||
TP_PROTO(struct hrtimer *hrtimer),
|
||||
|
||||
TP_ARGS(timer),
|
||||
TP_ARGS(hrtimer),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( void *, timer )
|
||||
__field( void *, hrtimer )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->timer = timer;
|
||||
__entry->hrtimer = hrtimer;
|
||||
),
|
||||
|
||||
TP_printk("hrtimer %p", __entry->timer)
|
||||
TP_printk("hrtimer=%p", __entry->hrtimer)
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -302,7 +301,7 @@ TRACE_EVENT(itimer_state,
|
||||
__entry->interval_usec = value->it_interval.tv_usec;
|
||||
),
|
||||
|
||||
TP_printk("which %d, expires %lu, it_value %lu.%lu, it_interval %lu.%lu",
|
||||
TP_printk("which=%d expires=%lu it_value=%lu.%lu it_interval=%lu.%lu",
|
||||
__entry->which, __entry->expires,
|
||||
__entry->value_sec, __entry->value_usec,
|
||||
__entry->interval_sec, __entry->interval_usec)
|
||||
@@ -332,7 +331,7 @@ TRACE_EVENT(itimer_expire,
|
||||
__entry->pid = pid_nr(pid);
|
||||
),
|
||||
|
||||
TP_printk("which %d, pid %d, now %lu", __entry->which,
|
||||
TP_printk("which=%d pid=%d now=%lu", __entry->which,
|
||||
(int) __entry->pid, __entry->now)
|
||||
);
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
TRACE_EVENT(workqueue_insertion,
|
||||
DECLARE_EVENT_CLASS(workqueue,
|
||||
|
||||
TP_PROTO(struct task_struct *wq_thread, struct work_struct *work),
|
||||
|
||||
@@ -30,26 +30,18 @@ TRACE_EVENT(workqueue_insertion,
|
||||
__entry->thread_pid, __entry->func)
|
||||
);
|
||||
|
||||
TRACE_EVENT(workqueue_execution,
|
||||
DEFINE_EVENT(workqueue, workqueue_insertion,
|
||||
|
||||
TP_PROTO(struct task_struct *wq_thread, struct work_struct *work),
|
||||
|
||||
TP_ARGS(wq_thread, 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)
|
||||
),
|
||||
DEFINE_EVENT(workqueue, workqueue_execution,
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->thread_comm, wq_thread->comm, TASK_COMM_LEN);
|
||||
__entry->thread_pid = wq_thread->pid;
|
||||
__entry->func = work->func;
|
||||
),
|
||||
TP_PROTO(struct task_struct *wq_thread, struct work_struct *work),
|
||||
|
||||
TP_printk("thread=%s:%d func=%pf", __entry->thread_comm,
|
||||
__entry->thread_pid, __entry->func)
|
||||
TP_ARGS(wq_thread, work)
|
||||
);
|
||||
|
||||
/* Trace the creation of one workqueue thread on a cpu */
|
||||
|
Reference in New Issue
Block a user