Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 #ifndef _UAPIBLKTRACE_H
0003 #define _UAPIBLKTRACE_H
0004 
0005 #include <linux/types.h>
0006 
0007 /*
0008  * Trace categories
0009  */
0010 enum blktrace_cat {
0011     BLK_TC_READ = 1 << 0,   /* reads */
0012     BLK_TC_WRITE    = 1 << 1,   /* writes */
0013     BLK_TC_FLUSH    = 1 << 2,   /* flush */
0014     BLK_TC_SYNC = 1 << 3,   /* sync IO */
0015     BLK_TC_SYNCIO   = BLK_TC_SYNC,
0016     BLK_TC_QUEUE    = 1 << 4,   /* queueing/merging */
0017     BLK_TC_REQUEUE  = 1 << 5,   /* requeueing */
0018     BLK_TC_ISSUE    = 1 << 6,   /* issue */
0019     BLK_TC_COMPLETE = 1 << 7,   /* completions */
0020     BLK_TC_FS   = 1 << 8,   /* fs requests */
0021     BLK_TC_PC   = 1 << 9,   /* pc requests */
0022     BLK_TC_NOTIFY   = 1 << 10,  /* special message */
0023     BLK_TC_AHEAD    = 1 << 11,  /* readahead */
0024     BLK_TC_META = 1 << 12,  /* metadata */
0025     BLK_TC_DISCARD  = 1 << 13,  /* discard requests */
0026     BLK_TC_DRV_DATA = 1 << 14,  /* binary per-driver data */
0027     BLK_TC_FUA  = 1 << 15,  /* fua requests */
0028 
0029     BLK_TC_END  = 1 << 15,  /* we've run out of bits! */
0030 };
0031 
0032 #define BLK_TC_SHIFT        (16)
0033 #define BLK_TC_ACT(act)     ((act) << BLK_TC_SHIFT)
0034 
0035 /*
0036  * Basic trace actions
0037  */
0038 enum blktrace_act {
0039     __BLK_TA_QUEUE = 1,     /* queued */
0040     __BLK_TA_BACKMERGE,     /* back merged to existing rq */
0041     __BLK_TA_FRONTMERGE,        /* front merge to existing rq */
0042     __BLK_TA_GETRQ,         /* allocated new request */
0043     __BLK_TA_SLEEPRQ,       /* sleeping on rq allocation */
0044     __BLK_TA_REQUEUE,       /* request requeued */
0045     __BLK_TA_ISSUE,         /* sent to driver */
0046     __BLK_TA_COMPLETE,      /* completed by driver */
0047     __BLK_TA_PLUG,          /* queue was plugged */
0048     __BLK_TA_UNPLUG_IO,     /* queue was unplugged by io */
0049     __BLK_TA_UNPLUG_TIMER,      /* queue was unplugged by timer */
0050     __BLK_TA_INSERT,        /* insert request */
0051     __BLK_TA_SPLIT,         /* bio was split */
0052     __BLK_TA_BOUNCE,        /* bio was bounced */
0053     __BLK_TA_REMAP,         /* bio was remapped */
0054     __BLK_TA_ABORT,         /* request aborted */
0055     __BLK_TA_DRV_DATA,      /* driver-specific binary data */
0056     __BLK_TA_CGROUP = 1 << 8,   /* from a cgroup*/
0057 };
0058 
0059 /*
0060  * Notify events.
0061  */
0062 enum blktrace_notify {
0063     __BLK_TN_PROCESS = 0,       /* establish pid/name mapping */
0064     __BLK_TN_TIMESTAMP,     /* include system clock */
0065     __BLK_TN_MESSAGE,       /* Character string message */
0066     __BLK_TN_CGROUP = __BLK_TA_CGROUP, /* from a cgroup */
0067 };
0068 
0069 
0070 /*
0071  * Trace actions in full. Additionally, read or write is masked
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  * The trace itself
0100  */
0101 struct blk_io_trace {
0102     __u32 magic;        /* MAGIC << 8 | version */
0103     __u32 sequence;     /* event number */
0104     __u64 time;     /* in nanoseconds */
0105     __u64 sector;       /* disk offset */
0106     __u32 bytes;        /* transfer length */
0107     __u32 action;       /* what happened */
0108     __u32 pid;      /* who did it */
0109     __u32 device;       /* device number */
0110     __u32 cpu;      /* on what cpu did it happen */
0111     __u16 error;        /* completion error */
0112     __u16 pdu_len;      /* length of data after this trace */
0113     /* cgroup id will be stored here if exists */
0114 };
0115 
0116 /*
0117  * The remap event
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  * User setup structure passed with BLKTRACESETUP
0135  */
0136 struct blk_user_trace_setup {
0137     char name[BLKTRACE_BDEV_SIZE];  /* output */
0138     __u16 act_mask;         /* input */
0139     __u32 buf_size;         /* input */
0140     __u32 buf_nr;           /* input */
0141     __u64 start_lba;
0142     __u64 end_lba;
0143     __u32 pid;
0144 };
0145 
0146 #endif /* _UAPIBLKTRACE_H */