blk-mq.h 1.4 KB

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