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 v3.17-rc5 88 lines 2.1 kB view raw
1#ifndef INT_BLK_MQ_TAG_H 2#define INT_BLK_MQ_TAG_H 3 4#include "blk-mq.h" 5 6enum { 7 BT_WAIT_QUEUES = 8, 8 BT_WAIT_BATCH = 8, 9}; 10 11struct bt_wait_state { 12 atomic_t wait_cnt; 13 wait_queue_head_t wait; 14} ____cacheline_aligned_in_smp; 15 16#define TAG_TO_INDEX(bt, tag) ((tag) >> (bt)->bits_per_word) 17#define TAG_TO_BIT(bt, tag) ((tag) & ((1 << (bt)->bits_per_word) - 1)) 18 19struct blk_mq_bitmap_tags { 20 unsigned int depth; 21 unsigned int wake_cnt; 22 unsigned int bits_per_word; 23 24 unsigned int map_nr; 25 struct blk_align_bitmap *map; 26 27 atomic_t wake_index; 28 struct bt_wait_state *bs; 29}; 30 31/* 32 * Tag address space map. 33 */ 34struct blk_mq_tags { 35 unsigned int nr_tags; 36 unsigned int nr_reserved_tags; 37 38 atomic_t active_queues; 39 40 struct blk_mq_bitmap_tags bitmap_tags; 41 struct blk_mq_bitmap_tags breserved_tags; 42 43 struct request **rqs; 44 struct list_head page_list; 45}; 46 47 48extern struct blk_mq_tags *blk_mq_init_tags(unsigned int nr_tags, unsigned int reserved_tags, int node); 49extern void blk_mq_free_tags(struct blk_mq_tags *tags); 50 51extern unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data); 52extern void blk_mq_put_tag(struct blk_mq_hw_ctx *hctx, unsigned int tag, unsigned int *last_tag); 53extern bool blk_mq_has_free_tags(struct blk_mq_tags *tags); 54extern ssize_t blk_mq_tag_sysfs_show(struct blk_mq_tags *tags, char *page); 55extern void blk_mq_tag_init_last_tag(struct blk_mq_tags *tags, unsigned int *last_tag); 56extern int blk_mq_tag_update_depth(struct blk_mq_tags *tags, unsigned int depth); 57 58enum { 59 BLK_MQ_TAG_CACHE_MIN = 1, 60 BLK_MQ_TAG_CACHE_MAX = 64, 61}; 62 63enum { 64 BLK_MQ_TAG_FAIL = -1U, 65 BLK_MQ_TAG_MIN = BLK_MQ_TAG_CACHE_MIN, 66 BLK_MQ_TAG_MAX = BLK_MQ_TAG_FAIL - 1, 67}; 68 69extern bool __blk_mq_tag_busy(struct blk_mq_hw_ctx *); 70extern void __blk_mq_tag_idle(struct blk_mq_hw_ctx *); 71 72static inline bool blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx) 73{ 74 if (!(hctx->flags & BLK_MQ_F_TAG_SHARED)) 75 return false; 76 77 return __blk_mq_tag_busy(hctx); 78} 79 80static inline void blk_mq_tag_idle(struct blk_mq_hw_ctx *hctx) 81{ 82 if (!(hctx->flags & BLK_MQ_F_TAG_SHARED)) 83 return; 84 85 __blk_mq_tag_idle(hctx); 86} 87 88#endif