aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/blk-wbt.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/block/blk-wbt.c b/block/blk-wbt.c
index 463e4eb80287..f0c56649775f 100644
--- a/block/blk-wbt.c
+++ b/block/blk-wbt.c
@@ -715,6 +715,94 @@ void wbt_disable_default(struct request_queue *q)
715} 715}
716EXPORT_SYMBOL_GPL(wbt_disable_default); 716EXPORT_SYMBOL_GPL(wbt_disable_default);
717 717
718#ifdef CONFIG_BLK_DEBUG_FS
719static int wbt_curr_win_nsec_show(void *data, struct seq_file *m)
720{
721 struct rq_qos *rqos = data;
722 struct rq_wb *rwb = RQWB(rqos);
723
724 seq_printf(m, "%llu\n", rwb->cur_win_nsec);
725 return 0;
726}
727
728static int wbt_enabled_show(void *data, struct seq_file *m)
729{
730 struct rq_qos *rqos = data;
731 struct rq_wb *rwb = RQWB(rqos);
732
733 seq_printf(m, "%d\n", rwb->enable_state);
734 return 0;
735}
736
737static int wbt_id_show(void *data, struct seq_file *m)
738{
739 struct rq_qos *rqos = data;
740
741 seq_printf(m, "%u\n", rqos->id);
742 return 0;
743}
744
745static int wbt_inflight_show(void *data, struct seq_file *m)
746{
747 struct rq_qos *rqos = data;
748 struct rq_wb *rwb = RQWB(rqos);
749 int i;
750
751 for (i = 0; i < WBT_NUM_RWQ; i++)
752 seq_printf(m, "%d: inflight %d\n", i,
753 atomic_read(&rwb->rq_wait[i].inflight));
754 return 0;
755}
756
757static int wbt_min_lat_nsec_show(void *data, struct seq_file *m)
758{
759 struct rq_qos *rqos = data;
760 struct rq_wb *rwb = RQWB(rqos);
761
762 seq_printf(m, "%lu\n", rwb->min_lat_nsec);
763 return 0;
764}
765
766static int wbt_unknown_cnt_show(void *data, struct seq_file *m)
767{
768 struct rq_qos *rqos = data;
769 struct rq_wb *rwb = RQWB(rqos);
770
771 seq_printf(m, "%u\n", rwb->unknown_cnt);
772 return 0;
773}
774
775static int wbt_normal_show(void *data, struct seq_file *m)
776{
777 struct rq_qos *rqos = data;
778 struct rq_wb *rwb = RQWB(rqos);
779
780 seq_printf(m, "%u\n", rwb->wb_normal);
781 return 0;
782}
783
784static int wbt_background_show(void *data, struct seq_file *m)
785{
786 struct rq_qos *rqos = data;
787 struct rq_wb *rwb = RQWB(rqos);
788
789 seq_printf(m, "%u\n", rwb->wb_background);
790 return 0;
791}
792
793static const struct blk_mq_debugfs_attr wbt_debugfs_attrs[] = {
794 {"curr_win_nsec", 0400, wbt_curr_win_nsec_show},
795 {"enabled", 0400, wbt_enabled_show},
796 {"id", 0400, wbt_id_show},
797 {"inflight", 0400, wbt_inflight_show},
798 {"min_lat_nsec", 0400, wbt_min_lat_nsec_show},
799 {"unknown_cnt", 0400, wbt_unknown_cnt_show},
800 {"wb_normal", 0400, wbt_normal_show},
801 {"wb_background", 0400, wbt_background_show},
802 {},
803};
804#endif
805
718static struct rq_qos_ops wbt_rqos_ops = { 806static struct rq_qos_ops wbt_rqos_ops = {
719 .throttle = wbt_wait, 807 .throttle = wbt_wait,
720 .issue = wbt_issue, 808 .issue = wbt_issue,
@@ -723,6 +811,9 @@ static struct rq_qos_ops wbt_rqos_ops = {
723 .done = wbt_done, 811 .done = wbt_done,
724 .cleanup = wbt_cleanup, 812 .cleanup = wbt_cleanup,
725 .exit = wbt_exit, 813 .exit = wbt_exit,
814#ifdef CONFIG_BLK_DEBUG_FS
815 .debugfs_attrs = wbt_debugfs_attrs,
816#endif
726}; 817};
727 818
728int wbt_init(struct request_queue *q) 819int wbt_init(struct request_queue *q)