From c5b869659779259c1cfae203f989557e252d2646 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Mon, 12 Jun 2023 13:33:10 -0700 Subject: [PATCH] ANDROID: block: Make sub_page_limit_queues available in debugfs This new debugfs attribute makes it easier to verify the code that tracks how many queues require limits below the page size. Bug: 308663717 Bug: 319125789 Change-Id: I2ee54a9e4544866e71b505ae9296b68039d5ca82 Signed-off-by: Bart Van Assche [jyescas@google.com: Wrap #include "blk-mq-debugfs.h" with #ifndef __GENKSYSM__ to avoid ABI CRC changes.] Signed-off-by: Juan Yescas --- block/blk-core.c | 4 ++++ block/blk-mq-debugfs.c | 9 +++++++++ block/blk-mq-debugfs.h | 6 ++++++ block/blk-settings.c | 8 ++++++++ block/blk.h | 1 + 5 files changed, 28 insertions(+) diff --git a/block/blk-core.c b/block/blk-core.c index cac23ca5f913..3971efe10b4d 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -45,6 +45,9 @@ #include #include "blk.h" +#ifndef __GENKSYMS__ +#include "blk-mq-debugfs.h" +#endif #include "blk-mq-sched.h" #include "blk-pm.h" #include "blk-cgroup.h" @@ -1213,6 +1216,7 @@ int __init blk_dev_init(void) sizeof(struct srcu_struct), 0, SLAB_PANIC, NULL); blk_debugfs_root = debugfs_create_dir("block", NULL); + blk_mq_debugfs_init(); return 0; } diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c index bd942341b638..786992aaabc5 100644 --- a/block/blk-mq-debugfs.c +++ b/block/blk-mq-debugfs.c @@ -874,3 +874,12 @@ void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hctx) debugfs_remove_recursive(hctx->sched_debugfs_dir); hctx->sched_debugfs_dir = NULL; } + +DEFINE_DEBUGFS_ATTRIBUTE(blk_sub_page_limit_queues_fops, + blk_sub_page_limit_queues_get, NULL, "%llu\n"); + +void blk_mq_debugfs_init(void) +{ + debugfs_create_file("sub_page_limit_queues", 0400, blk_debugfs_root, + NULL, &blk_sub_page_limit_queues_fops); +} diff --git a/block/blk-mq-debugfs.h b/block/blk-mq-debugfs.h index 9c7d4b6117d4..7942119051f5 100644 --- a/block/blk-mq-debugfs.h +++ b/block/blk-mq-debugfs.h @@ -17,6 +17,8 @@ struct blk_mq_debugfs_attr { const struct seq_operations *seq_ops; }; +void blk_mq_debugfs_init(void); + int __blk_mq_debugfs_rq_show(struct seq_file *m, struct request *rq); int blk_mq_debugfs_rq_show(struct seq_file *m, void *v); @@ -36,6 +38,10 @@ void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hctx); void blk_mq_debugfs_register_rqos(struct rq_qos *rqos); void blk_mq_debugfs_unregister_rqos(struct rq_qos *rqos); #else +static inline void blk_mq_debugfs_init(void) +{ +} + static inline void blk_mq_debugfs_register(struct request_queue *q) { } diff --git a/block/blk-settings.c b/block/blk-settings.c index 2f8de7d76612..b99ad9892c06 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -109,6 +109,14 @@ void blk_queue_bounce_limit(struct request_queue *q, enum blk_bounce bounce) } EXPORT_SYMBOL(blk_queue_bounce_limit); +/* For debugfs. */ +int blk_sub_page_limit_queues_get(void *data, u64 *val) +{ + *val = READ_ONCE(blk_nr_sub_page_limit_queues); + + return 0; +} + /** * blk_enable_sub_page_limits - enable support for limits below the page size * @lim: request queue limits for which to enable support of these features. diff --git a/block/blk.h b/block/blk.h index 6694e243da61..d2e9dfb03ceb 100644 --- a/block/blk.h +++ b/block/blk.h @@ -44,6 +44,7 @@ static inline bool blk_queue_sub_page_limits(const struct queue_limits *lim) lim->sub_page_limits; } +int blk_sub_page_limit_queues_get(void *data, u64 *val); void blk_disable_sub_page_limits(struct queue_limits *q); void blk_freeze_queue(struct request_queue *q);