|
@@ -2507,6 +2507,39 @@ struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *set)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(blk_mq_init_queue);
|
|
EXPORT_SYMBOL(blk_mq_init_queue);
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Helper for setting up a queue with mq ops, given queue depth, and
|
|
|
|
+ * the passed in mq ops flags.
|
|
|
|
+ */
|
|
|
|
+struct request_queue *blk_mq_init_sq_queue(struct blk_mq_tag_set *set,
|
|
|
|
+ const struct blk_mq_ops *ops,
|
|
|
|
+ unsigned int queue_depth,
|
|
|
|
+ unsigned int set_flags)
|
|
|
|
+{
|
|
|
|
+ struct request_queue *q;
|
|
|
|
+ int ret;
|
|
|
|
+
|
|
|
|
+ memset(set, 0, sizeof(*set));
|
|
|
|
+ set->ops = ops;
|
|
|
|
+ set->nr_hw_queues = 1;
|
|
|
|
+ set->queue_depth = queue_depth;
|
|
|
|
+ set->numa_node = NUMA_NO_NODE;
|
|
|
|
+ set->flags = set_flags;
|
|
|
|
+
|
|
|
|
+ ret = blk_mq_alloc_tag_set(set);
|
|
|
|
+ if (ret)
|
|
|
|
+ return ERR_PTR(ret);
|
|
|
|
+
|
|
|
|
+ q = blk_mq_init_queue(set);
|
|
|
|
+ if (IS_ERR(q)) {
|
|
|
|
+ blk_mq_free_tag_set(set);
|
|
|
|
+ return q;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return q;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(blk_mq_init_sq_queue);
|
|
|
|
+
|
|
static int blk_mq_hw_ctx_size(struct blk_mq_tag_set *tag_set)
|
|
static int blk_mq_hw_ctx_size(struct blk_mq_tag_set *tag_set)
|
|
{
|
|
{
|
|
int hw_ctx_size = sizeof(struct blk_mq_hw_ctx);
|
|
int hw_ctx_size = sizeof(struct blk_mq_hw_ctx);
|