Merge tag 'fscrypt-for-linus' of git://git.kernel.org/pub/scm/fs/fscrypt/linux
[linux-block.git] / block / blk-mq-tag.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
320ae51f
JA
2#ifndef INT_BLK_MQ_TAG_H
3#define INT_BLK_MQ_TAG_H
4
2e9bc346
CH
5struct blk_mq_alloc_data;
6
1c0706a7
JG
7extern struct blk_mq_tags *blk_mq_init_tags(unsigned int nr_tags,
8 unsigned int reserved_tags,
e155b0c2
JG
9 int node, int alloc_policy);
10extern void blk_mq_free_tags(struct blk_mq_tags *tags);
56b68085
JG
11extern int blk_mq_init_bitmaps(struct sbitmap_queue *bitmap_tags,
12 struct sbitmap_queue *breserved_tags,
13 unsigned int queue_depth,
14 unsigned int reserved,
15 int node, int alloc_policy);
320ae51f 16
cb96a42c 17extern unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data);
349302da
JA
18unsigned long blk_mq_get_tags(struct blk_mq_alloc_data *data, int nr_tags,
19 unsigned int *offset);
cae740a0
JG
20extern void blk_mq_put_tag(struct blk_mq_tags *tags, struct blk_mq_ctx *ctx,
21 unsigned int tag);
f794f335 22void blk_mq_put_tags(struct blk_mq_tags *tags, int *tag_array, int nr_tags);
70f36b60
JA
23extern int blk_mq_tag_update_depth(struct blk_mq_hw_ctx *hctx,
24 struct blk_mq_tags **tags,
25 unsigned int depth, bool can_grow);
079a2e3e 26extern void blk_mq_tag_resize_shared_tags(struct blk_mq_tag_set *set,
32bc15af 27 unsigned int size);
079a2e3e 28extern void blk_mq_tag_update_sched_shared_tags(struct request_queue *q);
32bc15af 29
aed3ea94 30extern void blk_mq_tag_wakeup_all(struct blk_mq_tags *tags, bool);
fc39f8d2 31void blk_mq_queue_tag_busy_iter(struct request_queue *q, busy_tag_iter_fn *fn,
0bf6cd5b 32 void *priv);
602380d2
ML
33void blk_mq_all_tag_iter(struct blk_mq_tags *tags, busy_tag_iter_fn *fn,
34 void *priv);
320ae51f 35
88459642
OS
36static inline struct sbq_wait_state *bt_wait_ptr(struct sbitmap_queue *bt,
37 struct blk_mq_hw_ctx *hctx)
38{
39 if (!hctx)
40 return &bt->ws[0];
41 return sbq_wait_ptr(bt, &hctx->wait_index);
42}
43
320ae51f 44enum {
419c3d5e 45 BLK_MQ_NO_TAG = -1U,
5385fa47 46 BLK_MQ_TAG_MIN = 1,
419c3d5e 47 BLK_MQ_TAG_MAX = BLK_MQ_NO_TAG - 1,
320ae51f
JA
48};
49
ee78ec10 50extern void __blk_mq_tag_busy(struct blk_mq_hw_ctx *);
0d2602ca
JA
51extern void __blk_mq_tag_idle(struct blk_mq_hw_ctx *);
52
ee78ec10 53static inline void blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx)
0d2602ca 54{
ee78ec10
LS
55 if (hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED)
56 __blk_mq_tag_busy(hctx);
0d2602ca
JA
57}
58
59static inline void blk_mq_tag_idle(struct blk_mq_hw_ctx *hctx)
60{
51db1c37 61 if (!(hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED))
0d2602ca
JA
62 return;
63
64 __blk_mq_tag_idle(hctx);
65}
66
415b806d
SG
67static inline bool blk_mq_tag_is_reserved(struct blk_mq_tags *tags,
68 unsigned int tag)
69{
70 return tag < tags->nr_reserved_tags;
71}
72
320ae51f 73#endif