diff options
author | Logan Gunthorpe <logang@deltatee.com> | 2016-06-20 13:15:07 -0600 |
---|---|---|
committer | Jon Mason <jdmason@kudzu.us> | 2016-08-05 10:21:07 -0400 |
commit | 26dc638ae6e32bddfb8d3da0fc93946955c28c78 (patch) | |
tree | 6c45c18b7abcd8b5882d3768417a0bebed1243a4 /drivers | |
parent | 58fd0f3b1539a5bad451a823c9d039ea23387b23 (diff) | |
download | lwn-26dc638ae6e32bddfb8d3da0fc93946955c28c78.tar.gz lwn-26dc638ae6e32bddfb8d3da0fc93946955c28c78.zip |
ntb_perf: Wait for link before running test
Instead of returning immediately with an error when the link is
down, wait for the link to come up (or the user sends a SIGINT).
This is to make scripting ntb_perf easier.
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Acked-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Jon Mason <jdmason@kudzu.us>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ntb/test/ntb_perf.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/ntb/test/ntb_perf.c b/drivers/ntb/test/ntb_perf.c index 05a870524a67..f0784e50ceb7 100644 --- a/drivers/ntb/test/ntb_perf.c +++ b/drivers/ntb/test/ntb_perf.c @@ -135,6 +135,7 @@ struct perf_ctx { bool link_is_up; struct work_struct link_cleanup; struct delayed_work link_work; + wait_queue_head_t link_wq; struct dentry *debugfs_node_dir; struct dentry *debugfs_run; struct dentry *debugfs_threads; @@ -533,6 +534,7 @@ static void perf_link_work(struct work_struct *work) goto out1; perf->link_is_up = true; + wake_up(&perf->link_wq); return; @@ -653,7 +655,7 @@ static ssize_t debugfs_run_write(struct file *filp, const char __user *ubuf, int node, i; DECLARE_WAIT_QUEUE_HEAD(wq); - if (!perf->link_is_up) + if (wait_event_interruptible(perf->link_wq, perf->link_is_up)) return -ENOLINK; if (perf->perf_threads == 0) @@ -783,6 +785,7 @@ static int perf_probe(struct ntb_client *client, struct ntb_dev *ntb) mutex_init(&perf->run_mutex); spin_lock_init(&perf->db_lock); perf_setup_mw(ntb, perf); + init_waitqueue_head(&perf->link_wq); INIT_DELAYED_WORK(&perf->link_work, perf_link_work); INIT_WORK(&perf->link_cleanup, perf_link_cleanup); |