mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-22 06:41:39 +00:00
block: add block polling support
Add basic support for polling for specific IO to complete. This uses the cookie that blk-mq passes back, which enables the block layer to pass this cookie to the driver to spin for a specific request. This will be combined with request latency tracking, so we can make qualified decisions about when to poll and when not to. For now, for benchmark purposes, we add a sysfs file that controls whether polling is enabled or not. Signed-off-by: Jens Axboe <axboe@fb.com> Acked-by: Christoph Hellwig <hch@lst.de> Acked-by: Keith Busch <keith.busch@intel.com>
This commit is contained in:
parent
7b371636fb
commit
05229beedd
5 changed files with 99 additions and 0 deletions
|
@ -59,6 +59,9 @@ struct blk_mq_hw_ctx {
|
|||
|
||||
struct blk_mq_cpu_notifier cpu_notifier;
|
||||
struct kobject kobj;
|
||||
|
||||
unsigned long poll_invoked;
|
||||
unsigned long poll_success;
|
||||
};
|
||||
|
||||
struct blk_mq_tag_set {
|
||||
|
@ -97,6 +100,8 @@ typedef void (exit_request_fn)(void *, struct request *, unsigned int,
|
|||
typedef void (busy_iter_fn)(struct blk_mq_hw_ctx *, struct request *, void *,
|
||||
bool);
|
||||
typedef void (busy_tag_iter_fn)(struct request *, void *, bool);
|
||||
typedef int (poll_fn)(struct blk_mq_hw_ctx *, unsigned int);
|
||||
|
||||
|
||||
struct blk_mq_ops {
|
||||
/*
|
||||
|
@ -114,6 +119,11 @@ struct blk_mq_ops {
|
|||
*/
|
||||
timeout_fn *timeout;
|
||||
|
||||
/*
|
||||
* Called to poll for completion of a specific tag.
|
||||
*/
|
||||
poll_fn *poll;
|
||||
|
||||
softirq_done_fn *complete;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue