0001
0002 #ifndef _UAPIBLKTRACE_H
0003 #define _UAPIBLKTRACE_H
0004
0005 #include <linux/types.h>
0006
0007
0008
0009
0010 enum blktrace_cat {
0011 BLK_TC_READ = 1 << 0,
0012 BLK_TC_WRITE = 1 << 1,
0013 BLK_TC_FLUSH = 1 << 2,
0014 BLK_TC_SYNC = 1 << 3,
0015 BLK_TC_SYNCIO = BLK_TC_SYNC,
0016 BLK_TC_QUEUE = 1 << 4,
0017 BLK_TC_REQUEUE = 1 << 5,
0018 BLK_TC_ISSUE = 1 << 6,
0019 BLK_TC_COMPLETE = 1 << 7,
0020 BLK_TC_FS = 1 << 8,
0021 BLK_TC_PC = 1 << 9,
0022 BLK_TC_NOTIFY = 1 << 10,
0023 BLK_TC_AHEAD = 1 << 11,
0024 BLK_TC_META = 1 << 12,
0025 BLK_TC_DISCARD = 1 << 13,
0026 BLK_TC_DRV_DATA = 1 << 14,
0027 BLK_TC_FUA = 1 << 15,
0028
0029 BLK_TC_END = 1 << 15,
0030 };
0031
0032 #define BLK_TC_SHIFT (16)
0033 #define BLK_TC_ACT(act) ((act) << BLK_TC_SHIFT)
0034
0035
0036
0037
0038 enum blktrace_act {
0039 __BLK_TA_QUEUE = 1,
0040 __BLK_TA_BACKMERGE,
0041 __BLK_TA_FRONTMERGE,
0042 __BLK_TA_GETRQ,
0043 __BLK_TA_SLEEPRQ,
0044 __BLK_TA_REQUEUE,
0045 __BLK_TA_ISSUE,
0046 __BLK_TA_COMPLETE,
0047 __BLK_TA_PLUG,
0048 __BLK_TA_UNPLUG_IO,
0049 __BLK_TA_UNPLUG_TIMER,
0050 __BLK_TA_INSERT,
0051 __BLK_TA_SPLIT,
0052 __BLK_TA_BOUNCE,
0053 __BLK_TA_REMAP,
0054 __BLK_TA_ABORT,
0055 __BLK_TA_DRV_DATA,
0056 __BLK_TA_CGROUP = 1 << 8,
0057 };
0058
0059
0060
0061
0062 enum blktrace_notify {
0063 __BLK_TN_PROCESS = 0,
0064 __BLK_TN_TIMESTAMP,
0065 __BLK_TN_MESSAGE,
0066 __BLK_TN_CGROUP = __BLK_TA_CGROUP,
0067 };
0068
0069
0070
0071
0072
0073 #define BLK_TA_QUEUE (__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE))
0074 #define BLK_TA_BACKMERGE (__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
0075 #define BLK_TA_FRONTMERGE (__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
0076 #define BLK_TA_GETRQ (__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE))
0077 #define BLK_TA_SLEEPRQ (__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE))
0078 #define BLK_TA_REQUEUE (__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE))
0079 #define BLK_TA_ISSUE (__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE))
0080 #define BLK_TA_COMPLETE (__BLK_TA_COMPLETE| BLK_TC_ACT(BLK_TC_COMPLETE))
0081 #define BLK_TA_PLUG (__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE))
0082 #define BLK_TA_UNPLUG_IO (__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE))
0083 #define BLK_TA_UNPLUG_TIMER (__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE))
0084 #define BLK_TA_INSERT (__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE))
0085 #define BLK_TA_SPLIT (__BLK_TA_SPLIT)
0086 #define BLK_TA_BOUNCE (__BLK_TA_BOUNCE)
0087 #define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE))
0088 #define BLK_TA_ABORT (__BLK_TA_ABORT | BLK_TC_ACT(BLK_TC_QUEUE))
0089 #define BLK_TA_DRV_DATA (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA))
0090
0091 #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))
0092 #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
0093 #define BLK_TN_MESSAGE (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))
0094
0095 #define BLK_IO_TRACE_MAGIC 0x65617400
0096 #define BLK_IO_TRACE_VERSION 0x07
0097
0098
0099
0100
0101 struct blk_io_trace {
0102 __u32 magic;
0103 __u32 sequence;
0104 __u64 time;
0105 __u64 sector;
0106 __u32 bytes;
0107 __u32 action;
0108 __u32 pid;
0109 __u32 device;
0110 __u32 cpu;
0111 __u16 error;
0112 __u16 pdu_len;
0113
0114 };
0115
0116
0117
0118
0119 struct blk_io_trace_remap {
0120 __be32 device_from;
0121 __be32 device_to;
0122 __be64 sector_from;
0123 };
0124
0125 enum {
0126 Blktrace_setup = 1,
0127 Blktrace_running,
0128 Blktrace_stopped,
0129 };
0130
0131 #define BLKTRACE_BDEV_SIZE 32
0132
0133
0134
0135
0136 struct blk_user_trace_setup {
0137 char name[BLKTRACE_BDEV_SIZE];
0138 __u16 act_mask;
0139 __u32 buf_size;
0140 __u32 buf_nr;
0141 __u64 start_lba;
0142 __u64 end_lba;
0143 __u32 pid;
0144 };
0145
0146 #endif