xref: /openbmc/linux/block/blk-stat.h (revision cf43e6be865a582ba66ee4747ae27a0513f6bba1)
1*cf43e6beSJens Axboe #ifndef BLK_STAT_H
2*cf43e6beSJens Axboe #define BLK_STAT_H
3*cf43e6beSJens Axboe 
4*cf43e6beSJens Axboe /*
5*cf43e6beSJens Axboe  * ~0.13s window as a power-of-2 (2^27 nsecs)
6*cf43e6beSJens Axboe  */
7*cf43e6beSJens Axboe #define BLK_STAT_NSEC		134217728ULL
8*cf43e6beSJens Axboe #define BLK_STAT_NSEC_MASK	~(BLK_STAT_NSEC - 1)
9*cf43e6beSJens Axboe 
10*cf43e6beSJens Axboe /*
11*cf43e6beSJens Axboe  * Upper 3 bits can be used elsewhere
12*cf43e6beSJens Axboe  */
13*cf43e6beSJens Axboe #define BLK_STAT_RES_BITS	3
14*cf43e6beSJens Axboe #define BLK_STAT_SHIFT		(64 - BLK_STAT_RES_BITS)
15*cf43e6beSJens Axboe #define BLK_STAT_TIME_MASK	((1ULL << BLK_STAT_SHIFT) - 1)
16*cf43e6beSJens Axboe #define BLK_STAT_MASK		~BLK_STAT_TIME_MASK
17*cf43e6beSJens Axboe 
18*cf43e6beSJens Axboe enum {
19*cf43e6beSJens Axboe 	BLK_STAT_READ	= 0,
20*cf43e6beSJens Axboe 	BLK_STAT_WRITE,
21*cf43e6beSJens Axboe };
22*cf43e6beSJens Axboe 
23*cf43e6beSJens Axboe void blk_stat_add(struct blk_rq_stat *, struct request *);
24*cf43e6beSJens Axboe void blk_hctx_stat_get(struct blk_mq_hw_ctx *, struct blk_rq_stat *);
25*cf43e6beSJens Axboe void blk_queue_stat_get(struct request_queue *, struct blk_rq_stat *);
26*cf43e6beSJens Axboe void blk_stat_clear(struct request_queue *);
27*cf43e6beSJens Axboe void blk_stat_init(struct blk_rq_stat *);
28*cf43e6beSJens Axboe bool blk_stat_is_current(struct blk_rq_stat *);
29*cf43e6beSJens Axboe void blk_stat_set_issue_time(struct blk_issue_stat *);
30*cf43e6beSJens Axboe bool blk_stat_enable(struct request_queue *);
31*cf43e6beSJens Axboe 
32*cf43e6beSJens Axboe static inline u64 __blk_stat_time(u64 time)
33*cf43e6beSJens Axboe {
34*cf43e6beSJens Axboe 	return time & BLK_STAT_TIME_MASK;
35*cf43e6beSJens Axboe }
36*cf43e6beSJens Axboe 
37*cf43e6beSJens Axboe static inline u64 blk_stat_time(struct blk_issue_stat *stat)
38*cf43e6beSJens Axboe {
39*cf43e6beSJens Axboe 	return __blk_stat_time(stat->time);
40*cf43e6beSJens Axboe }
41*cf43e6beSJens Axboe 
42*cf43e6beSJens Axboe #endif
43