mirror of https://github.com/OpenIPC/firmware.git
86 lines
2.1 KiB
Diff
86 lines
2.1 KiB
Diff
diff -drupN a/include/linux/blkdev.h b/include/linux/blkdev.h
|
|
--- a/include/linux/blkdev.h 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/include/linux/blkdev.h 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -196,6 +196,9 @@ struct request {
|
|
|
|
/* for bidi */
|
|
struct request *next_rq;
|
|
+
|
|
+ ktime_t lat_hist_io_start;
|
|
+ int lat_hist_enabled;
|
|
};
|
|
|
|
#define REQ_OP_SHIFT (8 * sizeof(u64) - REQ_OP_BITS)
|
|
@@ -1028,6 +1031,8 @@ extern void blk_queue_write_cache(struct
|
|
extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev);
|
|
|
|
extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *);
|
|
+extern int sunxi_blk_rq_map_sg(struct request_queue *, struct request *,
|
|
+ struct scatterlist *);
|
|
extern void blk_dump_rq_flags(struct request *, char *);
|
|
extern long nr_blockdev_pages(void);
|
|
|
|
@@ -1700,6 +1705,62 @@ extern int bdev_write_page(struct block_
|
|
extern long bdev_direct_access(struct block_device *, struct blk_dax_ctl *);
|
|
extern int bdev_dax_supported(struct super_block *, int);
|
|
extern bool bdev_dax_capable(struct block_device *);
|
|
+
|
|
+/*
|
|
+ * X-axis for IO latency histogram support.
|
|
+ */
|
|
+static const u_int64_t latency_x_axis_us[] = {
|
|
+ 100,
|
|
+ 200,
|
|
+ 300,
|
|
+ 400,
|
|
+ 500,
|
|
+ 600,
|
|
+ 700,
|
|
+ 800,
|
|
+ 900,
|
|
+ 1000,
|
|
+ 1200,
|
|
+ 1400,
|
|
+ 1600,
|
|
+ 1800,
|
|
+ 2000,
|
|
+ 2500,
|
|
+ 3000,
|
|
+ 4000,
|
|
+ 5000,
|
|
+ 6000,
|
|
+ 7000,
|
|
+ 9000,
|
|
+ 10000
|
|
+};
|
|
+
|
|
+#define BLK_IO_LAT_HIST_DISABLE 0
|
|
+#define BLK_IO_LAT_HIST_ENABLE 1
|
|
+#define BLK_IO_LAT_HIST_ZERO 2
|
|
+
|
|
+struct io_latency_state {
|
|
+ u_int64_t latency_y_axis[ARRAY_SIZE(latency_x_axis_us) + 1];
|
|
+ u_int64_t latency_elems;
|
|
+ u_int64_t latency_sum;
|
|
+};
|
|
+
|
|
+static inline void
|
|
+blk_update_latency_hist(struct io_latency_state *s, u_int64_t delta_us)
|
|
+{
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < ARRAY_SIZE(latency_x_axis_us); i++)
|
|
+ if (delta_us < (u_int64_t)latency_x_axis_us[i])
|
|
+ break;
|
|
+ s->latency_y_axis[i]++;
|
|
+ s->latency_elems++;
|
|
+ s->latency_sum += delta_us;
|
|
+}
|
|
+
|
|
+ssize_t blk_latency_hist_show(char* name, struct io_latency_state *s,
|
|
+ char *buf, int buf_size);
|
|
+
|
|
#else /* CONFIG_BLOCK */
|
|
|
|
struct block_device;
|