1 #ifndef INT_BLK_MQ_H 2 #define INT_BLK_MQ_H 3 4 struct blk_mq_ctx { 5 struct { 6 spinlock_t lock; 7 struct list_head rq_list; 8 } ____cacheline_aligned_in_smp; 9 10 unsigned int cpu; 11 unsigned int index_hw; 12 unsigned int ipi_redirect; 13 14 /* incremented at dispatch time */ 15 unsigned long rq_dispatched[2]; 16 unsigned long rq_merged; 17 18 /* incremented at completion time */ 19 unsigned long ____cacheline_aligned_in_smp rq_completed[2]; 20 21 struct request_queue *queue; 22 struct kobject kobj; 23 }; 24 25 void __blk_mq_end_io(struct request *rq, int error); 26 void blk_mq_complete_request(struct request *rq, int error); 27 void blk_mq_run_request(struct request *rq, bool run_queue, bool async); 28 void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async); 29 void blk_mq_init_flush(struct request_queue *q); 30 31 /* 32 * CPU hotplug helpers 33 */ 34 struct blk_mq_cpu_notifier; 35 void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier, 36 void (*fn)(void *, unsigned long, unsigned int), 37 void *data); 38 void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier); 39 void blk_mq_unregister_cpu_notifier(struct blk_mq_cpu_notifier *notifier); 40 void blk_mq_cpu_init(void); 41 DECLARE_PER_CPU(struct llist_head, ipi_lists); 42 43 /* 44 * CPU -> queue mappings 45 */ 46 struct blk_mq_reg; 47 extern unsigned int *blk_mq_make_queue_map(struct blk_mq_reg *reg); 48 extern int blk_mq_update_queue_map(unsigned int *map, unsigned int nr_queues); 49 50 void blk_mq_add_timer(struct request *rq); 51 52 #endif 53