Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.10-rc5 88 lines 2.4 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef INT_BLK_MQ_TAG_H 3#define INT_BLK_MQ_TAG_H 4 5/* 6 * Tag address space map. 7 */ 8struct blk_mq_tags { 9 unsigned int nr_tags; 10 unsigned int nr_reserved_tags; 11 12 atomic_t active_queues; 13 14 struct sbitmap_queue *bitmap_tags; 15 struct sbitmap_queue *breserved_tags; 16 17 struct sbitmap_queue __bitmap_tags; 18 struct sbitmap_queue __breserved_tags; 19 20 struct request **rqs; 21 struct request **static_rqs; 22 struct list_head page_list; 23}; 24 25extern struct blk_mq_tags *blk_mq_init_tags(unsigned int nr_tags, 26 unsigned int reserved_tags, 27 int node, unsigned int flags); 28extern void blk_mq_free_tags(struct blk_mq_tags *tags, unsigned int flags); 29 30extern int blk_mq_init_shared_sbitmap(struct blk_mq_tag_set *set, 31 unsigned int flags); 32extern void blk_mq_exit_shared_sbitmap(struct blk_mq_tag_set *set); 33 34extern unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data); 35extern void blk_mq_put_tag(struct blk_mq_tags *tags, struct blk_mq_ctx *ctx, 36 unsigned int tag); 37extern int blk_mq_tag_update_depth(struct blk_mq_hw_ctx *hctx, 38 struct blk_mq_tags **tags, 39 unsigned int depth, bool can_grow); 40extern void blk_mq_tag_resize_shared_sbitmap(struct blk_mq_tag_set *set, 41 unsigned int size); 42 43extern void blk_mq_tag_wakeup_all(struct blk_mq_tags *tags, bool); 44void blk_mq_queue_tag_busy_iter(struct request_queue *q, busy_iter_fn *fn, 45 void *priv); 46void blk_mq_all_tag_iter(struct blk_mq_tags *tags, busy_tag_iter_fn *fn, 47 void *priv); 48 49static inline struct sbq_wait_state *bt_wait_ptr(struct sbitmap_queue *bt, 50 struct blk_mq_hw_ctx *hctx) 51{ 52 if (!hctx) 53 return &bt->ws[0]; 54 return sbq_wait_ptr(bt, &hctx->wait_index); 55} 56 57enum { 58 BLK_MQ_NO_TAG = -1U, 59 BLK_MQ_TAG_MIN = 1, 60 BLK_MQ_TAG_MAX = BLK_MQ_NO_TAG - 1, 61}; 62 63extern bool __blk_mq_tag_busy(struct blk_mq_hw_ctx *); 64extern void __blk_mq_tag_idle(struct blk_mq_hw_ctx *); 65 66static inline bool blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) 67{ 68 if (!(hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED)) 69 return false; 70 71 return __blk_mq_tag_busy(hctx); 72} 73 74static inline void blk_mq_tag_idle(struct blk_mq_hw_ctx *hctx) 75{ 76 if (!(hctx->flags & BLK_MQ_F_TAG_QUEUE_SHARED)) 77 return; 78 79 __blk_mq_tag_idle(hctx); 80} 81 82static inline bool blk_mq_tag_is_reserved(struct blk_mq_tags *tags, 83 unsigned int tag) 84{ 85 return tag < tags->nr_reserved_tags; 86} 87 88#endif