#include <linux/kernel.h>
#include <linux/blkdev.h>
#include <linux/build_bug.h>
#include <linux/debugfs.h>
#include "blk.h"
#include "blk-mq.h"
#include "blk-mq-debugfs.h"
#include "blk-mq-sched.h"
#include "blk-rq-qos.h"
static int queue_poll_stat_show(void *data, struct seq_file *m)
{ … }
static void *queue_requeue_list_start(struct seq_file *m, loff_t *pos)
__acquires(&q->requeue_lock)
{ … }
static void *queue_requeue_list_next(struct seq_file *m, void *v, loff_t *pos)
{ … }
static void queue_requeue_list_stop(struct seq_file *m, void *v)
__releases(&q->requeue_lock)
{ … }
static const struct seq_operations queue_requeue_list_seq_ops = …;
static int blk_flags_show(struct seq_file *m, const unsigned long flags,
const char *const *flag_name, int flag_name_count)
{ … }
static int queue_pm_only_show(void *data, struct seq_file *m)
{ … }
#define QUEUE_FLAG_NAME …
static const char *const blk_queue_flag_name[] = …;
#undef QUEUE_FLAG_NAME
static int queue_state_show(void *data, struct seq_file *m)
{ … }
static ssize_t queue_state_write(void *data, const char __user *buf,
size_t count, loff_t *ppos)
{ … }
static const struct blk_mq_debugfs_attr blk_mq_debugfs_queue_attrs[] = …;
#define HCTX_STATE_NAME …
static const char *const hctx_state_name[] = …;
#undef HCTX_STATE_NAME
static int hctx_state_show(void *data, struct seq_file *m)
{ … }
#define BLK_TAG_ALLOC_NAME …
static const char *const alloc_policy_name[] = …;
#undef BLK_TAG_ALLOC_NAME
#define HCTX_FLAG_NAME …
static const char *const hctx_flag_name[] = …;
#undef HCTX_FLAG_NAME
static int hctx_flags_show(void *data, struct seq_file *m)
{ … }
#define CMD_FLAG_NAME …
static const char *const cmd_flag_name[] = …;
#undef CMD_FLAG_NAME
#define RQF_NAME …
static const char *const rqf_name[] = …;
#undef RQF_NAME
static const char *const blk_mq_rq_state_name_array[] = …;
static const char *blk_mq_rq_state_name(enum mq_rq_state rq_state)
{ … }
int __blk_mq_debugfs_rq_show(struct seq_file *m, struct request *rq)
{ … }
EXPORT_SYMBOL_GPL(…);
int blk_mq_debugfs_rq_show(struct seq_file *m, void *v)
{ … }
EXPORT_SYMBOL_GPL(…);
static void *hctx_dispatch_start(struct seq_file *m, loff_t *pos)
__acquires(&hctx->lock)
{ … }
static void *hctx_dispatch_next(struct seq_file *m, void *v, loff_t *pos)
{ … }
static void hctx_dispatch_stop(struct seq_file *m, void *v)
__releases(&hctx->lock)
{ … }
static const struct seq_operations hctx_dispatch_seq_ops = …;
struct show_busy_params { … };
static bool hctx_show_busy_rq(struct request *rq, void *data)
{ … }
static int hctx_busy_show(void *data, struct seq_file *m)
{ … }
static const char *const hctx_types[] = …;
static int hctx_type_show(void *data, struct seq_file *m)
{ … }
static int hctx_ctx_map_show(void *data, struct seq_file *m)
{ … }
static void blk_mq_debugfs_tags_show(struct seq_file *m,
struct blk_mq_tags *tags)
{ … }
static int hctx_tags_show(void *data, struct seq_file *m)
{ … }
static int hctx_tags_bitmap_show(void *data, struct seq_file *m)
{ … }
static int hctx_sched_tags_show(void *data, struct seq_file *m)
{ … }
static int hctx_sched_tags_bitmap_show(void *data, struct seq_file *m)
{ … }
static int hctx_active_show(void *data, struct seq_file *m)
{ … }
static int hctx_dispatch_busy_show(void *data, struct seq_file *m)
{ … }
#define CTX_RQ_SEQ_OPS(name, type) …
CTX_RQ_SEQ_OPS(…);
CTX_RQ_SEQ_OPS(…);
CTX_RQ_SEQ_OPS(…);
static int blk_mq_debugfs_show(struct seq_file *m, void *v)
{ … }
static ssize_t blk_mq_debugfs_write(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{ … }
static int blk_mq_debugfs_open(struct inode *inode, struct file *file)
{ … }
static int blk_mq_debugfs_release(struct inode *inode, struct file *file)
{ … }
static const struct file_operations blk_mq_debugfs_fops = …;
static const struct blk_mq_debugfs_attr blk_mq_debugfs_hctx_attrs[] = …;
static const struct blk_mq_debugfs_attr blk_mq_debugfs_ctx_attrs[] = …;
static void debugfs_create_files(struct dentry *parent, void *data,
const struct blk_mq_debugfs_attr *attr)
{ … }
void blk_mq_debugfs_register(struct request_queue *q)
{ … }
static void blk_mq_debugfs_register_ctx(struct blk_mq_hw_ctx *hctx,
struct blk_mq_ctx *ctx)
{ … }
void blk_mq_debugfs_register_hctx(struct request_queue *q,
struct blk_mq_hw_ctx *hctx)
{ … }
void blk_mq_debugfs_unregister_hctx(struct blk_mq_hw_ctx *hctx)
{ … }
void blk_mq_debugfs_register_hctxs(struct request_queue *q)
{ … }
void blk_mq_debugfs_unregister_hctxs(struct request_queue *q)
{ … }
void blk_mq_debugfs_register_sched(struct request_queue *q)
{ … }
void blk_mq_debugfs_unregister_sched(struct request_queue *q)
{ … }
static const char *rq_qos_id_to_name(enum rq_qos_id id)
{ … }
void blk_mq_debugfs_unregister_rqos(struct rq_qos *rqos)
{ … }
void blk_mq_debugfs_register_rqos(struct rq_qos *rqos)
{ … }
void blk_mq_debugfs_register_sched_hctx(struct request_queue *q,
struct blk_mq_hw_ctx *hctx)
{ … }
void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hctx)
{ … }