1fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#ifndef BLKTRACEAPI_H 2fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLKTRACEAPI_H 3fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 4fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#include <asm/types.h> 5fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 6fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe/* 7fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe * Trace categories 8fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe */ 9fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboeenum { 10fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_READ = 1 << 0, /* reads */ 11fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_WRITE = 1 << 1, /* writes */ 12fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_BARRIER = 1 << 2, /* barrier */ 13fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_SYNC = 1 << 3, /* sync */ 14fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_QUEUE = 1 << 4, /* queueing/merging */ 15fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_REQUEUE = 1 << 5, /* requeueing */ 16fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_ISSUE = 1 << 6, /* issue */ 17fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_COMPLETE = 1 << 7, /* completions */ 18fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_FS = 1 << 8, /* fs requests */ 19fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_PC = 1 << 9, /* pc requests */ 20fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_NOTIFY = 1 << 10, /* special message */ 21fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_AHEAD = 1 << 11, /* readahead */ 22fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_META = 1 << 12, /* metadata */ 23ff58fcede39d16a2c642897cbe5a7f28b2da1950Jens Axboe BLK_TC_DISCARD = 1 << 13, /* discard requests */ 24ff58fcede39d16a2c642897cbe5a7f28b2da1950Jens Axboe BLK_TC_DRV_DATA = 1 << 14, /* binary per-driver data */ 25fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 26fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ 27fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe}; 28fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 29fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TC_SHIFT (16) 30fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TC_ACT(act) ((act) << BLK_TC_SHIFT) 31fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 32fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe/* 33fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe * Basic trace actions 34fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe */ 35fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboeenum { 36fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_QUEUE = 1, /* queued */ 37fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_BACKMERGE, /* back merged to existing rq */ 38fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_FRONTMERGE, /* front merge to existing rq */ 39fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_GETRQ, /* allocated new request */ 40fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_SLEEPRQ, /* sleeping on rq allocation */ 41fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_REQUEUE, /* request requeued */ 42fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_ISSUE, /* sent to driver */ 43fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_COMPLETE, /* completed by driver */ 44fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_PLUG, /* queue was plugged */ 45fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_UNPLUG_IO, /* queue was unplugged by io */ 46fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_UNPLUG_TIMER, /* queue was unplugged by timer */ 47fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_INSERT, /* insert request */ 48fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_SPLIT, /* bio was split */ 49fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_BOUNCE, /* bio was bounced */ 50fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TA_REMAP, /* bio was remapped */ 51ff58fcede39d16a2c642897cbe5a7f28b2da1950Jens Axboe __BLK_TA_ABORT, /* request aborted */ 52ff58fcede39d16a2c642897cbe5a7f28b2da1950Jens Axboe __BLK_TA_DRV_DATA, /* driver-specific binary data */ 53fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe}; 54fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 55fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe/* 56fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe * Notify events. 57fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe */ 58fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboeenum blktrace_notify { 59fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TN_PROCESS = 0, /* establish pid/name mapping */ 60fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __BLK_TN_TIMESTAMP, /* include system clock */ 61ff58fcede39d16a2c642897cbe5a7f28b2da1950Jens Axboe __BLK_TN_MESSAGE, /* Character string message */ 62fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe}; 63fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 64fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe/* 65fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe * Trace actions in full. Additionally, read or write is masked 66fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe */ 67fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_QUEUE (__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE)) 68fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_BACKMERGE (__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE)) 69fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_FRONTMERGE (__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE)) 70fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_GETRQ (__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE)) 71fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_SLEEPRQ (__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE)) 72fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_REQUEUE (__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE)) 73fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_ISSUE (__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE)) 74fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_COMPLETE (__BLK_TA_COMPLETE| BLK_TC_ACT(BLK_TC_COMPLETE)) 75fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_PLUG (__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE)) 76fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_UNPLUG_IO (__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE)) 77fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_UNPLUG_TIMER (__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE)) 78fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_INSERT (__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE)) 79fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_SPLIT (__BLK_TA_SPLIT) 80fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_BOUNCE (__BLK_TA_BOUNCE) 81fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE)) 82ff58fcede39d16a2c642897cbe5a7f28b2da1950Jens Axboe#define BLK_TA_DRV_DATA (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA)) 83fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 84fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) 85fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) 86ff58fcede39d16a2c642897cbe5a7f28b2da1950Jens Axboe#define BLK_TN_MESSAGE (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY)) 87fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 88fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_IO_TRACE_MAGIC 0x65617400 89fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLK_IO_TRACE_VERSION 0x07 90fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 91fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe/* 92fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe * The trace itself 93fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe */ 94fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboestruct blk_io_trace { 95fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 magic; /* MAGIC << 8 | version */ 96fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 sequence; /* event number */ 97fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u64 time; /* in nanoseconds */ 98fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u64 sector; /* disk offset */ 99fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 bytes; /* transfer length */ 100fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 action; /* what happened */ 101fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 pid; /* who did it */ 102fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 device; /* device identifier (dev_t) */ 103fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 cpu; /* on what cpu did it happen */ 104fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u16 error; /* completion error */ 105fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u16 pdu_len; /* length of data after this trace */ 106fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe}; 107fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 108fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe/* 109fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe * The remap event 110fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe */ 111fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboestruct blk_io_trace_remap { 112fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 device; 113fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 device_from; 114fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u64 sector; 115fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe}; 116fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 117fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe/* 118fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe * User setup structure passed with BLKSTARTTRACE 119fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe */ 120fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboestruct blk_user_trace_setup { 121fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe char name[32]; /* output */ 122fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u16 act_mask; /* input */ 123fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 buf_size; /* input */ 124fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 buf_nr; /* input */ 125fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u64 start_lba; 126fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u64 end_lba; 127fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe __u32 pid; 128fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe}; 129fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 130fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup) 131fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLKTRACESTART _IO(0x12,116) 132fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLKTRACESTOP _IO(0x12,117) 133fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#define BLKTRACETEARDOWN _IO(0x12,118) 134fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe 135fb7b71a3c99b7ead2055439bfea421579aae2691Jens Axboe#endif 136