blob: b274e3d2edff35f30b0288fd2daa38cf9d00543e [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef KTRACE_DEF
#error must define KTRACE_DEF
#endif
// events before 0x100 may require specialized handling
KTRACE_DEF(0x000, 32B, VERSION, META) // version
KTRACE_DEF(0x001, 32B, TICKS_PER_MS, META) // lo32, hi32
KTRACE_DEF(0x020, NAME, KTHREAD_NAME, META) // ktid, 0, name[]
KTRACE_DEF(0x021, NAME, THREAD_NAME, META) // tid, pid, name[]
KTRACE_DEF(0x022, NAME, PROC_NAME, META) // pid, 0, name[]
KTRACE_DEF(0x023, NAME, SYSCALL_NAME, META) // num, 0, name[]
KTRACE_DEF(0x024, NAME, IRQ_NAME, META) // num, 0, name[]
KTRACE_DEF(0x025, NAME, PROBE_NAME, META) // num, 0, name[]
KTRACE_DEF(0x026, NAME, VCPU_META, META) // meta, 0, name[]
KTRACE_DEF(0x027, NAME, VCPU_EXIT_META, META) // meta, 0, name[]
KTRACE_DEF(0x030, 16B, IRQ_ENTER, IRQ) // (irqn << 8) | cpu
KTRACE_DEF(0x031, 16B, IRQ_EXIT, IRQ) // (irqn << 8) | cpu
KTRACE_DEF(0x032, 16B, SYSCALL_ENTER, SYSCALL) // (n << 8) | cpu
KTRACE_DEF(0x033, 16B, SYSCALL_EXIT, SYSCALL) // (n << 8) | cpu
KTRACE_DEF(0x034, 32B, PAGE_FAULT, VM) // virtual_address_hi, virtual_address_lo, flags, cpu
KTRACE_DEF(0x035, 32B, PAGE_FAULT_EXIT, VM) // virtual_address_hi, virtual_address_lo, flags, cpu
KTRACE_DEF(0x036, 32B, ACCESS_FAULT, VM) // virtual_address_hi, virtual_address_lo, flags, cpu
KTRACE_DEF(0x037, 32B, ACCESS_FAULT_EXIT, VM) // virtual_address_hi, virtual_address_lo, flags, cpu
// to-tid, ((new_thread_prioriy<<24) | (old_thread_priority<<16) | (old_thread_state<<8) | cpu),
// from-kt, to-kt
KTRACE_DEF(0x040, 32B, CONTEXT_SWITCH, SCHEDULER)
// Word 0: inherit event ID
// Word 1: 0
// Word 2: 0
// Word 3: bits [0, 7] CPU ID
KTRACE_DEF(0x041, 32B, INHERIT_PRIORITY_START, SCHEDULER)
// Word 0: inherit event ID.
// Word 1: Target thread TID.
// Word 2: bits [ 0, 7] : old effective priority as an int8_t
// : bits [ 8, 15] : new effective priority as an int8_t
// : bits [16, 23] : old inherited priority as an int8_t
// : bits [24, 31] : new inherited priority as an int8_t
// Word 3: bits [ 0, 7] : CPU ID
// : bit 8 : Kernel TID flag.
// : bit 9 : Final event flag.
//
// Note: Target thread TID is one of two things. Either, the lower 32
// bits of the KOID for a user mode thread dispatcher object, or the
// lower 32 bits of a kernel mode thread structure's kernel address.
// The Kernel TID flag in word #3 can be used to tell the difference
// (1 => kernel TID, 0 => user mode TID)
//
KTRACE_DEF(0x042, 32B, INHERIT_PRIORITY, SCHEDULER)
// Word 0: futex ID bits [0..31]
// Word 1: futex ID bits [32..63]
// Word 2: new owner user-mode TID, or 0 for no owner
// Word 3: bits [0..7] CPU ID
KTRACE_DEF(0x043, 32B, FUTEX_WAIT, SCHEDULER)
// Word 0: futex ID bits [0..31]
// Word 1: futex ID bits [32..63]
// Word 2: zx_status_t result of the wait operation.
// Word 3: bits [0..7] CPU ID
KTRACE_DEF(0x044, 32B, FUTEX_WOKE, SCHEDULER)
// Word 0: futex ID bits [0..31]
// Word 1: futex ID bits [32..63]
// Word 2: assigned owner user-mode TID, or 0 for no owner
// Word 3: bits [0..7] CPU ID
// Word 3: bits [8..15] Low 8 bits of count
// [0, 0xFE) => count
// 0xFE => count was >= 0xFE
// 0xFF => count was unlimited
// Word 3: bit 30; 1 => requeue operation, 0 => wake operation
// Word 3: bit 31; 1 => futex was active, 0 => it was not.
KTRACE_DEF(0x045, 32B, FUTEX_WAKE, SCHEDULER)
// Word 0: requeue target futex ID bits [0..31]
// Word 1: requeue target futex ID bits [32..63]
// Word 2: assigned owner user-mode TID, or 0 for no owner
// Word 3: bits [0..7] CPU ID
// Word 3: bits [8..15] Low 8 bits of count
// [0, 0xFE) => count
// 0xFE => count was >= 0xFE
// 0xFF => count was unlimited
// Word 3: bit 31; 1 => futex was active, 0 => it was not.
KTRACE_DEF(0x046, 32B, FUTEX_REQUEUE, SCHEDULER)
// Trace events logged when a thread interacts with a kernel mutex. Three
// operations are defined, Acquire, release and block, but the meaning of the
// parameters vary slightly from operation to operation.
//
// Acquire operations are only logged in the case that a mutex is obtained while
// uncontested. There will never be a TID specified, and the number of waiters
// will always be 0.
//
// Release operations will only log a TID in the case that the mutex is being
// granted atomically to a specific waiter, and the TID will specify the waiter
// that the mutex is being release to. In the case that an uncontested mutex is
// being released, the TID will be 0.
//
// Block operations will log a TID indicating the TID of the thread which
// current owns the mutex and is blocking them.
//
// Word 0: low 32 bits of kernel mutex address
// Word 1: TID
// Word 2: The number of threads blocked on this mutex
// Word 3: bits [0..7] CPU ID
// Word 3: bit 31: 1 => word 1 TID is user mode
// 0 => word 1 TID is kernel mode
KTRACE_DEF(0x047, 32B, KERNEL_MUTEX_ACQUIRE, SCHEDULER)
KTRACE_DEF(0x048, 32B, KERNEL_MUTEX_RELEASE, SCHEDULER)
KTRACE_DEF(0x049, 32B, KERNEL_MUTEX_BLOCK, SCHEDULER)
KTRACE_DEF(0x100, 32B, OBJECT_DELETE, LIFECYCLE) // id
KTRACE_DEF(0x110, 32B, THREAD_CREATE, TASKS) // tid, pid
KTRACE_DEF(0x111, 32B, THREAD_START, TASKS) // tid
KTRACE_DEF(0x112, 32B, THREAD_EXIT, TASKS)
KTRACE_DEF(0x120, 32B, PROC_CREATE, TASKS) // pid
KTRACE_DEF(0x121, 32B, PROC_START, TASKS) // tid, pid
KTRACE_DEF(0x122, 32B, PROC_EXIT, TASKS) // pid
KTRACE_DEF(0x130, 32B, CHANNEL_CREATE, IPC) // id0, id1, flags
KTRACE_DEF(0x131, 32B, CHANNEL_WRITE, IPC) // id0, bytes, handles
KTRACE_DEF(0x132, 32B, CHANNEL_READ, IPC) // id1, bytes, handles
KTRACE_DEF(0x140, 32B, PORT_WAIT, IPC) // id
KTRACE_DEF(0x141, 32B, PORT_WAIT_DONE, IPC) // id, status
KTRACE_DEF(0x142, 32B, PORT_CREATE, IPC) // id
KTRACE_DEF(0x143, 32B, PORT_QUEUE, IPC) // id, size
KTRACE_DEF(0x150, 32B, WAIT_ONE, IPC) // id, signals, timeoutlo, timeouthi
KTRACE_DEF(0x151, 32B, WAIT_ONE_DONE, IPC) // id, status, pending
KTRACE_DEF(0x160, 32B, KWAIT_BLOCK, SCHEDULER) // queue_hi, queue_hi
KTRACE_DEF(0x161, 32B, KWAIT_WAKE, SCHEDULER) // queue_hi, queue_hi, is_mutex
KTRACE_DEF(0x162, 32B, KWAIT_UNBLOCK, SCHEDULER) // queue_hi, queue_hi, blocked_status
KTRACE_DEF(0x170, 32B, VCPU_ENTER, TASKS)
KTRACE_DEF(0x171, 32B, VCPU_EXIT, TASKS) // meta, exit_address_hi, exit_address_lo
KTRACE_DEF(0x172, 32B, VCPU_BLOCK, TASKS) // meta
KTRACE_DEF(0x173, 32B, VCPU_UNBLOCK, TASKS) // meta
// events from 0x200-0x2ff are for arch-specific needs
#ifdef __x86_64__
// These are used by Intel Processor Trace support.
KTRACE_DEF(0x200, 32B, IPT_START, ARCH) // MSR_PLATFORM_INFO[15:8], kernel cr3
KTRACE_DEF(0x201, 32B, IPT_CPU_INFO, ARCH) // family, model, stepping
KTRACE_DEF(0x202, 32B, IPT_STOP, ARCH)
KTRACE_DEF(0x203, 32B, IPT_PROCESS_CREATE, ARCH) // pid, cr3
#endif
#undef KTRACE_DEF