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