blk-mq.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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_complete_request(struct request *rq);
  20. void blk_mq_run_request(struct request *rq, bool run_queue, bool async);
  21. void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async);
  22. void blk_mq_init_flush(struct request_queue *q);
  23. void blk_mq_drain_queue(struct request_queue *q);
  24. void blk_mq_free_queue(struct request_queue *q);
  25. void blk_mq_rq_init(struct blk_mq_hw_ctx *hctx, struct request *rq);
  26. /*
  27. * CPU hotplug helpers
  28. */
  29. struct blk_mq_cpu_notifier;
  30. void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier,
  31. void (*fn)(void *, unsigned long, unsigned int),
  32. void *data);
  33. void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier);
  34. void blk_mq_unregister_cpu_notifier(struct blk_mq_cpu_notifier *notifier);
  35. void blk_mq_cpu_init(void);
  36. /*
  37. * CPU -> queue mappings
  38. */
  39. struct blk_mq_reg;
  40. extern unsigned int *blk_mq_make_queue_map(struct blk_mq_reg *reg);
  41. extern int blk_mq_update_queue_map(unsigned int *map, unsigned int nr_queues);
  42. void blk_mq_add_timer(struct request *rq);
  43. #endif