#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/backing-dev.h>
#include <linux/bio.h>
#include <linux/blkdev.h>
#include <linux/mm.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/workqueue.h>
#include <linux/smp.h>
#include "blk.h"
#include "blk-mq.h"
static void blk_mq_sysfs_release(struct kobject *kobj)
{ … }
static void blk_mq_ctx_sysfs_release(struct kobject *kobj)
{ … }
static void blk_mq_hw_sysfs_release(struct kobject *kobj)
{ … }
struct blk_mq_hw_ctx_sysfs_entry { … };
static ssize_t blk_mq_hw_sysfs_show(struct kobject *kobj,
struct attribute *attr, char *page)
{ … }
static ssize_t blk_mq_hw_sysfs_nr_tags_show(struct blk_mq_hw_ctx *hctx,
char *page)
{ … }
static ssize_t blk_mq_hw_sysfs_nr_reserved_tags_show(struct blk_mq_hw_ctx *hctx,
char *page)
{ … }
static ssize_t blk_mq_hw_sysfs_cpus_show(struct blk_mq_hw_ctx *hctx, char *page)
{ … }
static struct blk_mq_hw_ctx_sysfs_entry blk_mq_hw_sysfs_nr_tags = …;
static struct blk_mq_hw_ctx_sysfs_entry blk_mq_hw_sysfs_nr_reserved_tags = …;
static struct blk_mq_hw_ctx_sysfs_entry blk_mq_hw_sysfs_cpus = …;
static struct attribute *default_hw_ctx_attrs[] = …;
ATTRIBUTE_GROUPS(…);
static const struct sysfs_ops blk_mq_hw_sysfs_ops = …;
static const struct kobj_type blk_mq_ktype = …;
static const struct kobj_type blk_mq_ctx_ktype = …;
static const struct kobj_type blk_mq_hw_ktype = …;
static void blk_mq_unregister_hctx(struct blk_mq_hw_ctx *hctx)
{ … }
static int blk_mq_register_hctx(struct blk_mq_hw_ctx *hctx)
{ … }
void blk_mq_hctx_kobj_init(struct blk_mq_hw_ctx *hctx)
{ … }
void blk_mq_sysfs_deinit(struct request_queue *q)
{ … }
void blk_mq_sysfs_init(struct request_queue *q)
{ … }
int blk_mq_sysfs_register(struct gendisk *disk)
{ … }
void blk_mq_sysfs_unregister(struct gendisk *disk)
{ … }
void blk_mq_sysfs_unregister_hctxs(struct request_queue *q)
{ … }
int blk_mq_sysfs_register_hctxs(struct request_queue *q)
{ … }